58 lines
1.4 KiB
Python
58 lines
1.4 KiB
Python
import string
|
|
import random
|
|
from functools import wraps
|
|
from urllib.parse import urlencode
|
|
from seafileapi.exceptions import ClientHttpError, DoesNotExist
|
|
|
|
def randstring(length=0):
|
|
if length == 0:
|
|
length = random.randint(1, 30)
|
|
return ''.join(random.choice(string.lowercase) for i in range(length))
|
|
|
|
def urljoin(base, *args):
|
|
url = base
|
|
if url[-1] != '/':
|
|
url += '/'
|
|
for arg in args:
|
|
arg = arg.strip('/')
|
|
url += arg + '/'
|
|
if '?' in url:
|
|
url = url[:-1]
|
|
return url
|
|
|
|
def raise_does_not_exist(msg):
|
|
"""Decorator to turn a function that get a http 404 response to a
|
|
:exc:`DoesNotExist` exception."""
|
|
def decorator(func):
|
|
@wraps(func)
|
|
def wrapped(*args, **kwargs):
|
|
try:
|
|
return func(*args, **kwargs)
|
|
except ClientHttpError as e:
|
|
if e.code == 404:
|
|
raise DoesNotExist(msg)
|
|
else:
|
|
raise
|
|
return wrapped
|
|
return decorator
|
|
|
|
def to_utf8(obj):
|
|
if isinstance(obj, str):
|
|
return obj.encode('utf-8')
|
|
return obj
|
|
|
|
def querystr(**kwargs):
|
|
return '?' + urlencode(kwargs)
|
|
|
|
def utf8lize(obj):
|
|
if isinstance(obj, dict):
|
|
return {k: to_utf8(v) for k, v in obj.items()}
|
|
|
|
if isinstance(obj, list):
|
|
return [to_utf8(x) for x in ob]
|
|
|
|
if instance(obj, str):
|
|
return obj.encode('utf-8')
|
|
|
|
return obj
|