Created
June 14, 2021 16:42
-
-
Save arteymix/5d16a5cc1f98fa4e411c17ae27b0bf06 to your computer and use it in GitHub Desktop.
RDP Web Client
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
import pandas as pd | |
from tqdm import tqdm | |
from os.path import join | |
from functools import wraps | |
def unpaginate(endpoint): | |
"""Unpaginate a paginated Spring endpoint by yielding from the pages content""" | |
@wraps(endpoint) | |
def f(*args, page_size=20): | |
page = endpoint(*args, page_size=page_size) | |
total_pages = page['totalPages'] | |
yield from page['content'] | |
for p in range(1, total_pages): | |
yield from endpoint(*args, page=p, page_size=page_size)['content'] | |
return f | |
class Api: | |
def __init__(self, url, token=None, session=None): | |
self.url = url | |
self.session = requests.Session() if session is None else session | |
if token is not None: | |
self.session.headers.update({'Authorization': f'Bearer {token}'}) | |
def _request(self, endpoint, **kwargs): | |
res = self.session.get(join(self.url, endpoint), params=kwargs) | |
res.raise_for_status() | |
return res.json() | |
@unpaginate | |
def get_users(self, page=0, page_size=20): | |
return self._request('api/users', page=page, size=page_size) | |
@unpaginate | |
def get_genes(self, page=0, page_size=20): | |
return self._request('api/genes', page=page, size=page_size) | |
api = Api('https://register.rare-diseases-catalyst-network.ca/') | |
# retrieve all genes by consuming the generator | |
genes = list(tqdm(api.get_genes(page_size=500))) | |
genes_df = pd.DataFrame(genes) | |
# get the number of unique manually added genes | |
genes_df[genes_df.tier.isin(['TIER1', 'TIER2'])].geneId.unique().size | |
# get number of unique genes per taxon | |
genes_df['taxon_id'] = genes_df['taxon'].map(lambda t: t['id']) | |
genes_df.groupby('taxon_id').geneId.unique().map(len) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment