@@ -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