diff --git a/mergin/client.py b/mergin/client.py index aee55a2c..7d3cc3c9 100644 --- a/mergin/client.py +++ b/mergin/client.py @@ -646,17 +646,6 @@ def download_project(self, project_path, directory, version=None): download_project_wait(job) download_project_finalize(job) - def enough_storage_available(self, data): - info = self.user_info() - free_space = int(info["storage_limit"]) - int(info["disk_usage"]) - upload_files_sizes = [f["size"] for f in data["updated"] + data["added"]] - size_to_upload = sum(upload_files_sizes) - - if size_to_upload > free_space: - return False, free_space - - return True, free_space - def user_info(self): server_type = self.server_type() if server_type == ServerType.OLD: diff --git a/mergin/client_push.py b/mergin/client_push.py index b19e5ca4..4c9fe332 100644 --- a/mergin/client_push.py +++ b/mergin/client_push.py @@ -133,14 +133,6 @@ def push_project_async(mc, directory): if mp.is_versioned_file(f["path"]): mp.copy_versioned_file_for_upload(f, tmp_dir.name) - # currently proceed storage limit check only if a project is own by a current user. - if username == project_path.split("/")[0]: - enough_free_space, freespace = mc.enough_storage_available(changes) - if not enough_free_space: - freespace = int(freespace / (1024 * 1024)) - mp.log.error(f"--- push {project_path} - not enough space") - raise ClientError("Storage limit has been reached. Only " + str(freespace) + "MB left") - if not sum(len(v) for v in changes.values()): mp.log.info(f"--- push {project_path} - nothing to do") return diff --git a/mergin/test/test_client.py b/mergin/test/test_client.py index 84676c9f..ce3d0b43 100644 --- a/mergin/test/test_client.py +++ b/mergin/test/test_client.py @@ -10,7 +10,7 @@ import sqlite3 from .. import InvalidProject -from ..client import MerginClient, ClientError, MerginProject, LoginError, decode_token_data, TokenError +from ..client import MerginClient, ClientError, MerginProject, LoginError, decode_token_data, TokenError, ServerType from ..client_push import push_project_async, push_project_cancel from ..utils import ( generate_checksum, @@ -586,9 +586,17 @@ def test_available_storage_validation(mc): # download project mc.download_project(test_project_fullname, project_dir) - # get user_info about storage capacity - user_info = mc.user_info() - storage_remaining = user_info["storage"] - user_info["disk_usage"] + # get info about storage capacity + storage_remaining = 0 + + if mc.server_type() == ServerType.OLD: + user_info = mc.user_info() + storage_remaining = user_info["storage"] - user_info["disk_usage"] + else: + for workspace in mc.workspaces_list(): + if workspace["name"] == API_USER: + storage_remaining = workspace["storage"] - workspace["disk_usage"] + break # generate dummy data (remaining storage + extra 1024b) dummy_data_path = project_dir + "/data" @@ -600,8 +608,8 @@ def test_available_storage_validation(mc): try: mc.push_project(project_dir) except ClientError as e: - # Expecting "Storage limit has been reached" error msg. - assert str(e).startswith("Storage limit has been reached") + # Expecting "You have reached a data limit" 400 server error msg. + assert str(e) == "You have reached a data limit" got_right_err = True assert got_right_err @@ -610,6 +618,9 @@ def test_available_storage_validation(mc): assert project_info["version"] == "v0" assert project_info["disk_usage"] == 0 + # remove dummy big file from a disk + remove_folders([project_dir]) + def test_available_storage_validation2(mc, mc2): """ @@ -643,9 +654,14 @@ def test_available_storage_validation2(mc, mc2): # download project mc.download_project(test_project_fullname, project_dir) - # get user_info about storage capacity - user_info = mc.user_info() - storage_remaining = user_info["storage"] - user_info["disk_usage"] + # get info about storage capacity + storage_remaining = 0 + if mc.server_type() == ServerType.OLD: + user_info = mc.user_info() + storage_remaining = user_info["storage"] - user_info["disk_usage"] + else: + # This test does not make sense in newer servers as quotas are tied to workspaces, not users + return # generate dummy data (remaining storage + extra 1024b) dummy_data_path = project_dir + "/data"