pyobo 0.11.2__py3-none-any.whl → 0.12.1__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 (228) 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 -117
  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 +107 -114
  17. pyobo/cli/__init__.py +0 -0
  18. pyobo/cli/cli.py +35 -50
  19. pyobo/cli/database.py +210 -160
  20. pyobo/cli/database_utils.py +155 -0
  21. pyobo/cli/lookup.py +163 -195
  22. pyobo/cli/utils.py +19 -6
  23. pyobo/constants.py +102 -3
  24. pyobo/getters.py +209 -191
  25. pyobo/gilda_utils.py +52 -250
  26. pyobo/identifier_utils/__init__.py +33 -0
  27. pyobo/identifier_utils/api.py +305 -0
  28. pyobo/identifier_utils/preprocessing.json +873 -0
  29. pyobo/identifier_utils/preprocessing.py +27 -0
  30. pyobo/identifier_utils/relations/__init__.py +8 -0
  31. pyobo/identifier_utils/relations/api.py +162 -0
  32. pyobo/identifier_utils/relations/data.json +5824 -0
  33. pyobo/identifier_utils/relations/data_owl.json +57 -0
  34. pyobo/identifier_utils/relations/data_rdf.json +1 -0
  35. pyobo/identifier_utils/relations/data_rdfs.json +7 -0
  36. pyobo/mocks.py +9 -6
  37. pyobo/ner/__init__.py +9 -0
  38. pyobo/ner/api.py +72 -0
  39. pyobo/ner/normalizer.py +33 -0
  40. pyobo/obographs.py +48 -40
  41. pyobo/plugins.py +5 -4
  42. pyobo/py.typed +0 -0
  43. pyobo/reader.py +1354 -395
  44. pyobo/reader_utils.py +155 -0
  45. pyobo/resource_utils.py +42 -22
  46. pyobo/resources/__init__.py +0 -0
  47. pyobo/resources/goc.py +75 -0
  48. pyobo/resources/goc.tsv +188 -0
  49. pyobo/resources/ncbitaxon.py +4 -5
  50. pyobo/resources/ncbitaxon.tsv.gz +0 -0
  51. pyobo/resources/ro.py +3 -2
  52. pyobo/resources/ro.tsv +0 -0
  53. pyobo/resources/so.py +0 -0
  54. pyobo/resources/so.tsv +0 -0
  55. pyobo/sources/README.md +12 -8
  56. pyobo/sources/__init__.py +52 -29
  57. pyobo/sources/agrovoc.py +0 -0
  58. pyobo/sources/antibodyregistry.py +11 -12
  59. pyobo/sources/bigg/__init__.py +13 -0
  60. pyobo/sources/bigg/bigg_compartment.py +81 -0
  61. pyobo/sources/bigg/bigg_metabolite.py +229 -0
  62. pyobo/sources/bigg/bigg_model.py +46 -0
  63. pyobo/sources/bigg/bigg_reaction.py +77 -0
  64. pyobo/sources/biogrid.py +1 -2
  65. pyobo/sources/ccle.py +7 -12
  66. pyobo/sources/cgnc.py +9 -6
  67. pyobo/sources/chebi.py +1 -1
  68. pyobo/sources/chembl/__init__.py +9 -0
  69. pyobo/sources/{chembl.py → chembl/chembl_compound.py} +13 -25
  70. pyobo/sources/chembl/chembl_target.py +160 -0
  71. pyobo/sources/civic_gene.py +55 -15
  72. pyobo/sources/clinicaltrials.py +160 -0
  73. pyobo/sources/complexportal.py +24 -24
  74. pyobo/sources/conso.py +14 -22
  75. pyobo/sources/cpt.py +0 -0
  76. pyobo/sources/credit.py +1 -9
  77. pyobo/sources/cvx.py +27 -5
  78. pyobo/sources/depmap.py +9 -12
  79. pyobo/sources/dictybase_gene.py +2 -7
  80. pyobo/sources/drugbank/__init__.py +9 -0
  81. pyobo/sources/{drugbank.py → drugbank/drugbank.py} +11 -16
  82. pyobo/sources/{drugbank_salt.py → drugbank/drugbank_salt.py} +3 -8
  83. pyobo/sources/drugcentral.py +17 -13
  84. pyobo/sources/expasy.py +31 -34
  85. pyobo/sources/famplex.py +13 -18
  86. pyobo/sources/flybase.py +8 -13
  87. pyobo/sources/gard.py +62 -0
  88. pyobo/sources/geonames/__init__.py +9 -0
  89. pyobo/sources/geonames/features.py +28 -0
  90. pyobo/sources/{geonames.py → geonames/geonames.py} +87 -26
  91. pyobo/sources/geonames/utils.py +115 -0
  92. pyobo/sources/gmt_utils.py +6 -7
  93. pyobo/sources/go.py +20 -13
  94. pyobo/sources/gtdb.py +154 -0
  95. pyobo/sources/gwascentral/__init__.py +9 -0
  96. pyobo/sources/{gwascentral_phenotype.py → gwascentral/gwascentral_phenotype.py} +5 -7
  97. pyobo/sources/{gwascentral_study.py → gwascentral/gwascentral_study.py} +1 -7
  98. pyobo/sources/hgnc/__init__.py +9 -0
  99. pyobo/sources/{hgnc.py → hgnc/hgnc.py} +56 -70
  100. pyobo/sources/{hgncgenefamily.py → hgnc/hgncgenefamily.py} +8 -18
  101. pyobo/sources/icd/__init__.py +9 -0
  102. pyobo/sources/{icd10.py → icd/icd10.py} +35 -37
  103. pyobo/sources/icd/icd11.py +148 -0
  104. pyobo/sources/{icd_utils.py → icd/icd_utils.py} +66 -20
  105. pyobo/sources/interpro.py +4 -9
  106. pyobo/sources/itis.py +0 -5
  107. pyobo/sources/kegg/__init__.py +0 -0
  108. pyobo/sources/kegg/api.py +16 -38
  109. pyobo/sources/kegg/genes.py +9 -20
  110. pyobo/sources/kegg/genome.py +1 -7
  111. pyobo/sources/kegg/pathway.py +9 -21
  112. pyobo/sources/mesh.py +58 -24
  113. pyobo/sources/mgi.py +3 -10
  114. pyobo/sources/mirbase/__init__.py +11 -0
  115. pyobo/sources/{mirbase.py → mirbase/mirbase.py} +8 -11
  116. pyobo/sources/{mirbase_constants.py → mirbase/mirbase_constants.py} +0 -0
  117. pyobo/sources/{mirbase_family.py → mirbase/mirbase_family.py} +4 -8
  118. pyobo/sources/{mirbase_mature.py → mirbase/mirbase_mature.py} +3 -7
  119. pyobo/sources/msigdb.py +74 -39
  120. pyobo/sources/ncbi/__init__.py +9 -0
  121. pyobo/sources/ncbi/ncbi_gc.py +162 -0
  122. pyobo/sources/{ncbigene.py → ncbi/ncbigene.py} +18 -19
  123. pyobo/sources/nih_reporter.py +60 -0
  124. pyobo/sources/nlm/__init__.py +9 -0
  125. pyobo/sources/nlm/nlm_catalog.py +48 -0
  126. pyobo/sources/nlm/nlm_publisher.py +36 -0
  127. pyobo/sources/nlm/utils.py +116 -0
  128. pyobo/sources/npass.py +6 -8
  129. pyobo/sources/omim_ps.py +11 -4
  130. pyobo/sources/pathbank.py +4 -8
  131. pyobo/sources/pfam/__init__.py +9 -0
  132. pyobo/sources/{pfam.py → pfam/pfam.py} +3 -8
  133. pyobo/sources/{pfam_clan.py → pfam/pfam_clan.py} +2 -7
  134. pyobo/sources/pharmgkb/__init__.py +15 -0
  135. pyobo/sources/pharmgkb/pharmgkb_chemical.py +89 -0
  136. pyobo/sources/pharmgkb/pharmgkb_disease.py +77 -0
  137. pyobo/sources/pharmgkb/pharmgkb_gene.py +108 -0
  138. pyobo/sources/pharmgkb/pharmgkb_pathway.py +63 -0
  139. pyobo/sources/pharmgkb/pharmgkb_variant.py +84 -0
  140. pyobo/sources/pharmgkb/utils.py +86 -0
  141. pyobo/sources/pid.py +1 -6
  142. pyobo/sources/pombase.py +6 -10
  143. pyobo/sources/pubchem.py +4 -9
  144. pyobo/sources/reactome.py +5 -11
  145. pyobo/sources/rgd.py +11 -16
  146. pyobo/sources/rhea.py +37 -36
  147. pyobo/sources/ror.py +69 -42
  148. pyobo/sources/selventa/__init__.py +0 -0
  149. pyobo/sources/selventa/schem.py +4 -7
  150. pyobo/sources/selventa/scomp.py +1 -6
  151. pyobo/sources/selventa/sdis.py +4 -7
  152. pyobo/sources/selventa/sfam.py +1 -6
  153. pyobo/sources/sgd.py +6 -11
  154. pyobo/sources/signor/__init__.py +7 -0
  155. pyobo/sources/signor/download.py +41 -0
  156. pyobo/sources/signor/signor_complexes.py +105 -0
  157. pyobo/sources/slm.py +12 -15
  158. pyobo/sources/umls/__init__.py +7 -1
  159. pyobo/sources/umls/__main__.py +0 -0
  160. pyobo/sources/umls/get_synonym_types.py +20 -4
  161. pyobo/sources/umls/sty.py +57 -0
  162. pyobo/sources/umls/synonym_types.tsv +1 -1
  163. pyobo/sources/umls/umls.py +18 -22
  164. pyobo/sources/unimod.py +46 -0
  165. pyobo/sources/uniprot/__init__.py +1 -1
  166. pyobo/sources/uniprot/uniprot.py +40 -32
  167. pyobo/sources/uniprot/uniprot_ptm.py +4 -34
  168. pyobo/sources/utils.py +3 -2
  169. pyobo/sources/wikipathways.py +7 -10
  170. pyobo/sources/zfin.py +5 -10
  171. pyobo/ssg/__init__.py +12 -16
  172. pyobo/ssg/base.html +0 -0
  173. pyobo/ssg/index.html +26 -13
  174. pyobo/ssg/term.html +12 -2
  175. pyobo/ssg/typedef.html +0 -0
  176. pyobo/struct/__init__.py +54 -8
  177. pyobo/struct/functional/__init__.py +1 -0
  178. pyobo/struct/functional/dsl.py +2572 -0
  179. pyobo/struct/functional/macros.py +423 -0
  180. pyobo/struct/functional/obo_to_functional.py +385 -0
  181. pyobo/struct/functional/ontology.py +272 -0
  182. pyobo/struct/functional/utils.py +112 -0
  183. pyobo/struct/reference.py +331 -136
  184. pyobo/struct/struct.py +1484 -657
  185. pyobo/struct/struct_utils.py +1078 -0
  186. pyobo/struct/typedef.py +162 -210
  187. pyobo/struct/utils.py +12 -5
  188. pyobo/struct/vocabulary.py +138 -0
  189. pyobo/utils/__init__.py +0 -0
  190. pyobo/utils/cache.py +16 -15
  191. pyobo/utils/io.py +51 -41
  192. pyobo/utils/iter.py +5 -5
  193. pyobo/utils/misc.py +41 -53
  194. pyobo/utils/ndex_utils.py +0 -0
  195. pyobo/utils/path.py +73 -70
  196. pyobo/version.py +3 -3
  197. pyobo-0.12.1.dist-info/METADATA +671 -0
  198. pyobo-0.12.1.dist-info/RECORD +201 -0
  199. pyobo-0.12.1.dist-info/WHEEL +4 -0
  200. {pyobo-0.11.2.dist-info → pyobo-0.12.1.dist-info}/entry_points.txt +1 -0
  201. pyobo-0.12.1.dist-info/licenses/LICENSE +21 -0
  202. pyobo/aws.py +0 -162
  203. pyobo/cli/aws.py +0 -47
  204. pyobo/identifier_utils.py +0 -142
  205. pyobo/normalizer.py +0 -232
  206. pyobo/registries/__init__.py +0 -16
  207. pyobo/registries/metaregistry.json +0 -507
  208. pyobo/registries/metaregistry.py +0 -135
  209. pyobo/sources/icd11.py +0 -105
  210. pyobo/xrefdb/__init__.py +0 -1
  211. pyobo/xrefdb/canonicalizer.py +0 -214
  212. pyobo/xrefdb/priority.py +0 -59
  213. pyobo/xrefdb/sources/__init__.py +0 -60
  214. pyobo/xrefdb/sources/biomappings.py +0 -36
  215. pyobo/xrefdb/sources/cbms2019.py +0 -91
  216. pyobo/xrefdb/sources/chembl.py +0 -83
  217. pyobo/xrefdb/sources/compath.py +0 -82
  218. pyobo/xrefdb/sources/famplex.py +0 -64
  219. pyobo/xrefdb/sources/gilda.py +0 -50
  220. pyobo/xrefdb/sources/intact.py +0 -113
  221. pyobo/xrefdb/sources/ncit.py +0 -133
  222. pyobo/xrefdb/sources/pubchem.py +0 -27
  223. pyobo/xrefdb/sources/wikidata.py +0 -116
  224. pyobo/xrefdb/xrefs_pipeline.py +0 -180
  225. pyobo-0.11.2.dist-info/METADATA +0 -711
  226. pyobo-0.11.2.dist-info/RECORD +0 -157
  227. pyobo-0.11.2.dist-info/WHEEL +0 -5
  228. pyobo-0.11.2.dist-info/top_level.txt +0 -1
@@ -0,0 +1,201 @@
1
+ pyobo/plugins.py,sha256=c04afe369c99ed9eae12bd2e18334e7972ce199a2419b166a377becf63cd2893,1232
2
+ pyobo/getters.py,sha256=68c8982ac868863e73d1428bcdb82dfdfd0d9397e25d9dc2e0eca05d9b9d566a,17366
3
+ pyobo/gilda_utils.py,sha256=b9384002b00b48dcc98be86b47d954bed41c8b9548c380aaab62fa9ad929d0aa,1990
4
+ pyobo/.DS_Store,sha256=00b8c741cd5b001c03c1a582f55bfbcda0ad16f0e55019d64f93241b74991980,8196
5
+ pyobo/version.py,sha256=dab7f9a58f271077f9eb69671bc8ff659ad64f36f418250a964fa030d634373d,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=f4d9904d939afd04b29b42aa40acbaf6ec9d4a8f2eb3e1dc714b051b1025c41e,4239
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=fa0cb5a8633a6c9fb95eb2f74e08fbf69acc4fc229b89c18dd233921b80378a9,5100
26
+ pyobo/utils/cache.py,sha256=136ccd03b82afd534699a36bad129e5f3e73aba5c3184fb93d5a24af30d99227,3098
27
+ pyobo/utils/__init__.py,sha256=08035263cbc6abfeaff2b5a159121d9e4f96a392c0d91f568e0d67a9b5aa2cec,17
28
+ pyobo/utils/path.py,sha256=cc37f10de8e0ef90a6063cc2b1c5d1b0993e41649536f04bfddc892d61a3bc4f,3398
29
+ pyobo/cli/database.py,sha256=e880ac2c78bd437d73c99cea5c44938129852571bca35e2ab0cc7de195851ce6,11963
30
+ pyobo/cli/lookup.py,sha256=1b11bbe771979c345ff8df494562919900b95e237c7c437997595ee42de31c76,9163
31
+ pyobo/cli/__init__.py,sha256=a5388bbb38e3a62d0febdc958d0da413a9c152666e6059ea74934364b0e482f9,71
32
+ pyobo/cli/database_utils.py,sha256=8d0eea4a0fa8664f90f910b5db536451ba9778d8342bc7d5f7a8a05da2b7adae,5540
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=4fc7d3b665cd18c8dfbbb2b8b49de4bc30a8e101d14ff26bf5f88e9c562bc2d3,11735
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=bc610a206c5f502cc658cbf7dcaa9caeb112a596ab1cb07fcbd571c8a6da2894,9331
47
+ pyobo/struct/struct.py,sha256=29b77204d903a948aff74f93aa043e5421cc932c22a893e70dbfd3f27b911fb7,89480
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=6fc2522a89772b718eaa6278e2abc7d5ca536378b537992b34bfe12bcfd10d72,52246
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=865d3a02c3a6d38ff13d4e30685a60368c4a7823397f93e609c2ad356c5d46a3,749
61
+ pyobo/identifier_utils/api.py,sha256=310bf6e0ac55882b9bbf179b1628bfc70797ae419a962ea6e1e3cdf48e8e5c26,9212
62
+ pyobo/identifier_utils/preprocessing.py,sha256=67c9109c1a4ba1f5f45368516563a044e38d4095799b520519a57044230d5fd7,618
63
+ pyobo/identifier_utils/preprocessing.json,sha256=e84f2ed9bb4f2a92c83845daf739f4052d7a615bfc6c13dcc54845a306916627,34821
64
+ pyobo/py.typed,sha256=e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855,0
65
+ pyobo/sources/signor/download.py,sha256=ae40c954403a95dd33e221b5e2d30e70072e4658d043d48024068b75ac5a833f,1053
66
+ pyobo/sources/signor/__init__.py,sha256=6de6ff151aaca2a2d5317b437916405dff5783d50120704ed39b8f53df0d6a32,139
67
+ pyobo/sources/signor/signor_complexes.py,sha256=04634cfe41b48eda51fa2eab0d2305e5729e0a59563b7e336762aae0532d064d,3802
68
+ pyobo/sources/expasy.py,sha256=25f116d229b5c25858db82add7a037e8c5b405e40dbfd76d3ff67a1f581c8755,11053
69
+ pyobo/sources/biogrid.py,sha256=75897a3eddd8a4d0f672f4e5e4b2007a45b22697257fb47526f149513f571fd0,3297
70
+ pyobo/sources/geonames/geonames.py,sha256=148ed89cea0b8e84fcc3dd12e865e28143ec9ab986ae6627e210090f8a733a1a,10112
71
+ pyobo/sources/geonames/__init__.py,sha256=2508697bc04a0524353fcdefb503126c029aeb1276b6f5fae0e303883e5633bb,177
72
+ pyobo/sources/geonames/features.py,sha256=255edf0b5bcd90327dfcfa464955def40f6f5cddb6193593bdf823dd55a1cf28,688
73
+ pyobo/sources/geonames/utils.py,sha256=89488531ea3f53c1680258a33285fb361c84686f4c7e9a7312d55b8b252ecdae,4012
74
+ pyobo/sources/conso.py,sha256=4786079e79746e192a0c6059cb7e7144e0995f9ec4f621cf943249b336a0b06b,2320
75
+ pyobo/sources/slm.py,sha256=986242c3f131a541116d6b452e8f053763607d5844befdf79bae893db85c8f62,4246
76
+ pyobo/sources/unimod.py,sha256=4efb3868cca9e83287ea6bfd3a35caf2d6a41b301ce1cfa92215380c87587753,1292
77
+ pyobo/sources/civic_gene.py,sha256=01639d80ea1b1656d4f794f5840fc2a3624da0d29de4c252b85e239d84a4830f,3096
78
+ pyobo/sources/pombase.py,sha256=f67807c320178c897d00ab05a943d121b15682f902c1cb3c576af53bfbdb3b29,3696
79
+ pyobo/sources/pid.py,sha256=3dc2cdc50abe9f61139d7a6608d6b8c8264a6663bd3aef963c1a2d2bda893f18,4460
80
+ pyobo/sources/zfin.py,sha256=57d73862574abbd82e017368163ffd7e6f7875eef180a598256503d87344e16e,5339
81
+ pyobo/sources/npass.py,sha256=a09682a38dc2206cb6b40b8cc483d3f0f7d24516b3250c39d4f2408ea30fb07f,2742
82
+ pyobo/sources/ncbi/__init__.py,sha256=4ae3c1445e191b45fa3ec3dab96be5616c7de5850648e0dd8f20abe58c90ce69,156
83
+ pyobo/sources/ncbi/ncbi_gc.py,sha256=b8682bb7b7c5cbb9b912fadef8d2efb896b88dfb5464d0b8bad34354c9e4e6bb,5470
84
+ pyobo/sources/ncbi/ncbigene.py,sha256=ce9b8c7b9f434597dccf2c497dd4a521a2330dcf4c0df325018dd2fc664af7b0,5096
85
+ pyobo/sources/bigg/__init__.py,sha256=e292beef5071d08bfddcfaa665e714297f4b71aa5b5bdc26ef304df6f85ba582,349
86
+ pyobo/sources/bigg/bigg_model.py,sha256=9f8dd98076c2512e8a0669acb5f154bb7f619643ec0e10697f6381fa4005ed80,1287
87
+ pyobo/sources/bigg/bigg_metabolite.py,sha256=cece770b13d7ed74d9a553adcba3169714f7bf4c0b8161da3c8e3ed2f9db3e9a,7728
88
+ pyobo/sources/bigg/bigg_reaction.py,sha256=e3948821a7b7d86b43c732ff82917ba754ca55f87ab775201e91787e55413bd2,2459
89
+ pyobo/sources/bigg/bigg_compartment.py,sha256=a454a13221fe58d1fe9ac98e5c319482ede0ae2f0946be6eae2ccdc2abd45eac,3430
90
+ pyobo/sources/gmt_utils.py,sha256=ccb91b1c62f10543c7c56ee308e1da6535b5d58ccf8fc38df84e107cf4131f11,1327
91
+ pyobo/sources/pubchem.py,sha256=953b1cd1d82b489e64c6571a51c517272762fb1b0c7f67c8d84716b1b5bcc535,5153
92
+ pyobo/sources/msigdb.py,sha256=e3975d59a15dcc66749436af855db3958914786c50d2341609522dfb50d065dc,6810
93
+ pyobo/sources/drugcentral.py,sha256=9fb9bbcbaf0b3c494163dde2e627a6695366ca1c74cb7293efd2419871a610a1,4047
94
+ pyobo/sources/agrovoc.py,sha256=489b1b27b2adc5d2541bd4629a66f609f2dfce92bd78eccfd30c79f608feeace,787
95
+ pyobo/sources/sgd.py,sha256=9eab044ec6e71742edc1935d7fe0f617673348119942760149a98bca7426b8d7,2073
96
+ pyobo/sources/depmap.py,sha256=7f05bfd54901e49b6c797c137dbd017e32ef626fb17feb17c1feb368f2a4960f,3585
97
+ pyobo/sources/drugbank/drugbank_salt.py,sha256=69b565fe280b7a698cc3850b8b7fc8b5381f09aab7bb26e3aa7b13f5187b0b59,1646
98
+ pyobo/sources/drugbank/__init__.py,sha256=880b2dbd9419d3525c25e0089b606727ddb7501be2f1a490e2d1158440e8540a,178
99
+ pyobo/sources/drugbank/drugbank.py,sha256=eb2fc65b2d43ac54c0c81fefb0701b1326411027cf3cfb5eac7534df925cb33c,10899
100
+ pyobo/sources/rgd.py,sha256=46020f5933a846a7575ffdd8330ddde8df560d16872c9475f204da59cfdbce4e,5316
101
+ pyobo/sources/__init__.py,sha256=94db6754ef36ea969a347c2ae38ff9eddb44dbe177ce06d9f93e5432592bc404,4630
102
+ pyobo/sources/pharmgkb/pharmgkb_pathway.py,sha256=3eb66d425b46ff38f3be9f8aeb7291c3e22ac49b4eef25f74e703ff68fb270e7,2042
103
+ pyobo/sources/pharmgkb/pharmgkb_gene.py,sha256=04c3c39bc0d900491e8d7d827cd0c17c898f2ea17d4a645544822373647413e1,4049
104
+ pyobo/sources/pharmgkb/__init__.py,sha256=25df339dedc6617df9ba4a80ef2b5b620b2425ab900893cc3f4de8e5c3557a20,443
105
+ pyobo/sources/pharmgkb/pharmgkb_chemical.py,sha256=698096d364d5cc0c59e659dee428eb4fb5224818fa0b567a30173a9dc9ff229c,3142
106
+ pyobo/sources/pharmgkb/pharmgkb_variant.py,sha256=1a1f5f34895446614589cf9f4307bfe9218a316dee21018a4610b4b6fb163ad0,2873
107
+ pyobo/sources/pharmgkb/utils.py,sha256=485b51020fd4c68bb96297ea3d3b05f707b4c0132c6a5c326dd5009b9652f9c2,2593
108
+ pyobo/sources/pharmgkb/pharmgkb_disease.py,sha256=b68a85adb653b67add77ce54e9be9a41d47d683ef565fdbe13598b3fbf033f34,2554
109
+ pyobo/sources/cpt.py,sha256=6fb85c50b96fbbfc5ae94470a03dfb19cffc540b3c9b16b00255df94bd5ed4b5,1466
110
+ pyobo/sources/pathbank.py,sha256=496e2611d5825f6319606d55269f322c4cf206efce99a653b521ab7a57680ed4,5387
111
+ pyobo/sources/gwascentral/gwascentral_phenotype.py,sha256=4af302177b18a9cdc5e6735709fefa033221353ebdf191c79d3a4ed0819fb7ca,1788
112
+ pyobo/sources/gwascentral/__init__.py,sha256=55d1c8801551fb7e81ee02ee851e175795179ff120359d3e8b583d36384e8d8d,231
113
+ pyobo/sources/gwascentral/gwascentral_study.py,sha256=bddb3b20e2374cc3ff14601aba36c17466897d46f1d086bf75ecf62992263bd9,2657
114
+ pyobo/sources/omim_ps.py,sha256=692cb56e44090b2c600d87c0ef0a71a13b77750faa3e40886385f9dbf7a51c76,1432
115
+ pyobo/sources/selventa/schem.py,sha256=bea37f6bf34b7ac863fb6751b997a57ce2c943977253766085f49122af441550,1162
116
+ pyobo/sources/selventa/sdis.py,sha256=b3169dde3868d74ab6a12ce3c820e419605884ac2ccbf8da4bec0f24ac1c2e75,1287
117
+ pyobo/sources/selventa/__init__.py,sha256=7082039562fdce72f6af4699209dabd4537734cf62a3be30f877b67a0cc9c17f,254
118
+ pyobo/sources/selventa/scomp.py,sha256=9ec86c90b41e5eecdfe6defd49326c54a260dd1f34097dc3b89054ac487049b7,1531
119
+ pyobo/sources/selventa/sfam.py,sha256=127f2d0327e4bfd8a60356682d426f41080672d7ef4c6b84a1bef0968671197b,1448
120
+ pyobo/sources/mesh.py,sha256=39a11c96a65d2be65081caea7664d7e1c03980a71484c83ff03913ed2b53de2d,13245
121
+ pyobo/sources/mirbase/mirbase_constants.py,sha256=e438dcc17fc5452cc561b4dfe74caf90f6a64881fbd11c3723cabe0ecd331d5b,1998
122
+ pyobo/sources/mirbase/__init__.py,sha256=f3f6043634b2e79fc22a419d19303b523baff1db7e61f87dd15fa1b778f0a659,252
123
+ pyobo/sources/mirbase/mirbase_family.py,sha256=4c858a861174a67e9d8504d380b838958ac92adbbe20b96dac71590f4a9e65be,1974
124
+ pyobo/sources/mirbase/mirbase_mature.py,sha256=263eb9c55aad8eabb3a991938bc7273262ddc9f51f9ad84cfe46b5499dbeaf31,1302
125
+ pyobo/sources/mirbase/mirbase.py,sha256=f61b8bd0f58055c10393ee2e9d9c3e1889f2104d42fc55f047137ae471b7c717,6387
126
+ pyobo/sources/icd/icd11.py,sha256=5b6e59f8028cfbd41f860151d1164514be2653a50078c0fc8748c20b815ee11b,4867
127
+ pyobo/sources/icd/__init__.py,sha256=0eb65597be8ff1eb2c278b6564f71ab8556b5d590821907ab09d1ce8a9ba4962,142
128
+ pyobo/sources/icd/icd10.py,sha256=61ab55ce0af6dbd27f59e25c6b8150007a96af1edcecde1f1db85bd5c4354de5,2587
129
+ pyobo/sources/icd/icd_utils.py,sha256=8fbc63228bd61b4f86c47eee5d6ad76433b52d7132a3fe0275680f4874c85c96,4525
130
+ pyobo/sources/gtdb.py,sha256=ab420486568c8ad1d6a39200cb6979f2e5cc2d67a40addeb2303a60ecb031138,5221
131
+ pyobo/sources/kegg/pathway.py,sha256=82333defe9d69a0a493b69368112d61d922195d333d081ed3679b355bfb235af,5892
132
+ pyobo/sources/kegg/__init__.py,sha256=8553f4b6ec15a6234c8a416ffdb34faf3b98bfe1c0d7f6cf742bcdc7e7e6e458,219
133
+ pyobo/sources/kegg/api.py,sha256=b33bb6e604b7103e6f51c287aa1e9723a839119cf9d950d2fd4148688bd4e49c,4191
134
+ pyobo/sources/kegg/genes.py,sha256=c74a156d1612e7150f507858ba80288ec20fc9f8c08bcb7b45faf715aa6d770d,3558
135
+ pyobo/sources/kegg/genome.py,sha256=32aedb662b637c96c81e4da0da09d2244a99963001465aa1a572035e5386cc7a,4161
136
+ pyobo/sources/hgnc/__init__.py,sha256=d5084cec674febf03108ccda073da4dd244b9034ce912da15213cc2c44d21963,157
137
+ pyobo/sources/hgnc/hgnc.py,sha256=f05121570f4e4b06f4d70bbf6950363349a726de22c6f2ed5e3e43411591bf95,16377
138
+ pyobo/sources/hgnc/hgncgenefamily.py,sha256=e3e8d0b750d59a7da3d0ac2b100e248e8dad51af54c045405a12704e36db20cd,3710
139
+ pyobo/sources/README.md,sha256=0296f0a48da16d8422c3837a284fd5000a5f3a64d01e47936eb34413121b5f82,901
140
+ pyobo/sources/antibodyregistry.py,sha256=3726d4ccf1286e7e73aebd6252f0bc67d72ea83103335bb4eec8d5d540037664,3353
141
+ pyobo/sources/mgi.py,sha256=7d40f86d4bb07bc93e1f8b45e7856f0f25314fec5e04c6548ff7e5611b1fa5cf,5541
142
+ pyobo/sources/utils.py,sha256=98120062c2dba0007ac3ac0f4d3bf52c3401cd742ee7c4d496734624b589c31a,1118
143
+ pyobo/sources/nlm/__init__.py,sha256=74b7831ddabf96fb72d6984972a33e7b0f152843d4f3c8b210cc202e4227c6c7,178
144
+ pyobo/sources/nlm/nlm_publisher.py,sha256=96be828e8d8c76569ddc94e49f772b69f58a2f595c1d7dad16e29d9c8a0a6b9c,984
145
+ pyobo/sources/nlm/nlm_catalog.py,sha256=a205c3878cf2471ebdfd86c682e1f4c96114e7edd2bc79cb06f132c6d800e990,1339
146
+ pyobo/sources/nlm/utils.py,sha256=6c4057cf3d9f8e39c515c8ebabfabc99faf57f4fd188a66843b1f5f20a55e070,4861
147
+ pyobo/sources/nih_reporter.py,sha256=cac85ef3050695cb97c94e81caa409bc252bebd49354485ac03e409a69bd9094,1612
148
+ pyobo/sources/famplex.py,sha256=a82be3e9607feaeab64471d53c8686872aa47f5b9b23a5eb3bc0daf98b5af7a4,5628
149
+ pyobo/sources/go.py,sha256=cd72c37dca9b894eb43371540adab37cfcd8a07952be4533000f19b4f110c376,1530
150
+ pyobo/sources/dictybase_gene.py,sha256=78bbde62732e26cd92c2d287ca3e34b678e9f058f2d72157a0f0e8b9bd5d6164,2672
151
+ pyobo/sources/gard.py,sha256=f6846fa4d76df78714a92605e76f4f173f500af178b0ff8905f856909ae81197,1768
152
+ pyobo/sources/clinicaltrials.py,sha256=c24add689328aa31edd9b3fedaf3b514be62f9bca45dce12824ec83d77a66db2,5573
153
+ pyobo/sources/interpro.py,sha256=d6d99771293946b8228fbd35183aa845b77f7c46af1e5f3f03a6887f92ba10b1,4809
154
+ pyobo/sources/ccle.py,sha256=167d6d6356071f2663ea696a83c2123065181b8a3a5b931e78eee5fca94b9a8b,2924
155
+ pyobo/sources/chembl/chembl_target.py,sha256=681d2952fc620fc5d6fca81959e9a9346e363931f87c9f101abcacc2ccbf4c9d,5408
156
+ pyobo/sources/chembl/__init__.py,sha256=95d2f4af2a6253b9c3254c19c38696d0dc9ae36e35072fd7ed106fcbb3016b3c,195
157
+ pyobo/sources/chembl/chembl_compound.py,sha256=0ecf5ac6e4f5b8efbd2f79509c4a6bffc25d5a8fa60cd589bfd853586f565ec9,1888
158
+ pyobo/sources/uniprot/uniprot.py,sha256=dfa7eb88c59df10cdf1879d6bac2e60638a4d73b19f3a0b4767d499209336f46,6317
159
+ pyobo/sources/uniprot/__init__.py,sha256=0b475fdba434a9f49c080f7d23846497d2f6a1e1a839d3fcfa88a119c9b0a6d1,200
160
+ pyobo/sources/uniprot/uniprot_ptm.py,sha256=a130397ef41e135d0a4c7a624f0d379c776d0e13f869871690f4e1f8cc4d3b9d,2192
161
+ pyobo/sources/reactome.py,sha256=b98ca4f6efbdff59215a1e44b02d96247dba680e593a4829c87545fc922d4134,5612
162
+ pyobo/sources/pfam/pfam_clan.py,sha256=f2d81d273deb28f0492ae54cf5350b365baa3fcfde289d6ae332219af7cc56ac,1205
163
+ pyobo/sources/pfam/__init__.py,sha256=03acb66f67b42c28abe2c020e5308be580e2e9c56197d464de5a05e5505ac5e3,150
164
+ pyobo/sources/pfam/pfam.py,sha256=99d6d1e8093f9b23699f05d0b2c1a1e87318feebd29343873397bc4697ce1b47,1718
165
+ pyobo/sources/rhea.py,sha256=75b872549d72a00428c685a9e3b38a7a02c098c87aaa87beeff0da7c90de5ab9,8164
166
+ pyobo/sources/wikipathways.py,sha256=ae9b7b955580db4d27ebe863cf12bfcd07b1af660678666829dab662645aa63e,2637
167
+ pyobo/sources/cvx.py,sha256=97d0acbae76bf54ca8d0f35c8c94db346eb610e51cac05688a3d2f2613738551,3595
168
+ pyobo/sources/itis.py,sha256=6b1d54c40ece2a97176c497aaa3113fbf78ea32845e918fc76de4a1bf254dbbf,2876
169
+ pyobo/sources/umls/sty.py,sha256=80a4fba019e163606f4fcebbf2373b6036ce2c839e62f371745356e5d31f7e54,1479
170
+ pyobo/sources/umls/synonym_types.tsv,sha256=f133bab18eff4073470462d29ea3a9a6dca42223d4cd77171d7696988f48745a,8550
171
+ pyobo/sources/umls/__init__.py,sha256=10d80d5d02a1cdef73cb1b178e49fbdfe05daa6767b4be19cb5a91e36183b4ff,141
172
+ pyobo/sources/umls/umls.py,sha256=5bc2f3eb8f5a8abb605a21cfbc44b4e137b2c3c24c0a70825ec4a6d48dde6025,4287
173
+ pyobo/sources/umls/get_synonym_types.py,sha256=fd5266a8217b628fca6bef678e579dba3251445bc0f474d0f6f6c92c80bd7bb2,1724
174
+ pyobo/sources/umls/__main__.py,sha256=358e97a9eb60a5177f2cf9bde554d7d8bdeb241ffb877250b6d8270c9f5c1613,108
175
+ pyobo/sources/complexportal.py,sha256=78ec7567393ccc33cfd43acadb2392bf5f22f6933a8821cf3741a1f9bc6bb443,7466
176
+ pyobo/sources/credit.py,sha256=7643164ed0aa81333dd2415af23ec170fc94efc89b1656ea2d7f66551b6aff9a,1795
177
+ pyobo/sources/chebi.py,sha256=f9ffd7c812ce1e80b6b86aaef14cd0dc780095ba80866efe014bded072b44ce0,1202
178
+ pyobo/sources/ror.py,sha256=212fca52d31e2a002776b6cb8e17282bc8a5a7e8ce7a20f0cc64f2e51f5c2309,8882
179
+ pyobo/sources/flybase.py,sha256=8144b7f4d17fa9cef6dd1d9201b85062a3e0e943a2c0ac0f5e15d0d49c02ebc4,5666
180
+ pyobo/sources/cgnc.py,sha256=5e5c2aaa325cec1f7bdf9dbe020691a3c95acd79ca7fffc9555e2575f1899754,2299
181
+ pyobo/api/species.py,sha256=631cc978295fb8a23ea6360ba6ee7bf7b8dd0dec93917a6340381d99cf4c2b0a,2376
182
+ pyobo/api/metadata.py,sha256=b2d25a897fe5ef1d11d55efb4cdc07bcfb6892e67e128a9bf473112fbd0d896b,1029
183
+ pyobo/api/combine.py,sha256=ed3f108fc5b5c164352a0289b0ed641511d9c6441cadf28cd6106b86a1ec1245,1106
184
+ pyobo/api/properties.py,sha256=6d85af1ebd5b7f4c5d232323faab9d8f8a11a419eab0a86eca36052b22b2f778,6914
185
+ pyobo/api/relations.py,sha256=6dfda59d8ae2c3addb816d7dad2b97856916c6f2e6114f7a774bfcaff1c25747,5859
186
+ pyobo/api/__init__.py,sha256=259870a4519a6baa5df1180378837e67c688e8ecbe46e9a3d4a90e6435c79e1d,2955
187
+ pyobo/api/edges.py,sha256=4849b6809c7a2e83a48571a3d75578dae2e0e0589d15af6326a5bd1f39e57f09,1974
188
+ pyobo/api/hierarchy.py,sha256=37f27381f08a3c859adb4a1d46132fa60889a5ccce8867620db2e4353aa5a69f,10314
189
+ pyobo/api/names.py,sha256=2f620187285c1fccbeac23708d624bc374ec1e9d6abce65ebf5eb4f9c63070b8,10673
190
+ pyobo/api/utils.py,sha256=ae8d2274e48d129a0d3520e48ba462af066afff928c9fcd231f569c4b322bcf5,5429
191
+ pyobo/api/typedefs.py,sha256=1d3ba2d2497f5442f18238b4bdf06bf8d046df3aeba4253cb66b9039258ae9fc,1262
192
+ pyobo/api/xrefs.py,sha256=9d62cbb761b36957e780d0546ce3154a33a90ae6be23bbbedadba8c735c6aab0,5242
193
+ pyobo/api/alts.py,sha256=478b3162574616f2827bd73107f80f5dfdaf5971eaf6c6813109109dba89e522,3032
194
+ pyobo/__main__.py,sha256=70e610d8e10bc45fbd4fa9ee67dc672d2bbd6cb1e4e9e8a7aec4a8cfb11c0fd3,83
195
+ pyobo/reader_utils.py,sha256=5324154d08576e167d7c28b3660dbaa394e67878acf7ea9930abd0170201460a,4423
196
+ pyobo/mocks.py,sha256=8f9e392bd3ff0cfb0306e6070eb8724cb8e694fa0d951744b5c4652e15e56d72,2440
197
+ pyobo-0.12.1.dist-info/licenses/LICENSE,sha256=41c80964a1b1956e41c013670812fc5592d5b51bd7b3cd4287d949450488a498,1076
198
+ pyobo-0.12.1.dist-info/WHEEL,sha256=1c77bbda0b527f376a68ced20cbc1aac3efc7bc4d7c10cc4323a905ef79ae8db,78
199
+ pyobo-0.12.1.dist-info/entry_points.txt,sha256=00d833beec05ffdff58a90a8c49b5b04ce80e22d8c92ddfd80c3f340eea1bc6b,42
200
+ pyobo-0.12.1.dist-info/METADATA,sha256=891eda0af949aecf1dc5064aaba32edf807fc6ec4d43d7eebd8b0af65dc3b388,22299
201
+ pyobo-0.12.1.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: uv 0.7.2
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