Skip to content

Commit 7f8d27e

Browse files
committed
save full project information to .mergin/mergin.json file (fix #83)
1 parent 5610a91 commit 7f8d27e

File tree

4 files changed

+20
-38
lines changed

4 files changed

+20
-38
lines changed

mergin/client.py

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -519,15 +519,7 @@ def create_project_and_push(self, project_name, directory, is_public=False, name
519519
self.create_project(project_name, is_public)
520520
if directory:
521521
project_info = self.project_info(project_name)
522-
MerginProject.write_metadata(
523-
directory,
524-
{
525-
"name": project_name,
526-
"version": "v0",
527-
"files": [],
528-
"project_id": project_info["id"],
529-
},
530-
)
522+
MerginProject.write_metadata(directory, project_info)
531523
mp = MerginProject(directory)
532524
if mp.inspect_files():
533525
self.push_project(directory)

mergin/client_pull.py

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -215,15 +215,7 @@ def download_project_finalize(job):
215215
task.apply(job.directory, job.mp)
216216

217217
# final update of project metadata
218-
# TODO: why not exact copy of project info JSON ?
219-
job.mp.update_metadata(
220-
{
221-
"name": job.project_path,
222-
"version": job.version,
223-
"project_id": job.project_info["id"],
224-
"files": job.project_info["files"],
225-
}
226-
)
218+
job.mp.update_metadata(job.project_info)
227219

228220

229221
def download_project_cancel(job):
@@ -613,14 +605,7 @@ def pull_project_finalize(job):
613605
job.mp.log.info("--- pull aborted")
614606
raise ClientError("Failed to apply pull changes: " + str(e))
615607

616-
job.mp.update_metadata(
617-
{
618-
"name": job.project_path,
619-
"version": job.version if job.version else "v0", # for new projects server version is ""
620-
"project_id": job.project_info["id"],
621-
"files": job.project_info["files"],
622-
}
623-
)
608+
job.mp.update_metadata(job.project_info)
624609

625610
if job.mp.has_unfinished_pull():
626611
job.mp.log.info("--- failed to complete pull -- project left in the unfinished pull state")

mergin/client_push.py

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,7 @@ def push_project_finalize(job):
272272
job.mp.log.info("cancel response: " + str(err2))
273273
raise err
274274

275-
job.mp.update_metadata(
276-
{
277-
"name": job.project_path,
278-
"version": job.server_resp["version"],
279-
"project_id": job.server_resp["id"],
280-
"files": job.server_resp["files"],
281-
}
282-
)
275+
job.mp.update_metadata(job.server_resp)
283276
try:
284277
job.mp.apply_push_changes(job.changes)
285278
except Exception as e:

mergin/merginproject.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -139,7 +139,11 @@ def project_full_name(self) -> str:
139139
"""Returns fully qualified project name: <workspace>/<name>"""
140140
if self._metadata is None:
141141
self._read_metadata()
142-
return self._metadata["name"]
142+
return (
143+
self._metadata["name"]
144+
if "/" in self._metadata["name"]
145+
else f"{self._metadata['namespace']}/{self._metadata['name']}"
146+
)
143147

144148
def project_name(self) -> str:
145149
"""Returns only project name, without its workspace name"""
@@ -154,10 +158,18 @@ def workspace_name(self) -> str:
154158
return full_name[:slash_index]
155159

156160
def project_id(self) -> str:
157-
"""Returns ID of the project (UUID using 8-4-4-4-12 formatting without braces)"""
161+
"""Returns ID of the project (UUID using 8-4-4-4-12 formatting without braces)
162+
163+
Raises ClientError if project id is not present in the project metadata.
164+
"""
158165
if self._metadata is None:
159166
self._read_metadata()
160-
return self._metadata["project_id"]
167+
168+
# "id" or "project_id" may not exist in projects downloaded with old client version
169+
if "id" not in self._metadata and "project_id" not in self._metadata:
170+
raise ClientError("Missed project id metadata. Please re-download your project.")
171+
172+
return self._metadata["project_id"] if "/" in self._metadata["name"] else self._metadata["id"]
161173

162174
def workspace_id(self) -> int:
163175
"""Returns ID of the workspace where the project belongs"""
@@ -169,7 +181,7 @@ def version(self) -> str:
169181
"""Returns project version (e.g. "v123")"""
170182
if self._metadata is None:
171183
self._read_metadata()
172-
return self._metadata["version"]
184+
return self._metadata["version"] if self._metadata["version"] else "v0"
173185

174186
def files(self) -> list:
175187
"""Returns project's list of files (each file being a dictionary)"""

0 commit comments

Comments
 (0)