Skip to content
Snippets Groups Projects
pybis.py 109 KiB
Newer Older
  • Learn to ignore specific revisions
  •                 return getattr(self.openbis, 'get_' + self.entity)(row[self.identifier_name].values[0])
    
        def __iter__(self):
            for item in self.df[[self.identifier_name]][self.identifier_name].iteritems():
    
                yield getattr(self.openbis, 'get_' + self.entity)(item[1])
    
                # return self.df[[self.identifier_name]].to_dict()[self.identifier_name]
    
    class Experiment(OpenBisObject):
    
        def __init__(self, openbis_obj, type, data=None, **kwargs):
            self.__dict__['openbis'] = openbis_obj
            self.__dict__['type'] = type
            self.__dict__['p'] = PropertyHolder(openbis_obj, type)
    
            self.__dict__['a'] = AttrHolder(openbis_obj, 'Experiment', type)
    
    
            if data is not None:
                self._set_data(data)
    
            if kwargs is not None:
                for key in kwargs:
                    setattr(self, key, kwargs[key])
    
        def _set_data(self, data):
    
            # assign the attribute data to self.a by calling it
            # (invoking the AttrHolder.__call__ function)
            self.a(data)
            self.__dict__['data'] = data
    
            # put the properties in the self.p namespace (without checking them)
            for key, value in data['properties'].items():
                self.p.__dict__[key.lower()] = value
    
        def __str__(self):
            return self.data['code']
    
    
        def __dir__(self):
            # the list of possible methods/attributes displayed
            # when invoking TAB-completition
            return [
    
                'props', 'space', 'project',
                'project', 'tags', 'attachments', 'data',
                'get_datasets()', 'get_samples()',
    
                'set_tags()', 'add_tags()', 'del_tags()',
    
    Swen Vermeul's avatar
    Swen Vermeul committed
                'add_attachment()', 'get_attachments()', 'download_attachments()'
    
            ]
    
        @property
        def props(self):
            return self.__dict__['p']
    
        @property
        def type(self):
    
            return self.__dict__['type']
    
            experiment_type = self.openbis.get_experiment_type(type_name)
            self.p.__dict__['_type'] = experiment_type
            self.a.__dict__['_type'] = experiment_type
    
    
        def __getattr__(self, name):
            return getattr(self.__dict__['a'], name)
    
        def __setattr__(self, name, value):
    
            if name in ['set_properties', 'add_tags()', 'del_tags()', 'set_tags()']:
    
                raise ValueError("These are methods which should not be overwritten")
    
            setattr(self.__dict__['a'], name, value)
    
        def _repr_html_(self):
            html = self.a._repr_html_()
            return html
    
            self.openbis.update_experiment(self.permId, properties=properties)
    
            if self.is_new:
                request = self._new_attrs()
                props = self.p._all_props()
    
                request["params"][1][0]["properties"] = props
    
                self.openbis._post_request(self.openbis.as_v3, request)
                self.a.__dict__['_is_new'] = False
                print("Experiment successfully created.")
    
                request = self._up_attrs()
                props = self.p._all_props()
    
                request["params"][1][0]["properties"] = props
    
                self.openbis._post_request(self.openbis.as_v3, request)
                print("Experiment successfully updated.")
    
            self.openbis.delete_entity('experiment', self.permId, reason)
    
            return self.openbis.get_datasets(experiment=self.permId)
    
            return self.openbis.get_project(experiment=self.permId)
    
            return self.openbis.get_samples(experiment=self.permId)
    
    Swen Vermeul's avatar
    Swen Vermeul committed
    class Attachment():
        def __init__(self, filename, title=None, description=None):
            if not os.path.exists(filename):
                raise ValueError("File not found: {}".format(filename))
            self.fileName = filename
            self.title = title
            self.description = description
    
    Swen Vermeul's avatar
    Swen Vermeul committed
        def get_data_short(self):
            return {
    
                "fileName": self.fileName,
                "title": self.title,
                "description": self.description,
    
    Swen Vermeul's avatar
    Swen Vermeul committed
            }
    
    Swen Vermeul's avatar
    Swen Vermeul committed
        def get_data(self):
            with open(self.fileName, 'rb') as att:
                content = att.read()
                contentb64 = base64.b64encode(content).decode()
            return {
    
                "fileName": self.fileName,
                "title": self.title,
                "description": self.description,
                "content": contentb64,
                "@type": "as.dto.attachment.create.AttachmentCreation",
    
    Swen Vermeul's avatar
    Swen Vermeul committed
            }
    
    class Project(OpenBisObject):
    
        def __init__(self, openbis_obj, data=None, **kwargs):
            self.__dict__['openbis'] = openbis_obj
            self.__dict__['a'] = AttrHolder(openbis_obj, 'Project')
    
            if data is not None:
                self.a(data)
                self.__dict__['data'] = data
    
            if kwargs is not None:
                for key in kwargs:
                    setattr(self, key, kwargs[key])
    
    
    Swen Vermeul's avatar
    Swen Vermeul committed
        def _modifiable_attrs(self):
            return
    
    Swen Vermeul's avatar
    Swen Vermeul committed
        def __dir__(self):
            """all the available methods and attributes that should be displayed
            when using the autocompletion feature (TAB) in Jupyter
            """
    
            return ['code', 'permId', 'identifier', 'description', 'space', 'registrator',
                    'registrationDate', 'modifier', 'modificationDate', 'add_attachment()',
                    'get_attachments()', 'download_attachments()',
                    'get_experiments()', 'get_samples()', 'get_datasets()',
                    'delete()'
                    ]
    
    Swen Vermeul's avatar
    Swen Vermeul committed
    
        def get_samples(self):
            return self.openbis.get_samples(project=self.permId)
    
        def get_experiments(self):
            return self.openbis.get_experiments(project=self.permId)
    
        def get_datasets(self):
            return self.openbis.get_datasets(project=self.permId)
    
    
        def delete(self, reason):
    
            self.openbis.delete_entity('project', self.permId, reason)
    
    Swen Vermeul's avatar
    Swen Vermeul committed
        def save(self):
    
            if self.is_new:
                request = self._new_attrs()
                self.openbis._post_request(self.openbis.as_v3, request)
                self.a.__dict__['_is_new'] = False
                print("Project successfully created.")
    
    Swen Vermeul's avatar
    Swen Vermeul committed
            else:
    
                request = self._up_attrs()
                self.openbis._post_request(self.openbis.as_v3, request)
                print("Project successfully updated.")