pyobo 0.11.0__py3-none-any.whl → 0.11.2__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 (47) hide show
  1. pyobo/constants.py +1 -0
  2. pyobo/gilda_utils.py +14 -11
  3. pyobo/obographs.py +5 -2
  4. pyobo/resources/so.py +55 -0
  5. pyobo/resources/so.tsv +2604 -0
  6. pyobo/sources/complexportal.py +54 -15
  7. pyobo/sources/dictybase_gene.py +14 -9
  8. pyobo/sources/drugcentral.py +4 -1
  9. pyobo/sources/expasy.py +22 -4
  10. pyobo/sources/flybase.py +3 -2
  11. pyobo/sources/hgnc.py +24 -19
  12. pyobo/sources/hgncgenefamily.py +7 -7
  13. pyobo/sources/kegg/genome.py +18 -6
  14. pyobo/sources/mirbase.py +9 -3
  15. pyobo/sources/npass.py +1 -1
  16. pyobo/sources/pathbank.py +32 -23
  17. pyobo/sources/pombase.py +6 -3
  18. pyobo/sources/reactome.py +28 -7
  19. pyobo/sources/rgd.py +1 -1
  20. pyobo/sources/slm.py +28 -14
  21. pyobo/sources/uniprot/uniprot.py +7 -6
  22. pyobo/sources/zfin.py +18 -6
  23. pyobo/struct/reference.py +9 -8
  24. pyobo/struct/struct.py +30 -20
  25. pyobo/struct/typedef.py +5 -0
  26. pyobo/version.py +1 -1
  27. {pyobo-0.11.0.dist-info → pyobo-0.11.2.dist-info}/METADATA +50 -62
  28. {pyobo-0.11.0.dist-info → pyobo-0.11.2.dist-info}/RECORD +31 -45
  29. {pyobo-0.11.0.dist-info → pyobo-0.11.2.dist-info}/WHEEL +1 -1
  30. pyobo/apps/__init__.py +0 -3
  31. pyobo/apps/cli.py +0 -24
  32. pyobo/apps/gilda/__init__.py +0 -3
  33. pyobo/apps/gilda/__main__.py +0 -8
  34. pyobo/apps/gilda/app.py +0 -48
  35. pyobo/apps/gilda/cli.py +0 -36
  36. pyobo/apps/gilda/templates/base.html +0 -33
  37. pyobo/apps/gilda/templates/home.html +0 -11
  38. pyobo/apps/gilda/templates/matches.html +0 -32
  39. pyobo/apps/mapper/__init__.py +0 -3
  40. pyobo/apps/mapper/__main__.py +0 -11
  41. pyobo/apps/mapper/cli.py +0 -37
  42. pyobo/apps/mapper/mapper.py +0 -187
  43. pyobo/apps/mapper/templates/base.html +0 -35
  44. pyobo/apps/mapper/templates/mapper_home.html +0 -64
  45. pyobo-0.11.0.dist-info/LICENSE +0 -21
  46. {pyobo-0.11.0.dist-info → pyobo-0.11.2.dist-info}/entry_points.txt +0 -0
  47. {pyobo-0.11.0.dist-info → pyobo-0.11.2.dist-info}/top_level.txt +0 -0
@@ -1,18 +1,18 @@
1
1
  pyobo/__init__.py,sha256=k-oIvi7tNzCg0SA8D7jghJ9Q9GW6RXp75kszqsbZ_Xk,1837
2
2
  pyobo/__main__.py,sha256=cOYQ2OELxF-9T6nuZ9xnLSu9bLHk6einrsSoz7EcD9M,83
3
3
  pyobo/aws.py,sha256=8vg7VumLT3blTX8dyluS13jrBo6bwRHNEpkQw1njhXo,5946
4
- pyobo/constants.py,sha256=aonqwwtc65p-XgoPzTXL57dwJWkG5vXGK0ULES3u25U,1911
4
+ pyobo/constants.py,sha256=R6ZIJ9JylzEXaGAO70WcMwwwNXezKoTJDEWLskzcYZc,1936
5
5
  pyobo/getters.py,sha256=mOrlI8qrI3zHwloXNvpmQnSSxhZZLjBgg5ZUGUwqUK8,15557
6
- pyobo/gilda_utils.py,sha256=bj_r8WPHL_BuV2yxRcJDNYHqdExNTz973qeSfx4fpNg,8173
6
+ pyobo/gilda_utils.py,sha256=QXSzJmas1-BzT6S1O6XWnzKVjFzO_-vYoPZGi_HoUpw,8246
7
7
  pyobo/identifier_utils.py,sha256=UoDXiOeqlqMVXISR4Qhw1zXD0ss7jsw-fPs5Jsx8xyY,4533
8
8
  pyobo/mocks.py,sha256=Tivg8tLNFjUsbAF8TiY3iurhBbgmzGtYJmNMg_e6TTo,2422
9
9
  pyobo/normalizer.py,sha256=DfDuX2Ed3vCJgaezfHXorYcNui9vfR64AFJFYfF_NWk,8304
10
- pyobo/obographs.py,sha256=edsB4MF4x98C2EsIJ8ZifuG4oGA3YWXrCkIVd1iTbOg,3761
10
+ pyobo/obographs.py,sha256=3Bdot7c5KlrTPxmgnk3Y7tXmaVf0n9aL8QEs6pIGVHo,3912
11
11
  pyobo/plugins.py,sha256=UyEnXxFP2q9IdYp5o7DDXPBrcExvTx4LkvhvWXx-XQc,1227
12
12
  pyobo/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
13
  pyobo/reader.py,sha256=C_-Dz0ScyFdr8DivHTYyDhIVg8SOwS_Y0DIuqKT2EJI,21292
14
14
  pyobo/resource_utils.py,sha256=8ZQx8d-HbmPyc_WHUhqx1yjUKFZMF101FopZwZPghoE,4273
15
- pyobo/version.py,sha256=HPxL1mV3HqbCzveHuGbwWCt4-rh8D-dif3AILKAlX80,919
15
+ pyobo/version.py,sha256=5XT91psNM717pWEmUHFJc4A_TdbD4AvRx-gAxK9qm4Y,919
16
16
  pyobo/api/__init__.py,sha256=7_uVqbZVEWrKNBYxVJb86K9-dLsGD2d2H5wjLzIP1wU,1301
17
17
  pyobo/api/alts.py,sha256=fYA3S3odeem2-HvzeqUn0jkAFGdmbL1SYXCjIqKmRqs,2836
18
18
  pyobo/api/hierarchy.py,sha256=-zgM4n0n0h5v5aPOhG0AR3isOt10Vtpo6EwVYN00ngI,9509
@@ -24,21 +24,6 @@ pyobo/api/species.py,sha256=Ze1yr3n9jCVQVYXmn_hw_FiziTYchddCNTW9ChDH85U,2259
24
24
  pyobo/api/typedefs.py,sha256=Z4IZ5ggJe1N7lKMMrng5P8WnZo0nalsaLTMLmQT0w2Y,1130
25
25
  pyobo/api/utils.py,sha256=zM56HjlYNPXjnhIe3oS7Yv5mAEfHHbhnf1gpJOnem1M,3274
26
26
  pyobo/api/xrefs.py,sha256=InnBazYid5SBoRCMfE3lrBIRtdvwNi2oozjlGaX06ls,6007
27
- pyobo/apps/__init__.py,sha256=iACi86TkTiGxwneGmfaudZOIEqZ45YjPXng7XjPE38Y,72
28
- pyobo/apps/cli.py,sha256=gnXBAaESw1T1BvgMpTv-0P26hM2vKCAXPy0SOskgUwU,335
29
- pyobo/apps/gilda/__init__.py,sha256=jpLIHJOmR_66tdXXUWFP9NiZnpQKvjv5YpCJWoAKnUI,54
30
- pyobo/apps/gilda/__main__.py,sha256=9EEwzUlwcFHrfAEzveIvmqHiPu52wLt8o4Xe_vFcWf0,124
31
- pyobo/apps/gilda/app.py,sha256=rHqGR52fnbhqRPWktbIZc8ZZcFEIKp6rq7ledFuN_Lg,1315
32
- pyobo/apps/gilda/cli.py,sha256=OteTZy060Elmg38sl091kHfaHjjLTJaAtLdUpWgr6ug,702
33
- pyobo/apps/gilda/templates/base.html,sha256=MxFNPgWW4wYzXXS3RwXMcMJAc1_lUhguQvVYQYjSjLY,888
34
- pyobo/apps/gilda/templates/home.html,sha256=ZAqegzBGgVct9UzmfC0dfGJ6_jbDSCpbwqe2WB-00AA,273
35
- pyobo/apps/gilda/templates/matches.html,sha256=x3mvMCevr8IoXSXmm_aOQlKNBycvMpBedLLCt2znNXQ,934
36
- pyobo/apps/mapper/__init__.py,sha256=9PK1LtsCTVcQQzSPtpa6f1dgjsoeygq9cAP7AXqEiJY,56
37
- pyobo/apps/mapper/__main__.py,sha256=XScQCj6oK2OslWyZ8yzcaietLJm_XxDLA22CMoyy6dM,169
38
- pyobo/apps/mapper/cli.py,sha256=AHPPXqSd3LTMhHIsmhErMB_gpfDeDs6IGlPdHQKMIq0,682
39
- pyobo/apps/mapper/mapper.py,sha256=yVIHGlTwFNtKEF07K-oqsqy8ggIalN6SfmyzB4E--2I,5787
40
- pyobo/apps/mapper/templates/base.html,sha256=w9d8e8qKnVy_h7RT5hWV9EwghgPqn0y3xJ-tZw0v9TQ,982
41
- pyobo/apps/mapper/templates/mapper_home.html,sha256=XugUb76C6B1JGQTCb2tDhZ-XyY-636qeZJODUTrpjdw,2785
42
27
  pyobo/cli/__init__.py,sha256=pTiLuzjjpi0P69yVjQ2kE6nBUmZuYFnqdJNDZLDkgvk,71
43
28
  pyobo/cli/aws.py,sha256=_S08OhNY-vdx-KIT4ix3Zluey9lVY0RWJhDjwcwrw2M,964
44
29
  pyobo/cli/cli.py,sha256=gWEMOWEfjpTdCjxJm1F3Kq73FD1xoGfG9p_8r0YJ4Ro,3522
@@ -53,6 +38,8 @@ pyobo/resources/ncbitaxon.py,sha256=rZtU6ik32UATBb5tRY5i5LU9_kpTA3vmPy9gOfhY_fU,
53
38
  pyobo/resources/ncbitaxon.tsv.gz,sha256=43zHjnVt62TA4_lV58X-FCPdMDfLg1B1PvZSr_Xy9hY,22981954
54
39
  pyobo/resources/ro.py,sha256=k8JoFKz64T1Pp39FKud1n4I3qPb178B2xSWJbAN8qdU,1461
55
40
  pyobo/resources/ro.tsv,sha256=YvlBLPAKy2w4IheYzO9ox1Yg6WkHdMVzMQTikIlECog,26586
41
+ pyobo/resources/so.py,sha256=S-vmQ7L8AJE08FfGVDIJqNQNaLPUmuJ6HC5F4hWHMrA,1466
42
+ pyobo/resources/so.tsv,sha256=UJZKFTEAv_XszYYbun4Wf6b4jovDjSKc1RWRQRcTzDw,82068
56
43
  pyobo/sources/README.md,sha256=w2klc3MjUbLL9VZxIZIqFrHMdQshPUGSCoFsYdUReD8,889
57
44
  pyobo/sources/__init__.py,sha256=WkyBXj7V1Y90qSijmHwF89GyC8kRj-Jv7DiFAzqX1iA,3811
58
45
  pyobo/sources/agrovoc.py,sha256=SJsbJ7KtxdJUG9Rimmb2CfLfzpK9eOzP0wx59gj-6s4,787
@@ -63,26 +50,26 @@ pyobo/sources/cgnc.py,sha256=MSEGwaZ8wOypR5sLALAl5Z3ay7K3RjqMC0GtJd4VvSc,2320
63
50
  pyobo/sources/chebi.py,sha256=IrfXfO9-75jxeDCjCBFBgRWe2R7DSQpQBOllgt7MmoI,1202
64
51
  pyobo/sources/chembl.py,sha256=5K5gtIrsqHyZSG8uxhqgXuvKjSXAw9i1dg20boZg8Fg,2280
65
52
  pyobo/sources/civic_gene.py,sha256=_gC7P8QyRhJF9i_46eEU4_nV8I7i6z7XGKvXD67mwOM,1693
66
- pyobo/sources/complexportal.py,sha256=Uf3lxgD_jzBWQH5xbcJ11hgbdbxOlMHkdqsC0ySurdE,5993
53
+ pyobo/sources/complexportal.py,sha256=n_ZHWzg7jRA0Trmy1ndQZAFM-ayDl_hFnj6O0ZjZESA,7581
67
54
  pyobo/sources/conso.py,sha256=OVcfSUjwMh5biMZuTfidHvREjyPrQE84kmEQOHsinxE,2438
68
55
  pyobo/sources/cpt.py,sha256=b7hcULlvu_xa6URwoD37Gc_8VAs8mxawAlXflL1e1LU,1466
69
56
  pyobo/sources/credit.py,sha256=gOhD5Q2Xa4CgEnDiwli8CuxjAxLkydZukwFU-l_KTzc,2017
70
57
  pyobo/sources/cvx.py,sha256=WglHdUi6uLKFUkzDRxGTuElOxBu4x5By2XcfZNS4LlM,2820
71
58
  pyobo/sources/depmap.py,sha256=UKJ63iH7NtzklQ7AIqENMxQIvslNeBocwLW90cR8Tcc,3660
72
- pyobo/sources/dictybase_gene.py,sha256=n91GwkCIZWhS_O9IaRwGS_LZ3rKSb3tCZBpb_uvx27w,2548
59
+ pyobo/sources/dictybase_gene.py,sha256=57RxdH70S3Rklz4qZS0T_kBEdCH2UVSXYdYwt7Gn2Ds,2810
73
60
  pyobo/sources/drugbank.py,sha256=W-Qa8Cttk07PtndbdJHc1yrAMYZHT-4r1bxeRrXgqHE,11032
74
61
  pyobo/sources/drugbank_salt.py,sha256=DXqz5rEw8QUipPkDeuwg-MU9OvnSrBM62k3JeSeq4kM,1768
75
- pyobo/sources/drugcentral.py,sha256=5k-Fy1Khn_vqtuO5Sy33RsQLB51rcNgUA-K-PVaQOW0,3576
76
- pyobo/sources/expasy.py,sha256=MpkQ1snWdWAff5xVBpP-c1RQ3JXeFEKJ4J1Taufrtoo,10040
62
+ pyobo/sources/drugcentral.py,sha256=YXd6d2y62ILNrWg5rqi9jDfmB-MTacCZA26itDgETmY,3751
63
+ pyobo/sources/expasy.py,sha256=2MUKkPIiww97e14sTMH-FQa7tSxFym7Gz49D08wmZYI,10771
77
64
  pyobo/sources/famplex.py,sha256=oyNbnAbRuc72nap_xWpiZR8mcWWj7O5GliL89kwF9mQ,5787
78
- pyobo/sources/flybase.py,sha256=tSUbtg7XUnLFi5CKallNQIjwa0zX5rWiuh2vn-k0smA,5747
65
+ pyobo/sources/flybase.py,sha256=8-_8AfS-_rho4OThchHjqDG0y07owq02rlmQjGmuBkY,5817
79
66
  pyobo/sources/geonames.py,sha256=uNwrVBXGaPvMS7bwUAof_plSrV3F999Va2YSWbNwAKA,8563
80
67
  pyobo/sources/gmt_utils.py,sha256=aPPVAtoyPOzoyGFOAf3RwlgpdARAU0RHkDWnp_ZFgl4,1391
81
68
  pyobo/sources/go.py,sha256=SDRZtT28gY6T3k3z_3PMSDdsQkb4vJDAchw1dL6x40Q,1250
82
69
  pyobo/sources/gwascentral_phenotype.py,sha256=EDxcAC6ONhZj-Amo4PsT7ruO1-CzqsJvYXug4eeFX5A,1873
83
70
  pyobo/sources/gwascentral_study.py,sha256=njSRd9YxMWvXXg4cyILPL704LrtIeg-_63cR120jgyc,2814
84
- pyobo/sources/hgnc.py,sha256=WDu6O3WCzok1NVOr6cR6WiIprAmTg2fm12yTTpdCewo,15902
85
- pyobo/sources/hgncgenefamily.py,sha256=StZ9GhhU5SfMrzIJe444SP-PKU-8cZpx9Gv2SlcbHrc,3623
71
+ pyobo/sources/hgnc.py,sha256=C6Av1SIgP4XNyxcKKjZfEEvrPRu8lKUD-rNMYAmSC7Y,16298
72
+ pyobo/sources/hgncgenefamily.py,sha256=jecrhlcBSXMnoFKlKHyS8zkWfqSqr5UHXZT7h_cY4oU,3755
86
73
  pyobo/sources/icd10.py,sha256=FqCrB3f1OGukQDcvgLGffbSNyaA9D62ufTQkgMLeE4I,2283
87
74
  pyobo/sources/icd11.py,sha256=IaJ6fV_7humYu7AKvn_93y355FL_XMjtMyyMClYBUjI,2831
88
75
  pyobo/sources/icd_utils.py,sha256=Ub5LH4fDRHrGWwb7iP8I2KEFNl6I-viqxvLUyxGz2nM,3156
@@ -90,33 +77,33 @@ pyobo/sources/interpro.py,sha256=8IhVie_VrQSHFZmxpQVPQXm6ISFV435UjhDA41qBuk8,488
90
77
  pyobo/sources/itis.py,sha256=jJF5oGuaewl4SH882AMhzr7HX5Ekpp2fyqAwT3nY6G4,2951
91
78
  pyobo/sources/mesh.py,sha256=02VCo6t4g3kp0BhLb_2pykK1428xyfY40zQ3xCPK_eY,12116
92
79
  pyobo/sources/mgi.py,sha256=nIizvAtIG7genT1iETkdKZmS6mCQmQZCSR-_kRMg7_s,5750
93
- pyobo/sources/mirbase.py,sha256=7bE6XVBn9na82p8Kr6Vs4xjy67MEJK8Ac1ZsQxmC4oA,6327
80
+ pyobo/sources/mirbase.py,sha256=SfXyLt0_EVp_9mTApKC13-9cFTGs2qfi8J7KekKv5d4,6511
94
81
  pyobo/sources/mirbase_constants.py,sha256=5DjcwX_FRSzFYbTf50yvkPamSIH70Rw3I8q-Ds0zHVs,1998
95
82
  pyobo/sources/mirbase_family.py,sha256=qWAp1PUN5pJCArTPx-rhMGi6UG0LfoZNg5URQdXhDps,2151
96
83
  pyobo/sources/mirbase_mature.py,sha256=UbAdGEzLiS3GjeCnGKjapUKrL1WxTgxF25hdwx7pmV4,1488
97
84
  pyobo/sources/msigdb.py,sha256=lzQ9Bfuv53UVaN3He1NCkGg4ChWfo_9OPOK8NW6bl_s,5010
98
85
  pyobo/sources/ncbigene.py,sha256=jeQRJnLnU4Q1_U-FKOOeQjkqlc-iamUUn0zZqEmiaiI,5028
99
- pyobo/sources/npass.py,sha256=yMqkAkfOiNeQBXBIRR0qFrtcxBKrIqYH86MXPJC3e9U,2798
86
+ pyobo/sources/npass.py,sha256=0jHHGX0gk2PZFhv5jhEsbN-khTaJu0cE3sbMedZe3UU,2799
100
87
  pyobo/sources/omim_ps.py,sha256=fcMNrFBtc5u3HHaLpQVML4amHvgMErTS--pOlg074A4,1004
101
- pyobo/sources/pathbank.py,sha256=xf3e8MvSOUcV_z-fMJuhakuKksL3cGcw2lnNljrX50E,4968
88
+ pyobo/sources/pathbank.py,sha256=5sM_8dgriKE5YawxeGq3A6bpdC1kFS0KZXeaF-k-IYA,5471
102
89
  pyobo/sources/pfam.py,sha256=T9rZNIXUTw8XajUSNoPscDUN9wG4bae171xQepYqhQI,1830
103
90
  pyobo/sources/pfam_clan.py,sha256=Qk4q8jEwFR9NcLXeGR3p9TjA2oK40KkkFS0wMA1UirA,1324
104
91
  pyobo/sources/pid.py,sha256=iVoZ3yUgfTccun2baEDQ-mTwLYJ8kdWMoT9H3Q6xREc,4541
105
- pyobo/sources/pombase.py,sha256=byAaa4Gwla48y3sglcbfjpXCxVvVR5SAsbUBUiDRnIs,3585
92
+ pyobo/sources/pombase.py,sha256=hpkhIWgHk9viHF8aZnUJUqLEOK1I6M58v4zXGMKGQAw,3712
106
93
  pyobo/sources/pubchem.py,sha256=SgC56EBUHT6Cgwm7BUc3Kgw8b-kdg80JHm8D-TKdEzg,5284
107
- pyobo/sources/reactome.py,sha256=LHtv5dqremVixw4ASVIPM3Aq4feNqXVJ1R5kNQ93z9g,5063
108
- pyobo/sources/rgd.py,sha256=dleXkB5zQHpjOcj0u2rvSjsXm5S7GRuxQ-DupTN5BKk,5399
94
+ pyobo/sources/reactome.py,sha256=yp0JZkdZvtSlwl9ki2L4ziEfaPo3YDolPeXTbQkmrnA,5720
95
+ pyobo/sources/rgd.py,sha256=yYTZvYZi4irm2daE6GRf9NNtQXjwA9DYXupov2K9PXY,5394
109
96
  pyobo/sources/rhea.py,sha256=qlQj6wHuY08QeEGwVHubh8oLD-E12dbqNCJ57v_uKW4,7776
110
97
  pyobo/sources/ror.py,sha256=U6sQ1IBs0nxENF02bnkUVA8rx04o4Y9dZ2YwKu6rtj4,7377
111
98
  pyobo/sources/sgd.py,sha256=kQ_kof0F50RB0TrL2Eorqc7nUyv2kibAdf4Hp99ijKo,2134
112
- pyobo/sources/slm.py,sha256=EbMv4SIpNbIyWmN4t6rDGji0ziIuLnaqjLR9r8V6LfA,3788
99
+ pyobo/sources/slm.py,sha256=KaU2fwiSaURlnCOBeOsXEgt-Thqi8AOxq7YZg_rsJcQ,4261
113
100
  pyobo/sources/utils.py,sha256=RLo6z5BKLdofu4bLstDOJMOEiMDEmJdYrE12PeJEKtc,1091
114
101
  pyobo/sources/wikipathways.py,sha256=cd_0uRjwi5Q5SpBHTUF2QqLxj67-ZhuqdxEIGHcoB0U,2710
115
- pyobo/sources/zfin.py,sha256=yHRtpT1JtcP9kq9cPLsuLVainap4vZ9m5gl6ZJi55bk,4998
102
+ pyobo/sources/zfin.py,sha256=6Mh-JhTKXy3g9xed-AgzmZlhIoWnBoEUJK9bsjQUahA,5369
116
103
  pyobo/sources/kegg/__init__.py,sha256=hVP0tuwVpiNMikFv_bNPrzuYv-HA1_bPdCvNx-fm5Fg,219
117
104
  pyobo/sources/kegg/api.py,sha256=nwHuKPsYbWhHEgBZzJ92XQAibQp8XEVQ6xglzWxyWY4,4709
118
105
  pyobo/sources/kegg/genes.py,sha256=T9ct-E_q43MZT4v7I2-liokxhNiRCI-HMZwKgBPwxz4,3707
119
- pyobo/sources/kegg/genome.py,sha256=0MfKjgbnKNvW_HM2FCufw5p_bj351_rBKIRPfdrAeVA,3968
106
+ pyobo/sources/kegg/genome.py,sha256=9KSpBffM1Wv2pwTG8g0Lve9Zhu1Eur-Alvnjnry2N5o,4321
120
107
  pyobo/sources/kegg/pathway.py,sha256=ZvKBXLieL1w5kwaHg5wxvtFAAYAnWF1TalhGo_G6puc,6176
121
108
  pyobo/sources/selventa/__init__.py,sha256=cIIDlWL9znL2r0aZIJ2r1FN3NM9io74w-He2egzJwX8,254
122
109
  pyobo/sources/selventa/schem.py,sha256=Ct6Ut3AB99eylGhZco57ueoRcsyUmHATpFPRR8cbG8g,1313
@@ -129,7 +116,7 @@ pyobo/sources/umls/get_synonym_types.py,sha256=KU3CQxQBV2xYcX3SjqMrfRNU9nESYGDA7
129
116
  pyobo/sources/umls/synonym_types.tsv,sha256=z--ngeAqA_Kk8ft2YD8qOU_XUxhnTxF0OhL8jRd5xqo,8551
130
117
  pyobo/sources/umls/umls.py,sha256=WM2vNSX1asHn8hcVjV8sdkxE3Id3xOXwiRdLqb7Jnxk,4297
131
118
  pyobo/sources/uniprot/__init__.py,sha256=HVrjUxKjixqagsOYvVJkZ7nyIPlWAhLaUWa8sR0gLqA,200
132
- pyobo/sources/uniprot/uniprot.py,sha256=7Z-K35YVZAFlIGbae7JRlFyEEezubUYuztXYrsnvUrw,6130
119
+ pyobo/sources/uniprot/uniprot.py,sha256=Qi329uy0PWRglmZGoEtSlzXy0Gs7nFVPIFroJA0H0VM,6206
133
120
  pyobo/sources/uniprot/uniprot_ptm.py,sha256=8hbGP_5Rh-HhB6iBIJZ7qhXBdcCKD9sUKtwYKUhczHU,3552
134
121
  pyobo/ssg/__init__.py,sha256=j_5ZWISXGMNLjJRiT-OBhdJ7MQpRQF69fMLWMaDidVQ,5410
135
122
  pyobo/ssg/base.html,sha256=_vldUCa-gL2YTNY6GgAuxNT3TgaED585vF_q7TrrjYs,2844
@@ -137,9 +124,9 @@ pyobo/ssg/index.html,sha256=zDGkwIQBtbpnhCYALXQ0vr7qsVmAqDtbwOyPqU3hZ8s,3993
137
124
  pyobo/ssg/term.html,sha256=QU6piGOq4dq8zlNhJvLFxqFjhVQyWlkiG31I0Sg5frg,3559
138
125
  pyobo/ssg/typedef.html,sha256=KrdqzB6xjt689bG33D26AL-11JrvNuEkoxNNI-EG-Tg,2038
139
126
  pyobo/struct/__init__.py,sha256=DwGtSEPepZdgB49UvxG470g12XIFdhMdKZ44DoZMg6g,646
140
- pyobo/struct/reference.py,sha256=JPrFspoCVXzDDW9yPbeWu62eP8Q9ForaDJcsQ247k5g,5587
141
- pyobo/struct/struct.py,sha256=OOzp2b4BkhBqR5DeY1fl90bP7wpdbGSzx4StAHUGcaU,54564
142
- pyobo/struct/typedef.py,sha256=Oyubk6VfUUDijG2C-l5LOdhdoLKFps6mm5ek5YphAQ8,13869
127
+ pyobo/struct/reference.py,sha256=-SJaXMSDOrQ7SyU12UYquwwUdqoFoxrb6WypVtbGxOs,5661
128
+ pyobo/struct/struct.py,sha256=5GJl4hEY2L5C3iM_vexdsPxiJANwNh_1KakjDMorXDs,55019
129
+ pyobo/struct/typedef.py,sha256=MA62XSS-Me4kSmVs25fQbW1nGss1C8zhAQ5diidCSzs,14009
143
130
  pyobo/struct/utils.py,sha256=ETsjZDtlGI3iEMHlYkgHcSNGeo3agwlLK3QL74gqTc8,790
144
131
  pyobo/utils/__init__.py,sha256=CANSY8vGq_6v8rWhWRIdnk-Wo5LA2R9Wjg1nqbWqLOw,17
145
132
  pyobo/utils/cache.py,sha256=fED68uExWkruXsrqYWe4iAZNZEN4MapEPYmrTBgA7U0,2996
@@ -163,9 +150,8 @@ pyobo/xrefdb/sources/intact.py,sha256=l2gqxm9OLPpQqhNqAIT_jk7AHx61itsUCz-5dowwMb
163
150
  pyobo/xrefdb/sources/ncit.py,sha256=QTo9BSGuurvy9M54viS6_v6dF36O8DbUGU6iiyqKsPI,3729
164
151
  pyobo/xrefdb/sources/pubchem.py,sha256=VK_yPCaoa-CKQNkq9iAF0Zh0D_zxqa92YG4OBbvnA9c,771
165
152
  pyobo/xrefdb/sources/wikidata.py,sha256=JSrl3YWMQA_gxw7IXJRnxWWetcAV82aM5-5J3IHFzoQ,3562
166
- pyobo-0.11.0.dist-info/LICENSE,sha256=QcgJZKGxlW5BwBNnCBL8VZLVtRvXs81Ch9lJRQSIpJg,1076
167
- pyobo-0.11.0.dist-info/METADATA,sha256=ydZIch8oh6smWoaZ7SATHqOxIgqWrsRyeDVZaGTAW3U,25208
168
- pyobo-0.11.0.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
169
- pyobo-0.11.0.dist-info/entry_points.txt,sha256=YfZYzQyXBZ5dGiy4GsOUCOKKlNRNDcmR4vnlpD50q08,41
170
- pyobo-0.11.0.dist-info/top_level.txt,sha256=oVdkT-pbiGoSdGSQplXFuP1KQGJNf4GdRC65jn6y9t0,6
171
- pyobo-0.11.0.dist-info/RECORD,,
153
+ pyobo-0.11.2.dist-info/METADATA,sha256=OhM135rj_cy5fzwcUBqk0Hfm4ItzYdR7DjKVt5pX8Hg,24916
154
+ pyobo-0.11.2.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
155
+ pyobo-0.11.2.dist-info/entry_points.txt,sha256=YfZYzQyXBZ5dGiy4GsOUCOKKlNRNDcmR4vnlpD50q08,41
156
+ pyobo-0.11.2.dist-info/top_level.txt,sha256=oVdkT-pbiGoSdGSQplXFuP1KQGJNf4GdRC65jn6y9t0,6
157
+ pyobo-0.11.2.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.2.0)
2
+ Generator: setuptools (75.6.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
pyobo/apps/__init__.py DELETED
@@ -1,3 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """A collection of web apps built on PyOBO."""
pyobo/apps/cli.py DELETED
@@ -1,24 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """CLI for PyOBO apps."""
4
-
5
- import click
6
-
7
- from .gilda.cli import main as gilda_main
8
- from .mapper.cli import main as mapper_main
9
-
10
- __all__ = [
11
- "main",
12
- ]
13
-
14
-
15
- @click.group(name="apps")
16
- def main():
17
- """Apps."""
18
-
19
-
20
- main.add_command(gilda_main)
21
- main.add_command(mapper_main)
22
-
23
- if __name__ == "__main__":
24
- main()
@@ -1,3 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """PyOBO's Gilda Service."""
@@ -1,8 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """CLI for PyOBO's Gilda Service."""
4
-
5
- from .cli import main
6
-
7
- if __name__ == "__main__":
8
- main()
pyobo/apps/gilda/app.py DELETED
@@ -1,48 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """PyOBO's Gilda Service."""
4
-
5
- from typing import Iterable, Union
6
-
7
- import flask
8
- from flask_bootstrap import Bootstrap
9
- from flask_wtf import FlaskForm
10
- from wtforms.fields import StringField, SubmitField
11
- from wtforms.validators import DataRequired
12
-
13
- from pyobo.gilda_utils import get_grounder
14
-
15
-
16
- class Form(FlaskForm):
17
- """Form for submitting a query."""
18
-
19
- text = StringField("Text", validators=[DataRequired()])
20
- submit = SubmitField()
21
-
22
- def make_response(self):
23
- """Make a response with the text."""
24
- return flask.redirect(flask.url_for("ground", text=self.text.data))
25
-
26
-
27
- def get_app(prefix: Union[str, Iterable[str]]):
28
- """Make an app for grounding the text."""
29
- grounder = get_grounder(prefix)
30
-
31
- app = flask.Flask(__name__)
32
- app.config["WTF_CSRF_ENABLED"] = False
33
- Bootstrap(app)
34
-
35
- @app.route("/", methods=["GET", "POST"])
36
- def home():
37
- """Ground the given text."""
38
- form = Form()
39
- if form.validate_on_submit():
40
- return form.make_response()
41
- return flask.render_template("home.html", form=form)
42
-
43
- @app.route("/ground/<text>")
44
- def ground(text: str):
45
- """Ground the given text."""
46
- return flask.jsonify([scored_match.to_json() for scored_match in grounder.ground(text)])
47
-
48
- return app
pyobo/apps/gilda/cli.py DELETED
@@ -1,36 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """CLI for PyOBO's Gilda Service."""
4
-
5
- import click
6
- from more_click import (
7
- host_option,
8
- port_option,
9
- run_app,
10
- verbose_option,
11
- with_gunicorn_option,
12
- workers_option,
13
- )
14
-
15
- __all__ = [
16
- "main",
17
- ]
18
-
19
-
20
- @click.command(name="gilda")
21
- @click.argument("prefix", nargs=-1)
22
- @verbose_option
23
- @host_option
24
- @workers_option
25
- @port_option
26
- @with_gunicorn_option
27
- def main(prefix: str, host: str, port: str, with_gunicorn: bool, workers: int):
28
- """Run the Gilda service for this database."""
29
- from .app import get_app
30
-
31
- app = get_app(prefix)
32
- run_app(app, host=host, port=port, with_gunicorn=with_gunicorn, workers=workers)
33
-
34
-
35
- if __name__ == "__main__":
36
- main()
@@ -1,33 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- {% block head %}
5
- <!-- Required meta tags -->
6
- <meta charset="utf-8">
7
- <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8
-
9
- {% block styles %}
10
- <!-- Bootstrap CSS -->
11
- {{ bootstrap.load_css() }}
12
- {% endblock %}
13
-
14
- <script src="https://kit.fontawesome.com/4c86883252.js" crossorigin="anonymous"></script>
15
-
16
- <title>{% block title %}{% endblock %}</title>
17
- {% endblock %}
18
- </head>
19
- <body>
20
- <div class="container" style="margin-top: 50px; margin-bottom: 50px">
21
- <div class="row">
22
- <div class="card">
23
- <!-- Your page content -->
24
- {% block content %}{% endblock %}
25
- </div>
26
- </div>
27
- </div>
28
- {% block scripts %}
29
- <!-- Optional JavaScript -->
30
- {{ bootstrap.load_js() }}
31
- {% endblock %}
32
- </body>
33
- </html>
@@ -1,11 +0,0 @@
1
- {% extends "base.html" %}
2
-
3
- {% block content %}
4
- <h5 class="card-header">Gilda</h5>
5
- <div class="card-body">
6
- <p>
7
- This is the Gilda grounding service.
8
- </p>
9
- {{ wtf.quick_form(form, form_type='horizontal') }}
10
- </div>
11
- {% endblock %}
@@ -1,32 +0,0 @@
1
- {% extends "base.html" %}
2
-
3
- {% block content %}
4
- <h5 class="card-header">Gilda</h5>
5
- <div class="card-body">
6
- <p>
7
- Results for <code>{{ form.text.data }}</code>
8
- {% if form.context.data %} with context
9
- <i>{{ form.context.data }}</i>{% endif %}
10
- </p>
11
- </div>
12
- <table class="table table-striped table-hover">
13
- <thead>
14
- <tr>
15
- <th>Database</th>
16
- <th>Identifier</th>
17
- <th>Name</th>
18
- <th>Score</th>
19
- </tr>
20
- </thead>
21
- <tbody>
22
- {% for match in matches %}
23
- <tr>
24
- <td>{{ match['term']['db'] }}</td>
25
- <td>{{ match['term']['id'] }}</td>
26
- <td>{{ match['term']['entry_name'] }}</td>
27
- <td class="text-right">{{ match['score'] | round(4) }}</td>
28
- </tr>
29
- {% endfor %}
30
- </tbody>
31
- </table>
32
- {% endblock %}
@@ -1,3 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """PyOBO's Mapping Service."""
@@ -1,11 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """CLI for PyOBO's Mapping Service.
4
-
5
- Run with ``python -m pyobo.apps.mapper``
6
- """
7
-
8
- from .cli import main
9
-
10
- if __name__ == "__main__":
11
- main()
pyobo/apps/mapper/cli.py DELETED
@@ -1,37 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """CLI for PyOBO's Mapping Service.
4
-
5
- Run with ``python -m pyobo.apps.mapper``.
6
- """
7
-
8
- import click
9
- from more_click import (
10
- host_option,
11
- port_option,
12
- run_app,
13
- verbose_option,
14
- with_gunicorn_option,
15
- )
16
-
17
- __all__ = [
18
- "main",
19
- ]
20
-
21
-
22
- @click.command(name="mapper")
23
- @click.option("-x", "--mappings-file")
24
- @port_option
25
- @host_option
26
- @with_gunicorn_option
27
- @verbose_option
28
- def main(mappings_file, host: str, port: str, with_gunicorn: bool):
29
- """Run the mappings app."""
30
- from .mapper import get_app
31
-
32
- app = get_app(mappings_file)
33
- run_app(app=app, host=host, port=port, with_gunicorn=with_gunicorn)
34
-
35
-
36
- if __name__ == "__main__":
37
- main()
@@ -1,187 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
-
3
- """PyOBO's Mapping Service.
4
-
5
- Run with ``python -m pyobo.apps.mapper``.
6
- """
7
-
8
- import logging
9
- from functools import lru_cache
10
- from typing import Any, Dict, Iterable, List, Mapping, Optional, Union
11
-
12
- import bioregistry
13
- import pandas as pd
14
- from flasgger import Swagger
15
- from flask import (
16
- Blueprint,
17
- Flask,
18
- abort,
19
- current_app,
20
- jsonify,
21
- render_template,
22
- url_for,
23
- )
24
- from flask_bootstrap import VERSION_BOOTSTRAP, Bootstrap
25
- from werkzeug.local import LocalProxy
26
-
27
- from pyobo import Canonicalizer
28
- from pyobo.constants import PROVENANCE, SOURCE_PREFIX, TARGET_PREFIX
29
- from pyobo.identifier_utils import normalize_curie
30
- from pyobo.resource_utils import ensure_inspector_javert_df
31
-
32
- __all__ = [
33
- "get_app",
34
- ]
35
-
36
- logger = logging.getLogger(__name__)
37
-
38
- summary_df = LocalProxy(lambda: current_app.config["summary"])
39
- canonicalizer: Canonicalizer = LocalProxy(lambda: current_app.config["canonicalizer"])
40
-
41
-
42
- @lru_cache()
43
- def _single_source_shortest_path(curie: str) -> Optional[Mapping[str, List[Mapping[str, str]]]]:
44
- return canonicalizer.single_source_shortest_path(curie=curie)
45
-
46
-
47
- @lru_cache()
48
- def _all_shortest_paths(source_curie: str, target_curie: str) -> List[List[Mapping[str, str]]]:
49
- return canonicalizer.all_shortest_paths(source_curie=source_curie, target_curie=target_curie)
50
-
51
-
52
- #: The blueprint that gets added to the app
53
- search_blueprint = Blueprint("search", __name__)
54
-
55
-
56
- @search_blueprint.route("/")
57
- def home():
58
- """Show the home page."""
59
- return render_template("mapper_home.html")
60
-
61
-
62
- @search_blueprint.route("/mappings/<curie>")
63
- def single_source_mappings(curie: str):
64
- """Return all length xrefs from the given identifier."""
65
- if curie not in canonicalizer.graph:
66
- return jsonify(
67
- success=False,
68
- query=dict(curie=curie),
69
- message="could not find curie",
70
- )
71
- return jsonify(_single_source_shortest_path(curie))
72
-
73
-
74
- @search_blueprint.route("/mappings/<source_curie>/<target_curie>")
75
- def all_mappings(source_curie: str, target_curie: str):
76
- """Return all shortest paths of xrefs between the two identifiers."""
77
- if source_curie not in canonicalizer.graph:
78
- return jsonify(
79
- success=False,
80
- query=dict(source_curie=source_curie, target_curie=target_curie),
81
- message="could not find source curie",
82
- )
83
- if target_curie not in canonicalizer.graph:
84
- return jsonify(
85
- success=False,
86
- query=dict(source_curie=source_curie, target_curie=target_curie),
87
- message="could not find target curie",
88
- )
89
-
90
- return jsonify(_all_shortest_paths(source_curie, target_curie))
91
-
92
-
93
- @search_blueprint.route("/mappings/summarize")
94
- def summarize():
95
- """Summarize the mappings."""
96
- return summary_df.to_html(index=False)
97
-
98
-
99
- @search_blueprint.route("/mappings/summarize_by/<prefix>")
100
- def summarize_one(prefix: str):
101
- """Summarize the mappings."""
102
- norm_prefix = bioregistry.normalize_prefix(prefix)
103
- if norm_prefix is None:
104
- return abort(500, f"invalid prefix: {prefix}")
105
- in_df = summary_df.loc[summary_df[TARGET_PREFIX] == norm_prefix, [SOURCE_PREFIX, "count"]]
106
- out_df = summary_df.loc[summary_df[SOURCE_PREFIX] == norm_prefix, [TARGET_PREFIX, "count"]]
107
- return f"""
108
- <h1>Incoming Mappings to {norm_prefix}</h1>
109
- {in_df.to_html(index=False)}
110
- <h1>Outgoing Mappings from {norm_prefix}</h1>
111
- {out_df.to_html(index=False)}
112
- """
113
-
114
-
115
- @search_blueprint.route("/canonicalize/<curie>")
116
- def canonicalize(curie: str):
117
- """Return the best CURIE."""
118
- # TODO maybe normalize the curie first?
119
- norm_prefix, norm_identifier = normalize_curie(curie)
120
- if norm_prefix is None or norm_identifier is None:
121
- return jsonify(
122
- query=curie,
123
- normalizable=False,
124
- )
125
-
126
- norm_curie = f"{norm_prefix}:{norm_identifier}"
127
-
128
- rv: Dict[str, Any] = dict(query=curie)
129
- if norm_curie != curie:
130
- rv["norm_curie"] = norm_curie
131
-
132
- if norm_curie not in canonicalizer.graph:
133
- rv["found"] = False
134
- else:
135
- result_curie = canonicalizer.canonicalize(norm_curie)
136
- rv.update(
137
- found=True,
138
- result=result_curie,
139
- mappings=url_for(
140
- f".{all_mappings.__name__}",
141
- source_curie=norm_curie,
142
- target_curie=result_curie,
143
- ),
144
- )
145
-
146
- return jsonify(rv)
147
-
148
-
149
- def get_app(paths: Union[None, str, Iterable[str]] = None) -> Flask:
150
- """Build the Flask app."""
151
- app = Flask(__name__)
152
- Swagger(app)
153
-
154
- logger.info("using bootstrap_flask %s", VERSION_BOOTSTRAP)
155
- Bootstrap(app)
156
-
157
- if paths is None:
158
- df = ensure_inspector_javert_df()
159
- elif isinstance(paths, str):
160
- df = pd.read_csv(paths, sep="\t", dtype=str)
161
- else:
162
- df = pd.concat(pd.read_csv(path, sep="\t", dtype=str) for path in paths)
163
-
164
- app.config["summary"] = summarize_xref_df(df)
165
- app.config["summary_provenances"] = summarize_xref_provenances_df(df)
166
- # TODO allow for specification of priorities in the canonicalizer
167
- app.config["canonicalizer"] = Canonicalizer.from_df(df)
168
- app.register_blueprint(search_blueprint)
169
- return app
170
-
171
-
172
- def summarize_xref_df(df: pd.DataFrame) -> pd.DataFrame:
173
- """Get all meta-mappings."""
174
- return _summarize(df, [SOURCE_PREFIX, TARGET_PREFIX])
175
-
176
-
177
- def summarize_xref_provenances_df(df: pd.DataFrame) -> pd.DataFrame:
178
- """Get all meta-mappings."""
179
- return _summarize(df, [SOURCE_PREFIX, TARGET_PREFIX, PROVENANCE])
180
-
181
-
182
- def _summarize(df: pd.DataFrame, columns) -> pd.DataFrame:
183
- """Get all meta-mappings."""
184
- rv = df[columns].groupby(columns).size().reset_index()
185
- rv.columns = [*columns, "count"]
186
- rv.sort_values("count", inplace=True, ascending=False)
187
- return rv
@@ -1,35 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- {% block head %}
5
- <!-- Required meta tags -->
6
- <meta charset="utf-8">
7
- <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
8
-
9
- {% block styles %}
10
- <!-- Bootstrap CSS -->
11
- {{ bootstrap.load_css() }}
12
- {% endblock %}
13
-
14
- <script src="https://kit.fontawesome.com/4c86883252.js" crossorigin="anonymous"></script>
15
-
16
- <title>{% block title %}{% endblock %}</title>
17
- {% endblock %}
18
- </head>
19
- <body>
20
- <div class="container" style="margin-top: 25px; margin-bottom: 25px">
21
- <div class="row justify-content-center">
22
- <div class="col-md-8 col-lg-8">
23
- <div class="card">
24
- <!-- Your page content -->
25
- {% block content %}{% endblock %}
26
- </div>
27
- </div>
28
- </div>
29
- </div>
30
- {% block scripts %}
31
- <!-- Optional JavaScript -->
32
- {{ bootstrap.load_js() }}
33
- {% endblock %}
34
- </body>
35
- </html>