Mercurial > repos > iuc > data_manager_pangolearn
comparison data_manager/pangolearn_dm.py @ 5:29c738066906 draft default tip
"planemo upload for repository https://github.com/galaxyproject/tools-iuc/tree/master/data_managers/data_manager_pangolearn commit b12eb7c784ce8e0f9b775530e710e47088711f76"
author | iuc |
---|---|
date | Fri, 15 Apr 2022 09:12:48 +0000 |
parents | 6e24e79d3d69 |
children |
comparison
equal
deleted
inserted
replaced
4:6e24e79d3d69 | 5:29c738066906 |
---|---|
49 ret.append(release) | 49 ret.append(release) |
50 | 50 |
51 return ret | 51 return ret |
52 | 52 |
53 | 53 |
54 def download_and_unpack(url, output_directory): | 54 def download_and_unpack(url, output_directory, v3datatree=True): |
55 response = requests.get(url) | 55 response = requests.get(url) |
56 if response.status_code == 200: | 56 if response.status_code == 200: |
57 tmp_filename = url.split("/")[-1] | 57 tmp_filename = url.split("/")[-1] |
58 tmpfile = open(tmp_filename, "wb") | 58 tmpfile = open(tmp_filename, "wb") |
59 tmpfile.write(response.content) | 59 tmpfile.write(response.content) |
60 tmpfile.close() | 60 tmpfile.close() |
61 shutil.copy(tmp_filename, "/tmp") | 61 shutil.copy(tmp_filename, "/tmp") |
62 tf = tarfile.open(tmp_filename) | 62 tf = tarfile.open(tmp_filename) |
63 pl_path = tf.next().name | 63 pl_path = os.path.join(output_directory, tf.next().name) |
64 tf.extractall(output_directory) | 64 tf.extractall(output_directory) |
65 os.unlink(tmp_filename) | 65 os.unlink(tmp_filename) |
66 pangolearn_unpacked_dir = os.path.join(pl_path, "pangoLEARN") | |
67 if v3datatree: | |
68 # pangolin v3 expects a datadir with the entire pangoLEARN | |
69 # subfolder in it. | |
70 # In addition, it will only use the data if the __init__.py file | |
71 # contained within that subfolder declares a __version__ that is | |
72 # newer than the version installed with pangolin. | |
73 pangolearn_dir = os.path.join( | |
74 output_directory, tmp_filename, "pangoLEARN" | |
75 ) | |
76 os.mkdir(os.path.dirname(pangolearn_dir)) | |
77 # rewrite the __init__.py file and make the __version__ string | |
78 # appear newer than anything that might come with pangolin by | |
79 # prepending a "v" to it. | |
80 pangolearn_init = open( | |
81 os.path.join(pangolearn_unpacked_dir, "__init__.py") | |
82 ).readlines() | |
83 with open( | |
84 os.path.join(pangolearn_unpacked_dir, "__init__.py"), "w" | |
85 ) as o: | |
86 for line in pangolearn_init: | |
87 if line.startswith('__version__ = "'): | |
88 line = line.replace( | |
89 '__version__ = "', '__version__ = "v' | |
90 ) | |
91 o.write(line) | |
92 else: | |
93 # Earlier versions of pangolin expect a datadir with just the | |
94 # contents of the downloaded pangoLEARN subfolder in it and don't | |
95 # care about the declared version in __init__.py. | |
96 pangolearn_dir = os.path.join( | |
97 output_directory, tmp_filename | |
98 ) | |
66 os.rename( | 99 os.rename( |
67 output_directory + "/" + pl_path + "/" + "pangoLEARN", | 100 pangolearn_unpacked_dir, |
68 output_directory + "/" + tmp_filename, | 101 pangolearn_dir |
69 ) | 102 ) |
70 shutil.rmtree(output_directory + "/" + pl_path) | 103 shutil.rmtree(pl_path) |
71 return tmp_filename | 104 return tmp_filename |
72 else: | 105 else: |
73 response.raise_for_status() | 106 response.raise_for_status() |
74 | 107 |
75 | 108 |
130 release | 163 release |
131 for release in releases | 164 for release in releases |
132 if release["tag_name"] not in existing_release_tags | 165 if release["tag_name"] not in existing_release_tags |
133 ] | 166 ] |
134 for release in releases_to_download: | 167 for release in releases_to_download: |
135 fname = download_and_unpack(release["tarball_url"], output_directory) | |
136 if args.pangolearn_format_version is not None: | 168 if args.pangolearn_format_version is not None: |
137 version = args.pangolearn_format_version | 169 version = args.pangolearn_format_version |
138 else: | 170 else: |
139 # 2021-05-27 was the first release of pangoLEARN for pangolin 3, which changed DB format | 171 # 2021-05-27 was the first release of pangoLEARN for pangolin 3, which changed DB format |
140 if release["date"] >= datetime.datetime(2021, 5, 27): | 172 if release["date"] >= datetime.datetime(2021, 5, 27): |
141 version = '3.0' | 173 version = '3.0' |
142 else: | 174 else: |
143 version = '1.0' | 175 version = '1.0' |
176 fname = download_and_unpack( | |
177 release["tarball_url"], | |
178 output_directory, | |
179 v3datatree=version == '3.0' | |
180 ) | |
144 data_manager_dict["data_tables"][args.datatable_name].append( | 181 data_manager_dict["data_tables"][args.datatable_name].append( |
145 dict( | 182 dict( |
146 value=release["tag_name"], | 183 value=release["tag_name"], |
147 description=release["name"], | 184 description=release["name"], |
148 format_version=version, | 185 format_version=version, |