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
11 changes: 0 additions & 11 deletions mergin/client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down
8 changes: 0 additions & 8 deletions mergin/client_push.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
34 changes: 25 additions & 9 deletions mergin/test/test_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down Expand Up @@ -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"
Expand All @@ -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

Expand All @@ -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):
"""
Expand Down Expand Up @@ -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"
Expand Down