Compare commits

...

5 commits

Author SHA1 Message Date
j
7e72cfd163 support dat 2021-02-23 09:09:35 +01:00
j
f7c7a6689b don't print status during upload 2021-02-19 00:10:59 +01:00
j
2ebc6ffd3a use py3 tests 2021-01-28 12:56:41 +01:00
j
851204c619 allow target="_blank" for href 2020-10-15 11:39:19 +02:00
j
a2c9309808 not all torrents have announce 2020-07-28 11:36:20 +02:00
5 changed files with 20 additions and 10 deletions

View file

@ -151,7 +151,8 @@ class API(object):
fd.write(chunk) fd.write(chunk)
shutil.move(tmpname, filename) shutil.move(tmpname, filename)
def upload_chunks(self, url, filename, data=None):
def upload_chunks(self, url, filename, data=None, silent=False):
form = MultiPartForm() form = MultiPartForm()
if data: if data:
for key in data: for key in data:
@ -188,26 +189,31 @@ class API(object):
try: try:
data = self._json_request(uploadUrl, form) data = self._json_request(uploadUrl, form)
except KeyboardInterrupt: except KeyboardInterrupt:
print("\ninterrupted by user.") if not slient:
print("\ninterrupted by user.")
sys.exit(1) sys.exit(1)
except: except:
print("uploading chunk failed, will try again in 5 seconds\r", end='') if not slient:
print("uploading chunk failed, will try again in 5 seconds\r", end='')
sys.stdout.flush() sys.stdout.flush()
data = {'result': -1} data = {'result': -1}
time.sleep(5) time.sleep(5)
if data and 'status' in data: if data and 'status' in data:
if data['status']['code'] == 403: if data['status']['code'] == 403:
print("login required") if not slient:
print("login required")
return False return False
if data['status']['code'] != 200: if data['status']['code'] != 200:
print("request returned error, will try again in 5 seconds") if not slient:
print("request returned error, will try again in 5 seconds")
if self.DEBUG: if self.DEBUG:
print(data) print(data)
time.sleep(5) time.sleep(5)
if data and data.get('result') == 1: if data and data.get('result') == 1:
done += len(chunk) done += len(chunk)
if data.get('offset') not in (None, done): if data.get('offset') not in (None, done):
print('server offset out of sync, continue from', data['offset']) if not slient:
print('server offset out of sync, continue from', data['offset'])
done = data['offset'] done = data['offset']
f.seek(done) f.seek(done)
chunk = f.read(CHUNK_SIZE) chunk = f.read(CHUNK_SIZE)

View file

@ -32,7 +32,8 @@ EXTENSIONS = {
'avi', 'divx', 'dv', 'flv', 'm2t', 'm2ts', 'm4v', 'mkv', 'mov', 'mp4', 'avi', 'divx', 'dv', 'flv', 'm2t', 'm2ts', 'm4v', 'mkv', 'mov', 'mp4',
'mpeg', 'mpg', 'mts', 'ogm', 'ogv', 'rm', 'rmvb', 'vob', 'webm', 'wmv', 'asf', 'mpeg', 'mpg', 'mts', 'ogm', 'ogv', 'rm', 'rmvb', 'vob', 'webm', 'wmv', 'asf',
'mod', 'tod', # http://en.wikipedia.org/wiki/MOD_and_TOD 'mod', 'tod', # http://en.wikipedia.org/wiki/MOD_and_TOD
'mxf', 'ts' 'mxf', 'ts',
'dat', # VOD files
], ],
} }

View file

@ -290,8 +290,10 @@ def sanitize_html(html, tags=None, global_attributes=[]):
{ {
'name': 'a', 'name': 'a',
'required': ['href'], 'required': ['href'],
'optional': ['target'],
'validation': { 'validation': {
'href': valid_url 'href': valid_url,
'target': '^_blank$',
} }
}, },
{'name': 'br'}, {'name': 'br'},

View file

@ -55,7 +55,8 @@ def get_torrent_info(data=None, file=None):
tinfo[key] = metainfo[key] tinfo[key] = metainfo[key]
tinfo['size'] = file_length tinfo['size'] = file_length
tinfo['hash'] = sha1(bencode(info)).hexdigest() tinfo['hash'] = sha1(bencode(info)).hexdigest()
tinfo['announce'] = metainfo['announce'] if 'announce' in metainfo:
tinfo['announce'] = metainfo['announce']
if file: if file:
tinfo['timestamp'] = os.stat(file).st_ctime tinfo['timestamp'] = os.stat(file).st_ctime
return tinfo return tinfo

View file

@ -1 +1 @@
nosetests --with-doctest ox nosetests3 --with-doctest ox