Newer
Older
get_externalDms = get_external_data_management_system # alias
def new_space(self, **kwargs):
return Space(self, None, **kwargs)
def new_git_data_set(self, data_set_type, path, commit_id, repository_id, dms, sample=None, experiment=None, properties={},
dss_code=None, parents=None, data_set_code=None, contents=[]):
""" Create a link data set.
:param data_set_type: The type of the data set
Chandrasekhar Ramakrishnan
committed
:param data_set_type: The type of the data set
:param path: The path to the git repository
:param commit_id: The git commit id
:param repository_id: The git repository id - same for copies
:param dms: An external data managment system object or external_dms_id
:param sample: A sample object or sample id.
Chandrasekhar Ramakrishnan
committed
:param dss_code: Code for the DSS -- defaults to the first dss if none is supplied.
:param properties: Properties for the data set.
:param parents: Parents for the data set.
Chandrasekhar Ramakrishnan
committed
:param data_set_code: A data set code -- used if provided, otherwise generated on the server
:param contents: A list of dicts that describe the contents:
{'file_length': [file length],
'crc32': [crc32 checksum],
'directory': [is path a directory?]
'path': [the relative path string]}
:return: A DataSet object
"""
return pbds.GitDataSetCreation(self, data_set_type, path, commit_id, repository_id, dms, sample, experiment,
properties, dss_code, parents, data_set_code, contents).new_git_data_set()
def new_content_copy(self, path, commit_id, repository_id, edms_id, data_set_id):
"""
Create a content copy in an existing link data set.
:param path: path of the new content copy
"param commit_id: commit id of the new content copy
"param repository_id: repository id of the content copy
"param edms_id: Id of the external data managment system of the content copy
"param data_set_id: Id of the data set to which the new content copy belongs
"""
return pbds.GitDataSetUpdate(self, data_set_id).new_content_copy(path, commit_id, repository_id, edms_id)
def search_files(self, data_set_id, dss_code=None):
return pbds.GitDataSetFileSearch(self, data_set_id).search_files()
def delete_content_copy(self, data_set_id, content_copy):
"""
Deletes a content copy from a data set.
:param data_set_id: Id of the data set containing the content copy
:param content_copy: The content copy to be deleted
"""
return pbds.GitDataSetUpdate(self, data_set_id).delete_content_copy(content_copy)
Chandrasekhar Ramakrishnan
committed
@staticmethod
def sample_to_sample_id(sample):
"""Take sample which may be a string or object and return an identifier for it."""
return Openbis._object_to_object_id(sample, "as.dto.sample.id.SampleIdentifier", "as.dto.sample.id.SamplePermId");
@staticmethod
def experiment_to_experiment_id(experiment):
"""Take experiment which may be a string or object and return an identifier for it."""
return Openbis._object_to_object_id(experiment, "as.dto.experiment.id.ExperimentIdentifier", "as.dto.experiment.id.SamplePermId");
@staticmethod
def _object_to_object_id(obj, identifierType, permIdType):
object_id = None
if isinstance(obj, str):
if (is_identifier(obj)):
object_id = {
"identifier": obj,
"@type": identifierType
}
else:
object_id = {
"permId": obj,
"@type": permIdType
}
else:
object_id = {
"identifier": obj.identifier,
"@type": identifierType
return object_id
Chandrasekhar Ramakrishnan
committed
@staticmethod
def data_set_to_data_set_id(data_set):
if isinstance(data_set, str):
code = data_set
else:
code = data_set.permId
return {
"permId": code,
"@type": "as.dto.dataset.id.DataSetPermId"
}
def external_data_managment_system_to_dms_id(self, dms):
if isinstance(dms, str):
dms_id = {
"permId": dms,
"@type": "as.dto.externaldms.id.ExternalDmsPermId"
}
else:
dms_id = {
"identifier": dms.code,
"@type": "as.dto.sample.id.SampleIdentifier"
}
return dms_id
def new_sample(self, type, project=None, props=None, **kwargs):
""" Creates a new sample of a given sample type.
type -- sampleType code or object: mandatory
code -- name/code for the sample, if not generated automatically
space -- space code or object
project -- project code or object
experiment -- experiment code or object
collection -- same as above
props -- a dictionary containing the properties
if 'collection' in kwargs:
kwargs['experiment'] = kwargs['collection']
kwargs.pop('collection', None)
Swen Vermeul
committed
if isinstance(type, str):
sample_type = self.get_sample_type(type)
else:
sample_type = type
return Sample(self, type=sample_type, project=project, data=None, props=props, **kwargs)
new_object = new_sample # Alias
Swen Vermeul
committed
def new_transaction(self, *entities):
return Transaction(*entities)
def new_sample_type(self,
code,
generatedCodePrefix,
autoGeneratedCode=False,
listable=True,
showContainer=False,
showParents=True,
showParentMetadata=False,
validationPlugin=None
):
"""Creates a new sample type.
"""
return SampleType(self,
code=code,
generatedCodePrefix = generatedCodePrefix,
autoGeneratedCode = autoGeneratedCode,
listable = listable,
showContainer = showContainer,
showParents = showParents,
showParentMetadata = showParentMetadata,
validationPlugin = validationPlugin,
)
new_object_type = new_sample_type
def new_dataset_type(self,
code,
description=None,
mainDataSetPattern=None,
mainDataSetPath=None,
disallowDeletion=False,
validationPlugin=None,
):
"""Creates a new dataSet type.
"""
4175
4176
4177
4178
4179
4180
4181
4182
4183
4184
4185
4186
4187
4188
4189
4190
4191
4192
4193
4194
4195
4196
4197
4198
4199
4200
4201
4202
4203
4204
4205
4206
4207
4208
4209
4210
return DataSetType(self,
code=code,
description=description,
mainDataSetPattern=mainDataSetPattern,
mainDataSetPath=mainDataSetPath,
disallowDeletion=disallowDeletion,
validationPlugin=validationPlugin,
)
def new_experiment_type(self,
code,
description=None,
validationPlugin=None,
):
"""Creates a new experiment type (collection type)
"""
return ExperimentType(self,
code=code,
description=description,
validationPlugin=validationPlugin,
)
new_collection_type = new_experiment_type
def new_material_type(self,
code,
description=None,
validationPlugin=None,
):
"""Creates a new material type.
"""
return MaterialType(self,
code=code,
description=description,
validationPlugin=validationPlugin,
)
def new_dataset(self, type=None, kind='PHYSICAL_DATA', files=None, file=None, props=None, folder=None, **kwargs):
Swen Vermeul
committed
""" Creates a new dataset of a given type.
if type is None:
raise ValueError("Please provide a dataSet type")
if file:
files = [file]
Swen Vermeul
committed
if isinstance(type, str):
type_obj = self.get_dataset_type(type.upper())
else:
type_obj = type
if 'object' in kwargs:
kwargs['sample'] = kwargs['object']
kwargs.pop('object', None)
if 'collection' in kwargs:
kwargs['experiment'] = kwargs['collection']
kwargs.pop('collection', None)
return DataSet(self, type=type_obj, kind=kind, files=files, folder=folder, props=props, **kwargs)
def new_semantic_annotation(self, entityType=None, propertyType=None, **kwargs):
""" Note: not functional yet. """
return SemanticAnnotation(
openbis_obj=self, isNew=True,
entityType=entityType, propertyType=propertyType, **kwargs
)
def new_vocabulary(self, code, terms, managedInternally=False, chosenFromList=True, **kwargs):
""" Creates a new vocabulary
Usage::
new_vocabulary(
code = 'vocabulary_code',
description = '',
terms = [
{ "code": "term1", "label": "label1", "description": "description1" },
{ "code": "term2", "label": "label2", "description": "description2" },
]
)
"""
kwargs['code'] = code
kwargs['managedInternally'] = managedInternally
kwargs['chosenFromList'] = chosenFromList
return Vocabulary(self, data=None, terms=terms, **kwargs)
def _get_dss_url(self, dss_code=None):
""" internal method to get the downloadURL of a datastore.
"""
Swen Vermeul
committed
dss = self.get_datastores()
if dss_code is None:
return dss['downloadUrl'][0]
else:
Swen Vermeul
committed
return dss[dss['code'] == dss_code]['downloadUrl'][0]
Swen Vermeul
committed
class ExternalDMS():
""" managing openBIS external data management systems
Swen Vermeul
committed
def __init__(self, openbis_obj, data=None, **kwargs):
self.__dict__['openbis'] = openbis_obj
Swen Vermeul
committed
Swen Vermeul
committed
self.__dict__['data'] = data
Swen Vermeul
committed
if kwargs is not None:
for key in kwargs:
setattr(self, key, kwargs[key])
Swen Vermeul
committed
def __getattr__(self, name):
return self.__dict__['data'].get(name)
Swen Vermeul
committed
"""all the available methods and attributes that should be displayed
when using the autocompletion feature (TAB) in Jupyter
"""
return ['code', 'label', 'urlTemplate', 'address', 'addressType', 'openbis']
Swen Vermeul
committed
def __str__(self):
return self.data.get('code', None)
class ServerInformation():
Fuentes Serna Juan Mariano (ID SIS)
committed
def __init__(self, info):
self._info = info
self.attrs = [
'api_version', 'archiving_configured', 'authentication_service',
'enabled_technologies', 'project_samples_enabled'
]
def __dir__(self):
return self.attrs
def __getattr__(self, name):
return self._info.get(name.replace('_', '-'))
Fuentes Serna Juan Mariano (ID SIS)
committed
def get_major_version(self):
return int(self._info["api-version"].split(".")[0]);
def get_minor_version(self):
return int(self._info["api-version"].split(".")[1]);
def is_openbis_1605(self):
return (self.get_major_version() == 3) and (self.get_minor_version() <= 2);
def is_openbis_1806(self):
return (self.get_major_version() == 3) and (self.get_minor_version() >= 5);
4323
4324
4325
4326
4327
4328
4329
4330
4331
4332
4333
4334
4335
4336
4337
4338
4339
4340
4341
4342
4343
4344
4345
def _repr_html_(self):
html = """
<table border="1" class="dataframe">
<thead>
<tr style="text-align: right;">
<th>attribute</th>
<th>value</th>
</tr>
</thead>
<tbody>
"""
for attr in self.attrs:
html += "<tr> <td>{}</td> <td>{}</td> </tr>".format(
attr, getattr(self, attr, '')
)
html += """
</tbody>
</table>
"""
return html
Swen Vermeul
committed
class PropertyType(
OpenBisObject,
entity='propertyType',
single_item_method_name='get_property_type'
):
pass
class Plugin(
OpenBisObject,
entity='plugin',
single_item_method_name='get_plugin'
):
pass