Skip to content

Commit

Permalink
Add support for glob expressions
Browse files Browse the repository at this point in the history
  • Loading branch information
jrrodri committed Oct 8, 2020
1 parent db302a8 commit 35264f2
Show file tree
Hide file tree
Showing 6 changed files with 36 additions and 43 deletions.
14 changes: 7 additions & 7 deletions abraia/abraia.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
Expand Down
10 changes: 8 additions & 2 deletions abraia/client.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import os
import base64
import requests

from datetime import datetime
from io import BytesIO
from . import config

Expand Down Expand Up @@ -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):
Expand Down Expand Up @@ -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'):
Expand Down
Binary file modified images/lion_brand.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
49 changes: 18 additions & 31 deletions scripts/abraia
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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)

Expand All @@ -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):
Expand Down Expand Up @@ -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)

Expand All @@ -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())


Expand All @@ -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')
Expand All @@ -166,23 +153,23 @@ 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)
parser_optimize = add_parser_optimize(subparser)
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()
Expand All @@ -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

Expand All @@ -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__":
Expand Down
4 changes: 2 additions & 2 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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',
Expand All @@ -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']
)
2 changes: 1 addition & 1 deletion tests/test_abraia.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down

0 comments on commit 35264f2

Please sign in to comment.