pyobo 0.11.2__py3-none-any.whl → 0.12.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (227) hide show
  1. pyobo/.DS_Store +0 -0
  2. pyobo/__init__.py +95 -20
  3. pyobo/__main__.py +0 -0
  4. pyobo/api/__init__.py +81 -10
  5. pyobo/api/alts.py +52 -42
  6. pyobo/api/combine.py +39 -0
  7. pyobo/api/edges.py +68 -0
  8. pyobo/api/hierarchy.py +231 -203
  9. pyobo/api/metadata.py +14 -19
  10. pyobo/api/names.py +207 -127
  11. pyobo/api/properties.py +117 -113
  12. pyobo/api/relations.py +68 -94
  13. pyobo/api/species.py +24 -21
  14. pyobo/api/typedefs.py +11 -11
  15. pyobo/api/utils.py +66 -13
  16. pyobo/api/xrefs.py +108 -114
  17. pyobo/cli/__init__.py +0 -0
  18. pyobo/cli/cli.py +35 -50
  19. pyobo/cli/database.py +183 -161
  20. pyobo/{xrefdb/xrefs_pipeline.py → cli/database_utils.py} +54 -73
  21. pyobo/cli/lookup.py +163 -195
  22. pyobo/cli/utils.py +19 -6
  23. pyobo/constants.py +102 -3
  24. pyobo/getters.py +196 -118
  25. pyobo/gilda_utils.py +79 -200
  26. pyobo/identifier_utils/__init__.py +41 -0
  27. pyobo/identifier_utils/api.py +296 -0
  28. pyobo/identifier_utils/model.py +130 -0
  29. pyobo/identifier_utils/preprocessing.json +812 -0
  30. pyobo/identifier_utils/preprocessing.py +61 -0
  31. pyobo/identifier_utils/relations/__init__.py +8 -0
  32. pyobo/identifier_utils/relations/api.py +162 -0
  33. pyobo/identifier_utils/relations/data.json +5824 -0
  34. pyobo/identifier_utils/relations/data_owl.json +57 -0
  35. pyobo/identifier_utils/relations/data_rdf.json +1 -0
  36. pyobo/identifier_utils/relations/data_rdfs.json +7 -0
  37. pyobo/mocks.py +9 -6
  38. pyobo/ner/__init__.py +9 -0
  39. pyobo/ner/api.py +72 -0
  40. pyobo/ner/normalizer.py +33 -0
  41. pyobo/obographs.py +43 -39
  42. pyobo/plugins.py +5 -4
  43. pyobo/py.typed +0 -0
  44. pyobo/reader.py +1358 -395
  45. pyobo/reader_utils.py +155 -0
  46. pyobo/resource_utils.py +42 -22
  47. pyobo/resources/__init__.py +0 -0
  48. pyobo/resources/goc.py +75 -0
  49. pyobo/resources/goc.tsv +188 -0
  50. pyobo/resources/ncbitaxon.py +4 -5
  51. pyobo/resources/ncbitaxon.tsv.gz +0 -0
  52. pyobo/resources/ro.py +3 -2
  53. pyobo/resources/ro.tsv +0 -0
  54. pyobo/resources/so.py +0 -0
  55. pyobo/resources/so.tsv +0 -0
  56. pyobo/sources/README.md +12 -8
  57. pyobo/sources/__init__.py +52 -29
  58. pyobo/sources/agrovoc.py +0 -0
  59. pyobo/sources/antibodyregistry.py +11 -12
  60. pyobo/sources/bigg/__init__.py +13 -0
  61. pyobo/sources/bigg/bigg_compartment.py +81 -0
  62. pyobo/sources/bigg/bigg_metabolite.py +229 -0
  63. pyobo/sources/bigg/bigg_model.py +46 -0
  64. pyobo/sources/bigg/bigg_reaction.py +77 -0
  65. pyobo/sources/biogrid.py +1 -2
  66. pyobo/sources/ccle.py +7 -12
  67. pyobo/sources/cgnc.py +0 -5
  68. pyobo/sources/chebi.py +1 -1
  69. pyobo/sources/chembl/__init__.py +9 -0
  70. pyobo/sources/{chembl.py → chembl/chembl_compound.py} +13 -25
  71. pyobo/sources/chembl/chembl_target.py +160 -0
  72. pyobo/sources/civic_gene.py +55 -15
  73. pyobo/sources/clinicaltrials.py +160 -0
  74. pyobo/sources/complexportal.py +24 -24
  75. pyobo/sources/conso.py +14 -22
  76. pyobo/sources/cpt.py +0 -0
  77. pyobo/sources/credit.py +1 -9
  78. pyobo/sources/cvx.py +27 -5
  79. pyobo/sources/depmap.py +9 -12
  80. pyobo/sources/dictybase_gene.py +2 -7
  81. pyobo/sources/drugbank/__init__.py +9 -0
  82. pyobo/sources/{drugbank.py → drugbank/drugbank.py} +11 -16
  83. pyobo/sources/{drugbank_salt.py → drugbank/drugbank_salt.py} +3 -8
  84. pyobo/sources/drugcentral.py +17 -13
  85. pyobo/sources/expasy.py +31 -34
  86. pyobo/sources/famplex.py +13 -18
  87. pyobo/sources/flybase.py +3 -8
  88. pyobo/sources/gard.py +62 -0
  89. pyobo/sources/geonames/__init__.py +9 -0
  90. pyobo/sources/geonames/features.py +28 -0
  91. pyobo/sources/{geonames.py → geonames/geonames.py} +87 -26
  92. pyobo/sources/geonames/utils.py +115 -0
  93. pyobo/sources/gmt_utils.py +6 -7
  94. pyobo/sources/go.py +20 -13
  95. pyobo/sources/gtdb.py +154 -0
  96. pyobo/sources/gwascentral/__init__.py +9 -0
  97. pyobo/sources/{gwascentral_phenotype.py → gwascentral/gwascentral_phenotype.py} +5 -7
  98. pyobo/sources/{gwascentral_study.py → gwascentral/gwascentral_study.py} +1 -7
  99. pyobo/sources/hgnc/__init__.py +9 -0
  100. pyobo/sources/{hgnc.py → hgnc/hgnc.py} +56 -70
  101. pyobo/sources/{hgncgenefamily.py → hgnc/hgncgenefamily.py} +8 -18
  102. pyobo/sources/icd/__init__.py +9 -0
  103. pyobo/sources/{icd10.py → icd/icd10.py} +35 -37
  104. pyobo/sources/icd/icd11.py +148 -0
  105. pyobo/sources/{icd_utils.py → icd/icd_utils.py} +66 -20
  106. pyobo/sources/interpro.py +4 -9
  107. pyobo/sources/itis.py +0 -5
  108. pyobo/sources/kegg/__init__.py +0 -0
  109. pyobo/sources/kegg/api.py +16 -38
  110. pyobo/sources/kegg/genes.py +9 -20
  111. pyobo/sources/kegg/genome.py +1 -7
  112. pyobo/sources/kegg/pathway.py +9 -21
  113. pyobo/sources/mesh.py +58 -24
  114. pyobo/sources/mgi.py +3 -10
  115. pyobo/sources/mirbase/__init__.py +11 -0
  116. pyobo/sources/{mirbase.py → mirbase/mirbase.py} +8 -11
  117. pyobo/sources/{mirbase_constants.py → mirbase/mirbase_constants.py} +0 -0
  118. pyobo/sources/{mirbase_family.py → mirbase/mirbase_family.py} +4 -8
  119. pyobo/sources/{mirbase_mature.py → mirbase/mirbase_mature.py} +3 -7
  120. pyobo/sources/msigdb.py +74 -39
  121. pyobo/sources/ncbi/__init__.py +9 -0
  122. pyobo/sources/ncbi/ncbi_gc.py +162 -0
  123. pyobo/sources/{ncbigene.py → ncbi/ncbigene.py} +18 -19
  124. pyobo/sources/nih_reporter.py +60 -0
  125. pyobo/sources/nlm/__init__.py +9 -0
  126. pyobo/sources/nlm/nlm_catalog.py +48 -0
  127. pyobo/sources/nlm/nlm_publisher.py +36 -0
  128. pyobo/sources/nlm/utils.py +116 -0
  129. pyobo/sources/npass.py +6 -8
  130. pyobo/sources/omim_ps.py +10 -3
  131. pyobo/sources/pathbank.py +4 -8
  132. pyobo/sources/pfam/__init__.py +9 -0
  133. pyobo/sources/{pfam.py → pfam/pfam.py} +3 -8
  134. pyobo/sources/{pfam_clan.py → pfam/pfam_clan.py} +2 -7
  135. pyobo/sources/pharmgkb/__init__.py +15 -0
  136. pyobo/sources/pharmgkb/pharmgkb_chemical.py +89 -0
  137. pyobo/sources/pharmgkb/pharmgkb_disease.py +77 -0
  138. pyobo/sources/pharmgkb/pharmgkb_gene.py +108 -0
  139. pyobo/sources/pharmgkb/pharmgkb_pathway.py +63 -0
  140. pyobo/sources/pharmgkb/pharmgkb_variant.py +84 -0
  141. pyobo/sources/pharmgkb/utils.py +86 -0
  142. pyobo/sources/pid.py +1 -6
  143. pyobo/sources/pombase.py +6 -10
  144. pyobo/sources/pubchem.py +4 -9
  145. pyobo/sources/reactome.py +5 -11
  146. pyobo/sources/rgd.py +11 -16
  147. pyobo/sources/rhea.py +37 -36
  148. pyobo/sources/ror.py +69 -42
  149. pyobo/sources/selventa/__init__.py +0 -0
  150. pyobo/sources/selventa/schem.py +4 -7
  151. pyobo/sources/selventa/scomp.py +1 -6
  152. pyobo/sources/selventa/sdis.py +4 -7
  153. pyobo/sources/selventa/sfam.py +1 -6
  154. pyobo/sources/sgd.py +6 -11
  155. pyobo/sources/signor/__init__.py +7 -0
  156. pyobo/sources/signor/download.py +41 -0
  157. pyobo/sources/signor/signor_complexes.py +105 -0
  158. pyobo/sources/slm.py +12 -15
  159. pyobo/sources/umls/__init__.py +7 -1
  160. pyobo/sources/umls/__main__.py +0 -0
  161. pyobo/sources/umls/get_synonym_types.py +20 -4
  162. pyobo/sources/umls/sty.py +57 -0
  163. pyobo/sources/umls/synonym_types.tsv +1 -1
  164. pyobo/sources/umls/umls.py +18 -22
  165. pyobo/sources/unimod.py +46 -0
  166. pyobo/sources/uniprot/__init__.py +1 -1
  167. pyobo/sources/uniprot/uniprot.py +40 -32
  168. pyobo/sources/uniprot/uniprot_ptm.py +4 -34
  169. pyobo/sources/utils.py +3 -2
  170. pyobo/sources/wikipathways.py +7 -10
  171. pyobo/sources/zfin.py +5 -10
  172. pyobo/ssg/__init__.py +12 -16
  173. pyobo/ssg/base.html +0 -0
  174. pyobo/ssg/index.html +26 -13
  175. pyobo/ssg/term.html +12 -2
  176. pyobo/ssg/typedef.html +0 -0
  177. pyobo/struct/__init__.py +54 -8
  178. pyobo/struct/functional/__init__.py +1 -0
  179. pyobo/struct/functional/dsl.py +2572 -0
  180. pyobo/struct/functional/macros.py +423 -0
  181. pyobo/struct/functional/obo_to_functional.py +385 -0
  182. pyobo/struct/functional/ontology.py +270 -0
  183. pyobo/struct/functional/utils.py +112 -0
  184. pyobo/struct/reference.py +331 -136
  185. pyobo/struct/struct.py +1413 -643
  186. pyobo/struct/struct_utils.py +1078 -0
  187. pyobo/struct/typedef.py +162 -210
  188. pyobo/struct/utils.py +12 -5
  189. pyobo/struct/vocabulary.py +138 -0
  190. pyobo/utils/__init__.py +0 -0
  191. pyobo/utils/cache.py +13 -11
  192. pyobo/utils/io.py +17 -31
  193. pyobo/utils/iter.py +5 -5
  194. pyobo/utils/misc.py +41 -53
  195. pyobo/utils/ndex_utils.py +0 -0
  196. pyobo/utils/path.py +76 -70
  197. pyobo/version.py +3 -3
  198. {pyobo-0.11.2.dist-info → pyobo-0.12.0.dist-info}/METADATA +228 -229
  199. pyobo-0.12.0.dist-info/RECORD +202 -0
  200. pyobo-0.12.0.dist-info/WHEEL +4 -0
  201. {pyobo-0.11.2.dist-info → pyobo-0.12.0.dist-info}/entry_points.txt +1 -0
  202. pyobo-0.12.0.dist-info/licenses/LICENSE +21 -0
  203. pyobo/aws.py +0 -162
  204. pyobo/cli/aws.py +0 -47
  205. pyobo/identifier_utils.py +0 -142
  206. pyobo/normalizer.py +0 -232
  207. pyobo/registries/__init__.py +0 -16
  208. pyobo/registries/metaregistry.json +0 -507
  209. pyobo/registries/metaregistry.py +0 -135
  210. pyobo/sources/icd11.py +0 -105
  211. pyobo/xrefdb/__init__.py +0 -1
  212. pyobo/xrefdb/canonicalizer.py +0 -214
  213. pyobo/xrefdb/priority.py +0 -59
  214. pyobo/xrefdb/sources/__init__.py +0 -60
  215. pyobo/xrefdb/sources/biomappings.py +0 -36
  216. pyobo/xrefdb/sources/cbms2019.py +0 -91
  217. pyobo/xrefdb/sources/chembl.py +0 -83
  218. pyobo/xrefdb/sources/compath.py +0 -82
  219. pyobo/xrefdb/sources/famplex.py +0 -64
  220. pyobo/xrefdb/sources/gilda.py +0 -50
  221. pyobo/xrefdb/sources/intact.py +0 -113
  222. pyobo/xrefdb/sources/ncit.py +0 -133
  223. pyobo/xrefdb/sources/pubchem.py +0 -27
  224. pyobo/xrefdb/sources/wikidata.py +0 -116
  225. pyobo-0.11.2.dist-info/RECORD +0 -157
  226. pyobo-0.11.2.dist-info/WHEEL +0 -5
  227. pyobo-0.11.2.dist-info/top_level.txt +0 -1
@@ -0,0 +1,202 @@
1
+ pyobo/plugins.py,sha256=c04afe369c99ed9eae12bd2e18334e7972ce199a2419b166a377becf63cd2893,1232
2
+ pyobo/getters.py,sha256=2c692998854debb077a34760e2137a384538f67ab26223528ac61ef2f6f75db0,18190
3
+ pyobo/gilda_utils.py,sha256=d2f9a9cdc55aac31f9e0c22ff74b189733b767b78f6c30d40efd6d103c024cc5,4726
4
+ pyobo/.DS_Store,sha256=3be251abc9bfef0098dacb54b161230be447594c210a59c77bc5761c3b891943,8196
5
+ pyobo/version.py,sha256=2eea47b601dcb6b0c7680274221cb4f6a81e95fc7937aaf8db8352966358f692,926
6
+ pyobo/ner/__init__.py,sha256=0199b704f1235184d521069034823c3d9960ff6756205c299649b87a4bbd4041,153
7
+ pyobo/ner/api.py,sha256=b34309833eac8f5dea881d531323bf682f35d377e09d807066ba1183282964dc,2167
8
+ pyobo/ner/normalizer.py,sha256=4e90d93801877f72f2fab8069db986e79cc749533a068a8b07a9d7c9e37cb9c2,954
9
+ pyobo/obographs.py,sha256=0736a4446a4f4f824fb42383e96c8853d50b6d1bbbb52c889f543b372d87e286,4189
10
+ pyobo/resource_utils.py,sha256=6e5a1229b1df30bcf4841f009213247cb386ab0e85c8ef02114e8b360d0f54c9,4406
11
+ pyobo/resources/goc.py,sha256=6b7e352d9a7e00e08c92588a65d283be09ab5dac9fc4e9780e14b130b64ce5ba,2550
12
+ pyobo/resources/goc.tsv,sha256=5bb98b945fbc9e0876e2a921f328a72f8b44f5686037e341fc8432b1a1d0d616,9081
13
+ pyobo/resources/__init__.py,sha256=43d9e293b1e0a4808238dec610aa5bc37cfd64833b345270a063697a9927da70,38
14
+ pyobo/resources/so.tsv,sha256=50964a153100bff5eccd861bba7e167fa6f88e8bc38d229cd51591411713cc3c,82068
15
+ pyobo/resources/so.py,sha256=4bebe643b2fc009134f057c6543209a8d40d68b3d49ae27a1c2e45e2158732b0,1466
16
+ pyobo/resources/ro.py,sha256=df0a739171825f42441f261c09104c277016fb098baa242ff18bc965a1217c99,1508
17
+ pyobo/resources/ro.tsv,sha256=62f9412cf00acb6c38221798ccef68c75620e9690774c5733104e29089440a88,26586
18
+ pyobo/resources/ncbitaxon.py,sha256=92484774b0f45247cb4090b34e3851a5c175dde2da03e472d891c9953968116b,1979
19
+ pyobo/resources/ncbitaxon.tsv.gz,sha256=e37cc78e756deb64c0e3f955e7c5fe1423dd3037cb8350753ef652aff5f2f616,22981954
20
+ pyobo/constants.py,sha256=c1ffa4f12c1ddee556adf728ef4ac51da44f228fe6fca9b58b9ab8f263acc87b,5112
21
+ pyobo/__init__.py,sha256=0d90185e6e3aa041ccc27c68226c45e456e39369328e3db17706d65b52015819,3439
22
+ pyobo/utils/iter.py,sha256=ad845b6da1491f131a134c94fab419a026a0608aed7afd3db98d26c4591fe736,1524
23
+ pyobo/utils/misc.py,sha256=99d1f6e88b48d3f0cdbd7fff8a908556bf949278fcf0ef639e5cc8a421d0f4db,2684
24
+ pyobo/utils/ndex_utils.py,sha256=128902592d345ab93fe32f2575e42e53269a0bac8dcc18370da81497e2767336,2326
25
+ pyobo/utils/io.py,sha256=fd1b02443f0e834fe96b8656ff3baa1bca336a18f11802b74aaacb33308236c0,4214
26
+ pyobo/utils/cache.py,sha256=f23601b67c7435ea37cd5bea6caec120e69455cfebfe9b65b65d7527c58b6253,3088
27
+ pyobo/utils/__init__.py,sha256=08035263cbc6abfeaff2b5a159121d9e4f96a392c0d91f568e0d67a9b5aa2cec,17
28
+ pyobo/utils/path.py,sha256=e77ded1aa51869bf941fa250d6306fbdfbe30bf712954ebecb830130539ca62c,3486
29
+ pyobo/cli/database.py,sha256=7b954538c4e643e606150462447645b2f7d10f0b1ae859d76e141e3e35255bfe,11012
30
+ pyobo/cli/lookup.py,sha256=1b11bbe771979c345ff8df494562919900b95e237c7c437997595ee42de31c76,9163
31
+ pyobo/cli/__init__.py,sha256=a5388bbb38e3a62d0febdc958d0da413a9c152666e6059ea74934364b0e482f9,71
32
+ pyobo/cli/database_utils.py,sha256=aef42d7d5e561cf2a765cececd0fd8c1750a20739c3294d0b3df6e595322d195,5793
33
+ pyobo/cli/cli.py,sha256=ca057c8505fa7f40730ac0aa0a77e033e30ede9074a145f0b70d7b5f622aa2bd,2939
34
+ pyobo/cli/utils.py,sha256=9e6b57b311b44d61088e321efa387f6aacebd3d6d337bf8d1c589fb871b3304d,1738
35
+ pyobo/struct/__init__.py,sha256=fb813dfa7de27f195c07cd5311de78403b03dfbf0a183995c8fb448033ace311,1444
36
+ pyobo/struct/typedef.py,sha256=fd94429e28efcdf7bbeba4b1729fa66af5f64c34e49437d82e4b3e5a457d064d,12099
37
+ pyobo/struct/struct_utils.py,sha256=7b8bfd7a322f34cf1436b83c8eab983944651ba467923045bf61ecc245800d2c,39164
38
+ pyobo/struct/utils.py,sha256=ce4a4e138d894087e4374adce6a34434ad375482a691fff9eed1e88cc24aef56,906
39
+ pyobo/struct/reference.py,sha256=e54972991dc195149ab3e1dc154a47629adc16361eb6800bbf18a123cdeca51c,11715
40
+ pyobo/struct/vocabulary.py,sha256=56e0f6770cf7da2d6f1221e3fc8261f1c07dc8358a1f3dfb487894a25b1ed133,4335
41
+ pyobo/struct/functional/dsl.py,sha256=780b4e5616b8dc823cee610945a95ffa109aa43287992dd4dd51511c461f96fb,101183
42
+ pyobo/struct/functional/__init__.py,sha256=d536edb7fe86a1aad19607df3dea62b49dd0b4bb2b30f31b8431a842700a499e,32
43
+ pyobo/struct/functional/obo_to_functional.py,sha256=785c46fdb00dc45f3903f67ad24ae4fcb6d187ce48208373fc9d42833a85f6b8,13273
44
+ pyobo/struct/functional/utils.py,sha256=73e5c6d9227b0a162dcfb294dcad05f93ea870c8d87af7a2d16c6591f9249ad1,3487
45
+ pyobo/struct/functional/macros.py,sha256=cc654f131fa685d4afc87d8c7b5e8565da1b789dd5d73045a77b3e033a8ced52,13785
46
+ pyobo/struct/functional/ontology.py,sha256=64620cc1c1df919835a4a48342f62d1fdfa7067bb40e45da0169632aee4ff6c1,9245
47
+ pyobo/struct/struct.py,sha256=d057dc0ccc6f153b9984770013ee7a8d1227029e29b957224ef10cfdcf787f05,87231
48
+ pyobo/ssg/index.html,sha256=da62c16a198f7ad2468599c5d7e4da4d7b81e02a18a25a59da741a579746e676,4346
49
+ pyobo/ssg/typedef.html,sha256=2ab76acc1eb18edebcf5b1b7dc3dba00bfb5d49aef36e124a3134d23e106f938,2038
50
+ pyobo/ssg/base.html,sha256=fef95d5026be80bd984cd63a1a002ec4d4f74e06840f9f39bc5feaed3aeb8d8b,2844
51
+ pyobo/ssg/__init__.py,sha256=8500042e3156fe3acd5fd5546b0ed52038d842150389c512b3e99267302f152a,5224
52
+ pyobo/ssg/term.html,sha256=b522c82774980d37ad2bd8361280cacaee1a1dc855a351145e4fda62119e38aa,3869
53
+ pyobo/reader.py,sha256=76eff0c23950346e12f9a9c88422b6b4b9cb4dabb080eff154bd197b1900792c,52486
54
+ pyobo/identifier_utils/relations/data_rdfs.json,sha256=6e3a7166d7b78385afac626c987b8024dfdc83f7dac6a21af6d08bedab8776a4,86
55
+ pyobo/identifier_utils/relations/__init__.py,sha256=2961f492b8530a678a9e010887b5530c3de1cc2df8f294e210a18dbb748d01db,159
56
+ pyobo/identifier_utils/relations/data.json,sha256=88b6ce5fb632faa389b512b68f1b73acdd54b552a1aaa8043430eb5e0020a0bc,113169
57
+ pyobo/identifier_utils/relations/api.py,sha256=c625bca0f09379ba7ef544d05aaf4b998ee9798945a90f3b98b6d763ef9d36df,5764
58
+ pyobo/identifier_utils/relations/data_rdf.json,sha256=4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945,2
59
+ pyobo/identifier_utils/relations/data_owl.json,sha256=a70fe8850a0b32f0ca5f9358085a340297a3464d7ba61e83333fe69d6ae4c826,1066
60
+ pyobo/identifier_utils/__init__.py,sha256=8aa8cd780d13c8af054ff96ed098d618775d9dd1bbfb1c1a537e67e8e6fb80d4,894
61
+ pyobo/identifier_utils/model.py,sha256=569c9198397cbed31544662fb9ed19da901062ec5ccb26a35f3dc303cec0f96a,5103
62
+ pyobo/identifier_utils/api.py,sha256=2e114f702188838057122114cca344a8f5371d13d90f386dbbbc4c2630caa062,9001
63
+ pyobo/identifier_utils/preprocessing.py,sha256=7a0f7ab6d8dc85b0b185b88a9bd4c01ad6a49f4b76faaf8fbdeceee86806e6ea,1845
64
+ pyobo/identifier_utils/preprocessing.json,sha256=9298fbec6148b4987edce3e931190f8a1f5fdd727aa239b8fcf59fbed9f1212f,32710
65
+ pyobo/py.typed,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
66
+ pyobo/sources/signor/download.py,sha256=ae40c954403a95dd33e221b5e2d30e70072e4658d043d48024068b75ac5a833f,1053
67
+ pyobo/sources/signor/__init__.py,sha256=6de6ff151aaca2a2d5317b437916405dff5783d50120704ed39b8f53df0d6a32,139
68
+ pyobo/sources/signor/signor_complexes.py,sha256=04634cfe41b48eda51fa2eab0d2305e5729e0a59563b7e336762aae0532d064d,3802
69
+ pyobo/sources/expasy.py,sha256=25f116d229b5c25858db82add7a037e8c5b405e40dbfd76d3ff67a1f581c8755,11053
70
+ pyobo/sources/biogrid.py,sha256=75897a3eddd8a4d0f672f4e5e4b2007a45b22697257fb47526f149513f571fd0,3297
71
+ pyobo/sources/geonames/geonames.py,sha256=148ed89cea0b8e84fcc3dd12e865e28143ec9ab986ae6627e210090f8a733a1a,10112
72
+ pyobo/sources/geonames/__init__.py,sha256=2508697bc04a0524353fcdefb503126c029aeb1276b6f5fae0e303883e5633bb,177
73
+ pyobo/sources/geonames/features.py,sha256=255edf0b5bcd90327dfcfa464955def40f6f5cddb6193593bdf823dd55a1cf28,688
74
+ pyobo/sources/geonames/utils.py,sha256=89488531ea3f53c1680258a33285fb361c84686f4c7e9a7312d55b8b252ecdae,4012
75
+ pyobo/sources/conso.py,sha256=4786079e79746e192a0c6059cb7e7144e0995f9ec4f621cf943249b336a0b06b,2320
76
+ pyobo/sources/slm.py,sha256=986242c3f131a541116d6b452e8f053763607d5844befdf79bae893db85c8f62,4246
77
+ pyobo/sources/unimod.py,sha256=4efb3868cca9e83287ea6bfd3a35caf2d6a41b301ce1cfa92215380c87587753,1292
78
+ pyobo/sources/civic_gene.py,sha256=01639d80ea1b1656d4f794f5840fc2a3624da0d29de4c252b85e239d84a4830f,3096
79
+ pyobo/sources/pombase.py,sha256=f67807c320178c897d00ab05a943d121b15682f902c1cb3c576af53bfbdb3b29,3696
80
+ pyobo/sources/pid.py,sha256=3dc2cdc50abe9f61139d7a6608d6b8c8264a6663bd3aef963c1a2d2bda893f18,4460
81
+ pyobo/sources/zfin.py,sha256=57d73862574abbd82e017368163ffd7e6f7875eef180a598256503d87344e16e,5339
82
+ pyobo/sources/npass.py,sha256=a09682a38dc2206cb6b40b8cc483d3f0f7d24516b3250c39d4f2408ea30fb07f,2742
83
+ pyobo/sources/ncbi/__init__.py,sha256=4ae3c1445e191b45fa3ec3dab96be5616c7de5850648e0dd8f20abe58c90ce69,156
84
+ pyobo/sources/ncbi/ncbi_gc.py,sha256=b8682bb7b7c5cbb9b912fadef8d2efb896b88dfb5464d0b8bad34354c9e4e6bb,5470
85
+ pyobo/sources/ncbi/ncbigene.py,sha256=ce9b8c7b9f434597dccf2c497dd4a521a2330dcf4c0df325018dd2fc664af7b0,5096
86
+ pyobo/sources/bigg/__init__.py,sha256=e292beef5071d08bfddcfaa665e714297f4b71aa5b5bdc26ef304df6f85ba582,349
87
+ pyobo/sources/bigg/bigg_model.py,sha256=9f8dd98076c2512e8a0669acb5f154bb7f619643ec0e10697f6381fa4005ed80,1287
88
+ pyobo/sources/bigg/bigg_metabolite.py,sha256=cece770b13d7ed74d9a553adcba3169714f7bf4c0b8161da3c8e3ed2f9db3e9a,7728
89
+ pyobo/sources/bigg/bigg_reaction.py,sha256=e3948821a7b7d86b43c732ff82917ba754ca55f87ab775201e91787e55413bd2,2459
90
+ pyobo/sources/bigg/bigg_compartment.py,sha256=a454a13221fe58d1fe9ac98e5c319482ede0ae2f0946be6eae2ccdc2abd45eac,3430
91
+ pyobo/sources/gmt_utils.py,sha256=ccb91b1c62f10543c7c56ee308e1da6535b5d58ccf8fc38df84e107cf4131f11,1327
92
+ pyobo/sources/pubchem.py,sha256=953b1cd1d82b489e64c6571a51c517272762fb1b0c7f67c8d84716b1b5bcc535,5153
93
+ pyobo/sources/msigdb.py,sha256=e3975d59a15dcc66749436af855db3958914786c50d2341609522dfb50d065dc,6810
94
+ pyobo/sources/drugcentral.py,sha256=9fb9bbcbaf0b3c494163dde2e627a6695366ca1c74cb7293efd2419871a610a1,4047
95
+ pyobo/sources/agrovoc.py,sha256=489b1b27b2adc5d2541bd4629a66f609f2dfce92bd78eccfd30c79f608feeace,787
96
+ pyobo/sources/sgd.py,sha256=9eab044ec6e71742edc1935d7fe0f617673348119942760149a98bca7426b8d7,2073
97
+ pyobo/sources/depmap.py,sha256=7f05bfd54901e49b6c797c137dbd017e32ef626fb17feb17c1feb368f2a4960f,3585
98
+ pyobo/sources/drugbank/drugbank_salt.py,sha256=69b565fe280b7a698cc3850b8b7fc8b5381f09aab7bb26e3aa7b13f5187b0b59,1646
99
+ pyobo/sources/drugbank/__init__.py,sha256=880b2dbd9419d3525c25e0089b606727ddb7501be2f1a490e2d1158440e8540a,178
100
+ pyobo/sources/drugbank/drugbank.py,sha256=eb2fc65b2d43ac54c0c81fefb0701b1326411027cf3cfb5eac7534df925cb33c,10899
101
+ pyobo/sources/rgd.py,sha256=46020f5933a846a7575ffdd8330ddde8df560d16872c9475f204da59cfdbce4e,5316
102
+ pyobo/sources/__init__.py,sha256=94db6754ef36ea969a347c2ae38ff9eddb44dbe177ce06d9f93e5432592bc404,4630
103
+ pyobo/sources/pharmgkb/pharmgkb_pathway.py,sha256=3eb66d425b46ff38f3be9f8aeb7291c3e22ac49b4eef25f74e703ff68fb270e7,2042
104
+ pyobo/sources/pharmgkb/pharmgkb_gene.py,sha256=848aa319c348e7eb84341183294d08000c36b54cd1a692fbbc5b833d087d092b,4102
105
+ pyobo/sources/pharmgkb/__init__.py,sha256=25df339dedc6617df9ba4a80ef2b5b620b2425ab900893cc3f4de8e5c3557a20,443
106
+ pyobo/sources/pharmgkb/pharmgkb_chemical.py,sha256=698096d364d5cc0c59e659dee428eb4fb5224818fa0b567a30173a9dc9ff229c,3142
107
+ pyobo/sources/pharmgkb/pharmgkb_variant.py,sha256=1a1f5f34895446614589cf9f4307bfe9218a316dee21018a4610b4b6fb163ad0,2873
108
+ pyobo/sources/pharmgkb/utils.py,sha256=485b51020fd4c68bb96297ea3d3b05f707b4c0132c6a5c326dd5009b9652f9c2,2593
109
+ pyobo/sources/pharmgkb/pharmgkb_disease.py,sha256=b68a85adb653b67add77ce54e9be9a41d47d683ef565fdbe13598b3fbf033f34,2554
110
+ pyobo/sources/cpt.py,sha256=6fb85c50b96fbbfc5ae94470a03dfb19cffc540b3c9b16b00255df94bd5ed4b5,1466
111
+ pyobo/sources/pathbank.py,sha256=496e2611d5825f6319606d55269f322c4cf206efce99a653b521ab7a57680ed4,5387
112
+ pyobo/sources/gwascentral/gwascentral_phenotype.py,sha256=4af302177b18a9cdc5e6735709fefa033221353ebdf191c79d3a4ed0819fb7ca,1788
113
+ pyobo/sources/gwascentral/__init__.py,sha256=55d1c8801551fb7e81ee02ee851e175795179ff120359d3e8b583d36384e8d8d,231
114
+ pyobo/sources/gwascentral/gwascentral_study.py,sha256=bddb3b20e2374cc3ff14601aba36c17466897d46f1d086bf75ecf62992263bd9,2657
115
+ pyobo/sources/omim_ps.py,sha256=1a09fbded65dc3e85697692552dcf3a5c643ef27677d17bd8b316afc28606c08,1249
116
+ pyobo/sources/selventa/schem.py,sha256=bea37f6bf34b7ac863fb6751b997a57ce2c943977253766085f49122af441550,1162
117
+ pyobo/sources/selventa/sdis.py,sha256=b3169dde3868d74ab6a12ce3c820e419605884ac2ccbf8da4bec0f24ac1c2e75,1287
118
+ pyobo/sources/selventa/__init__.py,sha256=7082039562fdce72f6af4699209dabd4537734cf62a3be30f877b67a0cc9c17f,254
119
+ pyobo/sources/selventa/scomp.py,sha256=9ec86c90b41e5eecdfe6defd49326c54a260dd1f34097dc3b89054ac487049b7,1531
120
+ pyobo/sources/selventa/sfam.py,sha256=127f2d0327e4bfd8a60356682d426f41080672d7ef4c6b84a1bef0968671197b,1448
121
+ pyobo/sources/mesh.py,sha256=39a11c96a65d2be65081caea7664d7e1c03980a71484c83ff03913ed2b53de2d,13245
122
+ pyobo/sources/mirbase/mirbase_constants.py,sha256=e438dcc17fc5452cc561b4dfe74caf90f6a64881fbd11c3723cabe0ecd331d5b,1998
123
+ pyobo/sources/mirbase/__init__.py,sha256=f3f6043634b2e79fc22a419d19303b523baff1db7e61f87dd15fa1b778f0a659,252
124
+ pyobo/sources/mirbase/mirbase_family.py,sha256=4c858a861174a67e9d8504d380b838958ac92adbbe20b96dac71590f4a9e65be,1974
125
+ pyobo/sources/mirbase/mirbase_mature.py,sha256=263eb9c55aad8eabb3a991938bc7273262ddc9f51f9ad84cfe46b5499dbeaf31,1302
126
+ pyobo/sources/mirbase/mirbase.py,sha256=f61b8bd0f58055c10393ee2e9d9c3e1889f2104d42fc55f047137ae471b7c717,6387
127
+ pyobo/sources/icd/icd11.py,sha256=5b6e59f8028cfbd41f860151d1164514be2653a50078c0fc8748c20b815ee11b,4867
128
+ pyobo/sources/icd/__init__.py,sha256=0eb65597be8ff1eb2c278b6564f71ab8556b5d590821907ab09d1ce8a9ba4962,142
129
+ pyobo/sources/icd/icd10.py,sha256=61ab55ce0af6dbd27f59e25c6b8150007a96af1edcecde1f1db85bd5c4354de5,2587
130
+ pyobo/sources/icd/icd_utils.py,sha256=8fbc63228bd61b4f86c47eee5d6ad76433b52d7132a3fe0275680f4874c85c96,4525
131
+ pyobo/sources/gtdb.py,sha256=ab420486568c8ad1d6a39200cb6979f2e5cc2d67a40addeb2303a60ecb031138,5221
132
+ pyobo/sources/kegg/pathway.py,sha256=82333defe9d69a0a493b69368112d61d922195d333d081ed3679b355bfb235af,5892
133
+ pyobo/sources/kegg/__init__.py,sha256=8553f4b6ec15a6234c8a416ffdb34faf3b98bfe1c0d7f6cf742bcdc7e7e6e458,219
134
+ pyobo/sources/kegg/api.py,sha256=b33bb6e604b7103e6f51c287aa1e9723a839119cf9d950d2fd4148688bd4e49c,4191
135
+ pyobo/sources/kegg/genes.py,sha256=c74a156d1612e7150f507858ba80288ec20fc9f8c08bcb7b45faf715aa6d770d,3558
136
+ pyobo/sources/kegg/genome.py,sha256=32aedb662b637c96c81e4da0da09d2244a99963001465aa1a572035e5386cc7a,4161
137
+ pyobo/sources/hgnc/__init__.py,sha256=d5084cec674febf03108ccda073da4dd244b9034ce912da15213cc2c44d21963,157
138
+ pyobo/sources/hgnc/hgnc.py,sha256=f05121570f4e4b06f4d70bbf6950363349a726de22c6f2ed5e3e43411591bf95,16377
139
+ pyobo/sources/hgnc/hgncgenefamily.py,sha256=e3e8d0b750d59a7da3d0ac2b100e248e8dad51af54c045405a12704e36db20cd,3710
140
+ pyobo/sources/README.md,sha256=0296f0a48da16d8422c3837a284fd5000a5f3a64d01e47936eb34413121b5f82,901
141
+ pyobo/sources/antibodyregistry.py,sha256=3726d4ccf1286e7e73aebd6252f0bc67d72ea83103335bb4eec8d5d540037664,3353
142
+ pyobo/sources/mgi.py,sha256=7d40f86d4bb07bc93e1f8b45e7856f0f25314fec5e04c6548ff7e5611b1fa5cf,5541
143
+ pyobo/sources/utils.py,sha256=98120062c2dba0007ac3ac0f4d3bf52c3401cd742ee7c4d496734624b589c31a,1118
144
+ pyobo/sources/nlm/__init__.py,sha256=74b7831ddabf96fb72d6984972a33e7b0f152843d4f3c8b210cc202e4227c6c7,178
145
+ pyobo/sources/nlm/nlm_publisher.py,sha256=96be828e8d8c76569ddc94e49f772b69f58a2f595c1d7dad16e29d9c8a0a6b9c,984
146
+ pyobo/sources/nlm/nlm_catalog.py,sha256=a205c3878cf2471ebdfd86c682e1f4c96114e7edd2bc79cb06f132c6d800e990,1339
147
+ pyobo/sources/nlm/utils.py,sha256=6c4057cf3d9f8e39c515c8ebabfabc99faf57f4fd188a66843b1f5f20a55e070,4861
148
+ pyobo/sources/nih_reporter.py,sha256=cac85ef3050695cb97c94e81caa409bc252bebd49354485ac03e409a69bd9094,1612
149
+ pyobo/sources/famplex.py,sha256=a82be3e9607feaeab64471d53c8686872aa47f5b9b23a5eb3bc0daf98b5af7a4,5628
150
+ pyobo/sources/go.py,sha256=cd72c37dca9b894eb43371540adab37cfcd8a07952be4533000f19b4f110c376,1530
151
+ pyobo/sources/dictybase_gene.py,sha256=78bbde62732e26cd92c2d287ca3e34b678e9f058f2d72157a0f0e8b9bd5d6164,2672
152
+ pyobo/sources/gard.py,sha256=f6846fa4d76df78714a92605e76f4f173f500af178b0ff8905f856909ae81197,1768
153
+ pyobo/sources/clinicaltrials.py,sha256=c24add689328aa31edd9b3fedaf3b514be62f9bca45dce12824ec83d77a66db2,5573
154
+ pyobo/sources/interpro.py,sha256=d6d99771293946b8228fbd35183aa845b77f7c46af1e5f3f03a6887f92ba10b1,4809
155
+ pyobo/sources/ccle.py,sha256=167d6d6356071f2663ea696a83c2123065181b8a3a5b931e78eee5fca94b9a8b,2924
156
+ pyobo/sources/chembl/chembl_target.py,sha256=681d2952fc620fc5d6fca81959e9a9346e363931f87c9f101abcacc2ccbf4c9d,5408
157
+ pyobo/sources/chembl/__init__.py,sha256=95d2f4af2a6253b9c3254c19c38696d0dc9ae36e35072fd7ed106fcbb3016b3c,195
158
+ pyobo/sources/chembl/chembl_compound.py,sha256=0ecf5ac6e4f5b8efbd2f79509c4a6bffc25d5a8fa60cd589bfd853586f565ec9,1888
159
+ pyobo/sources/uniprot/uniprot.py,sha256=dfa7eb88c59df10cdf1879d6bac2e60638a4d73b19f3a0b4767d499209336f46,6317
160
+ pyobo/sources/uniprot/__init__.py,sha256=0b475fdba434a9f49c080f7d23846497d2f6a1e1a839d3fcfa88a119c9b0a6d1,200
161
+ pyobo/sources/uniprot/uniprot_ptm.py,sha256=a130397ef41e135d0a4c7a624f0d379c776d0e13f869871690f4e1f8cc4d3b9d,2192
162
+ pyobo/sources/reactome.py,sha256=b98ca4f6efbdff59215a1e44b02d96247dba680e593a4829c87545fc922d4134,5612
163
+ pyobo/sources/pfam/pfam_clan.py,sha256=f2d81d273deb28f0492ae54cf5350b365baa3fcfde289d6ae332219af7cc56ac,1205
164
+ pyobo/sources/pfam/__init__.py,sha256=03acb66f67b42c28abe2c020e5308be580e2e9c56197d464de5a05e5505ac5e3,150
165
+ pyobo/sources/pfam/pfam.py,sha256=99d6d1e8093f9b23699f05d0b2c1a1e87318feebd29343873397bc4697ce1b47,1718
166
+ pyobo/sources/rhea.py,sha256=75b872549d72a00428c685a9e3b38a7a02c098c87aaa87beeff0da7c90de5ab9,8164
167
+ pyobo/sources/wikipathways.py,sha256=ae9b7b955580db4d27ebe863cf12bfcd07b1af660678666829dab662645aa63e,2637
168
+ pyobo/sources/cvx.py,sha256=97d0acbae76bf54ca8d0f35c8c94db346eb610e51cac05688a3d2f2613738551,3595
169
+ pyobo/sources/itis.py,sha256=6b1d54c40ece2a97176c497aaa3113fbf78ea32845e918fc76de4a1bf254dbbf,2876
170
+ pyobo/sources/umls/sty.py,sha256=80a4fba019e163606f4fcebbf2373b6036ce2c839e62f371745356e5d31f7e54,1479
171
+ pyobo/sources/umls/synonym_types.tsv,sha256=f133bab18eff4073470462d29ea3a9a6dca42223d4cd77171d7696988f48745a,8550
172
+ pyobo/sources/umls/__init__.py,sha256=10d80d5d02a1cdef73cb1b178e49fbdfe05daa6767b4be19cb5a91e36183b4ff,141
173
+ pyobo/sources/umls/umls.py,sha256=5bc2f3eb8f5a8abb605a21cfbc44b4e137b2c3c24c0a70825ec4a6d48dde6025,4287
174
+ pyobo/sources/umls/get_synonym_types.py,sha256=fd5266a8217b628fca6bef678e579dba3251445bc0f474d0f6f6c92c80bd7bb2,1724
175
+ pyobo/sources/umls/__main__.py,sha256=358e97a9eb60a5177f2cf9bde554d7d8bdeb241ffb877250b6d8270c9f5c1613,108
176
+ pyobo/sources/complexportal.py,sha256=78ec7567393ccc33cfd43acadb2392bf5f22f6933a8821cf3741a1f9bc6bb443,7466
177
+ pyobo/sources/credit.py,sha256=7643164ed0aa81333dd2415af23ec170fc94efc89b1656ea2d7f66551b6aff9a,1795
178
+ pyobo/sources/chebi.py,sha256=f9ffd7c812ce1e80b6b86aaef14cd0dc780095ba80866efe014bded072b44ce0,1202
179
+ pyobo/sources/ror.py,sha256=212fca52d31e2a002776b6cb8e17282bc8a5a7e8ce7a20f0cc64f2e51f5c2309,8882
180
+ pyobo/sources/flybase.py,sha256=91fca7e65e559a67b9766d42bfbca52856397ecc76395083c232ac0f12c63669,5747
181
+ pyobo/sources/cgnc.py,sha256=c241687df2adcf1eb690d25e8892d7d89d752b797fd716e7d52d26d136215fbc,2215
182
+ pyobo/api/species.py,sha256=631cc978295fb8a23ea6360ba6ee7bf7b8dd0dec93917a6340381d99cf4c2b0a,2376
183
+ pyobo/api/metadata.py,sha256=b2d25a897fe5ef1d11d55efb4cdc07bcfb6892e67e128a9bf473112fbd0d896b,1029
184
+ pyobo/api/combine.py,sha256=ed3f108fc5b5c164352a0289b0ed641511d9c6441cadf28cd6106b86a1ec1245,1106
185
+ pyobo/api/properties.py,sha256=2fa0be64bf85d2453a8020f93f142db2678d3e2bb4cb9de7d99f244b998c1acf,6949
186
+ pyobo/api/relations.py,sha256=6dfda59d8ae2c3addb816d7dad2b97856916c6f2e6114f7a774bfcaff1c25747,5859
187
+ pyobo/api/__init__.py,sha256=259870a4519a6baa5df1180378837e67c688e8ecbe46e9a3d4a90e6435c79e1d,2955
188
+ pyobo/api/edges.py,sha256=4849b6809c7a2e83a48571a3d75578dae2e0e0589d15af6326a5bd1f39e57f09,1974
189
+ pyobo/api/hierarchy.py,sha256=37f27381f08a3c859adb4a1d46132fa60889a5ccce8867620db2e4353aa5a69f,10314
190
+ pyobo/api/names.py,sha256=2f620187285c1fccbeac23708d624bc374ec1e9d6abce65ebf5eb4f9c63070b8,10673
191
+ pyobo/api/utils.py,sha256=ae8d2274e48d129a0d3520e48ba462af066afff928c9fcd231f569c4b322bcf5,5429
192
+ pyobo/api/typedefs.py,sha256=1d3ba2d2497f5442f18238b4bdf06bf8d046df3aeba4253cb66b9039258ae9fc,1262
193
+ pyobo/api/xrefs.py,sha256=f681b01b7772e1d97ad329cc5dbddddcf4bb7a297a802bb4c6204f0b0e3619b5,5309
194
+ pyobo/api/alts.py,sha256=478b3162574616f2827bd73107f80f5dfdaf5971eaf6c6813109109dba89e522,3032
195
+ pyobo/__main__.py,sha256=70e610d8e10bc45fbd4fa9ee67dc672d2bbd6cb1e4e9e8a7aec4a8cfb11c0fd3,83
196
+ pyobo/reader_utils.py,sha256=5324154d08576e167d7c28b3660dbaa394e67878acf7ea9930abd0170201460a,4423
197
+ pyobo/mocks.py,sha256=8f9e392bd3ff0cfb0306e6070eb8724cb8e694fa0d951744b5c4652e15e56d72,2440
198
+ pyobo-0.12.0.dist-info/licenses/LICENSE,sha256=41c80964a1b1956e41c013670812fc5592d5b51bd7b3cd4287d949450488a498,1076
199
+ pyobo-0.12.0.dist-info/WHEEL,sha256=75a1e6cb20cd73e6878351e9e19d65d3d1832ba44f36116fe21a93d222c5897a,79
200
+ pyobo-0.12.0.dist-info/entry_points.txt,sha256=00d833beec05ffdff58a90a8c49b5b04ce80e22d8c92ddfd80c3f340eea1bc6b,42
201
+ pyobo-0.12.0.dist-info/METADATA,sha256=3279dbc737f1a343a764ca3e2295ff4118fd6568de059f23cffb08a985e388e8,23685
202
+ pyobo-0.12.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: uv 0.6.16
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
2
  pyobo = pyobo.cli:main
3
+
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Charles Tapley Hoyt
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
pyobo/aws.py DELETED
@@ -1,162 +0,0 @@
1
- """Interface for caching data on AWS S3."""
2
-
3
- import logging
4
- import os
5
- from typing import Optional
6
-
7
- import boto3
8
- import humanize
9
- from tabulate import tabulate
10
-
11
- from pyobo import (
12
- get_id_name_mapping,
13
- get_id_synonyms_mapping,
14
- get_id_to_alts,
15
- get_properties_df,
16
- get_relations_df,
17
- get_xrefs_df,
18
- )
19
- from pyobo.api.utils import get_version
20
- from pyobo.constants import RAW_DIRECTORY
21
- from pyobo.registries import iter_cached_obo
22
- from pyobo.utils.path import prefix_cache_join
23
-
24
- __all__ = [
25
- "download_artifacts",
26
- "upload_artifacts",
27
- "upload_artifacts_for_prefix",
28
- "list_artifacts",
29
- ]
30
-
31
- logger = logging.getLogger(__name__)
32
-
33
-
34
- def download_artifacts(bucket: str, suffix: Optional[str] = None) -> None:
35
- """Download compiled parts from AWS.
36
-
37
- :param bucket: The name of the S3 bucket to download
38
- :param suffix: If specified, only download files with this suffix. Might
39
- be useful to specify ``suffix='names.tsv`` if you just want to run the
40
- name resolution service.
41
- """
42
- s3_client = boto3.client("s3")
43
- all_objects = s3_client.list_objects(Bucket=bucket)
44
- for entry in all_objects["Contents"]:
45
- key = entry["Key"]
46
- if suffix and not key.endswith(suffix):
47
- pass
48
- path = os.path.join(RAW_DIRECTORY, key)
49
- os.makedirs(os.path.dirname(path), exist_ok=True)
50
- if os.path.exists(path):
51
- continue # no need to download again
52
- logging.warning("downloading %s to %s", key, path)
53
- s3_client.download_file(bucket, key, path)
54
-
55
-
56
- def upload_artifacts(
57
- bucket: str,
58
- whitelist: Optional[set[str]] = None,
59
- blacklist: Optional[set[str]] = None,
60
- s3_client=None,
61
- ) -> None:
62
- """Upload all artifacts to AWS."""
63
- if s3_client is None:
64
- s3_client = boto3.client("s3")
65
- all_objects = s3_client.list_objects(Bucket=bucket)
66
- uploaded_prefixes = {entry["Key"].split("/")[0] for entry in all_objects["Contents"]}
67
-
68
- for prefix, _ in sorted(iter_cached_obo()):
69
- if prefix in uploaded_prefixes:
70
- continue
71
- if whitelist and prefix not in whitelist:
72
- continue
73
- if blacklist and prefix in blacklist:
74
- continue
75
- upload_artifacts_for_prefix(prefix=prefix, bucket=bucket, s3_client=s3_client)
76
-
77
-
78
- def upload_artifacts_for_prefix(
79
- *, prefix: str, bucket: str, s3_client=None, version: Optional[str] = None
80
- ):
81
- """Upload compiled parts for the given prefix to AWS."""
82
- if s3_client is None:
83
- s3_client = boto3.client("s3")
84
-
85
- if version is None:
86
- version = get_version(prefix)
87
-
88
- logger.info("[%s] getting id->name mapping", prefix)
89
- get_id_name_mapping(prefix)
90
- id_name_path = prefix_cache_join(prefix, name="names.tsv", version=version)
91
- if not id_name_path.exists():
92
- raise FileNotFoundError
93
- id_name_key = os.path.join(prefix, "cache", "names.tsv")
94
- logger.info("[%s] uploading id->name mapping", prefix)
95
- upload_file(path=id_name_path, bucket=bucket, key=id_name_key, s3_client=s3_client)
96
-
97
- logger.info("[%s] getting id->synonyms mapping", prefix)
98
- get_id_synonyms_mapping(prefix)
99
- id_synonyms_path = prefix_cache_join(prefix, name="synonyms.tsv", version=version)
100
- if not id_synonyms_path.exists():
101
- raise FileNotFoundError
102
- id_synonyms_key = os.path.join(prefix, "cache", "synonyms.tsv")
103
- logger.info("[%s] uploading id->synonyms mapping", prefix)
104
- upload_file(path=id_synonyms_path, bucket=bucket, key=id_synonyms_key, s3_client=s3_client)
105
-
106
- logger.info("[%s] getting xrefs", prefix)
107
- get_xrefs_df(prefix)
108
- xrefs_path = prefix_cache_join(prefix, name="xrefs.tsv", version=version)
109
- if not xrefs_path.exists():
110
- raise FileNotFoundError
111
- xrefs_key = os.path.join(prefix, "cache", "xrefs.tsv")
112
- logger.info("[%s] uploading xrefs", prefix)
113
- upload_file(path=xrefs_path, bucket=bucket, key=xrefs_key, s3_client=s3_client)
114
-
115
- logger.info("[%s] getting relations", prefix)
116
- get_relations_df(prefix)
117
- relations_path = prefix_cache_join(prefix, name="relations.tsv", version=version)
118
- if not relations_path.exists():
119
- raise FileNotFoundError
120
- relations_key = os.path.join(prefix, "cache", "relations.tsv")
121
- logger.info("[%s] uploading relations", prefix)
122
- upload_file(path=relations_path, bucket=bucket, key=relations_key, s3_client=s3_client)
123
-
124
- logger.info("[%s] getting properties", prefix)
125
- get_properties_df(prefix)
126
- properties_path = prefix_cache_join(prefix, name="properties.tsv", version=version)
127
- if not properties_path.exists():
128
- raise FileNotFoundError
129
- properties_key = os.path.join(prefix, "cache", "properties.tsv")
130
- logger.info("[%s] uploading properties", prefix)
131
- upload_file(path=properties_path, bucket=bucket, key=properties_key, s3_client=s3_client)
132
-
133
- logger.info("[%s] getting alternative identifiers", prefix)
134
- get_id_to_alts(prefix)
135
- alts_path = prefix_cache_join(prefix, name="alt_ids.tsv", version=version)
136
- if not alts_path.exists():
137
- raise FileNotFoundError
138
- alts_key = os.path.join(prefix, "cache", "alt_ids.tsv")
139
- logger.info("[%s] uploading alternative identifiers", prefix)
140
- upload_file(path=alts_path, bucket=bucket, key=alts_key)
141
-
142
-
143
- def upload_file(*, path, bucket, key, s3_client=None):
144
- """Upload a file to an S3 bucket.
145
-
146
- :param path: The local file path
147
- :param bucket: The name of the S3 bucket
148
- :param key: The relative file path to put on the S3 bucket
149
- """
150
- if s3_client is None:
151
- s3_client = boto3.client("s3")
152
- s3_client.upload_file(path, bucket, key)
153
-
154
-
155
- def list_artifacts(bucket: str) -> str:
156
- """List the files in a given bucket."""
157
- s3_client = boto3.client("s3")
158
- all_objects = s3_client.list_objects(Bucket=bucket)
159
- rows = [
160
- (entry["Key"], humanize.naturalsize(entry["Size"])) for entry in all_objects["Contents"]
161
- ]
162
- return tabulate(rows, headers=["File", "Size"])
pyobo/cli/aws.py DELETED
@@ -1,47 +0,0 @@
1
- """CLI for PyOBO's interface to S3."""
2
-
3
- import click
4
- from more_click import verbose_option
5
-
6
- from ..aws import download_artifacts, list_artifacts, upload_artifacts
7
-
8
- __all__ = [
9
- "main",
10
- ]
11
-
12
- bucket_argument = click.argument("bucket")
13
-
14
-
15
- @click.group(name="aws")
16
- def main():
17
- """S3 utilities."""
18
-
19
-
20
- @main.command()
21
- @bucket_argument
22
- @verbose_option
23
- def download(bucket):
24
- """Download all artifacts from the S3 bucket."""
25
- download_artifacts(bucket)
26
-
27
-
28
- @main.command()
29
- @bucket_argument
30
- @verbose_option
31
- @click.option("-w", "--whitelist", multiple=True)
32
- @click.option("-b", "--blacklist", multiple=True)
33
- def upload(bucket, whitelist, blacklist):
34
- """Download all artifacts from the S3 bucket."""
35
- upload_artifacts(bucket, whitelist=whitelist, blacklist=blacklist)
36
-
37
-
38
- @main.command()
39
- @bucket_argument
40
- @verbose_option
41
- def ls(bucket):
42
- """List all artifacts on the S3 bucket."""
43
- click.echo(list_artifacts(bucket))
44
-
45
-
46
- if __name__ == "__main__":
47
- main()
pyobo/identifier_utils.py DELETED
@@ -1,142 +0,0 @@
1
- """Utilities for handling prefixes."""
2
-
3
- from __future__ import annotations
4
-
5
- import logging
6
- from functools import wraps
7
-
8
- import bioregistry
9
- from curies import Reference, ReferenceTuple
10
-
11
- from .registries import (
12
- curie_has_blacklisted_prefix,
13
- curie_has_blacklisted_suffix,
14
- curie_is_blacklisted,
15
- remap_full,
16
- remap_prefix,
17
- )
18
-
19
- __all__ = [
20
- "normalize_curie",
21
- "wrap_norm_prefix",
22
- "standardize_ec",
23
- ]
24
-
25
- logger = logging.getLogger(__name__)
26
-
27
-
28
- class MissingPrefixError(ValueError):
29
- """Raised on a missing prefix."""
30
-
31
- reference: Reference | None
32
-
33
- def __init__(
34
- self, prefix: str, curie: str, xref: str | None = None, ontology: str | None = None
35
- ):
36
- """Initialize the error."""
37
- self.prefix = prefix
38
- self.curie = curie
39
- self.xref = xref
40
- self.ontology = ontology
41
- self.reference = None
42
-
43
- def __str__(self) -> str:
44
- s = ""
45
- if self.ontology:
46
- s += f"[{self.ontology}] "
47
- s += f"unhandled prefix {self.prefix} found in curie {self.curie}"
48
- if self.xref:
49
- s += f"/xref {self.xref}"
50
- if self.reference is not None:
51
- s += f" from {self.reference.curie}"
52
- return s
53
-
54
-
55
- def _normalize_prefix(prefix: str, *, curie=None, xref=None, strict: bool = True) -> str | None:
56
- """Normalize a namespace and return, if possible."""
57
- norm_prefix = bioregistry.normalize_prefix(prefix)
58
- if norm_prefix is not None:
59
- return norm_prefix
60
- elif strict:
61
- raise MissingPrefixError(prefix=prefix, curie=curie, xref=xref)
62
- else:
63
- return None
64
-
65
-
66
- BAD_CURIES = set()
67
-
68
-
69
- def normalize_curie(curie: str, *, strict: bool = True) -> tuple[str, str] | tuple[None, None]:
70
- """Parse a string that looks like a CURIE.
71
-
72
- :param curie: A compact uniform resource identifier (CURIE)
73
- :param strict: Should an exception be thrown if the CURIE can not be parsed w.r.t. the Bioregistry?
74
- :return: A parse tuple or a tuple of None, None if not able to parse and not strict
75
-
76
- - Normalizes the namespace
77
- - Checks against a blacklist for the entire curie, for the namespace, and for suffixes.
78
- """
79
- if curie_is_blacklisted(curie):
80
- return None, None
81
- if curie_has_blacklisted_prefix(curie):
82
- return None, None
83
- if curie_has_blacklisted_suffix(curie):
84
- return None, None
85
-
86
- # Remap the curie with the full list
87
- curie = remap_full(curie)
88
-
89
- # Remap node's prefix (if necessary)
90
- curie = remap_prefix(curie)
91
-
92
- try:
93
- head_ns, identifier = curie.split(":", 1)
94
- except ValueError: # skip nodes that don't look like normal CURIEs
95
- if curie not in BAD_CURIES:
96
- BAD_CURIES.add(curie)
97
- logger.debug(f"could not split CURIE on colon: {curie}")
98
- return None, None
99
-
100
- # remove redundant prefix
101
- if identifier.casefold().startswith(f"{head_ns.casefold()}:"):
102
- identifier = identifier[len(head_ns) + 1 :]
103
-
104
- norm_node_prefix = _normalize_prefix(head_ns, curie=curie, strict=strict)
105
- if not norm_node_prefix:
106
- return None, None
107
- return norm_node_prefix, identifier
108
-
109
-
110
- def wrap_norm_prefix(f):
111
- """Decorate a function that take in a prefix to auto-normalize, or return None if it can't be normalized."""
112
-
113
- @wraps(f)
114
- def _wrapped(prefix: str | Reference | ReferenceTuple, *args, **kwargs):
115
- if isinstance(prefix, str):
116
- norm_prefix = bioregistry.normalize_prefix(prefix)
117
- if norm_prefix is None:
118
- raise ValueError(f"Invalid prefix: {prefix}")
119
- prefix = norm_prefix
120
- elif isinstance(prefix, Reference):
121
- norm_prefix = bioregistry.normalize_prefix(prefix.prefix)
122
- if norm_prefix is None:
123
- raise ValueError(f"Invalid prefix: {prefix.prefix}")
124
- prefix = Reference(prefix=norm_prefix, identifier=prefix.identifier)
125
- elif isinstance(prefix, ReferenceTuple):
126
- norm_prefix = bioregistry.normalize_prefix(prefix.prefix)
127
- if norm_prefix is None:
128
- raise ValueError(f"Invalid prefix: {prefix.prefix}")
129
- prefix = ReferenceTuple(norm_prefix, prefix.identifier)
130
- else:
131
- raise TypeError
132
- return f(prefix, *args, **kwargs)
133
-
134
- return _wrapped
135
-
136
-
137
- def standardize_ec(ec: str) -> str:
138
- """Standardize an EC code identifier by removing all trailing dashes and dots."""
139
- ec = ec.strip().replace(" ", "")
140
- for _ in range(4):
141
- ec = ec.rstrip("-").rstrip(".")
142
- return ec