Skip to content

Commit d316615

Browse files
committed
Updated:
- CLI: update show version command to call project_version_info object - CLIENT: upgrade project_version_info api call to use get byt version name endpoint instead of paginated version - TEST: don't use paginated endpoint in tests - TEST: make tests runnable with other username, than test_plugin Minor: - add year to copyright :)
1 parent 870b5b6 commit d316615

File tree

3 files changed

+31
-30
lines changed

3 files changed

+31
-30
lines changed

mergin/cli.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
pip puts these tools).
88
"""
99

10-
from datetime import datetime, timezone
10+
from datetime import datetime, timezone, date
1111
import click
1212
import json
1313
import os
@@ -143,7 +143,7 @@ def _print_unhandled_exception():
143143

144144

145145
@click.group(
146-
epilog=f"Copyright (C) 2019-2021 Lutra Consulting\n\n(mergin-py-client v{__version__} / pygeodiff v{GeoDiff().version()})"
146+
epilog=f"Copyright (C) 2019-{date.today().year} Lutra Consulting\n\n(mergin-py-client v{__version__} / pygeodiff v{GeoDiff().version()})"
147147
)
148148
@click.option(
149149
"--url",
@@ -481,9 +481,9 @@ def show_version(ctx, version):
481481
return
482482
directory = os.getcwd()
483483
mp = MerginProject(directory)
484-
project_path = mp.project_full_name()
484+
project_id = mp.project_id()
485485
# TODO: handle exception when version not found
486-
version_info_dict = mc.project_version_info(project_path, version)[0]
486+
version_info_dict = mc.project_version_info(project_id, version)
487487
click.secho("Project: " + version_info_dict["namespace"] + "/" + version_info_dict["project_name"])
488488
click.secho("Version: " + version_info_dict["name"] + " by " + version_info_dict["author"])
489489
click.secho("Time: " + version_info_dict["created"])

mergin/client.py

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -984,13 +984,10 @@ def project_status(self, directory):
984984

985985
return pull_changes, push_changes, push_changes_summary
986986

987-
def project_version_info(self, project_path, version):
987+
def project_version_info(self, project_id, version):
988988
"""Returns JSON with detailed information about a single project version"""
989-
params = {"version_id": version}
990-
params = {"page": version, "per_page": 1, "descending": False}
991-
resp = self.get(f"/v1/project/versions/paginated/{project_path}", params)
992-
j = json.load(resp)
993-
return j["versions"]
989+
resp = self.get(f"/v1/project/version/{project_id}/{version}")
990+
return json.load(resp)
994991

995992
def project_file_history_info(self, project_path, file_path):
996993
"""Returns JSON with full history of a single file within a project"""

mergin/test/test_client.py

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -225,10 +225,9 @@ def test_create_remote_project_from_local(mc):
225225
assert project_info["namespace"] == API_USER
226226
assert project_info["id"] == source_mp.project_id()
227227

228-
versions = mc.project_versions(project)
229-
assert len(versions) == 1
230-
assert versions[0]["name"] == "v1"
231-
assert any(f for f in versions[0]["changes"]["added"] if f["path"] == "test.qgs")
228+
version = mc.project_version_info(project_info.get("id"), "v1")
229+
assert version["name"] == "v1"
230+
assert any(f for f in version["changes"]["added"] if f["path"] == "test.qgs")
232231

233232
# check we can fully download remote project
234233
mc.download_project(project, download_dir)
@@ -306,13 +305,9 @@ def test_push_pull_changes(mc):
306305
assert generate_checksum(os.path.join(project_dir, f_updated)) == f_remote_checksum
307306
assert project_info["id"] == mp.project_id()
308307
assert len(project_info["files"]) == len(mp.inspect_files())
309-
project_versions = mc.project_versions(project)
310-
assert len(project_versions) == 2
311-
f_change = next(
312-
(f for f in project_versions[-1]["changes"]["updated"] if f["path"] == f_updated),
313-
None,
314-
)
315-
assert "origin_checksum" not in f_change # internal client info
308+
project_version = mc.project_version_info(project_info["id"], "v2")
309+
updated_file = [f for f in project_version["changes"]["updated"] if f["path"] == f_updated][0]
310+
assert "origin_checksum" not in updated_file # internal client info
316311

317312
# test parallel changes
318313
with open(os.path.join(project_dir_2, f_updated), "w") as f:
@@ -2019,7 +2014,7 @@ def test_report(mc):
20192014
]
20202015
)
20212016
assert headers in content
2022-
assert "base.gpkg,simple,test_plugin" in content
2017+
assert f"base.gpkg,simple,{API_USER}" in content
20232018
assert "v3,update,,,2" in content
20242019
# files not edited are not in reports
20252020
assert "inserted_1_A.gpkg" not in content
@@ -2164,7 +2159,7 @@ def test_version_info(mc):
21642159
project = API_USER + "/" + test_project
21652160
project_dir = os.path.join(TMP_DIR, test_project) # primary project dir
21662161
test_gpkg = "test.gpkg"
2167-
file_path = os.path.join(project_dir, "test.gpkg")
2162+
file_path = os.path.join(project_dir, test_gpkg)
21682163

21692164
cleanup(mc, project, [project_dir])
21702165

@@ -2177,8 +2172,8 @@ def test_version_info(mc):
21772172

21782173
shutil.copy(os.path.join(TEST_DATA_DIR, "inserted_1_A_mod.gpkg"), file_path)
21792174
mc.push_project(project_dir)
2180-
2181-
info = mc.project_version_info(project, 2)[0]
2175+
project_info = mc.project_info(project)
2176+
info = mc.project_version_info(project_info.get("id"), "v2")
21822177
assert info["namespace"] == API_USER
21832178
assert info["project_name"] == test_project
21842179
assert info["name"] == "v2"
@@ -2345,9 +2340,14 @@ def test_project_metadata(mc):
23452340

23462341
# copy metadata in old format
23472342
os.makedirs(os.path.join(project_dir, ".mergin"), exist_ok=True)
2348-
project_metadata = os.path.join(project_dir, ".mergin", "mergin.json")
23492343
metadata_file = os.path.join(project_dir, "old_metadata.json")
2350-
shutil.copyfile(metadata_file, project_metadata)
2344+
# rewrite metadata nemespace to prevent failing tests with other user than test_plugin
2345+
with open(metadata_file, 'r') as f:
2346+
metadata = json.load(f)
2347+
metadata['name'] = f"{API_USER}/{test_project}"
2348+
project_metadata_file = os.path.join(project_dir, ".mergin", "mergin.json")
2349+
with open(project_metadata_file, 'w') as f:
2350+
json.dump(metadata, f, indent=2)
23512351

23522352
# verify we have correct metadata
23532353
mp = MerginProject(project_dir)
@@ -2358,7 +2358,12 @@ def test_project_metadata(mc):
23582358

23592359
# copy metadata in new format
23602360
metadata_file = os.path.join(project_dir, "new_metadata.json")
2361-
shutil.copyfile(metadata_file, project_metadata)
2361+
# rewrite metadata nemespace to prevent failing tests with other user than test_plugin
2362+
with open(metadata_file, 'r') as f:
2363+
metadata = json.load(f)
2364+
metadata['namespace'] = API_USER
2365+
with open(project_metadata_file, 'w') as f:
2366+
json.dump(metadata, f, indent=2)
23622367

23632368
# verify we have correct metadata
23642369
mp = MerginProject(project_dir)
@@ -2634,15 +2639,14 @@ def test_editor_push(mc: MerginClient, mc2: MerginClient):
26342639

26352640
def test_error_push_already_named_project(mc: MerginClient):
26362641
test_project = "test_push_already_existing"
2637-
project = API_USER + "/" + test_project
26382642
project_dir = os.path.join(TMP_DIR, test_project)
26392643

26402644
with pytest.raises(ClientError) as e:
26412645
mc.create_project_and_push(test_project, project_dir)
26422646
assert e.value.detail == "Project with the same name already exists"
26432647
assert e.value.http_error == 409
26442648
assert e.value.http_method == "POST"
2645-
assert e.value.url == f"{mc.url}v1/project/test_plugin"
2649+
assert e.value.url == f"{mc.url}v1/project/{API_USER}"
26462650

26472651

26482652
def test_error_projects_limit_hit(mcStorage: MerginClient):

0 commit comments

Comments
 (0)