Skip to content

Commit

Permalink
ImportData : mise à jour logique détection ressource ODS (#3649)
Browse files Browse the repository at this point in the history
* ImportData : mise à jour logique détection ressource ODS

* PR comments

---------

Co-authored-by: Thibaut Barrère <[email protected]>
  • Loading branch information
AntoineAugusti and thbar authored Dec 12, 2023
1 parent abc05ee commit 2dcb8f5
Showing 1 changed file with 31 additions and 7 deletions.
38 changes: 31 additions & 7 deletions apps/transport/lib/transport/import_data.ex
Original file line number Diff line number Diff line change
Expand Up @@ -442,11 +442,27 @@ defmodule Transport.ImportData do
end
end

def is_ods_title?(%{"title" => title})
@doc """
iex> is_ods_resource?(%{"format" => "json", "title" => "GTFS (json)", "harvest" => %{"uri" => "https://data.angers.fr/api/explore/v2.1/catalog/datasets/angers-loire-metropole-horaires-reseau-irigo-gtfs-rt/exports/json"}})
true
iex> is_ods_resource?(%{"format" => "GTFS", "title" => "GTFS été"})
false
iex> is_ods_resource?(%{"format" => "csv", "title" => "Export au format CSV"})
true
"""
# Will soon be legacy, after DCAT migration
# (see https://github.com/etalab/transport-site/issues/3647)
def is_ods_resource?(%{"title" => title})
when title in ["Export au format CSV", "Export au format JSON"],
do: true

def is_ods_title?(_), do: false
def is_ods_resource?(%{"harvest" => %{"uri" => uri}}) do
# Possible URL:
# https://data.angers.fr/api/explore/v2.1/catalog/datasets/angers-loire-metropole-horaires-reseau-irigo-gtfs-rt/exports/json
String.match?(uri, ~r{/api/explore/v(\d+\.\d+)/catalog/datasets/.*/exports/(json|csv)$}i)
end

def is_ods_resource?(_), do: false

@doc """
Is it a GTFS file?
Expand All @@ -467,6 +483,8 @@ defmodule Transport.ImportData do
true
iex> is_gtfs?(%{"description" => "gtfs", "title" => "Export au format CSV"})
false
iex> is_gtfs?(%{"title" => "Angers GTFS (json)", "format" => "json", "harvest" => %{"uri" => "https://example.com/api/explore/v2.1/catalog/datasets/foo/exports/json"}})
false
iex> is_gtfs?(%{"format" => "gtfs", "title" => "Export au format CSV"})
true
iex> is_gtfs?(%{"url" => "https://example.com/documentation-gtfs.pdf", "type" => "documentation"})
Expand All @@ -477,7 +495,7 @@ defmodule Transport.ImportData do
def is_gtfs?(%{} = params) do
cond do
is_gtfs?(params["format"]) -> true
is_ods_title?(params) or is_documentation?(params) -> false
is_ods_resource?(params) or is_documentation?(params) -> false
is_gtfs_rt?(params) -> false
is_format?(params["url"], ["json", "csv", "shp", "pdf", "7z"]) -> false
is_format?(params["format"], "NeTEx") -> false
Expand Down Expand Up @@ -507,14 +525,16 @@ defmodule Transport.ImportData do
true
iex> is_gtfs_rt?(%{"description" => "gtfs-rt", "title" => "Export au format CSV"})
false
iex> is_gtfs_rt?(%{"format" => "json", "title" => "GTFS-RT vehicle positions", "description" => "gtfs-rt", "harvest" => %{"uri" => "https://example.com/api/explore/v2.1/catalog/datasets/foo/exports/json"}})
false
iex> is_gtfs_rt?(%{"format" => "gtfs-rt", "title" => "Export au format CSV"})
true
"""
@spec is_gtfs_rt?(binary() | map()) :: boolean()
def is_gtfs_rt?(%{} = params) do
cond do
is_gtfs_rt?(params["format"]) -> true
is_ods_title?(params) or is_documentation?(params) -> false
is_ods_resource?(params) or is_documentation?(params) -> false
is_gtfs_rt?(params["description"]) -> true
is_gtfs_rt?(params["title"]) -> true
is_gtfs_rt?(params["url"]) -> true
Expand Down Expand Up @@ -568,6 +588,8 @@ defmodule Transport.ImportData do
true
iex> is_siri?(%{"title" => "Export au format CSV", "format" => "SIRI"})
false
iex> is_siri?(%{"title" => "Flux SIRI", "format" => "csv", "harvest" => %{"uri" => "https://example.com/api/explore/v2.1/catalog/datasets/foo/exports/json"}})
false
iex> is_siri?(%{"title" => "https://api.okina.fr/gateway/cae/realtime", "format" => "bin", "description" => "API temps réel au format SIRI"})
true
iex> is_siri?(%{"type" => "documentation", "title" => "Documentation de l'API SIRI"})
Expand All @@ -577,7 +599,7 @@ defmodule Transport.ImportData do
def is_siri?(%{} = params) do
cond do
is_siri_lite?(params) -> false
is_ods_title?(params) or is_documentation?(params) -> false
is_ods_resource?(params) or is_documentation?(params) -> false
is_format?(params, "siri") -> true
is_siri?(params["title"]) -> true
is_siri?(params["description"]) -> true
Expand All @@ -601,7 +623,7 @@ defmodule Transport.ImportData do
@spec is_siri_lite?(binary() | map()) :: boolean()
def is_siri_lite?(params) do
cond do
is_ods_title?(params) or is_documentation?(params) -> false
is_ods_resource?(params) or is_documentation?(params) -> false
is_format?(params, "SIRI Lite") -> true
true -> false
end
Expand Down Expand Up @@ -680,12 +702,14 @@ defmodule Transport.ImportData do
false
iex> is_netex?(%{"title" => "Export au format CSV", "format" => "netex"})
true
iex> is_netex?(%{"title" => "Angers NeTEx (json)", "format" => "json", "harvest" => %{"uri" => "https://example.com/api/explore/v2.1/catalog/datasets/foo/exports/json"}})
false
"""
@spec is_netex?(binary() | map()) :: boolean()
def is_netex?(%{} = params) do
cond do
is_netex?(params["format"]) -> true
is_ods_title?(params) or is_documentation?(params) -> false
is_ods_resource?(params) or is_documentation?(params) -> false
is_netex?(params["title"]) -> true
is_netex?(params["description"]) -> true
is_netex?(params["url"]) -> true
Expand Down

0 comments on commit 2dcb8f5

Please sign in to comment.