def today(self, today): previous_today = self.today self._processed_today = False self._today = today # HACK (sort of): we need to call self.today to trigger replacement # of wildcards and then converstion to datetime object (that's a # hack), but we need to access it anyway to set in Config new_today = self.today # now that today is sure to be a datetime object, make sure that, # if previously manually set, the two values are the same if self._manually_set_today and previous_today != new_today: raise TypeError(self.TODAY_IS_IMMUTABLE_MSG) Config.set_today(new_today) self._manually_set_today = True
def test_setting_config_run_id_today(self, reset_config): # setting Config.set({"FOO": "{run_id}_{today-2:%Y%m%d}_bar", "bar": "baz"}) assert Config._RUN_ID == None assert Config._TODAY == None EXPECTED_RAW = dict(DEFAULTS, foo="{run_id}_{today-2:%Y%m%d}_bar", bar="baz") EXPECTED = dict(DEFAULTS, foo="{run_id}_20160418_bar", bar="baz") assert Config._RAW_CONFIG == EXPECTED_RAW assert Config._CONFIG == EXPECTED assert Config.get() == EXPECTED # set today Config.set_today(datetime.datetime(2019, 1, 5, 10, 12, 1)) assert Config._RUN_ID == None assert Config._TODAY == datetime.datetime(2019, 1, 5, 10, 12, 1) EXPECTED_RAW = dict(DEFAULTS, foo="{run_id}_{today-2:%Y%m%d}_bar", bar="baz") EXPECTED = dict(DEFAULTS, foo="{run_id}_20190103_bar", bar="baz") assert Config._RAW_CONFIG == EXPECTED_RAW assert Config._CONFIG == EXPECTED assert Config.get() == EXPECTED # set again; datetime wildcard should be filled in Config.set({"fOO": "{run_id}_{today:%Y%m%d%H}_bar", "bar": "sdfsdf"}) assert Config._RUN_ID == None assert Config._TODAY == datetime.datetime(2019, 1, 5, 10, 12, 1) EXPECTED_RAW = dict(DEFAULTS, foo="{run_id}_{today:%Y%m%d%H}_bar", bar="sdfsdf") EXPECTED = dict(DEFAULTS, foo="{run_id}_2019010510_bar", bar="sdfsdf") assert Config._RAW_CONFIG == EXPECTED_RAW assert Config._CONFIG == EXPECTED assert Config.get() == EXPECTED # set run_id Config.set_run_id("abc123") assert Config._RUN_ID == "abc123" assert Config._TODAY == datetime.datetime(2019, 1, 5, 10, 12, 1) EXPECTED_RAW = dict(DEFAULTS, foo="{run_id}_{today:%Y%m%d%H}_bar", bar="sdfsdf") EXPECTED = dict(DEFAULTS, foo="abc123_2019010510_bar", bar="sdfsdf") assert Config._RAW_CONFIG == EXPECTED_RAW assert Config._CONFIG == EXPECTED assert Config.get() == EXPECTED # set again; datetime and run_id wildcards should be filled in Config.set({"foo": "FOO_{run_id}_{today:%Y%m%d%H}_bar", "bar": "zz"}) assert Config._RUN_ID == "abc123" assert Config._TODAY == datetime.datetime(2019, 1, 5, 10, 12, 1) EXPECTED_RAW = dict(DEFAULTS, foo="FOO_{run_id}_{today:%Y%m%d%H}_bar", bar="zz") EXPECTED = dict(DEFAULTS, foo="FOO_abc123_2019010510_bar", bar="zz") assert Config._RAW_CONFIG == EXPECTED_RAW assert Config._CONFIG == EXPECTED assert Config.get() == EXPECTED # set in individual values Config.set(100, "bar") Config.set(200, "BAAAR") Config.set("sdfsdf{run_id}", "baz", "a") Config.set("{run_id}", "BAZ", "b") assert Config._RUN_ID == "abc123" assert Config._TODAY == datetime.datetime(2019, 1, 5, 10, 12, 1) EXPECTED_RAW = dict(DEFAULTS, foo="FOO_{run_id}_{today:%Y%m%d%H}_bar", bar=100, baaar=200, baz={ "a": "sdfsdf{run_id}", "b": "{run_id}" }) EXPECTED = dict(DEFAULTS, foo="FOO_abc123_2019010510_bar", bar=100, baaar=200, baz={ "a": "sdfsdfabc123", "b": "abc123" }) assert Config._RAW_CONFIG == EXPECTED_RAW assert Config._CONFIG == EXPECTED assert Config.get() == EXPECTED assert self._ORIGINAL_DEFAULTS == DEFAULTS
def test_merge_configs(self, reset_config): Config.merge( {"foo": { "A": "{run_id}-{today}", "b": 222, "c": 333, "d": 444 }}) EXPECTED_RAW = dict( DEFAULTS, **{"foo": { "a": "{run_id}-{today}", "b": 222, "c": 333, "d": 444 }}) EXPECTED = dict( DEFAULTS, **{ "foo": { "a": "{run_id}-20160420", "b": 222, "c": 333, "d": 444 } }) assert Config._RUN_ID == None assert Config._TODAY == None assert Config._RAW_CONFIG == EXPECTED_RAW assert Config._CONFIG == EXPECTED assert Config.get() == EXPECTED Config.set_today(datetime.datetime(2019, 2, 4)) EXPECTED_RAW = dict( DEFAULTS, **{"foo": { "a": "{run_id}-{today}", "b": 222, "c": 333, "d": 444 }}) EXPECTED = dict( DEFAULTS, **{ "foo": { "a": "{run_id}-20190204", "b": 222, "c": 333, "d": 444 } }) assert Config._RUN_ID == None assert Config._TODAY == datetime.datetime(2019, 2, 4) assert Config._RAW_CONFIG == EXPECTED_RAW assert Config._CONFIG == EXPECTED assert Config.get() == EXPECTED Config.merge({ "foo": { "B": "{today-1}-{run_id}", "c": 3333, "d": 4444, "bb": "bb" }, "BAR": { "b": "b" }, "b": "b" }) EXPECTED_RAW = dict( DEFAULTS, **{ "foo": { "a": "{run_id}-{today}", "b": "{today-1}-{run_id}", "c": 3333, "d": 4444, "bb": "bb" }, "bar": { "b": "b" }, "b": "b" }) EXPECTED = dict( DEFAULTS, **{ "foo": { "a": "{run_id}-20190204", "b": "20190203-{run_id}", "c": 3333, "d": 4444, "bb": "bb" }, "bar": { "b": "b" }, "b": "b" }) assert Config._RUN_ID == None assert Config._TODAY == datetime.datetime(2019, 2, 4) assert Config._RAW_CONFIG == EXPECTED_RAW assert Config._CONFIG == EXPECTED assert Config.get() == EXPECTED Config.merge({ "foo": { "c": 33333, "d": 44444, "cc": "cc" }, "baz": { "c": "c" }, "c": "c" }) EXPECTED_RAW = dict( DEFAULTS, **{ "foo": { "a": "{run_id}-{today}", "b": "{today-1}-{run_id}", "c": 33333, "d": 44444, "bb": "bb", "cc": "cc" }, "bar": { "b": "b" }, "baz": { "c": "c" }, "b": "b", "c": "c" }) EXPECTED = dict( DEFAULTS, **{ "foo": { "a": "{run_id}-20190204", "b": "20190203-{run_id}", "c": 33333, "d": 44444, "bb": "bb", "cc": "cc" }, "bar": { "b": "b" }, "baz": { "c": "c" }, "b": "b", "c": "c" }) assert Config._RUN_ID == None assert Config._TODAY == datetime.datetime(2019, 2, 4) assert Config._RAW_CONFIG == EXPECTED_RAW assert Config._CONFIG == EXPECTED assert Config.get() == EXPECTED Config.set("444444", 'foo', 'd') Config.set("dd", 'foo', 'dd') Config.set("d", 'boo', 'd') Config.set("d", 'd') Config.set(True, 'dbt') Config.set(False, 'dbf') Config.set(23, 'di') Config.set(123.23, 'df') Config.set('23', 'dci') Config.set('123.23', 'dcf') EXPECTED_RAW = dict( DEFAULTS, **{ "foo": { "a": "{run_id}-{today}", "b": "{today-1}-{run_id}", "c": 33333, "bb": "bb", "cc": "cc", "dd": "dd", "d": "444444" # because it was set on command line }, "bar": { "b": "b" }, "baz": { "c": "c" }, "boo": { "d": "d" }, "b": "b", "c": "c", "d": "d", "dbt": True, "dbf": False, "di": 23, "df": 123.23, "dci": "23", "dcf": "123.23" }) EXPECTED = dict( DEFAULTS, **{ "foo": { "a": "{run_id}-20190204", "b": "20190203-{run_id}", "c": 33333, "bb": "bb", "cc": "cc", "dd": "dd", "d": "444444" # because it was set on command line }, "bar": { "b": "b" }, "baz": { "c": "c" }, "boo": { "d": "d" }, "b": "b", "c": "c", "d": "d", "dbt": True, "dbf": False, "di": 23, "df": 123.23, "dci": "23", "dcf": "123.23" }) assert Config._RUN_ID == None assert Config._TODAY == datetime.datetime(2019, 2, 4) assert Config._RAW_CONFIG == EXPECTED_RAW assert Config._CONFIG == EXPECTED assert Config.get() == EXPECTED assert self._ORIGINAL_DEFAULTS == DEFAULTS
def _initialize_today(self): self._manually_set_today = False self._processed_today = True self._today = datetimeutils.today_utc() Config.set_today(self._today)