from notebook.base.handlers import IPythonHandler import numpy as np from .connection import openbis_connections class SampleHandler(IPythonHandler): """Handle the requests for /openbis/sample/connection/permId""" def get_datasets(self, conn, permId): if not conn.is_session_active(): try: conn.login() except Exception as exc: self.write({ "reason" : 'connection to {} could not be established: {}'.format(conn.name, exc) }) sample = None try: sample = conn.openbis.get_sample(permId) except Exception as exc: self.set_status(404) self.write({ "reason" : 'No such sample: {}'.format(permId) }) if sample is None: return datasets = sample.get_datasets().df datasets.replace({np.nan:None}, inplace=True) # replace NaN with None, otherwise we cannot convert it correctly return datasets.to_dict(orient='records') # is too stupid to handle NaN def get(self, **params): """Handle a request to /openbis/sample/connection_name/permId download the data and return a message """ try: conn = openbis_connections[params['connection_name']] except KeyError: self.write({ "reason" : 'connection {} was not found'.format( params['connection_name'] ) }) return datasets = self.get_datasets(conn, params['permId']) if datasets is not None: self.set_status(200) self.write({ "dataSets": datasets })