Skip to content

Commit b3f977e

Browse files
authored
Merge pull request #323 from MerginMaps/feat/refresh-project-role
Refresh user's project role in metadata on project status
2 parents 56043ca + bb6d8f6 commit b3f977e

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
@@ -1167,6 +1167,8 @@ def project_status(self, directory):
11671167
mp = MerginProject(directory)
11681168
server_info = self.project_info(mp.project_full_name(), since=mp.version())
11691169

1170+
mp.update_project_role(server_info["role"])
1171+
11701172
pull_changes = mp.get_pull_changes(server_info.get("files", []), server_info.get("version"))
11711173
# on a sparse checkout, don't report excluded files as pending server changes -
11721174
# they were never meant to be pulled in the first place

mergin/merginproject.py

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

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

mergin/test/test_mergin_project.py

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

0 commit comments

Comments
 (0)