Skip to content
Snippets Groups Projects
pybis.py 180 KiB
Newer Older
  • Learn to ignore specific revisions
  • 
            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()',
    
    Swen Vermeul's avatar
    Swen Vermeul committed
    
    
    Swen Vermeul's avatar
    Swen Vermeul committed
        def get_samples(self, **kwargs):
            return self.openbis.get_samples(project=self.permId, **kwargs)
    
    Swen Vermeul's avatar
    Swen Vermeul committed
    
    
        def get_sample(self, sample_code):
            if is_identifier(sample_code) or is_permid(sample_code):
                return self.openbis.get_sample(sample_code)
            else:
                # we assume we just got the code
                return self.openbis.get_sample(project=self, code=sample_code)
    
    
        get_objects = get_samples # Alias
    
    
    Swen Vermeul's avatar
    Swen Vermeul committed
        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(entity='Project', id=self.permId, reason=reason)
    
            if VERBOSE: print("Project {} successfully deleted.".format(self.permId))
    
    Swen Vermeul's avatar
    Swen Vermeul committed
        def save(self):
    
            if self.is_new:
                request = self._new_attrs()
    
                resp = self.openbis._post_request(self.openbis.as_v3, request)
    
                if VERBOSE: print("Project successfully created.")
    
                new_project_data = self.openbis.get_project(resp[0]['permId'], only_data=True)
                self._set_data(new_project_data)
                return self
    
    Swen Vermeul's avatar
    Swen Vermeul committed
            else:
    
                request = self._up_attrs()
                self.openbis._post_request(self.openbis.as_v3, request)
    
                if VERBOSE: print("Project successfully updated.")
    
    
    
    class SemanticAnnotation():
        def __init__(self, openbis_obj, isNew=True, **kwargs):
            self._openbis = openbis_obj
            self._isNew = isNew;
            
            self.permId = kwargs.get('permId')
            self.entityType = kwargs.get('entityType')
            self.propertyType = kwargs.get('propertyType')
            self.predicateOntologyId = kwargs.get('predicateOntologyId')
            self.predicateOntologyVersion = kwargs.get('predicateOntologyVersion')
            self.predicateAccessionId = kwargs.get('predicateAccessionId')
            self.descriptorOntologyId = kwargs.get('descriptorOntologyId')
            self.descriptorOntologyVersion = kwargs.get('descriptorOntologyVersion')
            self.descriptorAccessionId = kwargs.get('descriptorAccessionId')
            self.creationDate = kwargs.get('creationDate')
    
        def __dir__(self):
    
            return [
                'permId', 'entityType', 'propertyType', 
                'predicateOntologyId', 'predicateOntologyVersion', 
                'predicateAccessionId', 'descriptorOntologyId',
                'descriptorOntologyVersion', 'descriptorAccessionId', 
                'creationDate', 
                'save()', 'delete()' 
            ]
    
    
        def save(self):
            if self._isNew:
                self._create()
            else:
                self._update()
                
        def _create(self):
            
            creation = {
                "@type": "as.dto.semanticannotation.create.SemanticAnnotationCreation"
            }
    
            if self.entityType is not None and self.propertyType is not None:
                creation["propertyAssignmentId"] = {
                    "@type": "as.dto.property.id.PropertyAssignmentPermId",
                    "entityTypeId" : {
                        "@type": "as.dto.entitytype.id.EntityTypePermId",
                        "permId" : self.entityType,
                        "entityKind" : "SAMPLE"
                    },
                    "propertyTypeId" : {
                        "@type" : "as.dto.property.id.PropertyTypePermId",
                        "permId" : self.propertyType
                    }
                }
            elif self.entityType is not None:
                creation["entityTypeId"] = {
                    "@type": "as.dto.entitytype.id.EntityTypePermId",
                    "permId" : self.entityType,
                    "entityKind" : "SAMPLE"
                }
            elif self.propertyType is not None:
                creation["propertyTypeId"] = {
                    "@type" : "as.dto.property.id.PropertyTypePermId",
                    "permId" : self.propertyType
                }
                
            for attr in ['predicateOntologyId', 'predicateOntologyVersion', 'predicateAccessionId', 'descriptorOntologyId', 'descriptorOntologyVersion', 'descriptorAccessionId']:
                creation[attr] = getattr(self, attr)
    
            request = {
                "method": "createSemanticAnnotations",
                "params": [
                    self._openbis.token,
                    [creation]
                ]
            }
            
            self._openbis._post_request(self._openbis.as_v3, request)
            self._isNew = False
            
    
            if VERBOSE: print("Semantic annotation successfully created.")
    
        
        def _update(self):
            
            update = {
                "@type": "as.dto.semanticannotation.update.SemanticAnnotationUpdate",
                "semanticAnnotationId" : {
                    "@type" : "as.dto.semanticannotation.id.SemanticAnnotationPermId",
                    "permId" : self.permId
                }
            }
            
            for attr in ['predicateOntologyId', 'predicateOntologyVersion', 'predicateAccessionId', 'descriptorOntologyId', 'descriptorOntologyVersion', 'descriptorAccessionId']:
                update[attr] = {
                    "@type" : "as.dto.common.update.FieldUpdateValue",
                    "isModified" : True,
                    "value" : getattr(self, attr)
                }
                
            request = {
                "method": "updateSemanticAnnotations",
                "params": [
                    self._openbis.token,
                    [update]
                ]
            }
            
            self._openbis._post_request(self._openbis.as_v3, request)
    
            if VERBOSE: print("Semantic annotation successfully updated.")
    
            self._openbis.delete_entity(entity='SemanticAnnotation', id=self.permId, reason=reason)
    
            if VERBOSE: print("Semantic annotation successfully deleted.")