Skip to content

Commit bb6d8f6

Browse files
committed
Refresh user's project role in metadata on project status
1 parent de6f50c commit bb6d8f6

3 files changed

Lines changed: 33 additions & 0 deletions

File tree

mergin/client.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1157,6 +1157,8 @@ def project_status(self, directory):
11571157
mp = MerginProject(directory)
11581158
server_info = self.project_info(mp.project_full_name(), since=mp.version())
11591159

1160+
mp.update_project_role(server_info["role"])
1161+
11601162
pull_changes = mp.get_pull_changes(server_info.get("files", []), server_info.get("version"))
11611163

11621164
push_changes = mp.get_push_changes()

mergin/merginproject.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,12 @@ def project_role(self) -> str:
167167
self._read_metadata()
168168
return self._metadata.get("role")
169169

170+
def update_project_role(self, role: str) -> None:
171+
"""Stores the user's current role on the project."""
172+
self._read_metadata()
173+
self._metadata["role"] = role
174+
MerginProject.write_metadata(self.dir, self._metadata)
175+
170176
def project_id(self) -> str:
171177
"""Returns ID of the project (UUID using 8-4-4-4-12 formatting without braces)
172178

mergin/test/test_mergin_project.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -471,3 +471,28 @@ def test_tables_to_skip_and_include_mutually_exclusive():
471471
mp.set_tables_to_skip(["table_a"])
472472
with pytest.raises(GeoDiffLibError):
473473
mp.set_tables_to_include(["table_b"])
474+
475+
476+
def test_update_project_role():
477+
with tempfile.TemporaryDirectory() as tmp_dir:
478+
project_dir = os.path.join(tmp_dir, "test_update_project_role")
479+
shutil.copytree(TEST_DATA_DIR, project_dir)
480+
481+
os.makedirs(os.path.join(project_dir, ".mergin"), exist_ok=True)
482+
with open(os.path.join(project_dir, "v2_metadata.json"), "r") as f:
483+
metadata = json.load(f)
484+
project_metadata_file = os.path.join(project_dir, ".mergin", "mergin.json")
485+
with open(project_metadata_file, "w") as f:
486+
json.dump(metadata, f, indent=2)
487+
488+
mp = MerginProject(project_dir)
489+
assert mp.project_role() == "owner"
490+
491+
mp.update_project_role("reader")
492+
assert mp.project_role() == "reader"
493+
# the rest of the metadata has to survive, otherwise the local sync state would be lost
494+
assert mp.version() == metadata.get("version")
495+
assert mp.files() == metadata.get("files")
496+
497+
# the new role is on disk, not just in the in-memory cache
498+
assert MerginProject(project_dir).project_role() == "reader"

0 commit comments

Comments
 (0)