From 795aa143bcba185b680988989db1df3a9dabe955 Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Tue, 27 Aug 2024 09:28:08 +0200 Subject: [PATCH 01/14] add workspace usage method --- mergin/client.py | 64 +++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 60 insertions(+), 4 deletions(-) diff --git a/mergin/client.py b/mergin/client.py index d949a466..457ac17b 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -364,6 +364,24 @@ def workspace_service(self, workspace_id): return response + def workspace_usage(self, workspace_id): + """ + This Requests information about a workspace usage from /workspace/{id}/usage endpoint, + if such exists in self.url server. + + Returns response from server as JSON dict or None if endpoint is not found + """ + + try: + response = self.get(f"/v1/workspace/{workspace_id}/usage") + except ClientError as e: + self.log.debug(f"Unable to query for /workspace/{workspace_id}/usage endpoint") + return + + response = json.loads(response.read()) + + return response + def server_type(self): """ Returns the deployment type of the server @@ -698,9 +716,9 @@ def project_versions(self, project_path, since=None, to=None): If neither 'since' nor 'to' is specified it will return all versions. :param project_path: Project's full name (/) - :type project_path: String + :type project_path: String | Int :param since: Version to track project history from - :type since: String + :type since: String | Int :param to: Version to track project history to :type to: String @@ -708,8 +726,20 @@ def project_versions(self, project_path, since=None, to=None): """ versions = [] per_page = 100 # server limit - num_since = int_version(since) if since else 1 - num_to = int_version(to) if to else None # we may not know yet + + if type(since) == str: + num_since = int_version(since) + elif since == None: + num_since == 1 + else: + #keep the since parameter as is + num_since = since + if type(to) == str: + num_to = int_version(int) + else: + #keep the to parameter as is + num_to = to + start_page = math.ceil(num_since / per_page) if not num_to: # let's get first page and count @@ -720,6 +750,7 @@ def project_versions(self, project_path, since=None, to=None): num_to = resp_json["count"] latest_version = int_version(versions[-1]["name"]) if latest_version < num_to: + #add yield here versions += self.project_versions(project_path, f"v{latest_version+1}", f"v{num_to}") else: end_page = math.ceil(num_to / per_page) @@ -731,6 +762,31 @@ def project_versions(self, project_path, since=None, to=None): # filter out versions not within range filtered_versions = list(filter(lambda v: (num_since <= int_version(v["name"]) <= num_to), versions)) return filtered_versions + + def project_versions_count(self, project_path): + + #TODO ask tomas if we should return the total count another + + """ + Get the total count of project's versions history. + + :param project_path: Project's full name (/) + :type project_path: String + :param since: Version to track project history from + :type since: String + :param to: Version to track project history to + :type to: String + + :rtype: Integer + """ + start_page = 1 #we don't care which page to get the count + per_page = 100 # server limit + params = {"page": start_page, "per_page": per_page, "descending": False} + resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params) + resp_json = json.load(resp) + + return resp_json["count"] + def download_project(self, project_path, directory, version=None): """ From 34b2e8c2e77488b84b7b23e02d87fa6c7328a8f6 Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Mon, 2 Sep 2024 17:13:46 +0200 Subject: [PATCH 02/14] formatting --- mergin/client.py | 1 + 1 file changed, 1 insertion(+) diff --git a/mergin/client.py b/mergin/client.py index 457ac17b..069cd724 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -734,6 +734,7 @@ def project_versions(self, project_path, since=None, to=None): else: #keep the since parameter as is num_since = since + if type(to) == str: num_to = int_version(int) else: From 40963e8e286a6c36b6b05a82f38a51759386d2cd Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Thu, 12 Sep 2024 11:27:00 +0200 Subject: [PATCH 03/14] Skip download file at specific hisotry if file didn't exist --- mergin/client_pull.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/mergin/client_pull.py b/mergin/client_pull.py index d11b2ab9..954d2345 100644 --- a/mergin/client_pull.py +++ b/mergin/client_pull.py @@ -687,6 +687,8 @@ def download_diffs_async(mc, project_directory, file_path, versions): fetch_files = [] for version in versions: + if version not in file_history["history"]: + continue # skip if this file was not modified at this version version_data = file_history["history"][version] if "diff" not in version_data: continue # skip if there is no diff in history From 45698cf64d2c6dfa7d9086c600b6148526c9cf03 Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Wed, 30 Oct 2024 12:31:47 +0100 Subject: [PATCH 04/14] Remove useless function --- mergin/client.py | 24 ------------------------ 1 file changed, 24 deletions(-) diff --git a/mergin/client.py b/mergin/client.py index 4ee83313..6f0a3bf7 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -764,30 +764,6 @@ def project_versions(self, project_path, since=None, to=None): # filter out versions not within range filtered_versions = list(filter(lambda v: (num_since <= int_version(v["name"]) <= num_to), versions)) return filtered_versions - - def project_versions_count(self, project_path): - - #TODO ask tomas if we should return the total count another - - """ - Get the total count of project's versions history. - - :param project_path: Project's full name (/) - :type project_path: String - :param since: Version to track project history from - :type since: String - :param to: Version to track project history to - :type to: String - - :rtype: Integer - """ - start_page = 1 #we don't care which page to get the count - per_page = 100 # server limit - params = {"page": start_page, "per_page": per_page, "descending": False} - resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params) - resp_json = json.load(resp) - - return resp_json["count"] def download_project(self, project_path, directory, version=None): From 383eb318f79e5d588710bab34f4ab85c112d32f0 Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Mon, 4 Nov 2024 12:58:49 +0100 Subject: [PATCH 05/14] * Added project_versions_page * Added project_versions_count * Renamed project_versions into project_versions_in_range --- mergin/client.py | 33 +++++++++++++++++++++++---------- mergin/report.py | 2 +- mergin/test/test_client.py | 8 ++++---- 3 files changed, 28 insertions(+), 15 deletions(-) diff --git a/mergin/client.py b/mergin/client.py index 6f0a3bf7..e29b8e26 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -711,7 +711,25 @@ def project_info(self, project_path_or_id, since=None, version=None): resp = self.get("/v1/project/{}".format(project_path_or_id), params) return json.load(resp) - def project_versions(self, project_path, since=None, to=None): + + def project_versions_page(self, project_path, page, per_page=100, descending=False): + params = {"page": page, "per_page": per_page, "descending": descending} + resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params) + resp_json = json.load(resp) + return resp_json["versions"] + + def project_versions_count(self, project_path): + """ + return the total count of versions + + To note the requested informations are kept to the minimal + """ + params = {"page": 1, "per_page": 1, "descending": False} + resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params) + resp_json = json.load(resp) + return resp_json["count"] + + def project_versions_in_range(self, project_path, since=None, to=None): """ Get records of project's versions (history) in ascending order. If neither 'since' nor 'to' is specified it will return all versions. @@ -745,21 +763,16 @@ def project_versions(self, project_path, since=None, to=None): start_page = math.ceil(num_since / per_page) if not num_to: # let's get first page and count - params = {"page": start_page, "per_page": per_page, "descending": False} - resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params) - resp_json = json.load(resp) - versions = resp_json["versions"] - num_to = resp_json["count"] + versions = self.project_versions_page(project_path, start_page, per_page) + num_to = self.project_versions_count(project_path) latest_version = int_version(versions[-1]["name"]) if latest_version < num_to: #add yield here - versions += self.project_versions(project_path, f"v{latest_version+1}", f"v{num_to}") + versions += self.project_versions_in_range(project_path, f"v{latest_version+1}", f"v{num_to}") else: end_page = math.ceil(num_to / per_page) for page in range(start_page, end_page + 1): - params = {"page": page, "per_page": per_page, "descending": False} - resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params) - versions += json.load(resp)["versions"] + versions += self.project_versions_page(project_path, page, per_page) # filter out versions not within range filtered_versions = list(filter(lambda v: (num_since <= int_version(v["name"]) <= num_to), versions)) diff --git a/mergin/report.py b/mergin/report.py index 5b9cae43..e5ee018e 100644 --- a/mergin/report.py +++ b/mergin/report.py @@ -216,7 +216,7 @@ def create_report(mc, directory, since, to, out_file): mp = MerginProject(directory) project = mp.project_full_name() mp.log.info(f"--- Creating changesets report for {project} from {since} to {to if to else 'latest'} versions ----") - versions = mc.project_versions(project, since, to if to else None) + versions = mc.project_versions_in_range(project, since, to if to else None) versions_map = {v["name"]: v for v in versions} headers = ["file", "table", "author", "date", "time", "version", "operation", "length", "area", "count"] records = [] diff --git a/mergin/test/test_client.py b/mergin/test/test_client.py index b5d238fc..0d856248 100644 --- a/mergin/test/test_client.py +++ b/mergin/test/test_client.py @@ -1956,23 +1956,23 @@ def test_project_versions_list(mc): assert project_info["version"] == "v5" # get all versions - versions = mc.project_versions(project) + versions = mc.project_versions_in_range(project) assert len(versions) == 5 assert versions[0]["name"] == "v1" assert versions[-1]["name"] == "v5" # get first 3 versions - versions = mc.project_versions(project, to="v3") + versions = mc.project_versions_in_range(project, to="v3") assert len(versions) == 3 assert versions[-1]["name"] == "v3" # get last 2 versions - versions = mc.project_versions(project, since="v4") + versions = mc.project_versions_in_range(project, since="v4") assert len(versions) == 2 assert versions[0]["name"] == "v4" # get range v2-v4 - versions = mc.project_versions(project, since="v2", to="v4") + versions = mc.project_versions_in_range(project, since="v2", to="v4") assert len(versions) == 3 assert versions[0]["name"] == "v2" assert versions[-1]["name"] == "v4" From 21553dfd9ea0386212d195c929159fb5491ec0b8 Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Mon, 4 Nov 2024 13:12:01 +0100 Subject: [PATCH 06/14] Format --- mergin/client.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/mergin/client.py b/mergin/client.py index e29b8e26..0fffa8bb 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -382,7 +382,7 @@ def workspace_usage(self, workspace_id): response = json.loads(response.read()) return response - + def server_type(self): """ Returns the deployment type of the server @@ -711,13 +711,12 @@ def project_info(self, project_path_or_id, since=None, version=None): resp = self.get("/v1/project/{}".format(project_path_or_id), params) return json.load(resp) - def project_versions_page(self, project_path, page, per_page=100, descending=False): params = {"page": page, "per_page": per_page, "descending": descending} resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params) resp_json = json.load(resp) return resp_json["versions"] - + def project_versions_count(self, project_path): """ return the total count of versions @@ -751,13 +750,13 @@ def project_versions_in_range(self, project_path, since=None, to=None): elif since == None: num_since == 1 else: - #keep the since parameter as is + # keep the since parameter as is num_since = since - + if type(to) == str: num_to = int_version(int) else: - #keep the to parameter as is + # keep the to parameter as is num_to = to start_page = math.ceil(num_since / per_page) @@ -767,7 +766,7 @@ def project_versions_in_range(self, project_path, since=None, to=None): num_to = self.project_versions_count(project_path) latest_version = int_version(versions[-1]["name"]) if latest_version < num_to: - #add yield here + # add yield here versions += self.project_versions_in_range(project_path, f"v{latest_version+1}", f"v{num_to}") else: end_page = math.ceil(num_to / per_page) @@ -778,7 +777,6 @@ def project_versions_in_range(self, project_path, since=None, to=None): filtered_versions = list(filter(lambda v: (num_since <= int_version(v["name"]) <= num_to), versions)) return filtered_versions - def download_project(self, project_path, directory, version=None): """ Download project into given directory. If version is not specified, latest version is downloaded From 072e02d5a5c0797f067e4e48d130a7572fc67f56 Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Thu, 28 Nov 2024 13:07:12 +0100 Subject: [PATCH 07/14] Fix parameter sanitization --- mergin/client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mergin/client.py b/mergin/client.py index ad5ff8fb..4f29351a 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -755,13 +755,13 @@ def project_versions_in_range(self, project_path, since=None, to=None): if type(since) == str: num_since = int_version(since) elif since == None: - num_since == 1 + num_since = 1 else: # keep the since parameter as is num_since = since if type(to) == str: - num_to = int_version(int) + num_to = int_version(to) else: # keep the to parameter as is num_to = to From 439a5a9100bd32ccd4c290d8e0c0ae519d956d8f Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Fri, 29 Nov 2024 09:29:28 +0100 Subject: [PATCH 08/14] more tests --- mergin/test/test_client.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/mergin/test/test_client.py b/mergin/test/test_client.py index 5812d4a6..8f2c3f28 100644 --- a/mergin/test/test_client.py +++ b/mergin/test/test_client.py @@ -2011,6 +2011,14 @@ def test_project_versions_list(mc): assert versions[-1]["name"] == "v4" + + versions_count = mc.project_versions_count(project) + assert versions_count == 5 + + versions = mc.project_versions_page(project, page=1, descending=True) + assert len(versions) == 5 + assert versions[0]["name"] == "v5" + assert versions[-1]["name"] == "v1" def test_report(mc): test_project = "test_report" project = API_USER + "/" + test_project From ef7bfb9ad004e47763f839bd55ed282fd80cd6fb Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Fri, 29 Nov 2024 15:37:43 +0100 Subject: [PATCH 09/14] * Updated docstrings --- mergin/client.py | 25 ++++++++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/mergin/client.py b/mergin/client.py index 4f29351a..be0780d2 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -719,6 +719,21 @@ def project_info(self, project_path_or_id, since=None, version=None): return json.load(resp) def project_versions_page(self, project_path, page, per_page=100, descending=False): + """ + Get records of project's versions (history) using calculated pagination. + wrapper around the /v1/project/versions/paginated/{} API end point + + :param project_path: Project's full name (/) + :type project_path: String | Int + :param page: page number + :type page: Int + :param per_page: number of results per page default 100 + :type per_page: Int + :param descending: order of sorting + :type descending: Bool + + :rtype: List[Dict] + """ params = {"page": page, "per_page": per_page, "descending": descending} resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params) resp_json = json.load(resp) @@ -727,8 +742,12 @@ def project_versions_page(self, project_path, page, per_page=100, descending=Fal def project_versions_count(self, project_path): """ return the total count of versions + To note we fetch only one page and one item as we only need the "count" response + + :param project_path_or_id: Project's full name (/) or id + :type project_path_or_id: String - To note the requested informations are kept to the minimal + :rtype: Int """ params = {"page": 1, "per_page": 1, "descending": False} resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params) @@ -741,11 +760,11 @@ def project_versions_in_range(self, project_path, since=None, to=None): If neither 'since' nor 'to' is specified it will return all versions. :param project_path: Project's full name (/) - :type project_path: String | Int + :type project_path: String :param since: Version to track project history from :type since: String | Int :param to: Version to track project history to - :type to: String + :type to: String | Int :rtype: List[Dict] """ From f0bd794fe997c669266e8f93272c93f8bc74b8c8 Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Fri, 29 Nov 2024 15:38:06 +0100 Subject: [PATCH 10/14] * Revert back function name * Simplify project_versions parameter --- mergin/client.py | 7 ++----- mergin/report.py | 2 +- mergin/test/test_client.py | 8 ++++---- 3 files changed, 7 insertions(+), 10 deletions(-) diff --git a/mergin/client.py b/mergin/client.py index be0780d2..d945a4a1 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -754,7 +754,7 @@ def project_versions_count(self, project_path): resp_json = json.load(resp) return resp_json["count"] - def project_versions_in_range(self, project_path, since=None, to=None): + def project_versions(self, project_path, since=1, to=None): """ Get records of project's versions (history) in ascending order. If neither 'since' nor 'to' is specified it will return all versions. @@ -773,8 +773,6 @@ def project_versions_in_range(self, project_path, since=None, to=None): if type(since) == str: num_since = int_version(since) - elif since == None: - num_since = 1 else: # keep the since parameter as is num_since = since @@ -792,8 +790,7 @@ def project_versions_in_range(self, project_path, since=None, to=None): num_to = self.project_versions_count(project_path) latest_version = int_version(versions[-1]["name"]) if latest_version < num_to: - # add yield here - versions += self.project_versions_in_range(project_path, f"v{latest_version+1}", f"v{num_to}") + versions += self.project_versions(project_path, f"v{latest_version+1}", f"v{num_to}") else: end_page = math.ceil(num_to / per_page) for page in range(start_page, end_page + 1): diff --git a/mergin/report.py b/mergin/report.py index e5ee018e..5b9cae43 100644 --- a/mergin/report.py +++ b/mergin/report.py @@ -216,7 +216,7 @@ def create_report(mc, directory, since, to, out_file): mp = MerginProject(directory) project = mp.project_full_name() mp.log.info(f"--- Creating changesets report for {project} from {since} to {to if to else 'latest'} versions ----") - versions = mc.project_versions_in_range(project, since, to if to else None) + versions = mc.project_versions(project, since, to if to else None) versions_map = {v["name"]: v for v in versions} headers = ["file", "table", "author", "date", "time", "version", "operation", "length", "area", "count"] records = [] diff --git a/mergin/test/test_client.py b/mergin/test/test_client.py index 8f2c3f28..656ccf4b 100644 --- a/mergin/test/test_client.py +++ b/mergin/test/test_client.py @@ -1989,23 +1989,23 @@ def test_project_versions_list(mc): assert project_info["version"] == "v5" # get all versions - versions = mc.project_versions_in_range(project) + versions = mc.project_versions(project) assert len(versions) == 5 assert versions[0]["name"] == "v1" assert versions[-1]["name"] == "v5" # get first 3 versions - versions = mc.project_versions_in_range(project, to="v3") + versions = mc.project_versions(project, to="v3") assert len(versions) == 3 assert versions[-1]["name"] == "v3" # get last 2 versions - versions = mc.project_versions_in_range(project, since="v4") + versions = mc.project_versions(project, since="v4") assert len(versions) == 2 assert versions[0]["name"] == "v4" # get range v2-v4 - versions = mc.project_versions_in_range(project, since="v2", to="v4") + versions = mc.project_versions(project, since="v2", to="v4") assert len(versions) == 3 assert versions[0]["name"] == "v2" assert versions[-1]["name"] == "v4" From e1c0b2bfd6b87048c9a934955cb00839fea3a6de Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Fri, 29 Nov 2024 15:47:31 +0100 Subject: [PATCH 11/14] Format --- mergin/test/test_client.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mergin/test/test_client.py b/mergin/test/test_client.py index 656ccf4b..4ffea182 100644 --- a/mergin/test/test_client.py +++ b/mergin/test/test_client.py @@ -2010,8 +2010,6 @@ def test_project_versions_list(mc): assert versions[0]["name"] == "v2" assert versions[-1]["name"] == "v4" - - versions_count = mc.project_versions_count(project) assert versions_count == 5 @@ -2019,6 +2017,8 @@ def test_project_versions_list(mc): assert len(versions) == 5 assert versions[0]["name"] == "v5" assert versions[-1]["name"] == "v1" + + def test_report(mc): test_project = "test_report" project = API_USER + "/" + test_project From 32a85142d650fb0d151cf7434e579d1d703e4271 Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Mon, 2 Dec 2024 15:14:14 +0100 Subject: [PATCH 12/14] Return the total count in project_versions_page as well --- mergin/client.py | 11 ++++++----- mergin/test/test_client.py | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/mergin/client.py b/mergin/client.py index d945a4a1..56918f3a 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -732,12 +732,12 @@ def project_versions_page(self, project_path, page, per_page=100, descending=Fal :param descending: order of sorting :type descending: Bool - :rtype: List[Dict] + :rtype: List[Dict], Int """ params = {"page": page, "per_page": per_page, "descending": descending} resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params) resp_json = json.load(resp) - return resp_json["versions"] + return resp_json["versions"], resp_json["count"] def project_versions_count(self, project_path): """ @@ -786,15 +786,16 @@ def project_versions(self, project_path, since=1, to=None): start_page = math.ceil(num_since / per_page) if not num_to: # let's get first page and count - versions = self.project_versions_page(project_path, start_page, per_page) - num_to = self.project_versions_count(project_path) + versions, num_to = self.project_versions_page(project_path, start_page, per_page) + latest_version = int_version(versions[-1]["name"]) if latest_version < num_to: versions += self.project_versions(project_path, f"v{latest_version+1}", f"v{num_to}") else: end_page = math.ceil(num_to / per_page) for page in range(start_page, end_page + 1): - versions += self.project_versions_page(project_path, page, per_page) + page_versions, _ = self.project_versions_page(project_path, page, per_page) + versions += page_versions # filter out versions not within range filtered_versions = list(filter(lambda v: (num_since <= int_version(v["name"]) <= num_to), versions)) diff --git a/mergin/test/test_client.py b/mergin/test/test_client.py index cfb5427f..1e8ee1e1 100644 --- a/mergin/test/test_client.py +++ b/mergin/test/test_client.py @@ -2016,7 +2016,7 @@ def test_project_versions_list(mc): versions_count = mc.project_versions_count(project) assert versions_count == 5 - versions = mc.project_versions_page(project, page=1, descending=True) + versions, _ = mc.project_versions_page(project, page=1, descending=True) assert len(versions) == 5 assert versions[0]["name"] == "v5" assert versions[-1]["name"] == "v1" From f018a506f23ff8ac1a56677cbff30ac76c18d08a Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Tue, 3 Dec 2024 10:59:39 +0100 Subject: [PATCH 13/14] Adressed last comments --- mergin/client.py | 10 +++++----- mergin/test/test_client.py | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/mergin/client.py b/mergin/client.py index 56918f3a..11558d4a 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -383,8 +383,8 @@ def workspace_usage(self, workspace_id): try: response = self.get(f"/v1/workspace/{workspace_id}/usage") except ClientError as e: - self.log.debug(f"Unable to query for /workspace/{workspace_id}/usage endpoint") - return + e.extra = f"Unable to query for /workspace/{workspace_id}/usage endpoint" + raise e response = json.loads(response.read()) @@ -718,7 +718,7 @@ def project_info(self, project_path_or_id, since=None, version=None): resp = self.get("/v1/project/{}".format(project_path_or_id), params) return json.load(resp) - def project_versions_page(self, project_path, page, per_page=100, descending=False): + def paginated_project_versions(self, project_path, page, per_page=100, descending=False): """ Get records of project's versions (history) using calculated pagination. wrapper around the /v1/project/versions/paginated/{} API end point @@ -786,7 +786,7 @@ def project_versions(self, project_path, since=1, to=None): start_page = math.ceil(num_since / per_page) if not num_to: # let's get first page and count - versions, num_to = self.project_versions_page(project_path, start_page, per_page) + versions, num_to = self.paginated_project_versions(project_path, start_page, per_page) latest_version = int_version(versions[-1]["name"]) if latest_version < num_to: @@ -794,7 +794,7 @@ def project_versions(self, project_path, since=1, to=None): else: end_page = math.ceil(num_to / per_page) for page in range(start_page, end_page + 1): - page_versions, _ = self.project_versions_page(project_path, page, per_page) + page_versions, _ = self.paginated_project_versions(project_path, page, per_page) versions += page_versions # filter out versions not within range diff --git a/mergin/test/test_client.py b/mergin/test/test_client.py index 1e8ee1e1..5ae3f3be 100644 --- a/mergin/test/test_client.py +++ b/mergin/test/test_client.py @@ -2016,7 +2016,7 @@ def test_project_versions_list(mc): versions_count = mc.project_versions_count(project) assert versions_count == 5 - versions, _ = mc.project_versions_page(project, page=1, descending=True) + versions, _ = mc.paginated_project_versions(project, page=1, descending=True) assert len(versions) == 5 assert versions[0]["name"] == "v5" assert versions[-1]["name"] == "v1" From dcbeb2293bfc1c6262ff8235777bfe1031d28a9c Mon Sep 17 00:00:00 2001 From: Valentin Buira Date: Tue, 3 Dec 2024 15:09:30 +0100 Subject: [PATCH 14/14] ClientError already handled by self.get --- mergin/client.py | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/mergin/client.py b/mergin/client.py index 11558d4a..8c1750c7 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -380,15 +380,8 @@ def workspace_usage(self, workspace_id): Returns response from server as JSON dict or None if endpoint is not found """ - try: - response = self.get(f"/v1/workspace/{workspace_id}/usage") - except ClientError as e: - e.extra = f"Unable to query for /workspace/{workspace_id}/usage endpoint" - raise e - - response = json.loads(response.read()) - - return response + resp = self.get(f"/v1/workspace/{workspace_id}/usage") + return json.load(resp) def server_type(self): """