modified: stacksync_api_swift/stacksync_api_swift/resources/data_h… · stacksync/swift-API@1998d84 · GitHub
Skip to content

Commit 1998d84

Browse files
committed
modified: stacksync_api_swift/stacksync_api_swift/resources/data_handler.py
modified: stacksync_api_swift/stacksync_api_swift/resources/data_resource.py modified: stacksync_api_swift/stacksync_api_swift/resources/file_resource.py modified: tests/api_test_menu.py
1 parent 0fc49fa commit 1998d84

4 files changed

Lines changed: 110 additions & 43 deletions

File tree

stacksync_api_swift/stacksync_api_swift/resources/data_handler.py

Lines changed: 32 additions & 2 deletions

stacksync_api_swift/stacksync_api_swift/resources/data_resource.py

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,14 +55,25 @@ def PUT(request, api_library, app):
5555

5656
workspace_info = json.loads(workspace_info)
5757
old_chunks = file_metadata['chunks']
58-
app.logger.error("StackSync API: old_chunks: %s", old_chunks)
58+
app.logger.info("StackSync API: old_chunks: %s", old_chunks)
5959
container_name = workspace_info['swift_container']
60+
61+
#Take the quota information
62+
quota_limit = long(workspace_info['quota_limit'])
63+
quota_used = long(workspace_info['quota_used'])
64+
old_file_size = long(file_metadata['size'])
65+
66+
#check if the new file exced the quota limit
67+
quota_used = quota_used - size
68+
quota_used_after_put = quota_used + long(len(content))
69+
if (quota_used_after_put > quota_limit):
70+
return create_error_response(413, "Upload exceeds quota.")
71+
6072
chunked_file = BuildFile(content, [])
6173
chunked_file.separate(file_id)
62-
print 'new chunks', chunked_file.chunk_dict.keys()
6374
chunks_diff_remove = list(set(old_chunks) - set(chunked_file.chunk_dict.keys()))
6475
data_handler = DataHandler(app)
65-
76+
6677
#delete old chunks
6778
response = data_handler.remove_old_chunks(request.environ, chunks_diff_remove, container_name)
6879
if not is_valid_status(response.status_int):
@@ -72,12 +83,12 @@ def PUT(request, api_library, app):
7283
return create_error_response(500, "Could not upload chunks to storage backend.")
7384
#upload new chunks
7485
chunks_diff_add = list(set(chunked_file.chunk_dict.keys())-set(old_chunks))
75-
chunks_no_diff = list(set(chunked_file.chunk_dict.keys())-set(chunks_diff_add))
76-
86+
chunks_no_diff = list(set(chunked_file.chunk_dict.keys())-set(chunks_diff_add))
87+
7788
for key in chunks_no_diff:
7889
del chunked_file.chunk_dict[key]
7990
response = data_handler.upload_file_chunks(request.environ, chunked_file, container_name)
80-
91+
8192
if not is_valid_status(response.status_int):
8293
app.logger.error("StackSync API: data_resource PUT: error uploading file chunks: %s path info: %s",
8394
str(response.status),
@@ -166,9 +177,3 @@ def GET(request, api_library, app):
166177
app.logger.error("StackSync API: data_resource GET: Cannot retrieve chunks. File_id: %s. Status: %s",
167178
str(file_id), str(status))
168179
return create_error_response(status, "Cannot retrieve chunks from storage backend.")
169-
170-
171-
172-
173-
174-

stacksync_api_swift/stacksync_api_swift/resources/file_resource.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,15 @@ def POST(request, api_library, app):
5959

6060
workspace_info = json.loads(workspace_info)
6161
container_name = workspace_info['swift_container']
62+
#Take the quota information
63+
quota_used = long(workspace_info['quota_used'])
64+
quota_limit = long(workspace_info['quota_limit'])
65+
66+
#check if the new file exced the quota limit
67+
quota_used_after_put = long(quota_used) + long(len(content))
68+
if (quota_used_after_put > quota_limit):
69+
return create_error_response(413, "Upload exceeds quota.")
70+
6271
chunked_file = BuildFile(content, [])
6372
chunked_file.separate()
6473

@@ -111,7 +120,7 @@ def DELETE(request, api_library, app):
111120
app.logger.error("StackSync API: file_resource DELETE: Wrong resource path: %s path_info: %s", str(400),
112121
str(request.path_info))
113122
return create_error_response(400, "Wrong resource path. Expected /file/:file_id")
114-
123+
115124
app.logger.info('StackSync API: file_resource DELETE: path info: %s', request.path_info)
116125
user_id = request.environ["stacksync_user_id"]
117126

@@ -131,7 +140,7 @@ def DELETE(request, api_library, app):
131140
return response
132141

133142
workspace_info = json.loads(workspace_info)
134-
data_handler = DataHandler(app)
143+
data_handler = DataHandler(app)
135144
file_metadata = json.loads(message)
136145
container_name = workspace_info['swift_container']
137146
response = data_handler.remove_old_chunks(request.environ, file_metadata['chunks'], container_name)
@@ -140,7 +149,7 @@ def DELETE(request, api_library, app):
140149
app.logger.error("StackSync API: data_resource DELETE: status code: %s. body: %s", str(response.status_int),
141150
str(response.body))
142151
return response
143-
152+
144153
message_delete = api_library.delete_item(user_id, file_id, is_folder=False)
145154

146155
response = create_response(message_delete, status_code=200)

tests/api_test_menu.py

Lines changed: 49 additions & 26 deletions

0 commit comments

Comments
 (0)