Skip to content

Commit

Permalink
GTFS diff par URLs : télécharger les sources
Browse files Browse the repository at this point in the history
  • Loading branch information
ptitfred committed Mar 6, 2025
1 parent 9feea9a commit 8de3beb
Show file tree
Hide file tree
Showing 7 changed files with 133 additions and 43 deletions.
27 changes: 20 additions & 7 deletions apps/transport/lib/jobs/gtfs_diff_job.ex
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,26 @@ defmodule Transport.Jobs.GTFSDiff do
Oban.Notifier.notify(Oban, :gossip, %{started: job.id})

case args do
%{"gtfs_object_1" => gtfs_object_1, "gtfs_object_2" => gtfs_object_2} ->
process_s3_objects(job.id, gtfs_object_1, gtfs_object_2, args)
%{
"gtfs_object_1" => gtfs_object_1,
"gtfs_object_2" => gtfs_object_2,
"gtfs_original_file_name_1" => gtfs_original_file_name_1,
"gtfs_original_file_name_2" => gtfs_original_file_name_2
} ->
context = %{
"gtfs_original_file_name_1" => gtfs_original_file_name_1,
"gtfs_original_file_name_2" => gtfs_original_file_name_2
}

process_s3_objects(job.id, gtfs_object_1, gtfs_object_2, Map.merge(args, %{"context" => context}))

%{"gtfs_url_1" => gtfs_url_1, "gtfs_url_2" => gtfs_url_2} ->
process_urls(job.id, gtfs_url_1, gtfs_url_2, args)
context = %{
"gtfs_url_1" => gtfs_url_1,
"gtfs_url_2" => gtfs_url_2
}

process_urls(job.id, gtfs_url_1, gtfs_url_2, Map.merge(args, %{"context" => context}))
end

:ok
Expand Down Expand Up @@ -80,8 +95,7 @@ defmodule Transport.Jobs.GTFSDiff do
end

defp process_diff(job_id, unzip_1, unzip_2, %{
"gtfs_original_file_name_1" => gtfs_original_file_name_1,
"gtfs_original_file_name_2" => gtfs_original_file_name_2,
"context" => context,
"profile" => profile,
"locale" => locale
}) do
Expand All @@ -104,8 +118,7 @@ defmodule Transport.Jobs.GTFSDiff do
Oban.Notifier.notify(Oban, :gossip, %{
complete: job_id,
diff_file_url: Transport.S3.permanent_url(:gtfs_diff, diff_file_name),
gtfs_original_file_name_1: gtfs_original_file_name_1,
gtfs_original_file_name_2: gtfs_original_file_name_2
context: context
})
after
File.rm(filepath)
Expand Down
10 changes: 4 additions & 6 deletions apps/transport/lib/transport_web/live/gtfs_diff_select_live.ex
Original file line number Diff line number Diff line change
Expand Up @@ -152,8 +152,7 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive do
%{
"complete" => job_id,
"diff_file_url" => diff_file_url,
"gtfs_original_file_name_1" => gtfs_original_file_name_1,
"gtfs_original_file_name_2" => gtfs_original_file_name_2
"context" => context
},
job_id,
socket
Expand All @@ -162,7 +161,7 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive do
unlisten_job_notifications()

socket
|> present_results(diff_file_url, gtfs_original_file_name_1, gtfs_original_file_name_2)
|> present_results(diff_file_url, context)
|> scroll_to_steps()
end

Expand Down Expand Up @@ -266,11 +265,10 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive do
end
end

defp present_results(socket, diff_file_url, gtfs_original_file_name_1, gtfs_original_file_name_2) do
defp present_results(socket, diff_file_url, context) do
updates = [
set(:diff_file_url, diff_file_url),
set(:gtfs_original_file_name_1, gtfs_original_file_name_1),
set(:gtfs_original_file_name_2, gtfs_original_file_name_2)
set(:context, context)
]

socket
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive.Results do
diff_file_url={@results[:diff_file_url]}
diff_summary={@results[:diff_summary]}
files_with_changes={@results[:files_with_changes]}
gtfs_original_file_name_1={@results[:gtfs_original_file_name_1]}
gtfs_original_file_name_2={@results[:gtfs_original_file_name_2]}
context={@results[:context]}
selected_file={@results[:selected_file]}
error_msg={@error_msg}
profile={@profile}
Expand All @@ -29,8 +28,7 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive.Results do
diff_summary: _,
error_msg: _,
files_with_changes: _,
gtfs_original_file_name_1: _,
gtfs_original_file_name_2: _,
context: _,
profile: _,
selected_file: _
} = assigns
Expand All @@ -54,18 +52,15 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive.Results do
) %>.
<%= if @diff_summary do %>
<div class="pt-24">
<%= if @diff_summary == %{} do %>
<%= similar_files(@gtfs_original_file_name_1, @gtfs_original_file_name_2) %>
<% else %>
<%= different_files(@gtfs_original_file_name_1, @gtfs_original_file_name_2) %>
<.diff_summaries
diff_explanations={@diff_explanations}
diff_summary={@diff_summary}
files_with_changes={@files_with_changes}
selected_file={@selected_file}
profile={@profile}
/>
<% end %>
<%= display_context(@diff_summary, @context) |> raw() %>
<.diff_summaries
:if={@diff_summary != %{}}
diff_explanations={@diff_explanations}
diff_summary={@diff_summary}
files_with_changes={@files_with_changes}
selected_file={@selected_file}
profile={@profile}
/>
</div>
<% else %>
<%= if @error_msg do %>
Expand Down Expand Up @@ -261,24 +256,59 @@ defmodule TransportWeb.Live.GTFSDiffSelectLive.Results do
"""
end

defp similar_files(file1, file2) do
defp display_context(diff_summary, %{
"gtfs_original_file_name_1" => file_name_1,
"gtfs_original_file_name_2" => file_name_2
}) do
if diff_summary == %{} do
similar_files(file_name_1, file_name_2)
else
different_files(file_name_1, file_name_2)
end
end

defp display_context(diff_summary, %{"gtfs_url_1" => url_1, "gtfs_url_2" => url_2}) do
if diff_summary == %{} do
similar_urls(url_1, url_2)
else
different_urls(url_1, url_2)
end
end

defp similar_files(file_1, file_2) do
dgettext(
"validations",
"The GTFS files <code>%{gtfs_original_file_name_2}</code> and <code>%{gtfs_original_file_name_1}</code> are similar.",
gtfs_original_file_name_1: file1,
gtfs_original_file_name_2: file2
gtfs_original_file_name_1: file_1,
gtfs_original_file_name_2: file_2
)
|> raw()
end

defp different_files(file1, file2) do
defp different_files(file_1, file_2) do
dgettext(
"validations",
"The GTFS file <code>%{gtfs_original_file_name_2}</code> has differences with the GTFS file <code>%{gtfs_original_file_name_1}</code>, as summarized below:",
gtfs_original_file_name_1: file1,
gtfs_original_file_name_2: file2
gtfs_original_file_name_1: file_1,
gtfs_original_file_name_2: file_2
)
end

defp similar_urls(url_1, url_2) do
dgettext(
"validations",
"The modified GTFS file (<a href=\"%{gtfs_url_2}\">source</a>) and the reference GTFS file (<a href=\"%{gtfs_url_1}\">source</a>) are similar.",
gtfs_url_1: url_1,
gtfs_url_2: url_2
)
end

defp different_urls(url_1, url_2) do
dgettext(
"validations",
"The modified GTFS file (<a href=\"%{gtfs_url_2}\">source</a>) has differences with the reference GTFS file (<a href=\"%{gtfs_url_1}\">source</a>), as summarized below:",
gtfs_url_1: url_1,
gtfs_url_2: url_2
)
|> raw()
end

defp validation_error(%{error_msg: _} = assigns) do
Expand Down
8 changes: 8 additions & 0 deletions apps/transport/priv/gettext/en/LC_MESSAGES/validations.po
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,14 @@ msgstr ""
msgid "The GTFS files <code>%{gtfs_original_file_name_2}</code> and <code>%{gtfs_original_file_name_1}</code> are similar."
msgstr ""

#, elixir-autogen, elixir-format
msgid "The modified GTFS file (<a href=\"%{gtfs_url_2}\">source</a>) has differences with the reference GTFS file (<a href=\"%{gtfs_url_1}\">source</a>), as summarized below:"
msgstr ""

#, elixir-autogen, elixir-format
msgid "The modified GTFS file (<a href=\"%{gtfs_url_2}\">source</a>) and the reference GTFS file (<a href=\"%{gtfs_url_1}\">source</a>) are similar."
msgstr ""

#, elixir-autogen, elixir-format
msgid "Modified GTFS"
msgstr ""
Expand Down
8 changes: 8 additions & 0 deletions apps/transport/priv/gettext/fr/LC_MESSAGES/validations.po
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,14 @@ msgstr "Le fichier GTFS <code>%{gtfs_original_file_name_2}</code> comporte les d
msgid "The GTFS files <code>%{gtfs_original_file_name_2}</code> and <code>%{gtfs_original_file_name_1}</code> are similar."
msgstr "Les fichier GTFS <code>%{gtfs_original_file_name_2}</code> et <code>%{gtfs_original_file_name_1}</code> sont similaires."

#, elixir-autogen, elixir-format
msgid "The modified GTFS file (<a href=\"%{gtfs_url_2}\">source</a>) has differences with the reference GTFS file (<a href=\"%{gtfs_url_1}\">source</a>), as summarized below:"
msgstr "Le fichier GTFS modifié (<a href=\"%{gtfs_url_2}\">source</a>) comporte les différences ci-dessous par rapport au fichier GTFS de référence (<a href=\"%{gtfs_url_2}\">source</a>) :"

#, elixir-autogen, elixir-format
msgid "The modified GTFS file (<a href=\"%{gtfs_url_2}\">source</a>) and the reference GTFS file (<a href=\"%{gtfs_url_1}\">source</a>) are similar."
msgstr "Le fichier GTFS modifié (<a href=\"%{gtfs_url_2}\">source</a>) et le fichier GTFS de référence (<a href=\"%{gtfs_url_1}\">source</a>) sont similaires."

#, elixir-autogen, elixir-format
msgid "Modified GTFS"
msgstr "GTFS modifié"
Expand Down
8 changes: 8 additions & 0 deletions apps/transport/priv/gettext/validations.pot
Original file line number Diff line number Diff line change
Expand Up @@ -470,6 +470,14 @@ msgstr ""
msgid "The GTFS files <code>%{gtfs_original_file_name_2}</code> and <code>%{gtfs_original_file_name_1}</code> are similar."
msgstr ""

#, elixir-autogen, elixir-format
msgid "The modified GTFS file (<a href=\"%{gtfs_url_2}\">source</a>) has differences with the reference GTFS file (<a href=\"%{gtfs_url_1}\">source</a>), as summarized below:"
msgstr ""

#, elixir-autogen, elixir-format
msgid "The modified GTFS file (<a href=\"%{gtfs_url_2}\">source</a>) and the reference GTFS file (<a href=\"%{gtfs_url_1}\">source</a>) are similar."
msgstr ""

#, elixir-autogen, elixir-format
msgid "Modified GTFS"
msgstr ""
Expand Down
37 changes: 31 additions & 6 deletions apps/transport/test/transport/jobs/gtfs_diff_job_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ defmodule Transport.Jobs.GTFSDiffTest do

enqueue_job(%{"gtfs_url_1" => base_gtfs_url, "gtfs_url_2" => modified_gtfs_url})

expect_various_notifications()
expect_various_notifications(base_gtfs_url, modified_gtfs_url)
end)
end
end
Expand Down Expand Up @@ -93,13 +93,24 @@ defmodule Transport.Jobs.GTFSDiffTest do
end

defp expect_various_notifications do
job_id = expect_start_notification()
expect_start_notification()
|> expect_running_notifications()
|> expect_completion_notification_for_files()
end

defp expect_various_notifications(base_url, modified_url) do
expect_start_notification()
|> expect_running_notifications()
|> expect_completion_notification_for_urls(base_url, modified_url)
end

defp expect_running_notifications(job_id) do
expect_running_notification(job_id, "Calcul des différences pour <code>agency.txt</code>")
expect_running_notification(job_id, "Calcul des différences pour <code>calendar.txt</code>")
expect_running_notification(job_id, "Calcul des différences pour <code>routes.txt</code>")
expect_running_notification(job_id, "Calcul des différences pour <code>stops.txt</code>")
expect_running_notification(job_id, "Calcul des différences pour <code>trips.txt</code>")
expect_completion_notification(job_id)
job_id
end

defp expect_start_notification do
Expand All @@ -112,13 +123,27 @@ defmodule Transport.Jobs.GTFSDiffTest do
assert_receive {:notification, :gossip, %{"running" => ^job_id, "log" => ^msg}}
end

defp expect_completion_notification(job_id) do
defp expect_completion_notification_for_files(job_id) do
assert_receive {:notification, :gossip,
%{
"complete" => ^job_id,
"diff_file_url" => _,
"context" => %{
"gtfs_original_file_name_1" => "base.zip",
"gtfs_original_file_name_2" => "modified.zip"
}
}}
end

defp expect_completion_notification_for_urls(job_id, base_url, modified_url) do
assert_receive {:notification, :gossip,
%{
"complete" => ^job_id,
"diff_file_url" => _,
"gtfs_original_file_name_1" => "base.zip",
"gtfs_original_file_name_2" => "modified.zip"
"context" => %{
"gtfs_url_1" => ^base_url,
"gtfs_url_2" => ^modified_url
}
}}
end

Expand Down

0 comments on commit 8de3beb

Please sign in to comment.