Skip to content

Commit 19e8386

Browse files
author
Laurynas Butkus
committed
Add format detector
1 parent ac04cfc commit 19e8386

File tree

4 files changed

+35
-6
lines changed

4 files changed

+35
-6
lines changed

convertapi/file_param.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import os
22

3+
from io import FileIO
34
from .result_file import ResultFile
45
from .upload_io import UploadIO
56

@@ -10,6 +11,9 @@ def build(resource):
1011
if isinstance(resource, UploadIO):
1112
return resource.upload()
1213

14+
if isinstance(resource, FileIO):
15+
return UploadIO(resource).upload()
16+
1317
if os.path.isfile(resource):
1418
io = open(resource, 'rb')
1519
return UploadIO(io).upload()

convertapi/format_detector.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from os.path import splitext
2+
from io import FileIO
3+
from requests import utils
4+
5+
def detect(resource):
6+
if 'filename' in dir(resource):
7+
path = resource.filename
8+
elif isinstance(resource, FileIO):
9+
path = resource.name
10+
else:
11+
path = utils.urlparse(resource).path
12+
13+
return splitext(path)[1][1:].lower()

convertapi/task.py

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
import convertapi
22

3-
from convertapi import file_param
3+
from convertapi import file_param, format_detector
44
from .result import Result
55

6+
DEFAULT_URL_FORMAT = 'url'
7+
68
class Task:
79
def __init__(self, from_format, to_format, params, conversion_timeout = None):
810
self.from_format = from_format
@@ -17,7 +19,7 @@ def __init__(self, from_format, to_format, params, conversion_timeout = None):
1719

1820
def run(self):
1921
params = self.__normalize_params()
20-
from_format = self.from_format
22+
from_format = self.from_format or self.__detect_format()
2123
timeout = self.conversion_timeout + convertapi.conversion_timeout_delta
2224
path = "convert/%s/to/%s" % (from_format, self.to_format)
2325

@@ -38,4 +40,14 @@ def __normalize_params(self):
3840

3941
params.update(self.default_params)
4042

41-
return params
43+
return params
44+
45+
def __detect_format(self):
46+
if 'Url' in self.params:
47+
return DEFAULT_URL_FORMAT
48+
49+
if 'File' in self.params:
50+
return format_detector.detect(self.params['File'])
51+
52+
if 'Files' in self.params:
53+
return format_detector.detect(self.params['Files'][0])

tests/test_convertapi.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,16 +18,16 @@ def test_configuration(self):
1818
eq_('TEST', convertapi.api_secret)
1919

2020
def test_convert_file(self):
21-
result = convertapi.convert('pdf', { 'File': 'examples/files/test.docx' }, 'docx')
21+
result = convertapi.convert('pdf', { 'File': 'examples/files/test.docx' })
2222
assert result.save_files(tempfile.gettempdir())
2323
assert result.conversion_cost > 0
2424

2525
def test_convert_url(self):
26-
result = convertapi.convert('pdf', { 'Url': 'http://convertapi.com' }, 'web')
26+
result = convertapi.convert('pdf', { 'Url': 'http://convertapi.com' })
2727
assert result.conversion_cost > 0
2828

2929
def test_upload_io(self):
3030
string_io = io.StringIO(u'test')
3131
upload_io = convertapi.UploadIO(string_io, 'test.txt')
32-
result = convertapi.convert('pdf', { 'File': upload_io }, 'txt')
32+
result = convertapi.convert('pdf', { 'File': upload_io })
3333
assert result.conversion_cost > 0

0 commit comments

Comments
 (0)