Skip to content

Commit e428182

Browse files
committed
use _check_token on functions that actually need user to have valid token
1 parent ea81940 commit e428182

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed

mergin/client.py

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -333,6 +333,7 @@ def username(self):
333333
return None # not authenticated
334334
return self._user_info["username"]
335335

336+
@_check_token
336337
def workspace_service(self, workspace_id):
337338
"""
338339
This Requests information about a workspace service from /workspace/{id}/service endpoint,
@@ -343,6 +344,7 @@ def workspace_service(self, workspace_id):
343344
resp = self.get(f"/v1/workspace/{workspace_id}/service")
344345
return json.load(resp)
345346

347+
@_check_token
346348
def workspace_usage(self, workspace_id):
347349
"""
348350
This Requests information about a workspace usage from /workspace/{id}/usage endpoint,
@@ -395,6 +397,7 @@ def server_version(self):
395397

396398
return self._server_version
397399

400+
@_check_token
398401
def workspaces_list(self):
399402
"""
400403
Find all available workspaces
@@ -405,6 +408,7 @@ def workspaces_list(self):
405408
workspaces = json.load(resp)
406409
return workspaces
407410

411+
@_check_token
408412
def create_workspace(self, workspace_name):
409413
"""
410414
Create new workspace for currently active user.
@@ -423,6 +427,7 @@ def create_workspace(self, workspace_name):
423427
e.extra = f"Workspace name: {workspace_name}"
424428
raise e
425429

430+
@_check_token
426431
def create_project(self, project_name, is_public=False, namespace=None):
427432
"""
428433
Create new project repository in user namespace on Mergin Maps server.
@@ -472,6 +477,7 @@ def create_project(self, project_name, is_public=False, namespace=None):
472477
e.extra = f"Namespace: {namespace}, project name: {project_name}"
473478
raise e
474479

480+
@_check_token
475481
def create_project_and_push(self, project_name, directory, is_public=False, namespace=None):
476482
"""
477483
Convenience method to create project and push the initial version right after that.
@@ -517,6 +523,7 @@ def create_project_and_push(self, project_name, directory, is_public=False, name
517523
if mp.inspect_files():
518524
self.push_project(directory)
519525

526+
@_check_token
520527
def paginated_projects_list(
521528
self,
522529
page=1,
@@ -590,6 +597,7 @@ def paginated_projects_list(
590597
projects = json.load(resp)
591598
return projects
592599

600+
@_check_token
593601
def projects_list(
594602
self,
595603
tags=None,
@@ -659,6 +667,7 @@ def projects_list(
659667
break
660668
return projects
661669

670+
@_check_token
662671
def project_info(self, project_path_or_id, since=None, version=None):
663672
"""
664673
Fetch info about project.
@@ -682,6 +691,7 @@ def project_info(self, project_path_or_id, since=None, version=None):
682691
resp = self.get("/v1/project/{}".format(project_path_or_id), params)
683692
return json.load(resp)
684693

694+
@_check_token
685695
def paginated_project_versions(self, project_path, page, per_page=100, descending=False):
686696
"""
687697
Get records of project's versions (history) using calculated pagination.
@@ -703,6 +713,7 @@ def paginated_project_versions(self, project_path, page, per_page=100, descendin
703713
resp_json = json.load(resp)
704714
return resp_json["versions"], resp_json["count"]
705715

716+
@_check_token
706717
def project_versions_count(self, project_path):
707718
"""
708719
return the total count of versions
@@ -718,6 +729,7 @@ def project_versions_count(self, project_path):
718729
resp_json = json.load(resp)
719730
return resp_json["count"]
720731

732+
@_check_token
721733
def project_versions(self, project_path, since=1, to=None):
722734
"""
723735
Get records of project's versions (history) in ascending order.
@@ -765,6 +777,7 @@ def project_versions(self, project_path, since=1, to=None):
765777
filtered_versions = list(filter(lambda v: (num_since <= int_version(v["name"]) <= num_to), versions))
766778
return filtered_versions
767779

780+
@_check_token
768781
def download_project(self, project_path, directory, version=None):
769782
"""
770783
Download project into given directory. If version is not specified, latest version is downloaded
@@ -782,6 +795,7 @@ def download_project(self, project_path, directory, version=None):
782795
download_project_wait(job)
783796
download_project_finalize(job)
784797

798+
@_check_token
785799
def user_info(self):
786800
server_type = self.server_type()
787801
if server_type == ServerType.OLD:
@@ -790,6 +804,7 @@ def user_info(self):
790804
resp = self.get("/v1/user/profile")
791805
return json.load(resp)
792806

807+
@_check_token
793808
def set_project_access(self, project_path, access):
794809
"""
795810
Updates access for given project.
@@ -813,6 +828,7 @@ def set_project_access(self, project_path, access):
813828
e.extra = f"Project path: {project_path}"
814829
raise e
815830

831+
@_check_token
816832
def add_user_permissions_to_project(self, project_path, usernames, permission_level):
817833
"""
818834
Add specified permissions to specified users to project
@@ -846,6 +862,7 @@ def add_user_permissions_to_project(self, project_path, usernames, permission_le
846862
category=DeprecationWarning,
847863
)
848864

865+
@_check_token
849866
def remove_user_permissions_from_project(self, project_path, usernames):
850867
"""
851868
Removes specified users from project
@@ -870,6 +887,7 @@ def remove_user_permissions_from_project(self, project_path, usernames):
870887
category=DeprecationWarning,
871888
)
872889

890+
@_check_token
873891
def project_user_permissions(self, project_path):
874892
"""
875893
Returns permissions for project
@@ -890,6 +908,7 @@ def project_user_permissions(self, project_path):
890908
result["readers"] = access.get("readersnames", [])
891909
return result
892910

911+
@_check_token
893912
def push_project(self, directory):
894913
"""
895914
Upload local changes to the repository.
@@ -903,6 +922,7 @@ def push_project(self, directory):
903922
push_project_wait(job)
904923
push_project_finalize(job)
905924

925+
@_check_token
906926
def pull_project(self, directory):
907927
"""
908928
Fetch and apply changes from repository.
@@ -916,6 +936,7 @@ def pull_project(self, directory):
916936
pull_project_wait(job)
917937
return pull_project_finalize(job)
918938

939+
@_check_token
919940
def clone_project(self, source_project_path, cloned_project_name, cloned_project_namespace=None):
920941
"""
921942
Clone project on server.
@@ -961,6 +982,7 @@ def clone_project(self, source_project_path, cloned_project_name, cloned_project
961982
request = urllib.request.Request(url, data=json.dumps(data).encode(), headers=json_headers, method="POST")
962983
self._do_request(request)
963984

985+
@_check_token
964986
def delete_project_now(self, project_path):
965987
"""
966988
Delete project repository on server immediately.
@@ -984,6 +1006,7 @@ def delete_project_now(self, project_path):
9841006
request = urllib.request.Request(url, method="DELETE")
9851007
self._do_request(request)
9861008

1009+
@_check_token
9871010
def delete_project(self, project_path):
9881011
"""
9891012
Delete project repository on server. Newer servers since 2023
@@ -1008,6 +1031,7 @@ def delete_project(self, project_path):
10081031
request = urllib.request.Request(url, method="DELETE")
10091032
self._do_request(request)
10101033

1034+
@_check_token
10111035
def project_status(self, directory):
10121036
"""
10131037
Get project status, e.g. server and local changes.
@@ -1027,23 +1051,27 @@ def project_status(self, directory):
10271051

10281052
return pull_changes, push_changes, push_changes_summary
10291053

1054+
@_check_token
10301055
def project_version_info(self, project_id, version):
10311056
"""Returns JSON with detailed information about a single project version"""
10321057
resp = self.get(f"/v1/project/version/{project_id}/{version}")
10331058
return json.load(resp)
10341059

1060+
@_check_token
10351061
def project_file_history_info(self, project_path, file_path):
10361062
"""Returns JSON with full history of a single file within a project"""
10371063
params = {"path": file_path}
10381064
resp = self.get("/v1/resource/history/{}".format(project_path), params)
10391065
return json.load(resp)
10401066

1067+
@_check_token
10411068
def project_file_changeset_info(self, project_path, file_path, version):
10421069
"""Returns JSON with changeset details of a particular version of a file within a project"""
10431070
params = {"path": file_path}
10441071
resp = self.get("/v1/resource/changesets/{}/{}".format(project_path, version), params)
10451072
return json.load(resp)
10461073

1074+
@_check_token
10471075
def get_projects_by_names(self, projects):
10481076
"""Returns JSON with projects' info for list of required projects.
10491077
The schema of the returned information is the same as the response from projects_list().
@@ -1058,6 +1086,7 @@ def get_projects_by_names(self, projects):
10581086
resp = self.post("/v1/project/by_names", {"projects": projects}, {"Content-Type": "application/json"})
10591087
return json.load(resp)
10601088

1089+
@_check_token
10611090
def download_file(self, project_dir, file_path, output_filename, version=None):
10621091
"""
10631092
Download project file at specified version. Get the latest if no version specified.
@@ -1111,6 +1140,7 @@ def get_file_diff(self, project_dir, file_path, output_diff, version_from, versi
11111140
elif len(diffs) == 1:
11121141
shutil.copy(diffs[0], output_diff)
11131142

1143+
@_check_token
11141144
def download_file_diffs(self, project_dir, file_path, versions):
11151145
"""Download file diffs for specified versions if they are not present
11161146
in the cache.
@@ -1187,6 +1217,7 @@ def has_writing_permissions(self, project_path):
11871217
info = self.project_info(project_path)
11881218
return info["permissions"]["upload"]
11891219

1220+
@_check_token
11901221
def rename_project(self, project_path: str, new_project_name: str) -> None:
11911222
"""
11921223
Rename project on server.
@@ -1258,6 +1289,7 @@ def reset_local_changes(self, directory: str, files_to_reset: typing.List[str] =
12581289
if files_download:
12591290
self.download_files(directory, files_download, version=current_version)
12601291

1292+
@_check_token
12611293
def download_files(
12621294
self, project_dir: str, file_paths: typing.List[str], output_paths: typing.List[str] = None, version: str = None
12631295
):
@@ -1283,6 +1315,7 @@ def has_editor_support(self):
12831315
"""
12841316
return is_version_acceptable(self.server_version(), "2024.4.0")
12851317

1318+
@_check_token
12861319
def create_user(
12871320
self,
12881321
email: str,
@@ -1314,20 +1347,23 @@ def create_user(
13141347
user_info = self.post("v2/users", params, json_headers)
13151348
return json.load(user_info)
13161349

1350+
@_check_token
13171351
def get_workspace_member(self, workspace_id: int, user_id: int) -> dict:
13181352
"""
13191353
Get a workspace member detail
13201354
"""
13211355
resp = self.get(f"v2/workspaces/{workspace_id}/members/{user_id}")
13221356
return json.load(resp)
13231357

1358+
@_check_token
13241359
def list_workspace_members(self, workspace_id: int) -> List[dict]:
13251360
"""
13261361
Get a list of workspace members
13271362
"""
13281363
resp = self.get(f"v2/workspaces/{workspace_id}/members")
13291364
return json.load(resp)
13301365

1366+
@_check_token
13311367
def update_workspace_member(
13321368
self, workspace_id: int, user_id: int, workspace_role: WorkspaceRole, reset_projects_roles: bool = False
13331369
) -> dict:
@@ -1343,19 +1379,22 @@ def update_workspace_member(
13431379
workspace_member = self.patch(f"v2/workspaces/{workspace_id}/members/{user_id}", params, json_headers)
13441380
return json.load(workspace_member)
13451381

1382+
@_check_token
13461383
def remove_workspace_member(self, workspace_id: int, user_id: int):
13471384
"""
13481385
Remove a user from workspace members
13491386
"""
13501387
self.delete(f"v2/workspaces/{workspace_id}/members/{user_id}")
13511388

1389+
@_check_token
13521390
def list_project_collaborators(self, project_id: str) -> List[dict]:
13531391
"""
13541392
Get a list of project collaborators
13551393
"""
13561394
project_collaborators = self.get(f"v2/projects/{project_id}/collaborators")
13571395
return json.load(project_collaborators)
13581396

1397+
@_check_token
13591398
def add_project_collaborator(self, project_id: str, user: str, project_role: ProjectRole) -> dict:
13601399
"""
13611400
Add a user to project collaborators and grant them a project role.
@@ -1367,6 +1406,7 @@ def add_project_collaborator(self, project_id: str, user: str, project_role: Pro
13671406
project_collaborator = self.post(f"v2/projects/{project_id}/collaborators", params, json_headers)
13681407
return json.load(project_collaborator)
13691408

1409+
@_check_token
13701410
def update_project_collaborator(self, project_id: str, user_id: int, project_role: ProjectRole) -> dict:
13711411
"""
13721412
Update project role of the existing project collaborator.
@@ -1376,6 +1416,7 @@ def update_project_collaborator(self, project_id: str, user_id: int, project_rol
13761416
project_collaborator = self.patch(f"v2/projects/{project_id}/collaborators/{user_id}", params, json_headers)
13771417
return json.load(project_collaborator)
13781418

1419+
@_check_token
13791420
def remove_project_collaborator(self, project_id: str, user_id: int):
13801421
"""
13811422
Remove a user from project collaborators
@@ -1387,6 +1428,7 @@ def server_config(self) -> dict:
13871428
response = self.get("/config")
13881429
return json.load(response)
13891430

1431+
@_check_token
13901432
def send_logs(
13911433
self,
13921434
logfile: str,

0 commit comments

Comments
 (0)