http: add file nad image commands to HttpClient
This commit is contained in:
parent
d746216c49
commit
f32dcd6149
|
@ -1,9 +1,10 @@
|
||||||
import functools, json, sys
|
import functools, json, sys
|
||||||
|
|
||||||
from IzzyLib import logging
|
from IzzyLib import logging
|
||||||
from IzzyLib.misc import DefaultDict, DotDict
|
from IzzyLib.misc import DefaultDict, DotDict, Path
|
||||||
from base64 import b64decode, b64encode
|
from base64 import b64decode, b64encode
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
from io import BytesIO
|
||||||
from ssl import SSLCertVerificationError
|
from ssl import SSLCertVerificationError
|
||||||
from urllib.error import HTTPError
|
from urllib.error import HTTPError
|
||||||
from urllib.parse import urlparse
|
from urllib.parse import urlparse
|
||||||
|
@ -26,6 +27,12 @@ except ImportError:
|
||||||
logging.verbose('Sanic module not found. Request verification is disabled')
|
logging.verbose('Sanic module not found. Request verification is disabled')
|
||||||
SanicRequest = False
|
SanicRequest = False
|
||||||
|
|
||||||
|
try:
|
||||||
|
from PIL import Image
|
||||||
|
except ImportError:
|
||||||
|
logging.verbose('Pillow module not found. Image downloading is disabled')
|
||||||
|
Image = False
|
||||||
|
|
||||||
|
|
||||||
Client = None
|
Client = None
|
||||||
|
|
||||||
|
@ -121,6 +128,53 @@ class HttpClient(object):
|
||||||
return HttpResponse(response)
|
return HttpResponse(response)
|
||||||
|
|
||||||
|
|
||||||
|
def file(self, url, filepath, *args, filename=None, **kwargs):
|
||||||
|
resp = self.request(url, *args, **kwargs)
|
||||||
|
|
||||||
|
if resp.status != 200:
|
||||||
|
logging.error(f'Failed to download {url}:', resp.status, resp.body)
|
||||||
|
return False
|
||||||
|
|
||||||
|
path = Path(filepath)
|
||||||
|
|
||||||
|
if not path.exists():
|
||||||
|
logging.error('Path does not exist:', path)
|
||||||
|
return False
|
||||||
|
|
||||||
|
with path.join(filename).open('wb') as fd:
|
||||||
|
fd.write(resp.body)
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
def image(self, url, filepath, *args, filename=None, ext='png', dimensions=(50, 50), **kwargs):
|
||||||
|
if not Image:
|
||||||
|
logging.error('Pillow module is not installed')
|
||||||
|
return
|
||||||
|
|
||||||
|
resp = self.request(url, *args, **kwargs)
|
||||||
|
|
||||||
|
if resp.status != 200:
|
||||||
|
logging.error(f'Failed to download {url}:', resp.status, resp.body)
|
||||||
|
return False
|
||||||
|
|
||||||
|
if not filename:
|
||||||
|
filename = Path(url).stem()
|
||||||
|
|
||||||
|
path = Path(filepath)
|
||||||
|
|
||||||
|
if not path.exists():
|
||||||
|
logging.error('Path does not exist:', path)
|
||||||
|
return False
|
||||||
|
|
||||||
|
byte = BytesIO()
|
||||||
|
image = Image.open(BytesIO(resp.body))
|
||||||
|
image.thumbnail(dimensions)
|
||||||
|
image.save(byte, format=ext.upper())
|
||||||
|
|
||||||
|
with path.join(filename).open('wb') as fd:
|
||||||
|
fd.write(byte.getvalue())
|
||||||
|
|
||||||
|
|
||||||
def json(self, *args, headers={}, activity=True, **kwargs):
|
def json(self, *args, headers={}, activity=True, **kwargs):
|
||||||
json_type = 'activity+json' if activity else 'json'
|
json_type = 'activity+json' if activity else 'json'
|
||||||
headers.update({
|
headers.update({
|
||||||
|
|
Loading…
Reference in a new issue