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 |