Source code for cellphonedb.utils.db_releases_utils

from cellphonedb.src.exceptions.NoReleasesException import NoReleasesException
from typing import Union
import requests


[docs]def get_remote_database_versions_html(include_file_browsing: bool = False, min_version: float = 4.1): """Retrieve a html table containing CellphoneDB database versions and release dates. Parameters ---------- include_file_browsing: bool. False by default; True when invoked by cellphonedb.org \ website only - to allow the user to select and browse individual input files from \ https://github.com/ventolab/cellphonedb-data. min_version: float If not None, the only versions returned should be >= min_version Returns ------- str A string containing html table containing database versions and release dates """ result = {'error': None} try: releases = _github_query('releases') if releases: first_row = True html = "<table class=\"striped\">" css_style = "style=\"text-align:center\"" for rel in releases: html += "<tr>" if first_row: for header in ['Version', 'Release date']: html += "<th {}>{}</th>".format(css_style, header) if include_file_browsing: html += "<th {}>{}</th>".format(css_style, 'Select file to browse') html += "</tr>" first_row = False if min_version: # Skip unless rel_version >= min_version rel_tag = rel['tag_name'] rel_version = float('.'.join(rel_tag.replace('v', '').split(".")[0:2])) if rel_version < min_version: continue html += get_release_info(rel, rel_version, css_style, include_file_browsing) html += "</tr>" html += "</table>" result['db_releases_html_table'] = html return result except NoReleasesException: err_msg = 'ERROR: There are no versions available (or connection could not be made to server to retrieve them)' print(err_msg) result['error'] = err_msg result['db_releases_html_table'] = None return result
def get_release_info( rel: dict, rel_version: float, css_style: str, include_file_browsing: bool ) -> str: html = "<td {}><a class=\"teal-text\" href=\"{}\">{}</a></td>" \ .format(css_style, rel['html_url'], rel['tag_name']) html += "<td {}>{}</td>".format(css_style, rel['published_at'].split("T")[0]) if include_file_browsing: html += ("<td {}><a class='dropdown-trigger grey lighten-1' href='#' data-target='{}_dropdown'>" + "<i class=\"material-icons teal-text\">pageview</i></a>").format(css_style, rel['tag_name']) html += "<ul id='{}_dropdown' class='dropdown-content'>".format(rel['tag_name']) input_files = ["gene_input", "protein_input", "complex_input", "interaction_input"] if rel_version >= 5.0: input_files.append("transcription_factor_input") for file_name in input_files: html += "<li><a href=\"javascript:get_input_file_as_html_table(\'{}\',\'{}\');\">{}</a></li>" \ .format(rel['tag_name'], file_name, file_name) html += "</ul></td>" return html def _github_query(kind) -> Union[dict, list]: queries = { 'releases': 'https://api.github.com/repos/{}/{}/releases'.format('ventolab', 'cellphonedb-data'), } query = queries[kind] if not query: raise Exception('unexpected query to github') response = requests.get(query, headers={'Accept': 'application/vnd.github.v3+json'}) if response.status_code != 200: raise NoReleasesException() return response.json()