Example #1
0
 def test__set_overlay_paths_raises_ValueError_if_supplied_a_list_of_non_strings(self):
     invalid_list = [
         "this-is-ok",
         [],  # this isn't
     ]
     with self.assertRaises(ValueError):
         path._set_overlay_paths(invalid_list)
Example #2
0
    def test_resolve_all_list_contains_elements_that_do_exist(self):
        file_name = util.base36_str()

        overlay_with_result = tempfile.mkdtemp()
        self.__create_file(os.path.join(overlay_with_result, file_name))

        empty_overlay = tempfile.mkdtemp()

        another_overlay_with_result = tempfile.mkdtemp()
        self.__create_file(os.path.join(another_overlay_with_result, file_name))

        path._set_overlay_paths([
            overlay_with_result,
            empty_overlay,
            another_overlay_with_result
        ])

        ws_path = os.path.join(tempfile.mkdtemp(), "ws")
        workspace_generator.create(ws_path)
        self.__create_file(os.path.join(ws_path, file_name))
        workspace._set_path(ws_path)

        expected_result = [
            os.path.join(overlay_with_result, file_name),
            os.path.join(another_overlay_with_result, file_name),
            os.path.join(ws_path, file_name),
        ]

        actual_result = path.resolve_all(file_name)

        self.assertEqual(expected_result, actual_result)
Example #3
0
 def test__set_overlay_paths_works_with_list_of_existient_dirs(self):
     paths = [
         tempfile.mkdtemp(),
         tempfile.mkdtemp(),
         tempfile.mkdtemp(),
     ]
     path._set_overlay_paths(paths)
Example #4
0
 def test__set_overlay_paths_causes_get_overlay_paths_to_return_the_supplied_paths(self):
     paths = [
         tempfile.mkdtemp(),
         tempfile.mkdtemp(),
         tempfile.mkdtemp(),
     ]
     path._set_overlay_paths(paths)
     returned_paths = path.get_overlay_paths()
     self.assertEqual(paths, returned_paths)
Example #5
0
    def test_resolve_returns_result_from_overlay_if_exists_and_in_overlay(self):
        overlay1 = tempfile.mkdtemp()
        file_name = util.base36_str()
        self.__create_file(os.path.join(overlay1, file_name))

        path._set_overlay_paths([overlay1])

        returned_path = path.resolve(file_name)

        self.assertEqual(returned_path, os.path.join(overlay1, file_name))
Example #6
0
    def test_resolve_returns_result_from_another_overlay_if_exists_in_different_overlay(self):
        empty_overlay = tempfile.mkdtemp()
        overlay_with_file = tempfile.mkdtemp()
        file_name = util.base36_str()
        self.__create_file(os.path.join(overlay_with_file, file_name))

        path._set_overlay_paths([empty_overlay, overlay_with_file])

        returned_path = path.resolve(file_name)

        self.assertEqual(os.path.join(overlay_with_file, file_name), returned_path)
Example #7
0
    def test_join_works_with_multiple_fragments(self):
        first_overlay_path = tempfile.mkdtemp()
        path._set_overlay_paths([first_overlay_path])

        frag1 = util.base36_str()
        frag2 = util.base36_str()

        expected_result = os.path.join(first_overlay_path, frag1, frag2)
        actual_result = path.join(frag1, frag2)

        self.assertEqual(expected_result, actual_result)
Example #8
0
    def test_join_returns_paths_joined_onto_workspace_if_no_overlay_paths_available(self):
        path._set_overlay_paths([])
        ws_path = os.path.join(tempfile.mkdtemp(), "ws")
        workspace_generator.create(ws_path)
        workspace._set_path(ws_path)

        fragment = util.base36_str()
        expected_result = os.path.join(ws_path, fragment)
        actual_result = path.join(fragment)

        self.assertEqual(expected_result, actual_result)
Example #9
0
    def test_resolve_raises_FileNotFoundError_if_file_doesnt_exist_in_any_location(self):
        overlays = [
            tempfile.mkdtemp(),
            tempfile.mkdtemp(),
            tempfile.mkdtemp()
        ]
        path._set_overlay_paths(overlays)
        ws_path = os.path.join(tempfile.mkdtemp(), "ws")
        workspace_generator.create(ws_path)
        workspace._set_path(ws_path)

        with self.assertRaises(FileNotFoundError):
            path.resolve(util.base36_str())
Example #10
0
    def test_resolve_returns_result_from_workspace_if_workspace_has_file(self):
        ws_path = os.path.join(tempfile.mkdtemp(), "ws")
        workspace_generator.create(ws_path)
        workspace._set_path(ws_path)

        file_name = util.base36_str()
        self.__create_file(os.path.join(ws_path, file_name))

        some_overlay = tempfile.mkdtemp()
        path._set_overlay_paths([some_overlay])

        returned_path = path.resolve(file_name)

        self.assertEqual(os.path.join(ws_path, file_name), returned_path)
Example #11
0
    def test_join_returns_paths_joined_onto_first_overlay_if_overlays_assigned(self):
        first_overlay = tempfile.mkdtemp()
        overlays = [
            first_overlay,
            tempfile.mkdtemp(),
        ]
        path._set_overlay_paths(overlays)

        ws_path = os.path.join(tempfile.mkdtemp(), "ws")
        workspace_generator.create(ws_path)
        workspace._set_path(ws_path)

        fragment = util.base36_str()
        expected_result = os.path.join(first_overlay, fragment)
        actual_result = path.join(fragment)

        self.assertEqual(expected_result, actual_result)
Example #12
0
    def test_join_all_returns_list_of_overlays_then_workspace(self):
        overlay1 = tempfile.mkdtemp()
        overlay2 = tempfile.mkdtemp()
        overlay3 = tempfile.mkdtemp()

        overlays = [overlay1, overlay2, overlay3]
        path._set_overlay_paths(overlays)

        ws_path = os.path.join(tempfile.mkdtemp(), "ws")
        workspace_generator.create(ws_path)
        workspace._set_path(ws_path)

        frag = util.base36_str()

        expected_ret = [
            os.path.join(p, frag)
            for p
            in [overlay1, overlay2, overlay3, ws_path]
        ]

        actual_ret = path.join_all(frag)

        self.assertEqual(expected_ret, actual_ret)
Example #13
0
def bootstrap_globals(prop_overrides):
    """
    Bootstrap global variables.

    Used by LoR CLI to bootstrap CLI overrides (variable vals etc.)

    :param prop_overrides:
    :return:
    :raises RuntimeError: If not in a workspace
    :raises FileNotFoundError: If workspace properties.yml file is missing
    """
    workspace_path = workspace.get_path()

    if workspace_path is None:
        raise RuntimeError(
            "Not currently in a workspace (or cannot locate one)")

    workspace._set_path(workspace_path)

    path._set_overlay_paths([])  # Not using overlay paths yet

    prop_file_path = os.path.join(workspace.get_path(),
                                  lor._constants.WORKSPACE_PROPS)

    if not os.path.exists(prop_file_path):
        raise FileNotFoundError(
            "{prop_file_path}: No such file: a properties file is *required* in the workspace when running LoR"
        )

    loaders = [props.DictPropertyLoader("cli-overrides", prop_overrides)
               ] + props.get_loaders()
    props._set_loaders(loaders)

    # This allows workspaces to be loaded dynamically at runtime by LoR and Luigi
    # (the Luigi docs get clients to set PYTHONPATH explicitly)
    sys.path.insert(0, workspace.get_path())
Example #14
0
    def test_join_raises_ValueError_if_no_overlays_and_not_in_workspace(self):
        path._set_overlay_paths([])
        workspace._set_path(None)

        with self.assertRaises(ValueError):
            path.join(util.base36_str())
Example #15
0
 def test__set_overlay_paths_raises_NotADirectoryError_if_path_is_to_a_file(self):
     _, some_file = tempfile.mkstemp()
     with self.assertRaises(NotADirectoryError):
         path._set_overlay_paths([some_file])
Example #16
0
 def test__set_overlay_paths_raises_FileNotFoundError_if_list_entry_does_not_exist(self):
     with self.assertRaises(FileNotFoundError):
         path._set_overlay_paths(["doesnt-exist"])
Example #17
0
 def test__set_overlay_paths_raises_ValueError_if_supplied_a_non_list(self):
     with self.assertRaises(ValueError):
         path._set_overlay_paths("not-a-list")
Example #18
0
    def test_resolve_raises_ValueError_if_overlays_empty_and_not_in_workspace(self):
        path._set_overlay_paths([])
        workspace._set_path(None)

        with self.assertRaises(ValueError):
            path.resolve(util.base36_str())
Example #19
0
    def test_resolve_all_list_is_empty_if_no_overlays_or_workspace(self):
        path._set_overlay_paths([])
        workspace._set_path(None)

        self.assertEqual([], path.resolve_all())