diff --git a/abraia/abraia.py b/abraia/abraia.py index a56f37c..9d66894 100644 --- a/abraia/abraia.py +++ b/abraia/abraia.py @@ -20,8 +20,13 @@ def userid(self): def user(self): return self.load_user()['user'] - def files(self, path=''): - return self.list_files(path=self.userid+'/'+path) + def list(self, folder=''): + length = len(self.userid) + 1 + files, folders = self.list_files(path=self.userid + '/' + folder) + files = map(lambda f: {'name': f['name'], 'size': f['size'], + 'date': f['date'], 'path': f['source'][length:]}, files) + folders = map(lambda f: {'name': f['name'], 'path': f['source'][length:]}, folders) + return list(files), list(folders) def from_file(self, file): resp = self.upload_file(file, self.userid + '/' + self.folder) @@ -64,11 +69,6 @@ def resize(self, width=None, height=None, mode=None): self.params['mode'] = mode return self - # TODO: Remove filter option - def filter(self, filter): - self.params['f'] = filter - return self - def process(self, params={}): self.params.update(params) return self diff --git a/abraia/client.py b/abraia/client.py index 6e027d6..b7e55bb 100644 --- a/abraia/client.py +++ b/abraia/client.py @@ -1,6 +1,7 @@ import os +import base64 import requests - +from datetime import datetime from io import BytesIO from . import config @@ -31,6 +32,8 @@ def list_files(self, path=''): if resp.status_code != 200: raise APIError(resp.text, resp.status_code) resp = resp.json() + for f in resp['files']: + f['date'] = datetime.fromtimestamp(f['date']) return resp['files'], resp['folders'] def upload_remote(self, url, path): @@ -92,7 +95,10 @@ def analyze_image(self, path, params={}): resp = requests.get(url, auth=self.auth) if resp.status_code != 200: raise APIError(resp.text, resp.status_code) - return resp.json() + resp = resp.json() + if resp.get('salmap'): + resp['salmap'] = BytesIO(base64.b64decode(resp['salmap'][23:])) + return resp def transform_image(self, path, params={}): if params.get('action'): diff --git a/images/lion_brand.jpg b/images/lion_brand.jpg index e72e391..57c8a8f 100644 Binary files a/images/lion_brand.jpg and b/images/lion_brand.jpg differ diff --git a/scripts/abraia b/scripts/abraia index 94364e7..5507426 100755 --- a/scripts/abraia +++ b/scripts/abraia @@ -1,14 +1,10 @@ #!/usr/bin/env python -from __future__ import print_function -from __future__ import division -from builtins import input - import os import sys import shutil import argparse +from glob import glob from tqdm import tqdm -from datetime import datetime from abraia import config from abraia import Abraia @@ -18,14 +14,12 @@ abraia = Abraia(folder='batch/') def process_info(): - print('Abraia CLI v0.6') + print('Abraia CLI v0.6.1') try: user = abraia.user() print('Name:', user.get('name')) print('Email:', user.get('email')) print('Credits:', user.get('credits')) - print('Transformations:', user['transforms']) - print('Processed data:', user['bandwidth']) except APIError as error: print('Error', error.code, error.message) @@ -41,13 +35,8 @@ def process_configure(): def input_files(path): - filenames = [] - if os.path.isfile(path): - filenames.append(path) - elif os.path.isdir(path): - for root, subdirs, files in os.walk(path): - filenames.extend([os.path.join(root, file) for file in files]) - return filenames + path = os.path.join(path, '**/*') if os.path.isdir(path) else path + return glob(path, recursive=True) def process_optimize(args): @@ -102,10 +91,9 @@ def process_url(path, fileout, args): def process_list(path): - files, folders = abraia.files(path=path) + files, folders = abraia.list(path) txt = '\n'.join(['{:>28} {}/'.format('', f['name']) for f in folders]) + '\n' - txt += '\n'.join(['{} {:>7} {}'.format( - datetime.fromtimestamp(f['date']), f['size'], f['name']) for f in files]) + txt += '\n'.join(['{} {:>7} {}'.format(f['date'], f['size'], f['name']) for f in files]) txt += '\ntotal {}'.format(len(files)) print(txt) @@ -119,12 +107,12 @@ def process_upload(path): def process_download(path): try: - print(abraia.from_store(path).to_file(path)) + abraia.from_store(path).to_file(path) except APIError as error: print('Error', error.code, error.message) -def process_delete(path): +def process_remove(path): print(abraia.from_store(path).remove()) @@ -143,7 +131,6 @@ def add_parser_optimize(subparser): parser_optimize.add_argument('--width', type=int, help='resize to specified width') parser_optimize.add_argument('--height', type=int, help='resize to specified height') parser_optimize.add_argument('--format', type=str, help='convert to specified image format. Allowed output extensions: %s' % str(config.IMAGE_EXTS)) - parser_optimize.add_argument('--filter', type=str, help='apply the specified filter') parser_optimize.add_argument('--action', type=str, help='apply the specified action') parser_optimize.add_argument('path', nargs='?', help='image path or directory to process') parser_optimize.add_argument('dest', nargs='?', help='destination directory or image path') @@ -166,15 +153,15 @@ def add_parser_download(subparser): return parser_download -def add_parser_delete(subparser): - parser_delete = subparser.add_parser('delete', help='delete a stored file') - parser_delete.add_argument('path', nargs='?', help='file path to delete') - return parser_delete +def add_parser_remove(subparser): + parser_remove = subparser.add_parser('remove', help='remove a stored file') + parser_remove.add_argument('path', nargs='?', help='file path to remove') + return parser_remove def parse_input(): parser = argparse.ArgumentParser(description='Abraia image optimization tool') - parser.add_argument('-V', '--version', action='version', version='0.6') + parser.add_argument('-V', '--version', action='version', version='0.6.1') subparser = parser.add_subparsers(dest='command') parser_info = add_parser_info(subparser) parser_configure = add_parser_configure(subparser) @@ -182,7 +169,7 @@ def parse_input(): parser_list = add_parser_list(subparser) parser_upload = add_parser_upload(subparser) parser_download = add_parser_download(subparser) - parser_delete = add_parser_delete(subparser) + parser_remove = add_parser_remove(subparser) args = vars(parser.parse_args()) if args['command'] is None: parser.print_help() @@ -199,9 +186,9 @@ def parse_input(): if args['path'] is None: parser_download.print_help() sys.exit() - elif args['command'] == 'delete': + elif args['command'] == 'remove': if args['path'] is None: - parser_delete.print_help() + parser_remove.print_help() sys.exit() return args @@ -219,8 +206,8 @@ def process_input(args): process_upload(args.get('path')) elif args['command'] == 'download': process_download(args.get('path')) - elif args['command'] == 'delete': - process_delete(args.get('path')) + elif args['command'] == 'remove': + process_remove(args.get('path')) if __name__ == "__main__": diff --git a/setup.py b/setup.py index eef8e1c..c17d846 100644 --- a/setup.py +++ b/setup.py @@ -5,7 +5,7 @@ setup( name='abraia', - version='0.6', + version='0.6.1', description='Abraia Python SDK', long_description=long_description, long_description_content_type='text/markdown', @@ -18,5 +18,5 @@ tests_require=['pytest'], setup_requires=['setuptools>=38.6.0', 'pytest-runner'], scripts=['scripts/abraia', 'scripts/abraia.bat'], - install_requires=['requests', 'tqdm', 'future'] + install_requires=['requests', 'tqdm'] ) diff --git a/tests/test_abraia.py b/tests/test_abraia.py index 43ff8ef..193e21d 100644 --- a/tests/test_abraia.py +++ b/tests/test_abraia.py @@ -11,7 +11,7 @@ def test_list(): """Test an API call to list stored files and folders""" - files, folders = abraia.files() + files, folders = abraia.list() assert isinstance(files, list) assert isinstance(folders, list)