Skip to content

Instantly share code, notes, and snippets.

@arteymix
Created June 14, 2021 16:42
Show Gist options
  • Save arteymix/5d16a5cc1f98fa4e411c17ae27b0bf06 to your computer and use it in GitHub Desktop.
Save arteymix/5d16a5cc1f98fa4e411c17ae27b0bf06 to your computer and use it in GitHub Desktop.
RDP Web Client
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