diff --git a/allgo/__init__.py b/allgo/__init__.py index 9bb84f11afe5120543dc294466092a828a97b648..b8e347527d5a73a8d000654cfd08bfb6b23b40dc 100644 --- a/allgo/__init__.py +++ b/allgo/__init__.py @@ -1,5 +1,5 @@ -import os, logging - +import logging +import os import time try: @@ -13,8 +13,16 @@ except ImportError: import requests log = logging.getLogger('allgo') -__version__ = '0.1.4' +__version__ = '0.1.7' + +def local_token(): + from os.path import expanduser + home = expanduser("~") + filetoken = os.path.join(home, '.allgo_token') + if os.path.exists(filetoken): + with open(filetoken) as f: + return f.read() class App: """ @@ -28,7 +36,14 @@ class App: :param token: if not provided, we check ALLGO_TOKEN env variable and notebook parameters """ self.name = name - self.token = token if token else os.environ.get('ALLGO_TOKEN', None) + if token: + self.token = token + elif 'ALLGO_TOKEN' in os.environ.keys(): + self.token = os.environ.get('ALLGO_TOKEN') + elif local_token(): + self.token = local_token() + else: + raise Exception("You must provide a token in parameter or define an environment variable 'ALLGO_TOKEN'") def run(self, files, outputdir='.', params=''): """ @@ -38,12 +53,14 @@ class App: :param params: a string parameters see the application documentation :return: """ - headers = {'Authorization': 'Token token={}'.format(_token)} + headers = {'Authorization': 'Token token={}'.format(self.token)} data = {"job[webapp_name]": self.name, + "job[webapp_id]": self.name, "job[param]": params} ALLGO_URL = os.environ.get('ALLGO_URL', "https://allgo.inria.fr") - r = requests.post('%s/api/v1/jobs' % ALLGO_URL, headers=headers, files=files, data=data) + r = requests.post('%s/api/v1/jobs/' % ALLGO_URL, headers=headers, files=files, data=data) r.raise_for_status() + r = r.json() jobid = r['id'] results = None while True: @@ -60,7 +77,7 @@ class App: raise Exception('Job %s failed with status %s', (jobid, status)) elif status == 'done' and results: - for filename, url in results[jobid].items: + for filename, url in results[str(jobid)].items(): filepath = os.path.join(outputdir, filename) with open(filepath, 'wb') as fb: fb.write(requests.get(url, stream=True).content)