Skip to content

Commit a031f47

Browse files
Merge pull request #402 from appwrite/feat-resumable-upload-python
Feat: Python resumable upload
2 parents a55ddd9 + f770368 commit a031f47

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed

templates/python/package/client.py.twig

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,7 @@ class Client:
106106
params = None,
107107
param_name = '',
108108
on_progress = None,
109+
upload_id = ''
109110
):
110111
file_path = str(params[param_name])
111112
file_name = os.path.basename(file_path)
@@ -123,6 +124,18 @@ class Client:
123124

124125
input = open(file_path, 'rb')
125126
offset = 0
127+
counter = 0
128+
129+
if upload_id != 'unique()':
130+
try:
131+
result = self.call('get', path + '/' + upload_id, headers)
132+
counter = result['chunksUploaded']
133+
except:
134+
pass
135+
136+
if counter > 0:
137+
offset = counter * self._chunk_size
138+
input.seek(offset)
126139

127140
while offset < size:
128141
slice = input.read(self._chunk_size) or input.read(size - offset)
@@ -143,6 +156,7 @@ class Client:
143156
headers["x-{{ spec.title | caseLower }}-id"] = result["$id"]
144157

145158
if on_progress is not None:
159+
end = min((((counter * self._chunk_size) + self._chunk_size) - 1), size)
146160
on_progress({
147161
"$id": result["$id"],
148162
"progress": min(offset, size)/size * 100,
@@ -151,6 +165,8 @@ class Client:
151165
"chunksUploaded": result["chunksUploaded"],
152166
})
153167

168+
counter = counter + 1
169+
154170
return result
155171

156172
def flatten(self, data, prefix='', stringify=False):

templates/python/package/services/service.py.twig

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,22 @@ class {{ service.name | caseUcfirst }}(Service):
4747

4848
{% endif %}
4949
{% endfor %}
50+
51+
upload_id = ''
52+
{% for parameter in method.parameters.all %}
53+
{% if parameter.isUploadID %}
54+
upload_id = {{ parameter.name | escapeKeyword | caseSnake }}
55+
{% endif %}
56+
{% endfor %}
57+
5058
return self.client.chunked_upload(path, {
5159
{% for parameter in method.parameters.header %}
5260
'{{ parameter.name }}': {{ parameter.name | escapeKeyword | caseSnake }},
5361
{% endfor %}
5462
{% for key, header in method.headers %}
5563
'{{ key }}': '{{ header }}',
5664
{% endfor %}
57-
}, params, param_name, on_progress)
65+
}, params, param_name, on_progress, upload_id)
5866
{% else %}
5967
return self.client.call('{{ method.method | caseLower }}', path, {
6068
{% for parameter in method.parameters.header %}

0 commit comments

Comments
 (0)