From c67ce94d13c241556cf2a06da5bc08a0ad569fca Mon Sep 17 00:00:00 2001 From: Raissa Ferreira Date: Fri, 6 Sep 2024 13:22:26 -0300 Subject: [PATCH 1/2] feat: Parametrize iana database download_url --- .gitignore | 1 + VERSION | 1 + config/config.exs | 4 +- lib/tzdata/data_loader.ex | 23 ++++-- lib/tzdata/period_builder.ex | 91 ++++++++++++++---------- mix.exs | 17 +++-- mix.lock | 2 + test/data_loader_test.exs | 52 ++++++++++++++ test/test_helper.exs | 2 + test/tz_period_builder_test.exs | 66 ++++++++++------- test/tzdata_fixtures/tzdata2024a.tar.gz | Bin 0 -> 451270 bytes 11 files changed, 183 insertions(+), 76 deletions(-) create mode 100644 VERSION create mode 100644 test/data_loader_test.exs create mode 100644 test/tzdata_fixtures/tzdata2024a.tar.gz diff --git a/.gitignore b/.gitignore index 162e210..d5559ef 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ erl_crash.dump *.ez /doc /priv/latest_remote_poll.txt +/priv/tmp_downloads diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..26aaba0 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.2.0 diff --git a/config/config.exs b/config/config.exs index bd813c5..e2e7331 100644 --- a/config/config.exs +++ b/config/config.exs @@ -1,7 +1,9 @@ # This file is responsible for configuring your application # and its dependencies with the aid of the Mix.Config module. -use Mix.Config +import Config config :logger, utc_log: true config :tzdata, :autoupdate, :enabled + +config :tzdata, download_url: "https://data.iana.org/time-zones/tzdata-latest.tar.gz" # config :tzdata, :data_dir, "/etc/elixir_tzdata_storage" diff --git a/lib/tzdata/data_loader.ex b/lib/tzdata/data_loader.ex index 192dd54..0367b83 100644 --- a/lib/tzdata/data_loader.ex +++ b/lib/tzdata/data_loader.ex @@ -4,8 +4,15 @@ defmodule Tzdata.DataLoader do require Logger # Can poll for newest version of tz data and can download # and extract it. - @download_url "https://data.iana.org/time-zones/tzdata-latest.tar.gz" - def download_new(url \\ @download_url) do + def download_url do + Application.fetch_env!(:tzdata, :download_url) + end + + def download_new do + download_new(download_url()) + end + + def download_new(url) do Logger.debug("Tzdata downloading new data from #{url}") set_latest_remote_poll_date() {:ok, {200, headers, body}} = http_client().get(url, [], follow_redirect: true) @@ -39,7 +46,11 @@ defmodule Tzdata.DataLoader do only_line_in_file |> String.replace(~r/\s/, "") end - def last_modified_of_latest_available(url \\ @download_url) do + def last_modified_of_latest_available do + last_modified_of_latest_available(download_url()) + end + + def last_modified_of_latest_available(url) do set_latest_remote_poll_date() case http_client().head(url, [], []) do @@ -51,7 +62,11 @@ defmodule Tzdata.DataLoader do end end - def latest_file_size(url \\ @download_url) do + def latest_file_size do + latest_file_size(download_url()) + end + + def latest_file_size(url) do set_latest_remote_poll_date() case latest_file_size_by_head(url) do diff --git a/lib/tzdata/period_builder.ex b/lib/tzdata/period_builder.ex index 94f2a90..3dc0be3 100644 --- a/lib/tzdata/period_builder.ex +++ b/lib/tzdata/period_builder.ex @@ -97,16 +97,17 @@ defmodule Tzdata.PeriodBuilder do def h_calc_next_zone_line(_btz_data, period, _, zone_line_tl, _) when zone_line_tl == [] do case period do nil -> [] - _ -> [ period ] + _ -> [period] end end # If there is a zone line tail, we recursively add to the list of periods with that zone line tail def h_calc_next_zone_line(btz_data, period, until_utc, zone_line_tl, letter) do tail = calc_periods(btz_data, zone_line_tl, until_utc, hd(zone_line_tl).rules, letter) + case period do nil -> tail - _ -> [ period | tail ] + _ -> [period | tail] end end @@ -194,8 +195,12 @@ defmodule Tzdata.PeriodBuilder do letter ) do until_utc = datetime_to_utc(Map.get(zone_line, :until), utc_off, std_off) - tail = calc_periods(btz_data, zone_line_tl, until_utc, Map.get(hd(zone_line_tl), :rules), letter) - if from == until_utc do # empty period may happen when 'until' of zone line coincides with end of rule + + tail = + calc_periods(btz_data, zone_line_tl, until_utc, Map.get(hd(zone_line_tl), :rules), letter) + + # empty period may happen when 'until' of zone line coincides with end of rule + if from == until_utc do tail else from_standard_time = standard_time_from_utc(from, utc_off) @@ -211,7 +216,7 @@ defmodule Tzdata.PeriodBuilder do zone_abbr: TzUtil.period_abbrevation(zone_line.format, std_off, letter) } - [ period | tail ] + [period | tail] end end @@ -286,9 +291,14 @@ defmodule Tzdata.PeriodBuilder do until_utc = datetime_to_utc(TzUtil.time_for_rule(rule, year), utc_off, std_off) # truncate end of period to within time range of zone line - until_before_lower_limit = is_integer(lower_limit) && is_integer(until_utc) && lower_limit > until_utc + until_before_lower_limit = + is_integer(lower_limit) && is_integer(until_utc) && lower_limit > until_utc + until_utc = if until_before_lower_limit, do: lower_limit, else: until_utc - last_included_rule = is_integer(upper_limit) && is_integer(until_utc) && upper_limit <= until_utc + + last_included_rule = + is_integer(upper_limit) && is_integer(until_utc) && upper_limit <= until_utc + until_utc = if last_included_rule, do: upper_limit, else: until_utc # derive standard and wall time for 'until' until_standard_time = standard_time_from_utc(until_utc, utc_off) @@ -313,38 +323,41 @@ defmodule Tzdata.PeriodBuilder do # If we've hit the upper time boundary of this zone line, we do not need to examine any more # rules for this rule set OR there are no more years to consider for this rule set - if last_included_rule || no_more_years && no_more_rules do + if last_included_rule || (no_more_years && no_more_rules) do h_calc_next_zone_line(btz_data, period, until_utc, zone_line_tl, letter) else - tail = cond do - # If there are no more rules for the year, continue with the next year - no_more_rules -> - calc_rule_periods( - btz_data, - [zone_line | zone_line_tl], - until_utc, - utc_off, - rule.save, - years |> tl, - zone_rules, - rule.letter - ) - # Else continue with those rules - true -> - calc_periods_for_year( - btz_data, - [zone_line | zone_line_tl], - until_utc, - utc_off, - rule.save, - years, - zone_rules, - rules_tail, - rule.letter, - lower_limit - ) - end - if period == nil, do: tail, else: [ period | tail ] + tail = + cond do + # If there are no more rules for the year, continue with the next year + no_more_rules -> + calc_rule_periods( + btz_data, + [zone_line | zone_line_tl], + until_utc, + utc_off, + rule.save, + years |> tl, + zone_rules, + rule.letter + ) + + # Else continue with those rules + true -> + calc_periods_for_year( + btz_data, + [zone_line | zone_line_tl], + until_utc, + utc_off, + rule.save, + years, + zone_rules, + rules_tail, + rule.letter, + lower_limit + ) + end + + if period == nil, do: tail, else: [period | tail] end end @@ -353,9 +366,9 @@ defmodule Tzdata.PeriodBuilder do def sort_rules_by_time(rules, year) do # n.b., we can have many rules per month - such as time changes for religious festivals rules - |> Enum.map(&({&1, TzUtil.tz_day_to_date(year, &1.in, &1.on)})) + |> Enum.map(&{&1, TzUtil.tz_day_to_date(year, &1.in, &1.on)}) |> Enum.sort(&(elem(&1, 1) < elem(&2, 1))) - |> Enum.map(&(elem(&1, 0))) + |> Enum.map(&elem(&1, 0)) end @doc """ diff --git a/mix.exs b/mix.exs index 00999b9..05d77d6 100644 --- a/mix.exs +++ b/mix.exs @@ -1,13 +1,11 @@ defmodule Tzdata.Mixfile do use Mix.Project - @version "1.1.1" - def project do [ app: :tzdata, name: "tzdata", - version: @version, + version: version(), elixir: "~> 1.8", package: package(), description: description(), @@ -28,15 +26,16 @@ defmodule Tzdata.Mixfile do defp deps do [ {:hackney, "~> 1.17"}, - {:ex_doc, "~> 0.21", only: :dev, runtime: false} + {:ex_doc, "~> 0.21", only: :dev, runtime: false}, + {:mox, "~> 1.2", only: :test} ] end defp docs do [ main: "readme", - extras: ["README.md"], - source_ref: "v#{@version}" + extras: ["README.md", "VERSION"], + source_ref: "v#{version()}" ] end @@ -63,4 +62,10 @@ defmodule Tzdata.Mixfile do CHANGELOG*) } end + + defp version do + "./VERSION" + |> File.read!() + |> String.trim() + end end diff --git a/mix.lock b/mix.lock index d134a8d..25a1573 100644 --- a/mix.lock +++ b/mix.lock @@ -8,6 +8,8 @@ "makeup_elixir": {:hex, :makeup_elixir, "0.15.0", "98312c9f0d3730fde4049985a1105da5155bfe5c11e47bdc7406d88e01e4219b", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.1", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "75ffa34ab1056b7e24844c90bfc62aaf6f3a37a15faa76b07bc5eba27e4a8b4a"}, "metrics": {:hex, :metrics, "1.0.1", "25f094dea2cda98213cecc3aeff09e940299d950904393b2a29d191c346a8486", [:rebar3], [], "hexpm", "69b09adddc4f74a40716ae54d140f93beb0fb8978d8636eaded0c31b6f099f16"}, "mimerl": {:hex, :mimerl, "1.2.0", "67e2d3f571088d5cfd3e550c383094b47159f3eee8ffa08e64106cdf5e981be3", [:rebar3], [], "hexpm", "f278585650aa581986264638ebf698f8bb19df297f66ad91b18910dfc6e19323"}, + "mox": {:hex, :mox, "1.2.0", "a2cd96b4b80a3883e3100a221e8adc1b98e4c3a332a8fc434c39526babafd5b3", [:mix], [{:nimble_ownership, "~> 1.0", [hex: :nimble_ownership, repo: "hexpm", optional: false]}], "hexpm", "c7b92b3cc69ee24a7eeeaf944cd7be22013c52fcb580c1f33f50845ec821089a"}, + "nimble_ownership": {:hex, :nimble_ownership, "1.0.0", "3f87744d42c21b2042a0aa1d48c83c77e6dd9dd357e425a038dd4b49ba8b79a1", [:mix], [], "hexpm", "7c16cc74f4e952464220a73055b557a273e8b1b7ace8489ec9d86e9ad56cb2cc"}, "nimble_parsec": {:hex, :nimble_parsec, "1.1.0", "3a6fca1550363552e54c216debb6a9e95bd8d32348938e13de5eda962c0d7f89", [:mix], [], "hexpm", "08eb32d66b706e913ff748f11694b17981c0b04a33ef470e33e11b3d3ac8f54b"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "ssl_verify_fun": {:hex, :ssl_verify_fun, "1.1.6", "cf344f5692c82d2cd7554f5ec8fd961548d4fd09e7d22f5b62482e5aeaebd4b0", [:make, :mix, :rebar3], [], "hexpm", "bdb0d2471f453c88ff3908e7686f86f9be327d065cc1ec16fa4540197ea04680"}, diff --git a/test/data_loader_test.exs b/test/data_loader_test.exs new file mode 100644 index 0000000..b467096 --- /dev/null +++ b/test/data_loader_test.exs @@ -0,0 +1,52 @@ +defmodule Tzdata.DataLoaderTest do + use ExUnit.Case, async: false + alias Tzdata.HTTPClient.Mock + doctest Tzdata.DataLoader + import Mox + + setup :verify_on_exit! + + setup do + client = Application.get_env(:tzdata, :http_client) + Application.put_env(:tzdata, :http_client, Tzdata.HTTPClient.Mock) + + Application.put_env( + :tzdata, + :download_url, + "https://data.iana.org/time-zones/tzdata-latest.tar.gz" + ) + + on_exit(fn -> + Application.put_env(:tzdata, :http_client, client) + :ok + end) + end + + describe "download_new/1" do + test "when url not given, should download content from default url" do + expect(Mock, :get, fn "https://data.iana.org/time-zones/tzdata-latest.tar.gz", + _, + [follow_redirect: true] -> + {:ok, + {200, [{"Last-Modified", "Wed, 21 Oct 2015 07:28:00 GMT"}], + File.read!("test/tzdata_fixtures/tzdata2024a.tar.gz")}} + end) + + assert {:ok, 451_270, "2024a", _new_dir_name, "Wed, 21 Oct 2015 07:28:00 GMT"} = + Tzdata.DataLoader.download_new() + end + + test "when url given, should download content from given url" do + expect(Mock, :get, fn "https://data.iana.org/time-zones/tzdata2024a.tar.gz", _, _ -> + {:ok, + {200, [{"Last-Modified", "Wed, 21 Oct 2015 07:28:00 GMT"}], + File.read!("test/tzdata_fixtures/tzdata2024a.tar.gz")}} + end) + + assert {:ok, 451_270, "2024a", _new_dir_name, "Wed, 21 Oct 2015 07:28:00 GMT"} = + Tzdata.DataLoader.download_new( + "https://data.iana.org/time-zones/tzdata2024a.tar.gz" + ) + end + end +end diff --git a/test/test_helper.exs b/test/test_helper.exs index 869559e..6b45306 100644 --- a/test/test_helper.exs +++ b/test/test_helper.exs @@ -1 +1,3 @@ ExUnit.start() + +Mox.defmock(Tzdata.HTTPClient.Mock, for: Tzdata.HTTPClient) diff --git a/test/tz_period_builder_test.exs b/test/tz_period_builder_test.exs index 962e5c2..ac122e3 100644 --- a/test/tz_period_builder_test.exs +++ b/test/tz_period_builder_test.exs @@ -33,7 +33,9 @@ defmodule Tzdata.PeriodBuilderTest do def convert(utc) do case utc do - atom when is_atom(utc) -> atom + atom when is_atom(utc) -> + atom + utc -> :calendar.gregorian_seconds_to_datetime(utc) |> NaiveDateTime.from_erl!() @@ -41,29 +43,38 @@ defmodule Tzdata.PeriodBuilderTest do end def test_for_overlaps(map, location) do - result = calc_periods(map, location) - |> Enum.reduce_while(nil, fn period, last -> - %{from: %{utc: from_utc}, until: %{utc: until_utc}, zone_abbr: zone_abbr} = period - # preconditions - assert from_utc != :max # period can't start at :max - assert until_utc != :min # period can't finish at :min - assert from_utc == :min || until_utc == :max || from_utc < until_utc, - "#{location}: #{convert(from_utc)}UTC >= #{convert(until_utc)}UTC" # 'from' must precede 'until' time - case last do - nil -> {:cont, {:ok, period}} - {:ok, last} -> - # check if this period overlaps with prior period - if last.until.utc != from_utc do - {:halt, {:error, - "Location #{location}: #{convert(last.from.utc)}UTC..#{convert(last.until.utc)}UTC #{last.zone_abbr}" - <> "... is non-sequential with ..." - <> "#{convert(from_utc)}UTC..#{convert(until_utc)}UTC #{zone_abbr}" - }} - else + result = + calc_periods(map, location) + |> Enum.reduce_while(nil, fn period, last -> + %{from: %{utc: from_utc}, until: %{utc: until_utc}, zone_abbr: zone_abbr} = period + # preconditions + # period can't start at :max + assert from_utc != :max + # period can't finish at :min + assert until_utc != :min + + assert from_utc == :min || until_utc == :max || from_utc < until_utc, + # 'from' must precede 'until' time + "#{location}: #{convert(from_utc)}UTC >= #{convert(until_utc)}UTC" + + case last do + nil -> {:cont, {:ok, period}} - end - end - end) + + {:ok, last} -> + # check if this period overlaps with prior period + if last.until.utc != from_utc do + {:halt, + {:error, + "Location #{location}: #{convert(last.from.utc)}UTC..#{convert(last.until.utc)}UTC #{last.zone_abbr}" <> + "... is non-sequential with ..." <> + "#{convert(from_utc)}UTC..#{convert(until_utc)}UTC #{zone_abbr}"}} + else + {:cont, {:ok, period}} + end + end + end) + assert {:ok, _last} = result end @@ -72,7 +83,10 @@ defmodule Tzdata.PeriodBuilderTest do {:ok, map} = Tzdata.BasicDataMap.from_single_file_in_dir(@fixtures_dir, "rule_overlap") {:ok, %{map: map}} end - test "will handle coincidence of a rule time change with a subsequent time change", %{map: map} do + + test "will handle coincidence of a rule time change with a subsequent time change", %{ + map: map + } do [ "America/Whitehorse", "America/Santiago", @@ -83,13 +97,13 @@ defmodule Tzdata.PeriodBuilderTest do "Africa/Cairo", "America/Argentina/Buenos_Aires" ] - |> Enum.each(&(test_for_overlaps(map, &1))) + |> Enum.each(&test_for_overlaps(map, &1)) end end test "source data has no time period overlaps", %{map: map} do map.zone_list - |> Enum.each(&(test_for_overlaps(map, &1))) + |> Enum.each(&test_for_overlaps(map, &1)) end test "can calculate for zones with one line", %{map: map} do diff --git a/test/tzdata_fixtures/tzdata2024a.tar.gz b/test/tzdata_fixtures/tzdata2024a.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..febf30b05030d5a3269134d7fb5cdb0830b3d3db GIT binary patch literal 451270 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