Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions mergin/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -1157,6 +1157,8 @@ def project_status(self, directory):
mp = MerginProject(directory)
server_info = self.project_info(mp.project_full_name(), since=mp.version())

mp.update_project_role(server_info["role"])

pull_changes = mp.get_pull_changes(server_info.get("files", []), server_info.get("version"))

push_changes = mp.get_push_changes()
Expand Down
6 changes: 6 additions & 0 deletions mergin/merginproject.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,12 @@ def project_role(self) -> str:
self._read_metadata()
return self._metadata.get("role")

def update_project_role(self, role: str) -> None:
"""Stores the user's current role on the project."""
self._read_metadata()
self._metadata["role"] = role
MerginProject.write_metadata(self.dir, self._metadata)

def project_id(self) -> str:
"""Returns ID of the project (UUID using 8-4-4-4-12 formatting without braces)

Expand Down
25 changes: 25 additions & 0 deletions mergin/test/test_mergin_project.py
Original file line number Diff line number Diff line change
Expand Up @@ -471,3 +471,28 @@ def test_tables_to_skip_and_include_mutually_exclusive():
mp.set_tables_to_skip(["table_a"])
with pytest.raises(GeoDiffLibError):
mp.set_tables_to_include(["table_b"])


def test_update_project_role():
with tempfile.TemporaryDirectory() as tmp_dir:
project_dir = os.path.join(tmp_dir, "test_update_project_role")
shutil.copytree(TEST_DATA_DIR, project_dir)

os.makedirs(os.path.join(project_dir, ".mergin"), exist_ok=True)
with open(os.path.join(project_dir, "v2_metadata.json"), "r") as f:
metadata = json.load(f)
project_metadata_file = os.path.join(project_dir, ".mergin", "mergin.json")
with open(project_metadata_file, "w") as f:
json.dump(metadata, f, indent=2)

mp = MerginProject(project_dir)
assert mp.project_role() == "owner"

mp.update_project_role("reader")
assert mp.project_role() == "reader"
# the rest of the metadata has to survive, otherwise the local sync state would be lost
assert mp.version() == metadata.get("version")
assert mp.files() == metadata.get("files")

# the new role is on disk, not just in the in-memory cache
assert MerginProject(project_dir).project_role() == "reader"
Loading