Mercurial > repos > pimarin > data_manager_bakta
comparison data_manager/bakta_build_database.py @ 18:04bee0f935a2 draft
planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/data_managers/data_manager_bakta commit 476cb50265f7dcb492fa2d0f03f595b1363faf7a
| author | pimarin |
|---|---|
| date | Wed, 09 Nov 2022 15:49:56 +0000 |
| parents | ecb7d3d41366 |
| children | c90380f8bbbc |
comparison
equal
deleted
inserted
replaced
| 17:ecb7d3d41366 | 18:04bee0f935a2 |
|---|---|
| 1 import argparse | 1 import argparse |
| 2 import hashlib | 2 import hashlib |
| 3 import json | 3 import json |
| 4 import os | 4 import os |
| 5 import sys | 5 import sys |
| 6 import subprocess | 6 # import subprocess |
| 7 import tarfile | 7 import tarfile |
| 8 from datetime import datetime | 8 from datetime import datetime |
| 9 from pathlib import Path | 9 from pathlib import Path |
| 10 | |
| 11 | |
| 12 # implement pip as a subprocess: | 10 # implement pip as a subprocess: |
| 13 subprocess.check_call([sys.executable, '-m', 'pip', 'install', | 11 # subprocess.check_call([sys.executable, '-m', 'pip', 'install', 'requests']) |
| 14 'requests']) | |
| 15 | 12 |
| 16 import requests | 13 import requests |
| 17 | 14 |
| 18 | 15 |
| 19 class GetBaktaDatabaseInfo: | 16 class GetBaktaDatabaseInfo: |
| 33 self.db_version = db_version | 30 self.db_version = db_version |
| 34 self.DB_VERSIONS_URL = 'https://raw.githubusercontent.com/oschwengers/bakta/master/db-versions.json' | 31 self.DB_VERSIONS_URL = 'https://raw.githubusercontent.com/oschwengers/bakta/master/db-versions.json' |
| 35 | 32 |
| 36 def get_data_table_format(self): | 33 def get_data_table_format(self): |
| 37 """ | 34 """ |
| 38 Build a data table format for galaxy | 35 Skeleton of a data_table format |
| 39 using the bakta database information | 36 return: a data table formated for json output |
| 40 @str database_value: string of the database name | |
| 41 @str database_date: string of the database date of build (YY-M-D) | |
| 42 @str database_bakta_version: string of the version of bakta tool | |
| 43 to apply a filter on version compatibility | |
| 44 @str database_path: string of the database path | |
| 45 for the database location | |
| 46 return: a data table formatted for json output | |
| 47 """ | 37 """ |
| 48 self.data_table_entry = { | 38 self.data_table_entry = { |
| 49 "data_tables": { | 39 "data_tables": { |
| 50 self.data_table_name: {} | 40 self.data_table_name: {} |
| 51 } | 41 } |
| 52 } | 42 } |
| 53 return self.data_table_entry | 43 return self.data_table_entry |
| 54 | 44 |
| 55 def fetch_db_versions(self, db_version="latest"): | 45 def fetch_db_versions(self, db_version="latest"): |
| 56 """ | 46 """ |
| 57 Use method from bakta tool to extract database info | 47 List bakta database info depending of the db_version selected |
| 58 db_version: a string of the version number | |
| 59 in the galaxy wrapper list or just latest | |
| 60 return: info for the select or the latest bakta db version | |
| 61 """ | 48 """ |
| 62 try: | 49 try: |
| 63 with requests.get(self.DB_VERSIONS_URL) as resp: | 50 with requests.get(self.DB_VERSIONS_URL) as resp: |
| 64 versions = json.loads(resp.content) | 51 versions = json.loads(resp.content) |
| 65 except IOError as e: | 52 except IOError as e: |
| 69 if db_version == "latest": | 56 if db_version == "latest": |
| 70 db_date_list = [] | 57 db_date_list = [] |
| 71 for db_dic in versions: | 58 for db_dic in versions: |
| 72 db_date_list.append(datetime.strptime(db_dic["date"], | 59 db_date_list.append(datetime.strptime(db_dic["date"], |
| 73 '%Y-%m-%d').date()) | 60 '%Y-%m-%d').date()) |
| 74 filtered_version = next(item for item in versions | 61 filtered_version = max(versions, key=lambda x: x['date']) |
| 75 if max(db_date_list)) | |
| 76 elif db_version == "test": | 62 elif db_version == "test": |
| 77 filtered_version = {"date": "date_test", | 63 filtered_version = {"date": "date_test", |
| 78 "major": "0", | 64 "major": "0", |
| 79 "minor": "0", | 65 "minor": "0", |
| 80 "doi": "10.5281/zenodo.7197299", | 66 "doi": "10.5281/zenodo.7197299", |
| 82 "md5": "8b0250c17078742fc12207d4efb0fc1a", | 68 "md5": "8b0250c17078742fc12207d4efb0fc1a", |
| 83 "software-min": {"major": "0", | 69 "software-min": {"major": "0", |
| 84 "minor": "0"} | 70 "minor": "0"} |
| 85 } | 71 } |
| 86 else: | 72 else: |
| 87 major_version = str(db_version.split(sep=".")[0]) | 73 filtered_version = None |
| 88 minor_version = str(db_version.split(sep=".")[1]) | 74 for item in versions: |
| 89 try: | 75 if '{0}.{1}'.format(item["major"], item["minor"]) == db_version: |
| 90 filtered_version = next( | 76 filtered_version = item |
| 91 item for item in versions | 77 break |
| 92 if str(item["major"]) == major_version | 78 if filtered_version is None: |
| 93 and str(item["minor"]) == minor_version) | 79 print("No matching version detected in the list") |
| 94 except StopIteration: | |
| 95 print("No available version detected in the list") | |
| 96 filtered_version = None | |
| 97 if filtered_version is not None: | 80 if filtered_version is not None: |
| 98 self.db_url = f"https://zenodo.org/record/" \ | 81 self.db_url = f"https://zenodo.org/record/" \ |
| 99 f"{filtered_version['record']}/files/db.tar.gz" | 82 f"{filtered_version['record']}/files/db.tar.gz" |
| 100 self.db_version = db_version | 83 self.db_version = db_version |
| 101 return filtered_version | 84 return filtered_version |
