Skip to content

Commit 383eb31

Browse files
committed
* Added project_versions_page
* Added project_versions_count * Renamed project_versions into project_versions_in_range
1 parent 45698cf commit 383eb31

3 files changed

Lines changed: 28 additions & 15 deletions

File tree

mergin/client.py

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -711,7 +711,25 @@ def project_info(self, project_path_or_id, since=None, version=None):
711711
resp = self.get("/v1/project/{}".format(project_path_or_id), params)
712712
return json.load(resp)
713713

714-
def project_versions(self, project_path, since=None, to=None):
714+
715+
def project_versions_page(self, project_path, page, per_page=100, descending=False):
716+
params = {"page": page, "per_page": per_page, "descending": descending}
717+
resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params)
718+
resp_json = json.load(resp)
719+
return resp_json["versions"]
720+
721+
def project_versions_count(self, project_path):
722+
"""
723+
return the total count of versions
724+
725+
To note the requested informations are kept to the minimal
726+
"""
727+
params = {"page": 1, "per_page": 1, "descending": False}
728+
resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params)
729+
resp_json = json.load(resp)
730+
return resp_json["count"]
731+
732+
def project_versions_in_range(self, project_path, since=None, to=None):
715733
"""
716734
Get records of project's versions (history) in ascending order.
717735
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):
745763
start_page = math.ceil(num_since / per_page)
746764
if not num_to:
747765
# let's get first page and count
748-
params = {"page": start_page, "per_page": per_page, "descending": False}
749-
resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params)
750-
resp_json = json.load(resp)
751-
versions = resp_json["versions"]
752-
num_to = resp_json["count"]
766+
versions = self.project_versions_page(project_path, start_page, per_page)
767+
num_to = self.project_versions_count(project_path)
753768
latest_version = int_version(versions[-1]["name"])
754769
if latest_version < num_to:
755770
#add yield here
756-
versions += self.project_versions(project_path, f"v{latest_version+1}", f"v{num_to}")
771+
versions += self.project_versions_in_range(project_path, f"v{latest_version+1}", f"v{num_to}")
757772
else:
758773
end_page = math.ceil(num_to / per_page)
759774
for page in range(start_page, end_page + 1):
760-
params = {"page": page, "per_page": per_page, "descending": False}
761-
resp = self.get("/v1/project/versions/paginated/{}".format(project_path), params)
762-
versions += json.load(resp)["versions"]
775+
versions += self.project_versions_page(project_path, page, per_page)
763776

764777
# filter out versions not within range
765778
filtered_versions = list(filter(lambda v: (num_since <= int_version(v["name"]) <= num_to), versions))

mergin/report.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ def create_report(mc, directory, since, to, out_file):
216216
mp = MerginProject(directory)
217217
project = mp.project_full_name()
218218
mp.log.info(f"--- Creating changesets report for {project} from {since} to {to if to else 'latest'} versions ----")
219-
versions = mc.project_versions(project, since, to if to else None)
219+
versions = mc.project_versions_in_range(project, since, to if to else None)
220220
versions_map = {v["name"]: v for v in versions}
221221
headers = ["file", "table", "author", "date", "time", "version", "operation", "length", "area", "count"]
222222
records = []

mergin/test/test_client.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1956,23 +1956,23 @@ def test_project_versions_list(mc):
19561956
assert project_info["version"] == "v5"
19571957

19581958
# get all versions
1959-
versions = mc.project_versions(project)
1959+
versions = mc.project_versions_in_range(project)
19601960
assert len(versions) == 5
19611961
assert versions[0]["name"] == "v1"
19621962
assert versions[-1]["name"] == "v5"
19631963

19641964
# get first 3 versions
1965-
versions = mc.project_versions(project, to="v3")
1965+
versions = mc.project_versions_in_range(project, to="v3")
19661966
assert len(versions) == 3
19671967
assert versions[-1]["name"] == "v3"
19681968

19691969
# get last 2 versions
1970-
versions = mc.project_versions(project, since="v4")
1970+
versions = mc.project_versions_in_range(project, since="v4")
19711971
assert len(versions) == 2
19721972
assert versions[0]["name"] == "v4"
19731973

19741974
# get range v2-v4
1975-
versions = mc.project_versions(project, since="v2", to="v4")
1975+
versions = mc.project_versions_in_range(project, since="v2", to="v4")
19761976
assert len(versions) == 3
19771977
assert versions[0]["name"] == "v2"
19781978
assert versions[-1]["name"] == "v4"

0 commit comments

Comments
 (0)