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, |
