Beispiel #1
0
    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
Beispiel #2
0
    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
Beispiel #3
0
    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
Beispiel #4
0
 def _initialize_today(self):
     self._manually_set_today = False
     self._processed_today = True
     self._today = datetimeutils.today_utc()
     Config.set_today(self._today)