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