Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/master' into netex-validator/bac…
Browse files Browse the repository at this point in the history
…kground-validation
  • Loading branch information
ptitfred committed Oct 2, 2024
2 parents 7b706f9 + 1b5802e commit 9a863f3
Show file tree
Hide file tree
Showing 14 changed files with 155 additions and 120 deletions.
3 changes: 2 additions & 1 deletion apps/transport/lib/jobs/consolidate_lez_job.ex
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,9 @@ defmodule Transport.Jobs.ConsolidateLEZsJob do
}

@impl Oban.Worker
def perform(%Oban.Job{}) do
def perform(%Oban.Job{id: job_id}) do
consolidate() |> update_files()
Oban.Notifier.notify(Oban, :gossip, %{complete: job_id})
:ok
end

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
defmodule TransportWeb.Live.SendConsolidateBNLCView do
defmodule TransportWeb.Live.SendConsolidateJobView do
# Very similar to `TransportWeb.Live.SendNowOnNAPNotificationView`
use Phoenix.LiveView
@button_disabled [:dispatched, :sent]
Expand All @@ -13,14 +13,20 @@ defmodule TransportWeb.Live.SendConsolidateBNLCView do

def mount(
_params,
%{"button_texts" => button_texts, "button_default_class" => button_default_class, "job_args" => job_args},
%{
"button_texts" => button_texts,
"button_default_class" => button_default_class,
"job_module" => job_module,
"job_args" => job_args
},
socket
) do
socket =
socket
|> assign(
button_texts: button_texts,
button_default_class: button_default_class,
job_module: job_module,
job_args: job_args
)
|> assign_step(:first)
Expand All @@ -33,9 +39,9 @@ defmodule TransportWeb.Live.SendConsolidateBNLCView do
{:noreply, socket}
end

def handle_info(:dispatch, %Phoenix.LiveView.Socket{assigns: %{job_args: job_args}} = socket) do
def handle_info(:dispatch, %Phoenix.LiveView.Socket{assigns: %{job_args: job_args, job_module: job_module}} = socket) do
new_socket =
case job_args |> Transport.Jobs.ConsolidateBNLCJob.new() |> Oban.insert() do
case job_args |> job_module.new() |> Oban.insert() do
{:ok, %Oban.Job{id: job_id}} ->
send(self(), {:wait_for_completion, job_id})
assign_step(socket, :dispatched)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -91,32 +91,50 @@

<h2>Consolidation BNLC</h2>
<div>
<%= live_render(@conn, TransportWeb.Live.SendConsolidateBNLCView,
<%= live_render(@conn, TransportWeb.Live.SendConsolidateJobView,
session: %{
"button_texts" => %{
sent: "Rapport disponible par e-mail",
dispatched: "Consolidation en cours",
default: "🧪 Consolider à blanc"
},
"button_default_class" => "button",
"job_module" => Transport.Jobs.ConsolidateBNLCJob,
"job_args" => %{}
}
) %>
</div>
<div>
<%= live_render(@conn, TransportWeb.Live.SendConsolidateBNLCView,
<%= live_render(@conn, TransportWeb.Live.SendConsolidateJobView,
session: %{
"button_texts" => %{
sent: "Fichier mis à jour et rapport envoyé",
dispatched: "Consolidation en cours",
default: "📥 Consolider et remplacer sur data.gouv.fr"
},
"button_default_class" => "button warning-light",
"job_module" => Transport.Jobs.ConsolidateBNLCJob,
"job_args" => %{"action" => "datagouv_update"}
}
) %>
</div>

<h2>Consolidation ZFE</h2>
<div>
<%= live_render(@conn, TransportWeb.Live.SendConsolidateJobView,
session: %{
"button_texts" => %{
sent: "Fichiers mis à jour",
dispatched: "Consolidation en cours",
default: "📥 Consolider et remplacer sur data.gouv.fr"
},
"button_default_class" => "button warning-light",
"job_module" => Transport.Jobs.ConsolidateLEZsJob,
"job_args" => %{}
}
) %>
</div>

<h2><%= dgettext("backoffice", "Validations") %></h2>
<div>
<%= form_for @conn, backoffice_dataset_path(@conn, :force_validate_gtfs_transport), [class: "no-margin"], fn _f -> %>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<%= if GTFSTransport.no_error?(severity) do %>
<%= dgettext("page-dataset-details", "No error detected") %>
<% else %>
<%= "#{count} #{String.downcase(GTFSTransport.severity(severity)[:text])}" %>
<%= GTFSTransport.format_severity(severity, count) %>
<% end %>
</span>
</a>
Expand Down
47 changes: 34 additions & 13 deletions apps/transport/lib/validators/gtfs_transport_validator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -65,17 +65,38 @@ defmodule Transport.Validators.GTFSTransport do

def command(url), do: Shared.Validation.GtfsValidator.remote_gtfs_validation_query(url)

@spec severities_map() :: map()
def severities_map,
do: %{
"Fatal" => %{level: 0, text: dgettext("gtfs-transport-validator", "Fatal failures")},
"Error" => %{level: 1, text: dgettext("gtfs-transport-validator", "Errors")},
"Warning" => %{level: 2, text: dgettext("gtfs-transport-validator", "Warnings")},
"Information" => %{level: 3, text: dgettext("gtfs-transport-validator", "Informations")}
}
@spec severity_level(binary()) :: non_neg_integer()
def severity_level(key) do
case key do
"Fatal" -> 0
"Error" -> 1
"Warning" -> 2
"Information" -> 3
_ -> 4
end
end

@spec severity(binary()) :: %{level: integer(), text: binary()}
def severity(key), do: severities_map()[key]
@doc """
iex> Gettext.put_locale("en")
iex> format_severity("Fatal", 1)
"1 fatal failure"
iex> format_severity("Fatal", 2)
"2 fatal failures"
iex> Gettext.put_locale("fr")
iex> format_severity("Fatal", 1)
"1 échec irrécupérable"
iex> format_severity("Fatal", 2)
"2 échecs irrécupérables"
"""
@spec format_severity(binary(), non_neg_integer()) :: binary()
def format_severity(key, count) do
case key do
"Fatal" -> dngettext("gtfs-transport-validator", "Fatal failure", "Fatal failures", count)
"Error" -> dngettext("gtfs-transport-validator", "Error", "Errors", count)
"Warning" -> dngettext("gtfs-transport-validator", "Warning", "Warnings", count)
"Information" -> dngettext("gtfs-transport-validator", "Information", "Informations", count)
end
end

@spec format_severity(binary(), non_neg_integer()) :: binary()
def format_severity(key, count) do
Expand Down Expand Up @@ -113,7 +134,7 @@ defmodule Transport.Validators.GTFSTransport do
def get_issues(%{} = validation_result, _) do
validation_result
|> Map.values()
|> Enum.sort_by(fn [%{"severity" => severity} | _] -> severity(severity).level end)
|> Enum.sort_by(fn [%{"severity" => severity} | _] -> severity_level(severity) end)
|> List.first([])
end

Expand Down Expand Up @@ -142,7 +163,7 @@ defmodule Transport.Validators.GTFSTransport do
end)
|> Map.new()
|> Enum.group_by(fn {_, issue} -> issue.severity end)
|> Enum.sort_by(fn {severity, _} -> severity(severity).level end)
|> Enum.sort_by(fn {severity, _} -> severity_level(severity) end)
end

@doc """
Expand Down Expand Up @@ -181,7 +202,7 @@ defmodule Transport.Validators.GTFSTransport do
def count_max_severity(%{} = validation_result) do
validation_result
|> count_by_severity()
|> Enum.min_by(fn {severity, _count} -> severity |> severity() |> Map.get(:level) end)
|> Enum.min_by(fn {severity, _count} -> severity |> severity_level() end)
end

def no_error?(severity), do: @no_error == severity
Expand Down
29 changes: 20 additions & 9 deletions apps/transport/lib/validators/netex_validator.ex
Original file line number Diff line number Diff line change
Expand Up @@ -181,17 +181,28 @@ defmodule Transport.Validators.NeTEx do

def no_error?(severity), do: @no_error == severity

@spec severities_map() :: map()
def severities_map,
do: %{
"error" => %{level: 1, text: dgettext("netex-validator", "errors")},
"warning" => %{level: 2, text: dgettext("netex-validator", "warnings")},
"information" => %{level: 3, text: dgettext("netex-validator", "informations")}
}

@spec severity_level(binary()) :: integer()
def severity_level(key), do: severities_map()[key] |> Map.get(:level)
def severity_level(key) do
case key do
"error" -> 1
"warning" -> 2
"information" -> 3
_ -> 4
end
end

@doc """
iex> Gettext.put_locale("en")
iex> format_severity("error", 1)
"1 error"
iex> format_severity("error", 2)
"2 errors"
iex> Gettext.put_locale("fr")
iex> format_severity("error", 1)
"1 erreur"
iex> format_severity("error", 2)
"2 erreurs"
"""
@spec format_severity(binary(), non_neg_integer()) :: binary()
def format_severity(key, count) do
case key do
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,6 @@ msgstr ""
msgid "Duplicate object id"
msgstr ""

#, elixir-autogen, elixir-format
msgid "Errors"
msgstr ""

#, elixir-autogen, elixir-format
msgid "Excessive speed between two stops"
msgstr ""
Expand All @@ -35,14 +31,6 @@ msgstr ""
msgid "Extra file"
msgstr ""

#, elixir-autogen, elixir-format
msgid "Fatal failures"
msgstr ""

#, elixir-autogen, elixir-format
msgid "Informations"
msgstr ""

#, elixir-autogen, elixir-format
msgid "Invalid archive"
msgstr ""
Expand Down Expand Up @@ -131,10 +119,6 @@ msgstr ""
msgid "Unused stops"
msgstr ""

#, elixir-autogen, elixir-format
msgid "Warnings"
msgstr ""

#, elixir-autogen, elixir-format
msgid "Not compliant with the GTFS specification"
msgstr ""
Expand Down
12 changes: 0 additions & 12 deletions apps/transport/priv/gettext/en/LC_MESSAGES/netex-validator.po
Original file line number Diff line number Diff line change
Expand Up @@ -59,18 +59,6 @@ msgstr ""
msgid "Unspecified error"
msgstr ""

#, elixir-autogen, elixir-format
msgid "errors"
msgstr ""

#, elixir-autogen, elixir-format
msgid "informations"
msgstr ""

#, elixir-autogen, elixir-format
msgid "warnings"
msgstr ""

#, elixir-autogen, elixir-format
msgid "XSD validation"
msgstr ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,6 @@ msgstr "Arrêts en double"
msgid "Duplicate object id"
msgstr "Identifiant d’objet en double"

#, elixir-autogen, elixir-format
msgid "Errors"
msgstr "Erreurs"

#, elixir-autogen, elixir-format
msgid "Excessive speed between two stops"
msgstr "Vitesse excessive entre deux arrêts"
Expand All @@ -35,14 +31,6 @@ msgstr "Vitesse excessive entre deux arrêts"
msgid "Extra file"
msgstr "Fichier superflus"

#, elixir-autogen, elixir-format
msgid "Fatal failures"
msgstr "Échecs irrécupérables"

#, elixir-autogen, elixir-format
msgid "Informations"
msgstr "Informations"

#, elixir-autogen, elixir-format
msgid "Invalid archive"
msgstr "Archive ZIP invalide"
Expand Down Expand Up @@ -131,10 +119,6 @@ msgstr "Vitesse entre deux arrêts très faible"
msgid "Unused stops"
msgstr "Arrêt inutilisé"

#, elixir-autogen, elixir-format
msgid "Warnings"
msgstr "Avertissements"

#, elixir-autogen, elixir-format
msgid "Not compliant with the GTFS specification"
msgstr "Spécifications GTFS non respectées"
Expand Down Expand Up @@ -178,23 +162,23 @@ msgstr "Temps d'arrêt négatif"
#, elixir-autogen, elixir-format, fuzzy
msgid "Error"
msgid_plural "Errors"
msgstr[0] "%{count} Erreurs"
msgstr[1] "%{count} Erreurs"
msgstr[0] "%{count} erreur"
msgstr[1] "%{count} erreurs"

#, elixir-autogen, elixir-format, fuzzy
msgid "Fatal failure"
msgid_plural "Fatal failures"
msgstr[0] "%{count} échecs irrécupérables"
msgstr[0] "%{count} échec irrécupérable"
msgstr[1] "%{count} échecs irrécupérables"

#, elixir-autogen, elixir-format, fuzzy
msgid "Information"
msgid_plural "Informations"
msgstr[0] "%{count} informations"
msgstr[0] "%{count} information"
msgstr[1] "%{count} informations"

#, elixir-autogen, elixir-format, fuzzy
msgid "Warning"
msgid_plural "Warnings"
msgstr[0] "%{count} avertissements"
msgstr[0] "%{count} avertissement"
msgstr[1] "%{count} avertissements"
12 changes: 0 additions & 12 deletions apps/transport/priv/gettext/fr/LC_MESSAGES/netex-validator.po
Original file line number Diff line number Diff line change
Expand Up @@ -59,18 +59,6 @@ msgstr ""
msgid "Unspecified error"
msgstr "Erreur inconnue"

#, elixir-autogen, elixir-format
msgid "errors"
msgstr "erreurs"

#, elixir-autogen, elixir-format
msgid "informations"
msgstr ""

#, elixir-autogen, elixir-format
msgid "warnings"
msgstr "avertissements"

#, elixir-autogen, elixir-format
msgid "XSD validation"
msgstr "Validation XSD"
Expand Down
Loading

0 comments on commit 9a863f3

Please sign in to comment.