pyobo 0.11.0__py3-none-any.whl → 0.11.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.
- pyobo/constants.py +1 -0
- pyobo/gilda_utils.py +14 -11
- pyobo/obographs.py +5 -2
- pyobo/resources/so.py +55 -0
- pyobo/resources/so.tsv +2604 -0
- pyobo/sources/complexportal.py +54 -15
- pyobo/sources/dictybase_gene.py +14 -9
- pyobo/sources/drugcentral.py +4 -1
- pyobo/sources/expasy.py +22 -4
- pyobo/sources/flybase.py +3 -2
- pyobo/sources/hgnc.py +24 -19
- pyobo/sources/hgncgenefamily.py +7 -7
- pyobo/sources/kegg/genome.py +18 -6
- pyobo/sources/mirbase.py +9 -3
- pyobo/sources/npass.py +1 -1
- pyobo/sources/pathbank.py +32 -23
- pyobo/sources/pombase.py +6 -3
- pyobo/sources/reactome.py +28 -7
- pyobo/sources/rgd.py +1 -1
- pyobo/sources/slm.py +28 -14
- pyobo/sources/uniprot/uniprot.py +7 -6
- pyobo/sources/zfin.py +18 -6
- pyobo/struct/reference.py +9 -8
- pyobo/struct/struct.py +30 -20
- pyobo/struct/typedef.py +5 -0
- pyobo/version.py +1 -1
- {pyobo-0.11.0.dist-info → pyobo-0.11.1.dist-info}/METADATA +30 -42
- {pyobo-0.11.0.dist-info → pyobo-0.11.1.dist-info}/RECORD +32 -30
- {pyobo-0.11.0.dist-info → pyobo-0.11.1.dist-info}/WHEEL +1 -1
- {pyobo-0.11.0.dist-info → pyobo-0.11.1.dist-info}/LICENSE +0 -0
- {pyobo-0.11.0.dist-info → pyobo-0.11.1.dist-info}/entry_points.txt +0 -0
- {pyobo-0.11.0.dist-info → pyobo-0.11.1.dist-info}/top_level.txt +0 -0
pyobo/sources/rgd.py
CHANGED
|
@@ -137,7 +137,7 @@ def get_terms(force: bool = False, version: Optional[str] = None) -> Iterable[Te
|
|
|
137
137
|
continue
|
|
138
138
|
if prefix == "uniprot":
|
|
139
139
|
term.append_relationship(
|
|
140
|
-
has_gene_product, Reference
|
|
140
|
+
has_gene_product, Reference(prefix=prefix, identifier=xref_id)
|
|
141
141
|
)
|
|
142
142
|
elif prefix == "ensembl":
|
|
143
143
|
if xref_id.startswith("ENSMUSG") or xref_id.startswith("ENSRNOG"):
|
pyobo/sources/slm.py
CHANGED
|
@@ -77,10 +77,10 @@ def iter_terms(version: str, force: bool = False):
|
|
|
77
77
|
smiles,
|
|
78
78
|
inchi,
|
|
79
79
|
inchikey,
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
80
|
+
chebi_ids,
|
|
81
|
+
lipidmaps_ids,
|
|
82
|
+
hmdb_ids,
|
|
83
|
+
pubmed_ids,
|
|
84
84
|
) in tqdm(
|
|
85
85
|
df[COLUMNS].values, desc=f"[{PREFIX}] generating terms", unit_scale=True, unit="lipid"
|
|
86
86
|
):
|
|
@@ -103,21 +103,35 @@ def iter_terms(version: str, force: bool = False):
|
|
|
103
103
|
inchi = inchi[len("InChI=") :]
|
|
104
104
|
term.append_property(has_inchi, inchi)
|
|
105
105
|
if pd.notna(inchikey):
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
106
|
+
inchikey = inchikey.removeprefix("InChIKey=").strip()
|
|
107
|
+
if inchikey and inchikey != "none":
|
|
108
|
+
try:
|
|
109
|
+
inchi_ref = Reference(prefix="inchikey", identifier=inchikey)
|
|
110
|
+
except ValueError:
|
|
111
|
+
tqdm.write(
|
|
112
|
+
f"[slm:{identifier}] had invalid inchikey reference: ({type(inchikey)}) {inchikey}"
|
|
113
|
+
)
|
|
114
|
+
else:
|
|
115
|
+
term.append_exact_match(inchi_ref)
|
|
116
|
+
for chebi_id in _split(chebi_ids):
|
|
117
|
+
term.append_xref(("chebi", chebi_id))
|
|
118
|
+
for lipidmaps_id in _split(lipidmaps_ids):
|
|
112
119
|
term.append_exact_match(("lipidmaps", lipidmaps_id))
|
|
113
|
-
|
|
120
|
+
for hmdb_id in _split(hmdb_ids):
|
|
114
121
|
term.append_exact_match(("hmdb", hmdb_id))
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
term.append_provenance(("pubmed", pmid))
|
|
122
|
+
for pubmed_id in _split(pubmed_ids):
|
|
123
|
+
term.append_provenance(("pubmed", pubmed_id))
|
|
118
124
|
# TODO how to handle class, parents, and components?
|
|
119
125
|
yield term
|
|
120
126
|
|
|
121
127
|
|
|
128
|
+
def _split(s: str) -> Iterable[str]:
|
|
129
|
+
if pd.notna(s):
|
|
130
|
+
for x in s.split("|"):
|
|
131
|
+
x = x.strip()
|
|
132
|
+
if x:
|
|
133
|
+
yield x
|
|
134
|
+
|
|
135
|
+
|
|
122
136
|
if __name__ == "__main__":
|
|
123
137
|
get_obo().write_default(write_obo=True, use_tqdm=True)
|
pyobo/sources/uniprot/uniprot.py
CHANGED
|
@@ -82,7 +82,7 @@ def iter_terms(version: Optional[str] = None) -> Iterable[Term]:
|
|
|
82
82
|
pubmeds,
|
|
83
83
|
pdbs,
|
|
84
84
|
proteome,
|
|
85
|
-
|
|
85
|
+
gene_ids,
|
|
86
86
|
rhea_curies,
|
|
87
87
|
go_components,
|
|
88
88
|
go_functions,
|
|
@@ -94,13 +94,14 @@ def iter_terms(version: Optional[str] = None) -> Iterable[Term]:
|
|
|
94
94
|
description = description.removeprefix("FUNCTION: ")
|
|
95
95
|
term = Term(
|
|
96
96
|
reference=Reference(prefix=PREFIX, identifier=uniprot_id, name=accession),
|
|
97
|
-
definition=description or None,
|
|
97
|
+
# definition=description or None,
|
|
98
98
|
)
|
|
99
99
|
term.set_species(taxonomy_id)
|
|
100
|
-
if
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
if gene_ids:
|
|
101
|
+
for gene_id in gene_ids.split(";"):
|
|
102
|
+
term.append_relationship(
|
|
103
|
+
gene_product_of, Reference(prefix="ncbigene", identifier=gene_id.strip())
|
|
104
|
+
)
|
|
104
105
|
|
|
105
106
|
# TODO add type=Reference(prefix="xsd", identifier="boolean")
|
|
106
107
|
term.append_property("reviewed", "true")
|
pyobo/sources/zfin.py
CHANGED
|
@@ -7,6 +7,7 @@ from typing import Optional
|
|
|
7
7
|
|
|
8
8
|
from tqdm.auto import tqdm
|
|
9
9
|
|
|
10
|
+
from pyobo.resources.so import get_so_name
|
|
10
11
|
from pyobo.struct import (
|
|
11
12
|
Obo,
|
|
12
13
|
Reference,
|
|
@@ -113,7 +114,9 @@ def get_terms(force: bool = False, version: Optional[str] = None) -> Iterable[Te
|
|
|
113
114
|
)
|
|
114
115
|
df["sequence_ontology_id"] = df["sequence_ontology_id"].map(lambda x: x[len("SO:") :])
|
|
115
116
|
so = {
|
|
116
|
-
sequence_ontology_id: Reference
|
|
117
|
+
sequence_ontology_id: Reference(
|
|
118
|
+
prefix="SO", identifier=sequence_ontology_id, name=get_so_name(sequence_ontology_id)
|
|
119
|
+
)
|
|
117
120
|
for sequence_ontology_id in df["sequence_ontology_id"].unique()
|
|
118
121
|
}
|
|
119
122
|
for _, reference in sorted(so.items()):
|
|
@@ -135,17 +138,26 @@ def get_terms(force: bool = False, version: Optional[str] = None) -> Iterable[Te
|
|
|
135
138
|
term.append_alt(alt_id)
|
|
136
139
|
entrez_id = entrez_mappings.get(identifier)
|
|
137
140
|
if entrez_id:
|
|
138
|
-
|
|
141
|
+
try:
|
|
142
|
+
ncbigene_ref = Reference(prefix="ncbigene", identifier=entrez_id)
|
|
143
|
+
except ValueError:
|
|
144
|
+
tqdm.write(f"[zfin] invalid NCBI gene: {entrez_id}")
|
|
145
|
+
else:
|
|
146
|
+
term.append_exact_match(ncbigene_ref)
|
|
139
147
|
for uniprot_id in uniprot_mappings.get(identifier, []):
|
|
140
|
-
term.append_relationship(
|
|
148
|
+
term.append_relationship(
|
|
149
|
+
has_gene_product, Reference(prefix="uniprot", identifier=uniprot_id)
|
|
150
|
+
)
|
|
141
151
|
for hgnc_id in human_orthologs.get(identifier, []):
|
|
142
|
-
term.append_relationship(orthologous, Reference
|
|
152
|
+
term.append_relationship(orthologous, Reference(prefix="hgnc", identifier=hgnc_id))
|
|
143
153
|
for mgi_curie in mouse_orthologs.get(identifier, []):
|
|
144
|
-
mouse_ortholog = Reference.from_curie(mgi_curie
|
|
154
|
+
mouse_ortholog = Reference.from_curie(mgi_curie)
|
|
145
155
|
if mouse_ortholog:
|
|
146
156
|
term.append_relationship(orthologous, mouse_ortholog)
|
|
147
157
|
for flybase_id in fly_orthologs.get(identifier, []):
|
|
148
|
-
term.append_relationship(
|
|
158
|
+
term.append_relationship(
|
|
159
|
+
orthologous, Reference(prefix="flybase", identifier=flybase_id)
|
|
160
|
+
)
|
|
149
161
|
|
|
150
162
|
yield term
|
|
151
163
|
|
pyobo/struct/reference.py
CHANGED
|
@@ -8,6 +8,7 @@ from curies.api import ExpansionError
|
|
|
8
8
|
from pydantic import Field, field_validator, model_validator
|
|
9
9
|
|
|
10
10
|
from .utils import obo_escape
|
|
11
|
+
from ..constants import GLOBAL_CHECK_IDS
|
|
11
12
|
from ..identifier_utils import normalize_curie
|
|
12
13
|
|
|
13
14
|
__all__ = [
|
|
@@ -45,13 +46,13 @@ class Reference(curies.Reference):
|
|
|
45
46
|
prefix, identifier = values.get("prefix"), values.get("identifier")
|
|
46
47
|
if not prefix or not identifier:
|
|
47
48
|
return values
|
|
48
|
-
|
|
49
|
-
if
|
|
49
|
+
resource = bioregistry.get_resource(prefix)
|
|
50
|
+
if resource is None:
|
|
50
51
|
raise ExpansionError(f"Unknown prefix: {prefix}")
|
|
51
|
-
values["prefix"] =
|
|
52
|
-
values["identifier"] =
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
values["prefix"] = resource.prefix
|
|
53
|
+
values["identifier"] = resource.standardize_identifier(identifier)
|
|
54
|
+
if GLOBAL_CHECK_IDS and not resource.is_valid_identifier(values["identifier"]):
|
|
55
|
+
raise ValueError(f"non-standard identifier: {resource.prefix}:{values['identifier']}")
|
|
55
56
|
return values
|
|
56
57
|
|
|
57
58
|
@classmethod
|
|
@@ -60,7 +61,7 @@ class Reference(curies.Reference):
|
|
|
60
61
|
from ..api import get_name
|
|
61
62
|
|
|
62
63
|
name = get_name(prefix, identifier)
|
|
63
|
-
return cls(prefix
|
|
64
|
+
return cls.model_validate({"prefix": prefix, "identifier": identifier, "name": name})
|
|
64
65
|
|
|
65
66
|
@property
|
|
66
67
|
def bioregistry_link(self) -> str:
|
|
@@ -116,7 +117,7 @@ class Reference(curies.Reference):
|
|
|
116
117
|
return None
|
|
117
118
|
if name is None and auto:
|
|
118
119
|
return cls.auto(prefix=prefix, identifier=identifier)
|
|
119
|
-
return cls(prefix
|
|
120
|
+
return cls.model_validate({"prefix": prefix, "identifier": identifier, "name": name})
|
|
120
121
|
|
|
121
122
|
@property
|
|
122
123
|
def _escaped_identifier(self):
|
pyobo/struct/struct.py
CHANGED
|
@@ -4,6 +4,7 @@ import gzip
|
|
|
4
4
|
import json
|
|
5
5
|
import logging
|
|
6
6
|
import os
|
|
7
|
+
import sys
|
|
7
8
|
from collections import defaultdict
|
|
8
9
|
from collections.abc import Collection, Iterable, Iterator, Mapping, Sequence
|
|
9
10
|
from dataclasses import dataclass, field
|
|
@@ -603,6 +604,11 @@ class Obo:
|
|
|
603
604
|
|
|
604
605
|
return graph_from_obo(self)
|
|
605
606
|
|
|
607
|
+
def write_obograph(self, path: Path) -> None:
|
|
608
|
+
"""Write OBO Graph json."""
|
|
609
|
+
graph = self.get_graph()
|
|
610
|
+
path.write_text(graph.model_dump_json(indent=2, exclude_none=True, exclude_unset=True))
|
|
611
|
+
|
|
606
612
|
@classmethod
|
|
607
613
|
def cli(cls) -> None:
|
|
608
614
|
"""Run the CLI for this class."""
|
|
@@ -616,22 +622,31 @@ class Obo:
|
|
|
616
622
|
@click.command()
|
|
617
623
|
@verbose_option
|
|
618
624
|
@force_option
|
|
625
|
+
@click.option("--rewrite", "-r", is_flag=True)
|
|
619
626
|
@click.option("--owl", is_flag=True, help="Write OWL via ROBOT")
|
|
620
|
-
@click.option("--graph", is_flag=True, help="Write OBO Graph JSON via ROBOT")
|
|
621
627
|
@click.option("--nodes", is_flag=True, help="Write nodes file")
|
|
622
628
|
@click.option(
|
|
623
629
|
"--version", help="Specify data version to get. Use this if bioversions is acting up."
|
|
624
630
|
)
|
|
625
|
-
def _main(force: bool, owl: bool,
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
631
|
+
def _main(force: bool, owl: bool, nodes: bool, version: Optional[str], rewrite: bool):
|
|
632
|
+
try:
|
|
633
|
+
inst = cls(force=force, data_version=version)
|
|
634
|
+
except Exception as e:
|
|
635
|
+
click.secho(f"[{cls.ontology}] Got an exception during instantiation - {type(e)}")
|
|
636
|
+
sys.exit(1)
|
|
637
|
+
|
|
638
|
+
try:
|
|
639
|
+
inst.write_default(
|
|
640
|
+
write_obograph=True,
|
|
641
|
+
write_obo=True,
|
|
642
|
+
write_owl=owl,
|
|
643
|
+
write_nodes=nodes,
|
|
644
|
+
force=force or rewrite,
|
|
645
|
+
use_tqdm=True,
|
|
646
|
+
)
|
|
647
|
+
except Exception as e:
|
|
648
|
+
click.secho(f"[{cls.ontology}] Got an exception during OBO writing {type(e)}")
|
|
649
|
+
sys.exit(1)
|
|
635
650
|
|
|
636
651
|
return _main
|
|
637
652
|
|
|
@@ -865,16 +880,11 @@ class Obo:
|
|
|
865
880
|
relation_df.sort_values(list(relation_df.columns), inplace=True)
|
|
866
881
|
relation_df.to_csv(relations_path, sep="\t", index=False)
|
|
867
882
|
|
|
868
|
-
if (write_obo or
|
|
883
|
+
if (write_obo or write_owl) and (not self._obo_path.exists() or force):
|
|
869
884
|
self.write_obo(self._obo_path, use_tqdm=use_tqdm)
|
|
870
|
-
if write_obograph:
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
self.get_graph().json(
|
|
874
|
-
indent=2, ensure_ascii=False, exclude_none=True, exclude_unset=True
|
|
875
|
-
)
|
|
876
|
-
)
|
|
877
|
-
if write_owl:
|
|
885
|
+
if write_obograph and (not self._obograph_path.exists() or force):
|
|
886
|
+
self.write_obograph(self._obograph_path)
|
|
887
|
+
if write_owl and (not self._owl_path.exists() or force):
|
|
878
888
|
obo_to_owl(self._obo_path, self._owl_path)
|
|
879
889
|
if write_obonet and (not self._obonet_gz_path.exists() or force):
|
|
880
890
|
logger.debug("writing obonet to %s", self._obonet_gz_path)
|
pyobo/struct/typedef.py
CHANGED
|
@@ -365,6 +365,11 @@ has_homepage = TypeDef(
|
|
|
365
365
|
reference=Reference(prefix="foaf", identifier="homepage", name="homepage"), is_metadata_tag=True
|
|
366
366
|
)
|
|
367
367
|
|
|
368
|
+
has_category = TypeDef(
|
|
369
|
+
reference=Reference(prefix="biolink", identifier="category", name="has category"),
|
|
370
|
+
is_metadata_tag=True,
|
|
371
|
+
)
|
|
372
|
+
|
|
368
373
|
default_typedefs: dict[tuple[str, str], TypeDef] = {
|
|
369
374
|
v.pair: v for k, v in locals().items() if isinstance(v, TypeDef)
|
|
370
375
|
}
|
pyobo/version.py
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pyobo
|
|
3
|
-
Version: 0.11.
|
|
3
|
+
Version: 0.11.1
|
|
4
4
|
Summary: A python package for handling and generating OBO
|
|
5
5
|
Author-email: Charles Tapley Hoyt <cthoyt@gmail.com>
|
|
6
6
|
Maintainer-email: Charles Tapley Hoyt <cthoyt@gmail.com>
|
|
@@ -63,8 +63,8 @@ Requires-Dist: humanize
|
|
|
63
63
|
Requires-Dist: tabulate
|
|
64
64
|
Requires-Dist: cachier
|
|
65
65
|
Requires-Dist: pystow >=0.2.7
|
|
66
|
-
Requires-Dist: bioversions >=0.5.
|
|
67
|
-
Requires-Dist: bioregistry >=0.
|
|
66
|
+
Requires-Dist: bioversions >=0.5.535
|
|
67
|
+
Requires-Dist: bioregistry >=0.11.23
|
|
68
68
|
Requires-Dist: bioontologies >=0.4.0
|
|
69
69
|
Requires-Dist: zenodo-client >=0.0.5
|
|
70
70
|
Requires-Dist: class-resolver
|
|
@@ -109,10 +109,12 @@ Requires-Dist: coverage ; extra == 'tests'
|
|
|
109
109
|
<img src="https://codecov.io/gh/biopragmatics/pyobo/branch/main/graph/badge.svg" alt="Codecov status" /></a>
|
|
110
110
|
<a href="https://github.com/cthoyt/cookiecutter-python-package">
|
|
111
111
|
<img alt="Cookiecutter template from @cthoyt" src="https://img.shields.io/badge/Cookiecutter-snekpack-blue" /></a>
|
|
112
|
-
<a href=
|
|
113
|
-
<img src=
|
|
112
|
+
<a href="https://github.com/astral-sh/ruff">
|
|
113
|
+
<img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Ruff" style="max-width:100%;"></a>
|
|
114
114
|
<a href="https://github.com/biopragmatics/pyobo/blob/main/.github/CODE_OF_CONDUCT.md">
|
|
115
115
|
<img src="https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg" alt="Contributor Covenant"/></a>
|
|
116
|
+
<a href="https://doi.org/10.5281/zenodo.3381961">
|
|
117
|
+
<img src="https://zenodo.org/badge/DOI/10.5281/zenodo.3381961.svg" alt="DOI"></a>
|
|
116
118
|
</p>
|
|
117
119
|
|
|
118
120
|
Tools for biological identifiers, names, synonyms, xrefs, hierarchies, relations, and properties through the
|
|
@@ -500,14 +502,14 @@ and make update to the `url` entry for that namespace in the Bioregistry.
|
|
|
500
502
|
The most recent release can be installed from
|
|
501
503
|
[PyPI](https://pypi.org/project/pyobo/) with:
|
|
502
504
|
|
|
503
|
-
```
|
|
504
|
-
pip install pyobo
|
|
505
|
+
```console
|
|
506
|
+
python3 -m pip install pyobo
|
|
505
507
|
```
|
|
506
508
|
|
|
507
509
|
The most recent code and data can be installed directly from GitHub with:
|
|
508
510
|
|
|
509
|
-
```
|
|
510
|
-
pip install git+https://github.com/biopragmatics/pyobo.git
|
|
511
|
+
```console
|
|
512
|
+
python3 -m pip install git+https://github.com/biopragmatics/pyobo.git
|
|
511
513
|
```
|
|
512
514
|
|
|
513
515
|
## 👐 Contributing
|
|
@@ -564,10 +566,10 @@ The final section of the README is for if you want to get involved by making a c
|
|
|
564
566
|
|
|
565
567
|
To install in development mode, use the following:
|
|
566
568
|
|
|
567
|
-
```
|
|
569
|
+
```console
|
|
568
570
|
git clone git+https://github.com/biopragmatics/pyobo.git
|
|
569
571
|
cd pyobo
|
|
570
|
-
pip install -e .
|
|
572
|
+
python3 -m pip install -e .
|
|
571
573
|
```
|
|
572
574
|
|
|
573
575
|
### Updating Package Boilerplate
|
|
@@ -576,8 +578,8 @@ This project uses `cruft` to keep boilerplate (i.e., configuration, contribution
|
|
|
576
578
|
configuration)
|
|
577
579
|
up-to-date with the upstream cookiecutter package. Update with the following:
|
|
578
580
|
|
|
579
|
-
```
|
|
580
|
-
pip install cruft
|
|
581
|
+
```console
|
|
582
|
+
python3 -m pip install cruft
|
|
581
583
|
cruft update
|
|
582
584
|
```
|
|
583
585
|
|
|
@@ -586,10 +588,11 @@ available [here](https://github.com/cruft/cruft?tab=readme-ov-file#updating-a-pr
|
|
|
586
588
|
|
|
587
589
|
### 🥼 Testing
|
|
588
590
|
|
|
589
|
-
After cloning the repository and installing `tox` with
|
|
591
|
+
After cloning the repository and installing `tox` with
|
|
592
|
+
`python3 -m pip install tox tox-uv`,
|
|
590
593
|
the unit tests in the `tests/` folder can be run reproducibly with:
|
|
591
594
|
|
|
592
|
-
```
|
|
595
|
+
```console
|
|
593
596
|
tox -e py
|
|
594
597
|
```
|
|
595
598
|
|
|
@@ -600,12 +603,12 @@ Additionally, these tests are automatically re-run with each commit in a
|
|
|
600
603
|
|
|
601
604
|
The documentation can be built locally using the following:
|
|
602
605
|
|
|
603
|
-
```
|
|
606
|
+
```console
|
|
604
607
|
git clone git+https://github.com/biopragmatics/pyobo.git
|
|
605
608
|
cd pyobo
|
|
606
609
|
tox -e docs
|
|
607
610
|
open docs/build/html/index.html
|
|
608
|
-
```
|
|
611
|
+
```
|
|
609
612
|
|
|
610
613
|
The documentation automatically installs the package as well as the `docs`
|
|
611
614
|
extra specified in the [`pyproject.toml`](../../Desktop/pyobo/pyproject.toml). `sphinx` plugins
|
|
@@ -661,38 +664,23 @@ You only have to do the following steps once.
|
|
|
661
664
|
|
|
662
665
|
#### Configuring your machine's connection to PyPI
|
|
663
666
|
|
|
664
|
-
You have to do the following steps once per machine.
|
|
665
|
-
`.pypirc` and include the following:
|
|
666
|
-
|
|
667
|
-
```ini
|
|
668
|
-
[distutils]
|
|
669
|
-
index-servers =
|
|
670
|
-
pypi
|
|
671
|
-
testpypi
|
|
672
|
-
|
|
673
|
-
[pypi]
|
|
674
|
-
username = __token__
|
|
675
|
-
password = <the API token you just got>
|
|
667
|
+
You have to do the following steps once per machine.
|
|
676
668
|
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
password = <an API token from test PyPI>
|
|
669
|
+
```console
|
|
670
|
+
$ uv tool install keyring
|
|
671
|
+
$ keyring set https://upload.pypi.org/legacy/ __token__
|
|
672
|
+
$ keyring set https://test.pypi.org/legacy/ __token__
|
|
682
673
|
```
|
|
683
674
|
|
|
684
|
-
Note that
|
|
685
|
-
If you already have a `.pypirc` file with a `[distutils]` section, just make sure that there is an `index-servers`
|
|
686
|
-
key and that `pypi` is in its associated list. More information on configuring the `.pypirc` file can
|
|
687
|
-
be found [here](https://packaging.python.org/en/latest/specifications/pypirc).
|
|
675
|
+
Note that this deprecates previous workflows using `.pypirc`.
|
|
688
676
|
|
|
689
677
|
#### Uploading to PyPI
|
|
690
678
|
|
|
691
679
|
After installing the package in development mode and installing
|
|
692
|
-
`tox` with `pip install tox tox-uv`,
|
|
693
|
-
run the following from the
|
|
680
|
+
`tox` with `python3 -m pip install tox tox-uv`,
|
|
681
|
+
run the following from the console:
|
|
694
682
|
|
|
695
|
-
```
|
|
683
|
+
```console
|
|
696
684
|
tox -e finish
|
|
697
685
|
```
|
|
698
686
|
|
|
@@ -703,7 +691,7 @@ This script does the following:
|
|
|
703
691
|
and [`docs/source/conf.py`](../../Desktop/pyobo/docs/source/conf.py) to not have the `-dev` suffix
|
|
704
692
|
2. Packages the code in both a tar archive and a wheel using
|
|
705
693
|
[`uv build`](https://docs.astral.sh/uv/guides/publish/#building-your-package)
|
|
706
|
-
3. Uploads to PyPI using [`
|
|
694
|
+
3. Uploads to PyPI using [`uv publish`](https://docs.astral.sh/uv/guides/publish/#publishing-your-package).
|
|
707
695
|
4. Push to GitHub. You'll need to make a release going with the commit where the version was bumped.
|
|
708
696
|
5. Bump the version to the next patch. If you made big changes and want to bump the version by minor, you can
|
|
709
697
|
use `tox -e bumpversion -- minor` after.
|
|
@@ -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=
|
|
4
|
+
pyobo/constants.py,sha256=R6ZIJ9JylzEXaGAO70WcMwwwNXezKoTJDEWLskzcYZc,1936
|
|
5
5
|
pyobo/getters.py,sha256=mOrlI8qrI3zHwloXNvpmQnSSxhZZLjBgg5ZUGUwqUK8,15557
|
|
6
|
-
pyobo/gilda_utils.py,sha256=
|
|
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=
|
|
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=
|
|
15
|
+
pyobo/version.py,sha256=QvIJIOoOcrMgtVzkvER3psDs709LKt9w5I-rKlbzVcI,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
|
|
@@ -53,6 +53,8 @@ pyobo/resources/ncbitaxon.py,sha256=rZtU6ik32UATBb5tRY5i5LU9_kpTA3vmPy9gOfhY_fU,
|
|
|
53
53
|
pyobo/resources/ncbitaxon.tsv.gz,sha256=43zHjnVt62TA4_lV58X-FCPdMDfLg1B1PvZSr_Xy9hY,22981954
|
|
54
54
|
pyobo/resources/ro.py,sha256=k8JoFKz64T1Pp39FKud1n4I3qPb178B2xSWJbAN8qdU,1461
|
|
55
55
|
pyobo/resources/ro.tsv,sha256=YvlBLPAKy2w4IheYzO9ox1Yg6WkHdMVzMQTikIlECog,26586
|
|
56
|
+
pyobo/resources/so.py,sha256=S-vmQ7L8AJE08FfGVDIJqNQNaLPUmuJ6HC5F4hWHMrA,1466
|
|
57
|
+
pyobo/resources/so.tsv,sha256=UJZKFTEAv_XszYYbun4Wf6b4jovDjSKc1RWRQRcTzDw,82068
|
|
56
58
|
pyobo/sources/README.md,sha256=w2klc3MjUbLL9VZxIZIqFrHMdQshPUGSCoFsYdUReD8,889
|
|
57
59
|
pyobo/sources/__init__.py,sha256=WkyBXj7V1Y90qSijmHwF89GyC8kRj-Jv7DiFAzqX1iA,3811
|
|
58
60
|
pyobo/sources/agrovoc.py,sha256=SJsbJ7KtxdJUG9Rimmb2CfLfzpK9eOzP0wx59gj-6s4,787
|
|
@@ -63,26 +65,26 @@ pyobo/sources/cgnc.py,sha256=MSEGwaZ8wOypR5sLALAl5Z3ay7K3RjqMC0GtJd4VvSc,2320
|
|
|
63
65
|
pyobo/sources/chebi.py,sha256=IrfXfO9-75jxeDCjCBFBgRWe2R7DSQpQBOllgt7MmoI,1202
|
|
64
66
|
pyobo/sources/chembl.py,sha256=5K5gtIrsqHyZSG8uxhqgXuvKjSXAw9i1dg20boZg8Fg,2280
|
|
65
67
|
pyobo/sources/civic_gene.py,sha256=_gC7P8QyRhJF9i_46eEU4_nV8I7i6z7XGKvXD67mwOM,1693
|
|
66
|
-
pyobo/sources/complexportal.py,sha256=
|
|
68
|
+
pyobo/sources/complexportal.py,sha256=n_ZHWzg7jRA0Trmy1ndQZAFM-ayDl_hFnj6O0ZjZESA,7581
|
|
67
69
|
pyobo/sources/conso.py,sha256=OVcfSUjwMh5biMZuTfidHvREjyPrQE84kmEQOHsinxE,2438
|
|
68
70
|
pyobo/sources/cpt.py,sha256=b7hcULlvu_xa6URwoD37Gc_8VAs8mxawAlXflL1e1LU,1466
|
|
69
71
|
pyobo/sources/credit.py,sha256=gOhD5Q2Xa4CgEnDiwli8CuxjAxLkydZukwFU-l_KTzc,2017
|
|
70
72
|
pyobo/sources/cvx.py,sha256=WglHdUi6uLKFUkzDRxGTuElOxBu4x5By2XcfZNS4LlM,2820
|
|
71
73
|
pyobo/sources/depmap.py,sha256=UKJ63iH7NtzklQ7AIqENMxQIvslNeBocwLW90cR8Tcc,3660
|
|
72
|
-
pyobo/sources/dictybase_gene.py,sha256=
|
|
74
|
+
pyobo/sources/dictybase_gene.py,sha256=57RxdH70S3Rklz4qZS0T_kBEdCH2UVSXYdYwt7Gn2Ds,2810
|
|
73
75
|
pyobo/sources/drugbank.py,sha256=W-Qa8Cttk07PtndbdJHc1yrAMYZHT-4r1bxeRrXgqHE,11032
|
|
74
76
|
pyobo/sources/drugbank_salt.py,sha256=DXqz5rEw8QUipPkDeuwg-MU9OvnSrBM62k3JeSeq4kM,1768
|
|
75
|
-
pyobo/sources/drugcentral.py,sha256=
|
|
76
|
-
pyobo/sources/expasy.py,sha256=
|
|
77
|
+
pyobo/sources/drugcentral.py,sha256=YXd6d2y62ILNrWg5rqi9jDfmB-MTacCZA26itDgETmY,3751
|
|
78
|
+
pyobo/sources/expasy.py,sha256=2MUKkPIiww97e14sTMH-FQa7tSxFym7Gz49D08wmZYI,10771
|
|
77
79
|
pyobo/sources/famplex.py,sha256=oyNbnAbRuc72nap_xWpiZR8mcWWj7O5GliL89kwF9mQ,5787
|
|
78
|
-
pyobo/sources/flybase.py,sha256=
|
|
80
|
+
pyobo/sources/flybase.py,sha256=8-_8AfS-_rho4OThchHjqDG0y07owq02rlmQjGmuBkY,5817
|
|
79
81
|
pyobo/sources/geonames.py,sha256=uNwrVBXGaPvMS7bwUAof_plSrV3F999Va2YSWbNwAKA,8563
|
|
80
82
|
pyobo/sources/gmt_utils.py,sha256=aPPVAtoyPOzoyGFOAf3RwlgpdARAU0RHkDWnp_ZFgl4,1391
|
|
81
83
|
pyobo/sources/go.py,sha256=SDRZtT28gY6T3k3z_3PMSDdsQkb4vJDAchw1dL6x40Q,1250
|
|
82
84
|
pyobo/sources/gwascentral_phenotype.py,sha256=EDxcAC6ONhZj-Amo4PsT7ruO1-CzqsJvYXug4eeFX5A,1873
|
|
83
85
|
pyobo/sources/gwascentral_study.py,sha256=njSRd9YxMWvXXg4cyILPL704LrtIeg-_63cR120jgyc,2814
|
|
84
|
-
pyobo/sources/hgnc.py,sha256=
|
|
85
|
-
pyobo/sources/hgncgenefamily.py,sha256=
|
|
86
|
+
pyobo/sources/hgnc.py,sha256=C6Av1SIgP4XNyxcKKjZfEEvrPRu8lKUD-rNMYAmSC7Y,16298
|
|
87
|
+
pyobo/sources/hgncgenefamily.py,sha256=jecrhlcBSXMnoFKlKHyS8zkWfqSqr5UHXZT7h_cY4oU,3755
|
|
86
88
|
pyobo/sources/icd10.py,sha256=FqCrB3f1OGukQDcvgLGffbSNyaA9D62ufTQkgMLeE4I,2283
|
|
87
89
|
pyobo/sources/icd11.py,sha256=IaJ6fV_7humYu7AKvn_93y355FL_XMjtMyyMClYBUjI,2831
|
|
88
90
|
pyobo/sources/icd_utils.py,sha256=Ub5LH4fDRHrGWwb7iP8I2KEFNl6I-viqxvLUyxGz2nM,3156
|
|
@@ -90,33 +92,33 @@ pyobo/sources/interpro.py,sha256=8IhVie_VrQSHFZmxpQVPQXm6ISFV435UjhDA41qBuk8,488
|
|
|
90
92
|
pyobo/sources/itis.py,sha256=jJF5oGuaewl4SH882AMhzr7HX5Ekpp2fyqAwT3nY6G4,2951
|
|
91
93
|
pyobo/sources/mesh.py,sha256=02VCo6t4g3kp0BhLb_2pykK1428xyfY40zQ3xCPK_eY,12116
|
|
92
94
|
pyobo/sources/mgi.py,sha256=nIizvAtIG7genT1iETkdKZmS6mCQmQZCSR-_kRMg7_s,5750
|
|
93
|
-
pyobo/sources/mirbase.py,sha256=
|
|
95
|
+
pyobo/sources/mirbase.py,sha256=SfXyLt0_EVp_9mTApKC13-9cFTGs2qfi8J7KekKv5d4,6511
|
|
94
96
|
pyobo/sources/mirbase_constants.py,sha256=5DjcwX_FRSzFYbTf50yvkPamSIH70Rw3I8q-Ds0zHVs,1998
|
|
95
97
|
pyobo/sources/mirbase_family.py,sha256=qWAp1PUN5pJCArTPx-rhMGi6UG0LfoZNg5URQdXhDps,2151
|
|
96
98
|
pyobo/sources/mirbase_mature.py,sha256=UbAdGEzLiS3GjeCnGKjapUKrL1WxTgxF25hdwx7pmV4,1488
|
|
97
99
|
pyobo/sources/msigdb.py,sha256=lzQ9Bfuv53UVaN3He1NCkGg4ChWfo_9OPOK8NW6bl_s,5010
|
|
98
100
|
pyobo/sources/ncbigene.py,sha256=jeQRJnLnU4Q1_U-FKOOeQjkqlc-iamUUn0zZqEmiaiI,5028
|
|
99
|
-
pyobo/sources/npass.py,sha256=
|
|
101
|
+
pyobo/sources/npass.py,sha256=0jHHGX0gk2PZFhv5jhEsbN-khTaJu0cE3sbMedZe3UU,2799
|
|
100
102
|
pyobo/sources/omim_ps.py,sha256=fcMNrFBtc5u3HHaLpQVML4amHvgMErTS--pOlg074A4,1004
|
|
101
|
-
pyobo/sources/pathbank.py,sha256=
|
|
103
|
+
pyobo/sources/pathbank.py,sha256=5sM_8dgriKE5YawxeGq3A6bpdC1kFS0KZXeaF-k-IYA,5471
|
|
102
104
|
pyobo/sources/pfam.py,sha256=T9rZNIXUTw8XajUSNoPscDUN9wG4bae171xQepYqhQI,1830
|
|
103
105
|
pyobo/sources/pfam_clan.py,sha256=Qk4q8jEwFR9NcLXeGR3p9TjA2oK40KkkFS0wMA1UirA,1324
|
|
104
106
|
pyobo/sources/pid.py,sha256=iVoZ3yUgfTccun2baEDQ-mTwLYJ8kdWMoT9H3Q6xREc,4541
|
|
105
|
-
pyobo/sources/pombase.py,sha256=
|
|
107
|
+
pyobo/sources/pombase.py,sha256=hpkhIWgHk9viHF8aZnUJUqLEOK1I6M58v4zXGMKGQAw,3712
|
|
106
108
|
pyobo/sources/pubchem.py,sha256=SgC56EBUHT6Cgwm7BUc3Kgw8b-kdg80JHm8D-TKdEzg,5284
|
|
107
|
-
pyobo/sources/reactome.py,sha256=
|
|
108
|
-
pyobo/sources/rgd.py,sha256=
|
|
109
|
+
pyobo/sources/reactome.py,sha256=yp0JZkdZvtSlwl9ki2L4ziEfaPo3YDolPeXTbQkmrnA,5720
|
|
110
|
+
pyobo/sources/rgd.py,sha256=yYTZvYZi4irm2daE6GRf9NNtQXjwA9DYXupov2K9PXY,5394
|
|
109
111
|
pyobo/sources/rhea.py,sha256=qlQj6wHuY08QeEGwVHubh8oLD-E12dbqNCJ57v_uKW4,7776
|
|
110
112
|
pyobo/sources/ror.py,sha256=U6sQ1IBs0nxENF02bnkUVA8rx04o4Y9dZ2YwKu6rtj4,7377
|
|
111
113
|
pyobo/sources/sgd.py,sha256=kQ_kof0F50RB0TrL2Eorqc7nUyv2kibAdf4Hp99ijKo,2134
|
|
112
|
-
pyobo/sources/slm.py,sha256=
|
|
114
|
+
pyobo/sources/slm.py,sha256=KaU2fwiSaURlnCOBeOsXEgt-Thqi8AOxq7YZg_rsJcQ,4261
|
|
113
115
|
pyobo/sources/utils.py,sha256=RLo6z5BKLdofu4bLstDOJMOEiMDEmJdYrE12PeJEKtc,1091
|
|
114
116
|
pyobo/sources/wikipathways.py,sha256=cd_0uRjwi5Q5SpBHTUF2QqLxj67-ZhuqdxEIGHcoB0U,2710
|
|
115
|
-
pyobo/sources/zfin.py,sha256=
|
|
117
|
+
pyobo/sources/zfin.py,sha256=6Mh-JhTKXy3g9xed-AgzmZlhIoWnBoEUJK9bsjQUahA,5369
|
|
116
118
|
pyobo/sources/kegg/__init__.py,sha256=hVP0tuwVpiNMikFv_bNPrzuYv-HA1_bPdCvNx-fm5Fg,219
|
|
117
119
|
pyobo/sources/kegg/api.py,sha256=nwHuKPsYbWhHEgBZzJ92XQAibQp8XEVQ6xglzWxyWY4,4709
|
|
118
120
|
pyobo/sources/kegg/genes.py,sha256=T9ct-E_q43MZT4v7I2-liokxhNiRCI-HMZwKgBPwxz4,3707
|
|
119
|
-
pyobo/sources/kegg/genome.py,sha256=
|
|
121
|
+
pyobo/sources/kegg/genome.py,sha256=9KSpBffM1Wv2pwTG8g0Lve9Zhu1Eur-Alvnjnry2N5o,4321
|
|
120
122
|
pyobo/sources/kegg/pathway.py,sha256=ZvKBXLieL1w5kwaHg5wxvtFAAYAnWF1TalhGo_G6puc,6176
|
|
121
123
|
pyobo/sources/selventa/__init__.py,sha256=cIIDlWL9znL2r0aZIJ2r1FN3NM9io74w-He2egzJwX8,254
|
|
122
124
|
pyobo/sources/selventa/schem.py,sha256=Ct6Ut3AB99eylGhZco57ueoRcsyUmHATpFPRR8cbG8g,1313
|
|
@@ -129,7 +131,7 @@ pyobo/sources/umls/get_synonym_types.py,sha256=KU3CQxQBV2xYcX3SjqMrfRNU9nESYGDA7
|
|
|
129
131
|
pyobo/sources/umls/synonym_types.tsv,sha256=z--ngeAqA_Kk8ft2YD8qOU_XUxhnTxF0OhL8jRd5xqo,8551
|
|
130
132
|
pyobo/sources/umls/umls.py,sha256=WM2vNSX1asHn8hcVjV8sdkxE3Id3xOXwiRdLqb7Jnxk,4297
|
|
131
133
|
pyobo/sources/uniprot/__init__.py,sha256=HVrjUxKjixqagsOYvVJkZ7nyIPlWAhLaUWa8sR0gLqA,200
|
|
132
|
-
pyobo/sources/uniprot/uniprot.py,sha256=
|
|
134
|
+
pyobo/sources/uniprot/uniprot.py,sha256=Qi329uy0PWRglmZGoEtSlzXy0Gs7nFVPIFroJA0H0VM,6206
|
|
133
135
|
pyobo/sources/uniprot/uniprot_ptm.py,sha256=8hbGP_5Rh-HhB6iBIJZ7qhXBdcCKD9sUKtwYKUhczHU,3552
|
|
134
136
|
pyobo/ssg/__init__.py,sha256=j_5ZWISXGMNLjJRiT-OBhdJ7MQpRQF69fMLWMaDidVQ,5410
|
|
135
137
|
pyobo/ssg/base.html,sha256=_vldUCa-gL2YTNY6GgAuxNT3TgaED585vF_q7TrrjYs,2844
|
|
@@ -137,9 +139,9 @@ pyobo/ssg/index.html,sha256=zDGkwIQBtbpnhCYALXQ0vr7qsVmAqDtbwOyPqU3hZ8s,3993
|
|
|
137
139
|
pyobo/ssg/term.html,sha256=QU6piGOq4dq8zlNhJvLFxqFjhVQyWlkiG31I0Sg5frg,3559
|
|
138
140
|
pyobo/ssg/typedef.html,sha256=KrdqzB6xjt689bG33D26AL-11JrvNuEkoxNNI-EG-Tg,2038
|
|
139
141
|
pyobo/struct/__init__.py,sha256=DwGtSEPepZdgB49UvxG470g12XIFdhMdKZ44DoZMg6g,646
|
|
140
|
-
pyobo/struct/reference.py,sha256
|
|
141
|
-
pyobo/struct/struct.py,sha256=
|
|
142
|
-
pyobo/struct/typedef.py,sha256=
|
|
142
|
+
pyobo/struct/reference.py,sha256=-SJaXMSDOrQ7SyU12UYquwwUdqoFoxrb6WypVtbGxOs,5661
|
|
143
|
+
pyobo/struct/struct.py,sha256=5GJl4hEY2L5C3iM_vexdsPxiJANwNh_1KakjDMorXDs,55019
|
|
144
|
+
pyobo/struct/typedef.py,sha256=MA62XSS-Me4kSmVs25fQbW1nGss1C8zhAQ5diidCSzs,14009
|
|
143
145
|
pyobo/struct/utils.py,sha256=ETsjZDtlGI3iEMHlYkgHcSNGeo3agwlLK3QL74gqTc8,790
|
|
144
146
|
pyobo/utils/__init__.py,sha256=CANSY8vGq_6v8rWhWRIdnk-Wo5LA2R9Wjg1nqbWqLOw,17
|
|
145
147
|
pyobo/utils/cache.py,sha256=fED68uExWkruXsrqYWe4iAZNZEN4MapEPYmrTBgA7U0,2996
|
|
@@ -163,9 +165,9 @@ pyobo/xrefdb/sources/intact.py,sha256=l2gqxm9OLPpQqhNqAIT_jk7AHx61itsUCz-5dowwMb
|
|
|
163
165
|
pyobo/xrefdb/sources/ncit.py,sha256=QTo9BSGuurvy9M54viS6_v6dF36O8DbUGU6iiyqKsPI,3729
|
|
164
166
|
pyobo/xrefdb/sources/pubchem.py,sha256=VK_yPCaoa-CKQNkq9iAF0Zh0D_zxqa92YG4OBbvnA9c,771
|
|
165
167
|
pyobo/xrefdb/sources/wikidata.py,sha256=JSrl3YWMQA_gxw7IXJRnxWWetcAV82aM5-5J3IHFzoQ,3562
|
|
166
|
-
pyobo-0.11.
|
|
167
|
-
pyobo-0.11.
|
|
168
|
-
pyobo-0.11.
|
|
169
|
-
pyobo-0.11.
|
|
170
|
-
pyobo-0.11.
|
|
171
|
-
pyobo-0.11.
|
|
168
|
+
pyobo-0.11.1.dist-info/LICENSE,sha256=QcgJZKGxlW5BwBNnCBL8VZLVtRvXs81Ch9lJRQSIpJg,1076
|
|
169
|
+
pyobo-0.11.1.dist-info/METADATA,sha256=llPe8alNZWukCFjhvVKIEL6s2Vri9vfaSWRZE2DxMQg,24927
|
|
170
|
+
pyobo-0.11.1.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
|
|
171
|
+
pyobo-0.11.1.dist-info/entry_points.txt,sha256=YfZYzQyXBZ5dGiy4GsOUCOKKlNRNDcmR4vnlpD50q08,41
|
|
172
|
+
pyobo-0.11.1.dist-info/top_level.txt,sha256=oVdkT-pbiGoSdGSQplXFuP1KQGJNf4GdRC65jn6y9t0,6
|
|
173
|
+
pyobo-0.11.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|