1+ import re
2+ import requests
3+ import cdot
4+
5+ from cdot import get_data_schema_int
6+
7+
8+ def get_latest_data_release_tag_name ():
9+ latest_data_release = get_latest_data_release ()
10+ return latest_data_release .get ('tag_name' )
11+
12+ def _get_version_from_tag_name (tag_name , data_version = False ):
13+ """ Returns None if doesn't match required prefix """
14+ release_prefix = "v"
15+ if data_version :
16+ release_prefix = "data_" + release_prefix
17+
18+ if not tag_name .startswith (release_prefix ):
19+ return None
20+ return tag_name .lstrip (release_prefix )
21+
22+
23+ def get_latest_data_release ():
24+ client_data_schema = get_data_schema_int (cdot .__version__ )
25+
26+ url = "https://api.github.com/repos/SACGF/cdot/releases"
27+ response = requests .get (url )
28+ json_data = response .json ()
29+ for release in json_data :
30+ tag_name = release ['tag_name' ] # Should look like 'v0.2.25' for code or 'data_v0.2.25' for data
31+ # We require a data version
32+ data_version = _get_version_from_tag_name (tag_name , data_version = True )
33+ if data_version is None :
34+ continue
35+
36+ data_schema = get_data_schema_int (data_version )
37+ if data_schema != client_data_schema :
38+ continue
39+ return release
40+ return {}
41+
42+ def get_latest_combo_file_urls (annotation_consortia , genome_builds ):
43+ # lower case everything to be case insensitive
44+ annotation_consortia = {x .lower () for x in annotation_consortia }
45+ genome_builds = {x .lower () for x in genome_builds }
46+
47+ file_urls = []
48+ if latest_data_release := get_latest_data_release ():
49+ for asset in latest_data_release ["assets" ]:
50+ browser_download_url = asset ["browser_download_url" ]
51+ filename = browser_download_url .rsplit ("/" )[- 1 ]
52+ if m := re .match (r"cdot-(\d+\.\d+\.\d+)\.(refseq|ensembl)\.(.+)\.json\.gz" , filename ):
53+ _version , annotation_consortium , genome_build = m .groups ()
54+ if annotation_consortium .lower () in annotation_consortia and genome_build .lower () in genome_builds :
55+ file_urls .append (browser_download_url )
56+ return file_urls
0 commit comments