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