Mercurial > repos > jjohnson > data_manager_cat
comparison data_manager/data_manager_cat.py @ 0:f59e7e242bde draft
planemo upload commit f80f020c77d04c2e13b89aaea3d784314b940931-dirty
| author | jjohnson |
|---|---|
| date | Sun, 24 Nov 2019 21:54:57 -0500 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| -1:000000000000 | 0:f59e7e242bde |
|---|---|
| 1 #!/usr/bin/env python | |
| 2 from __future__ import print_function | |
| 3 | |
| 4 import argparse | |
| 5 import json | |
| 6 import os.path | |
| 7 import subprocess | |
| 8 import tarfile | |
| 9 import tempfile | |
| 10 import zipfile | |
| 11 try: | |
| 12 # For Python 3.0 and later | |
| 13 from urllib.request import urlopen | |
| 14 except ImportError: | |
| 15 # Fall back to Python 2 imports | |
| 16 from urllib2 import urlopen | |
| 17 | |
| 18 | |
| 19 def url_download(url, workdir): | |
| 20 file_path = os.path.join(workdir, 'download.dat') | |
| 21 src = None | |
| 22 dst = None | |
| 23 try: | |
| 24 src = urlopen(url) | |
| 25 with open(file_path, 'wb') as dst: | |
| 26 while True: | |
| 27 chunk = src.read(2**10) | |
| 28 if chunk: | |
| 29 dst.write(chunk) | |
| 30 else: | |
| 31 break | |
| 32 finally: | |
| 33 if src: | |
| 34 src.close() | |
| 35 if tarfile.is_tarfile(file_path): | |
| 36 fh = tarfile.open(file_path, 'r:*') | |
| 37 elif zipfile.is_zipfile(file_path): | |
| 38 fh = zipfile.ZipFile(file_path, 'r') | |
| 39 else: | |
| 40 return | |
| 41 fh.extractall(workdir) | |
| 42 os.remove(file_path) | |
| 43 | |
| 44 | |
| 45 def cat_prepare(install_dir): | |
| 46 cmd = ['CAT', 'prepare' '--fresh', '-q'] | |
| 47 cmd_stdout = tempfile.NamedTemporaryFile() | |
| 48 cmd_stderr = tempfile.NamedTemporaryFile() | |
| 49 return_code = subprocess.call(cmd, shell=True, cwd=install_dir, | |
| 50 stdout=cmd_stdout, stderr=cmd_stderr) | |
| 51 if return_code: | |
| 52 msg = "stdout:\n%s\nstderr:\n%s" % (cmd_stdout.read(), | |
| 53 cmd_stderr.read()) | |
| 54 cmd_stdout.close() | |
| 55 cmd_stderr.close() | |
| 56 raise Exception('Error: (%s), returncode=%s %s' | |
| 57 % (' '.join(cmd), return_code, msg)) | |
| 58 | |
| 59 | |
| 60 def main(): | |
| 61 parser = argparse.ArgumentParser() | |
| 62 parser.add_argument('--config_file') | |
| 63 parser.add_argument('--install_path') | |
| 64 parser.add_argument('--db_url', default=None) | |
| 65 args = parser.parse_args() | |
| 66 | |
| 67 if not os.path.exists(args.install_path): | |
| 68 os.makedirs(args.install_path) | |
| 69 if args.db_url: | |
| 70 url_download(args.db_url, args.install_path) | |
| 71 else: | |
| 72 cat_prepare(args.install_path) | |
| 73 | |
| 74 cat_path = None | |
| 75 cat_db = None | |
| 76 tax_db = None | |
| 77 for root, dirs, files in os.walk(args.install_path): | |
| 78 for dname in dirs: | |
| 79 if dname.endswith('CAT_database'): | |
| 80 cat_db = dname | |
| 81 elif dname.endswith('taxonomy'): | |
| 82 tax_db = dname | |
| 83 if cat_db and tax_db: | |
| 84 cat_path = root | |
| 85 break | |
| 86 | |
| 87 cat_dir = os.path.basename(cat_path) | |
| 88 # params = json.loads(open(args.config_file).read()) | |
| 89 dm_dict = {} | |
| 90 dm_dict['data_tables'] = dm_dict.get('data_tables', {}) | |
| 91 data_table = 'cat_database' | |
| 92 dm_dict['data_tables'][data_table]\ | |
| 93 = dm_dict['data_tables'].get(data_table, []) | |
| 94 data_table_entry = dict(value=cat_dir, name=cat_dir, | |
| 95 database_folder=os.path.join(cat_dir, cat_db), | |
| 96 taxonomy_folder=os.path.join(cat_dir, tax_db)) | |
| 97 dm_dict['data_tables'][data_table].append(data_table_entry) | |
| 98 # save info to json file | |
| 99 open(args.config_file, 'wb').write(json.dumps(dm_dict)) | |
| 100 | |
| 101 | |
| 102 if __name__ == "__main__": | |
| 103 main() |
