Skip to content

Commit c7d52a8

Browse files
author
Laurynas Butkus
committed
Upload file
1 parent e92d5fd commit c7d52a8

File tree

6 files changed

+56
-9
lines changed

6 files changed

+56
-9
lines changed

convertapi/client.py

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,18 @@ def post(self, path, payload, timeout = None):
1414
r = requests.post(self.url(path), data = payload, headers = self.headers(), timeout = timeout)
1515
return self.handle_response(r)
1616

17+
def upload(self, io, filename):
18+
url = convertapi.base_uri + 'upload'
19+
encoded_filename = requests.utils.quote(filename)
20+
21+
headers = self.headers()
22+
headers.update({
23+
'Content-Disposition': "attachment; filename*=UTF-8''" + encoded_filename,
24+
})
25+
26+
r = requests.post(url, data = io, headers = headers, timeout = convertapi.upload_timeout)
27+
return self.handle_response(r)
28+
1729
def download(self, url, path):
1830
r = requests.get(url, stream = True, timeout = convertapi.download_timeout)
1931

@@ -25,14 +37,12 @@ def download(self, url, path):
2537
return path
2638

2739
def handle_response(self, r):
28-
json = r.json()
29-
30-
if r.status_code >= 400:
31-
raise ConvertApiError(json['Message'])
32-
3340
r.raise_for_status()
3441

35-
return json
42+
# if r.status_code >= 400:
43+
# raise ConvertApiError(json['Message'])
44+
45+
return r.json()
3646

3747
def url(self, path):
3848
return "%s%s?Secret=%s" % (convertapi.base_uri, path, convertapi.api_secret)

convertapi/file_param.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import os
2+
import convertapi
3+
4+
from .result_file import ResultFile
5+
6+
def build(resource):
7+
if isinstance(resource, ResultFile):
8+
return resource.url
9+
10+
if os.path.isfile(resource):
11+
return __upload_file(resource)
12+
13+
return resource
14+
15+
def __upload_file(file):
16+
filename = os.path.basename(file)
17+
18+
with open(file, 'rb') as f:
19+
result = convertapi.client.upload(f, filename)
20+
return result['FileId']

convertapi/task.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import convertapi
22

3+
from convertapi import file_param
34
from .result import Result
45

56
class Task:
@@ -25,6 +26,16 @@ def run(self):
2526
return Result(response)
2627

2728
def __normalize_params(self):
28-
params = self.params.copy()
29+
params = {}
30+
31+
for k, v in self.params.items():
32+
if k == 'File':
33+
params[k] = file_param.build(v)
34+
elif k == 'Files':
35+
params[k] = map(file_param.build, v)
36+
else:
37+
params[k] = v
38+
2939
params.update(self.default_params)
40+
3041
return params

examples/files/test.docx

32 KB
Binary file not shown.

examples/files/test.pdf

1.04 MB
Binary file not shown.

tests/test_convertapi.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,13 @@ def test_configuration(self):
1616
convertapi.api_secret = 'TEST'
1717
eq_('TEST', convertapi.api_secret)
1818

19-
def test_convert(self):
19+
def test_convert_file(self):
20+
result = convertapi.convert('pdf', { 'File': 'examples/files/test.docx' }, 'docx')
21+
assert result.save_files(tempfile.gettempdir())
22+
assert result.conversion_cost > 0
23+
24+
def test_convert_url(self):
2025
result = convertapi.convert('pdf', { 'Url': 'http://convertapi.com' }, 'web')
21-
print(result.save_files(tempfile.gettempdir()))
26+
assert result.conversion_cost > 0
27+
2228

0 commit comments

Comments
 (0)