From 383307d88803404c1bac74366797b5a23e2fc5e0 Mon Sep 17 00:00:00 2001 From: Ondrej Samohel Date: Fri, 3 Dec 2021 13:51:03 +0100 Subject: [PATCH] tweak tests and add get latest version --- igniter/bootstrap_repos.py | 97 +++++++++------------- start.py | 1 - tests/unit/igniter/test_bootstrap_repos.py | 7 +- 3 files changed, 41 insertions(+), 64 deletions(-) diff --git a/igniter/bootstrap_repos.py b/igniter/bootstrap_repos.py index b0f3b482ac..ca64d193c7 100644 --- a/igniter/bootstrap_repos.py +++ b/igniter/bootstrap_repos.py @@ -401,16 +401,16 @@ class OpenPypeVersion(semver.VersionInfo): def get_versions_from_directory(openpype_dir: Path) -> List: """Get all detected OpenPype versions in directory. - Args: - openpype_dir (Path): Directory to scan. + Args: + openpype_dir (Path): Directory to scan. - Returns: - list of OpenPypeVersion + Returns: + list of OpenPypeVersion - Throws: - ValueError: if invalid path is specified. + Throws: + ValueError: if invalid path is specified. - """ + """ if not openpype_dir.exists() and not openpype_dir.is_dir(): raise ValueError("specified directory is invalid") @@ -442,6 +442,26 @@ class OpenPypeVersion(semver.VersionInfo): return sorted(_openpype_versions) + @staticmethod + def get_latest_version( + staging: bool = False, local: bool = False) -> OpenPypeVersion: + """Get latest available version. + + This is utility version to get latest version from all found. + + Args: + staging (bool, optional): List staging versions if True. + local (bool, optional): List only local versions. + + See also: + OpenPypeVersion.get_available_versions() + + """ + openpype_versions = OpenPypeVersion.get_available_versions( + staging, local) + + return openpype_versions[-1] + class BootstrapRepos: """Class for bootstrapping local OpenPype installation. @@ -944,66 +964,23 @@ class BootstrapRepos: os.environ["PYTHONPATH"] = os.pathsep.join(paths) + @staticmethod def find_openpype( - self, openpype_path: Union[Path, str] = None, staging: bool = False, include_zips: bool = False) -> Union[List[OpenPypeVersion], None]: - """Get ordered dict of detected OpenPype version. - Resolution order for OpenPype is following: - - 1) First we test for ``OPENPYPE_PATH`` environment variable - 2) We try to find ``openPypePath`` in registry setting - 3) We use user data directory - - Args: - openpype_path (Path or str, optional): Try to find OpenPype on - the given path or url. - staging (bool, optional): Filter only staging version, skip them - otherwise. - include_zips (bool, optional): If set True it will try to find - OpenPype in zip files in given directory. - - Returns: - dict of Path: Dictionary of detected OpenPype version. - Key is version, value is path to zip file. - - None: if OpenPype is not found. - - Todo: - implement git/url support as OpenPype location, so it would be - possible to enter git url, OpenPype would check it out and if it is - ok install it as normal version. - - """ - if openpype_path and not isinstance(openpype_path, Path): - raise NotImplementedError( - ("Finding OpenPype in non-filesystem locations is" - " not implemented yet.")) - - dir_to_search = self.data_dir - user_versions = self.get_openpype_versions(self.data_dir, staging) - # if we have openpype_path specified, search only there. if openpype_path: - dir_to_search = openpype_path + openpype_versions = OpenPypeVersion.get_versions_from_directory( + openpype_path) + # filter out staging + + openpype_versions = [ + v for v in openpype_versions if v.is_staging() == staging + ] + else: - if os.getenv("OPENPYPE_PATH"): - if Path(os.getenv("OPENPYPE_PATH")).exists(): - dir_to_search = Path(os.getenv("OPENPYPE_PATH")) - else: - try: - registry_dir = Path( - str(self.registry.get_item("openPypePath"))) - if registry_dir.exists(): - dir_to_search = registry_dir - - except ValueError: - # nothing found in registry, we'll use data dir - pass - - openpype_versions = self.get_openpype_versions(dir_to_search, staging) - openpype_versions += user_versions + openpype_versions = OpenPypeVersion.get_available_versions(staging) # remove zip file version if needed. if not include_zips: diff --git a/start.py b/start.py index 0f7e82071d..05b7da6308 100644 --- a/start.py +++ b/start.py @@ -966,7 +966,6 @@ def boot(): ) sys.exit(1) - if not openpype_path: _print("*** Cannot get OpenPype path from database.") diff --git a/tests/unit/igniter/test_bootstrap_repos.py b/tests/unit/igniter/test_bootstrap_repos.py index d6e861c262..65cd5a2399 100644 --- a/tests/unit/igniter/test_bootstrap_repos.py +++ b/tests/unit/igniter/test_bootstrap_repos.py @@ -140,9 +140,10 @@ def test_search_string_for_openpype_version(printer): ] for ver_string in strings: printer(f"testing {ver_string[0]} should be {ver_string[1]}") - assert OpenPypeVersion.version_in_str(ver_string[0]) == \ - ver_string[1] - + assert isinstance( + OpenPypeVersion.version_in_str(ver_string[0]), + OpenPypeVersion if ver_string[1] else type(None) + ) @pytest.mark.slow def test_install_live_repos(fix_bootstrap, printer, monkeypatch, pytestconfig):