twblue/src/url_shortener/__main__.py

46 lines
1.2 KiB
Python

from functools import wraps
import shorteners
def service_selecter (func):
@wraps(func)
def wrapper (*args, **kwargs):
tmp = dict(kwargs)
if 'service' in tmp:
del(tmp['service'])
kwargs['service'] = find_service(kwargs['service'], **tmp) or default_service()
else:
kwargs['service'] = default_service()
return func(*args, **kwargs)
return wrapper
@service_selecter
def shorten (url, service=None, **kwargs):
return service(**kwargs).shorten(url)
@service_selecter
def unshorten (url, service=None, **kwargs):
return service(**kwargs).unshorten(url)
def default_service ():
return shorteners.AcortameShortener
def find_service (service, **kwargs):
for i in shorteners.__all__:
obj = getattr(shorteners, i)(**kwargs)
if obj.name.lower() == service.lower():
return getattr(shorteners, i)
def list_services ():
return [getattr(shorteners, i)().name for i in shorteners.__all__]
def unshorten_any (url):
"""Unshortens an URL using any available unshortener. Check to see if unshortened URL was created by a shortener (nested) and unshorten if so."""
unshortened_url = shorteners.URLShortener().unshorten(url)
# None is returned if URL not unshortened
if unshortened_url:
return unshorten_any(unshortened_url)
return url