Module epispot.estimates.getters
The epispot.estimates.getters module contains various scripts for listing,
querying, and loading data from the literature.
Alternatively, the data can be loaded directly from epispot.estimates.data.
Expand source code
"""
The `epispot.estimates.getters` module contains various scripts for listing,
querying, and loading data from the literature.
Alternatively, the data can be loaded directly from `epispot.estimates.data`.
"""
# imports
from . import storage
# querying
def query(match):
"""
Query the literature for estimates.
## Parameters
`match (tuple(str,...)|str)`: Query as tuple of IDs or slash-separated string.
Use IDs for all queries except papers (use in-text citations).
See the examples section for more information.
## Example
```python
query(('SARS-CoV-2', 'Ganyani et al. 2020'))
query('SARS-CoV-2/Lauer et al. 2020/gamma')
```
## Usage
```python
>>> from epispot.estimates.getters import query
>>> query('SARS-CoV-2')
SARS-CoV-2
```
A simple query for the SARS-CoV-2 disease object.
## Error Handling
### `ValueError`
If the query returns no results, a `ValueError` will be raised.
No errors are raised related to query format, however.
"""
# convert to list if not already
if isinstance(match, str): match = match.split('/')
# helper functions
def query_params(data):
for param in data:
if param.id == match[2]:
return param
def query_papers(data):
for paper in data:
if paper.in_text == match[1]:
if len(match) == 2:
return paper
else:
return query_params(paper.params)
def query_diseases(data):
for disease in storage.bulk:
if disease.id == match[0]:
if len(match) == 1:
return disease
else:
return query_papers(disease.papers)
# search for match
queried = query_diseases(storage.bulk)
if queried is None: # pragma: no cover
raise ValueError(
f'No match found for {match}; try a different query or '
+ 'manually load the data (see `epi.estimates.utils`).'
)
return queried
Functions
def query(match)-
Query the literature for estimates.
Parameters
match (tuple(str,...)|str): Query as tuple of IDs or slash-separated string. Use IDs for all queries except papers (use in-text citations). See the examples section for more information.Example
query(('SARS-CoV-2', 'Ganyani et al. 2020')) query('SARS-CoV-2/Lauer et al. 2020/gamma')Usage
>>> from epispot.estimates.getters import query >>> query('SARS-CoV-2') SARS-CoV-2A simple query for the SARS-CoV-2 disease object.
Error Handling
ValueErrorIf the query returns no results, a
ValueErrorwill be raised. No errors are raised related to query format, however.Expand source code
def query(match): """ Query the literature for estimates. ## Parameters `match (tuple(str,...)|str)`: Query as tuple of IDs or slash-separated string. Use IDs for all queries except papers (use in-text citations). See the examples section for more information. ## Example ```python query(('SARS-CoV-2', 'Ganyani et al. 2020')) query('SARS-CoV-2/Lauer et al. 2020/gamma') ``` ## Usage ```python >>> from epispot.estimates.getters import query >>> query('SARS-CoV-2') SARS-CoV-2 ``` A simple query for the SARS-CoV-2 disease object. ## Error Handling ### `ValueError` If the query returns no results, a `ValueError` will be raised. No errors are raised related to query format, however. """ # convert to list if not already if isinstance(match, str): match = match.split('/') # helper functions def query_params(data): for param in data: if param.id == match[2]: return param def query_papers(data): for paper in data: if paper.in_text == match[1]: if len(match) == 2: return paper else: return query_params(paper.params) def query_diseases(data): for disease in storage.bulk: if disease.id == match[0]: if len(match) == 1: return disease else: return query_papers(disease.papers) # search for match queried = query_diseases(storage.bulk) if queried is None: # pragma: no cover raise ValueError( f'No match found for {match}; try a different query or ' + 'manually load the data (see `epi.estimates.utils`).' ) return queried