diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/initialize-master-data.py b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/initialize-master-data.py index ead04e46d97b8ee25bba52a26b321f5b06f4f7c1..f5e98d86cee130cd9075b0874cbdc4c725772d47 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/initialize-master-data.py +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/initialize-master-data.py @@ -20,10 +20,10 @@ import sys from ch.ethz.sis.openbis.generic.asapi.v3.dto.operation import SynchronousOperationExecutionOptions from ch.ethz.sis.openbis.generic.server.asapi.v3 import ApplicationServerApi from ch.systemsx.cisd.openbis.generic.server import CommonServiceProvider -from file_handling import list_xls_files -from openbis_logic import OpenbisLogicHandler from parsers import ExcelToPoiParser, PoiToDefinitionParser, DefinitionToCreationParser, DuplicatesHandler, CreationToOperationParser +from processors import OpenbisDuplicatesHandler from search_engines import SearchEngine +from utils.file_handling import list_xls_files api = CommonServiceProvider.getApplicationContext().getBean(ApplicationServerApi.INTERNAL_SERVICE_NAME) @@ -38,11 +38,10 @@ for excel_file_path in list_xls_files(): else: creations[creation_type].extend(partial_creation) distinct_creations = DuplicatesHandler.get_distinct_creations(creations) - sessionToken = api.loginAsSystem() search_engine = SearchEngine(api, sessionToken) existing_elements = search_engine.find_all_existing_elements(distinct_creations) -server_duplicates_handler = OpenbisLogicHandler(distinct_creations, existing_elements) +server_duplicates_handler = OpenbisDuplicatesHandler(distinct_creations, existing_elements) creations = server_duplicates_handler.remove_existing_elements_from_creations() creations = server_duplicates_handler.rewrite_parentchild_creationid_to_permid() # creations = server_duplicates_handler.rewrite_vocabulary_labels() diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/life-sciences-types/types2.xls b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/life-sciences-types/types2.xls deleted file mode 100644 index 52bd9cc8dd6c1020b5d9b9624b4a53c092557beb..0000000000000000000000000000000000000000 Binary files a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/life-sciences-types/types2.xls and /dev/null differ diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/parsers/definition_to_creation/creation_parsers.py b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/parsers/definition_to_creation/creation_parsers.py index 86e26673774e25b68cb5b047c7b992c77a34a168..6b98d4de380e84e337642f2a9d41222483dcf777 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/parsers/definition_to_creation/creation_parsers.py +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/parsers/definition_to_creation/creation_parsers.py @@ -14,8 +14,9 @@ from ch.ethz.sis.openbis.generic.asapi.v3.dto.space.create import SpaceCreation from ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.create import VocabularyCreation from ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.create import VocabularyTermCreation from ch.ethz.sis.openbis.generic.asapi.v3.dto.vocabulary.id import VocabularyPermId -from file_handling import get_script, get_filename_from_path from java.lang import UnsupportedOperationException +from utils.file_handling import get_script +from utils.openbis_utils import is_internal_namespace, get_script_name_for def get_boolean_from_string(text): @@ -27,113 +28,109 @@ class DefinitionToCreationParserFactory(object): @staticmethod def getParsers(definition): if definition.type == u'VOCABULARY_TYPE': - return [VocabularyDefinitionToCreationParser] + return [VocabularyDefinitionToCreationParser()] elif definition.type == u'SAMPLE_TYPE': - return [SampleTypeDefinitionToCreationParser, PropertyTypeDefinitionToCreationParser, ScriptDefinitionToCreationParser] + return [SampleTypeDefinitionToCreationParser(), PropertyTypeDefinitionToCreationParser(), ScriptDefinitionToCreationParser()] elif definition.type == u'EXPERIMENT_TYPE': - return [ExperimentTypeDefinitionToCreationParser, PropertyTypeDefinitionToCreationParser, ScriptDefinitionToCreationParser] + return [ExperimentTypeDefinitionToCreationParser(), PropertyTypeDefinitionToCreationParser(), ScriptDefinitionToCreationParser()] elif definition.type == u'DATASET_TYPE': - return [DatasetTypeDefinitionToCreationParser, PropertyTypeDefinitionToCreationParser, ScriptDefinitionToCreationParser] + return [DatasetTypeDefinitionToCreationParser(), PropertyTypeDefinitionToCreationParser(), ScriptDefinitionToCreationParser()] elif definition.type == u'SPACE': - return [SpaceDefinitionToCreationParser] + return [SpaceDefinitionToCreationParser()] elif definition.type == u'PROJECT': - return [ProjectDefinitionToCreationParser] + return [ProjectDefinitionToCreationParser()] elif definition.type == u'EXPERIMENT': - return [ExperimentDefinitionToCreationParser] + return [ExperimentDefinitionToCreationParser()] elif definition.type == u'SAMPLE': - return [SampleDefinitionToCreationParser] + return [SampleDefinitionToCreationParser()] elif definition.type == u'PROPERTY_TYPE': - return [PropertyTypeDefinitionToCreationParser] + return [PropertyTypeDefinitionToCreationParser()] else: raise UnsupportedOperationException("Definition of " + str(definition.type) + " is not supported (probably yet).") -class PropertyTypeDefinitionToCreationParser(object): +class DefinitionToCreationParser(object): + pass + + +class PropertyTypeDefinitionToCreationParser(DefinitionToCreationParser): type = "PropertyTypeCreation" - @staticmethod - def parse(definition): + def parse(self, definition): property_creations = [] - for property in definition.properties: + + for prop in definition.properties: property_type_creation = PropertyTypeCreation() - property_type_creation.code = property[u'code'] - if property[u'code'].startswith(u'$'): - property_type_creation.internalNameSpace = True - property_type_creation.label = property[u'property label'] - property_type_creation.dataType = DataType.valueOf(property[u'property type']) - property_type_creation.vocabularyId = VocabularyPermId(property[u'vocabulary code']) if property[u'vocabulary code'] is not None else None - property_type_creation.description = property[u'description'] + property_type_creation.code = prop[u'code'] + property_type_creation.label = prop[u'property label'] + property_type_creation.description = prop[u'description'] + property_type_creation.dataType = DataType.valueOf(prop[u'property type']) + property_type_creation.internalNameSpace = is_internal_namespace(prop[u'code']) + property_type_creation.vocabularyId = VocabularyPermId(prop[u'vocabulary code']) if prop[u'vocabulary code'] is not None else None property_creations.append(property_type_creation) return property_creations - @staticmethod - def get_type(): + def get_type(self): return PropertyTypeDefinitionToCreationParser.type -class VocabularyDefinitionToCreationParser(object): +class VocabularyDefinitionToCreationParser(DefinitionToCreationParser): type = "VocabularyCreation" - @staticmethod - def parse(definition): + def parse(self, definition): code = definition.attributes[u'code'] vocabulary_creation = VocabularyCreation() vocabulary_creation.code = code - if code.startswith(u'$'): - vocabulary_creation.internalNameSpace = True + vocabulary_creation.internalNameSpace = is_internal_namespace(code) vocabulary_creation.description = definition.attributes[u'description'] vocabulary_creations_terms = [] - for property in definition.properties: + for prop in definition.properties: vocabulary_creation_term = VocabularyTermCreation() - vocabulary_creation_term.code = property[u'code'] - vocabulary_creation_term.label = property[u'label'] - vocabulary_creation_term.description = property[u'description'] + vocabulary_creation_term.code = prop[u'code'] + vocabulary_creation_term.label = prop[u'label'] + vocabulary_creation_term.description = prop[u'description'] vocabulary_creations_terms.append(vocabulary_creation_term) vocabulary_creation.terms = vocabulary_creations_terms return vocabulary_creation - @staticmethod - def get_type(): + def get_type(self): return VocabularyDefinitionToCreationParser.type -class PropertyAssignmentDefinitionToCreationParser(object): +class PropertyAssignmentDefinitionToCreationParser(DefinitionToCreationParser): type = "PropertyAssignmentCreation" - @staticmethod - def parse(property): - code = property[u'code'] + def parse(self, prop): + code = prop[u'code'] property_assingment_creation = PropertyAssignmentCreation() - is_mandatory = get_boolean_from_string(property[u'mandatory']) + is_mandatory = get_boolean_from_string(prop[u'mandatory']) property_assingment_creation.mandatory = is_mandatory - should_show_in_edit_view = get_boolean_from_string(property[u'show in edit views']) + should_show_in_edit_view = get_boolean_from_string(prop[u'show in edit views']) property_assingment_creation.showInEditView = should_show_in_edit_view - property_assingment_creation.section = property[u'section'] + property_assingment_creation.section = prop[u'section'] property_assingment_creation.propertyTypeId = PropertyTypePermId(code) - if u'dynamic script' in property and property[u'dynamic script'] is not None: - dynamic_script_path = property[u'dynamic script'] - property_assingment_creation.pluginId = PluginPermId(ScriptDefinitionToCreationParser.get_name_for(code, dynamic_script_path)) + if u'dynamic script' in prop and prop[u'dynamic script'] is not None: + dynamic_script_path = prop[u'dynamic script'] + property_assingment_creation.pluginId = PluginPermId(get_script_name_for(code, dynamic_script_path)) return property_assingment_creation - @staticmethod - def get_type(): + def get_type(self): return PropertyAssignmentDefinitionToCreationParser.type -class SampleTypeDefinitionToCreationParser(object): +class SampleTypeDefinitionToCreationParser(DefinitionToCreationParser): type = "SampleTypeCreation" - @staticmethod - def parse(definition): + def parse(self, definition): code = definition.attributes[u'code'] sample_creation = SampleTypeCreation() sample_creation.code = code @@ -141,71 +138,68 @@ class SampleTypeDefinitionToCreationParser(object): sample_creation.autoGeneratedCode = should_auto_generate_codes if u'validation script' in definition.attributes and definition.attributes[u'validation script'] is not None: validation_script_path = definition.attributes[u'validation script'] - sample_creation.validationPluginId = PluginPermId(ScriptDefinitionToCreationParser.get_name_for(code, validation_script_path)) + sample_creation.validationPluginId = PluginPermId(get_script_name_for(code, validation_script_path)) property_assingment_creations = [] - for property in definition.properties: - property_assingment_creation = PropertyAssignmentDefinitionToCreationParser.parse(property) + property_assignment_parser = PropertyAssignmentDefinitionToCreationParser() + for prop in definition.properties: + property_assingment_creation = property_assignment_parser.parse(prop) property_assingment_creations.append(property_assingment_creation) sample_creation.propertyAssignments = property_assingment_creations return sample_creation - @staticmethod - def get_type(): + def get_type(self): return SampleTypeDefinitionToCreationParser.type -class ExperimentTypeDefinitionToCreationParser(object): +class ExperimentTypeDefinitionToCreationParser(DefinitionToCreationParser): type = "ExperimentTypeCreation" - @staticmethod - def parse(definition): + def parse(self, definition): experiment_type_creation = ExperimentTypeCreation() experiment_type_creation.code = definition.attributes[u'code'] property_assingment_creations = [] - for property in definition.properties: - property_assingment_creation = PropertyAssignmentDefinitionToCreationParser.parse(property) + property_assignment_parser = PropertyAssignmentDefinitionToCreationParser() + for prop in definition.properties: + property_assingment_creation = property_assignment_parser.parse(prop) property_assingment_creations.append(property_assingment_creation) experiment_type_creation.propertyAssignments = property_assingment_creations return experiment_type_creation - @staticmethod - def get_type(): + def get_type(self): return ExperimentTypeDefinitionToCreationParser.type -class DatasetTypeDefinitionToCreationParser(object): +class DatasetTypeDefinitionToCreationParser(DefinitionToCreationParser): type = "DatasetTypeCreation" - @staticmethod - def parse(definition): + def parse(self, definition): dataset_type_creation = DataSetTypeCreation() dataset_type_creation.code = definition.attributes[u'code'] property_assingment_creations = [] - for property in definition.properties: - property_assingment_creation = PropertyAssignmentDefinitionToCreationParser.parse(property) + property_assignment_parser = PropertyAssignmentDefinitionToCreationParser() + for prop in definition.properties: + property_assingment_creation = property_assignment_parser.parse(prop) property_assingment_creations.append(property_assingment_creation) dataset_type_creation.propertyAssignments = property_assingment_creations return dataset_type_creation - @staticmethod - def get_type(): + def get_type(self): return DatasetTypeDefinitionToCreationParser.type -class SpaceDefinitionToCreationParser(object): +class SpaceDefinitionToCreationParser(DefinitionToCreationParser): type = "SpaceCreation" - @staticmethod - def parse(definition): + def parse(self, definition): space_creation = SpaceCreation() space_creation.code = definition.attributes[u'code'] space_creation.description = definition.attributes[u'description'] @@ -213,17 +207,15 @@ class SpaceDefinitionToCreationParser(object): space_creation.creationId = CreationId(creation_id) return space_creation - @staticmethod - def get_type(): + def get_type(self): return SpaceDefinitionToCreationParser.type -class ProjectDefinitionToCreationParser(object): +class ProjectDefinitionToCreationParser(DefinitionToCreationParser): type = "ProjectCreation" - @staticmethod - def parse(definition): + def parse(self, definition): project_creation = ProjectCreation() project_creation.code = definition.attributes[u'code'] project_creation.description = definition.attributes[u'description'] @@ -232,17 +224,15 @@ class ProjectDefinitionToCreationParser(object): project_creation.creationId = CreationId(creation_id) return project_creation - @staticmethod - def get_type(): + def get_type(self): return ProjectDefinitionToCreationParser.type -class ExperimentDefinitionToCreationParser(object): +class ExperimentDefinitionToCreationParser(DefinitionToCreationParser): type = "ExperimentCreation" - @staticmethod - def parse(definition): + def parse(self, definition): experiments = [] mandatory_attributes = [u'code', u'project'] for experiment_properties in definition.properties: @@ -252,23 +242,21 @@ class ExperimentDefinitionToCreationParser(object): experiment_creation.projectId = CreationId(experiment_properties[u'project']) creation_id = experiment_properties[u'code'] experiment_creation.creationId = CreationId(creation_id) - for property, value in experiment_properties.items(): - if property not in mandatory_attributes: - experiment_creation.setProperty(property, value) + for prop, value in experiment_properties.items(): + if prop not in mandatory_attributes: + experiment_creation.setProperty(prop, value) experiments.append(experiment_creation) return experiments - @staticmethod - def get_type(): + def get_type(self): return ExperimentDefinitionToCreationParser.type -class SampleDefinitionToCreationParser(object): +class SampleDefinitionToCreationParser(DefinitionToCreationParser): type = "SampleCreation" - @staticmethod - def parse(definition): + def parse(self, definition): samples = [] mandatory_attributes = [u'$', u'code', u'space', u'project', u'experiment', u'auto generate code', u'parents', u'children'] for sample_properties in definition.properties: @@ -302,23 +290,21 @@ class SampleDefinitionToCreationParser(object): child_creationids.append(CreationId(child)) sample_creation.childIds = child_creationids - for property, value in sample_properties.items(): - if property not in mandatory_attributes: - sample_creation.setProperty(property, value) + for prop, value in sample_properties.items(): + if prop not in mandatory_attributes: + sample_creation.setProperty(prop, value) samples.append(sample_creation) return samples - @staticmethod - def get_type(): + def get_type(self): return SampleDefinitionToCreationParser.type -class ScriptDefinitionToCreationParser(object): +class ScriptDefinitionToCreationParser(DefinitionToCreationParser): type = "ScriptCreation" - @staticmethod - def parse(definition): + def parse(self, definition): scripts = [] if u'validation script' in definition.attributes: validation_script_path = definition.attributes[u'validation script'] @@ -328,31 +314,26 @@ class ScriptDefinitionToCreationParser(object): script_file = open(get_script(validation_script_path)) script = script_file.read() script_file.close() - validation_script_creation.name = ScriptDefinitionToCreationParser.get_name_for(code, validation_script_path) + validation_script_creation.name = get_script_name_for(code, validation_script_path) validation_script_creation.script = script validation_script_creation.pluginType = PluginType.ENTITY_VALIDATION scripts.append(validation_script_creation) - for property in definition.properties: - if u'dynamic script' in property: - dynamic_prop_script_path = property[u'dynamic script'] - code = property[u'code'] + for prop in definition.properties: + if u'dynamic script' in prop: + dynamic_prop_script_path = prop[u'dynamic script'] + code = prop[u'code'] if dynamic_prop_script_path is not None: validation_script_creation = PluginCreation() script_file = open(get_script(dynamic_prop_script_path)) script = script_file.read() script_file.close() - validation_script_creation.name = ScriptDefinitionToCreationParser.get_name_for(code, dynamic_prop_script_path) + validation_script_creation.name = get_script_name_for(code, dynamic_prop_script_path) validation_script_creation.script = script validation_script_creation.pluginType = PluginType.DYNAMIC_PROPERTY scripts.append(validation_script_creation) return scripts - @staticmethod - def get_name_for(owner_code, script_path): - return owner_code + '.' + get_filename_from_path(script_path) - - @staticmethod - def get_type(): + def get_type(self): return ScriptDefinitionToCreationParser.type diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/parsers/poi_to_definition/definition_parsers.py b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/parsers/poi_to_definition/definition_parsers.py index 2990cc1345df82b4fc01806a0bc4a67c197149d8..3162d6fa80888174fdb5da9fe8f8bb93cfbaad69 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/parsers/poi_to_definition/definition_parsers.py +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/parsers/poi_to_definition/definition_parsers.py @@ -1,3 +1,4 @@ +from java.lang import UnsupportedOperationException from .definition import Definition from .poi_cleaner import PoiCleaner diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/processors/__init__.py b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/processors/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..870975eb874cee348b26c457931b32da2f06a970 --- /dev/null +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/processors/__init__.py @@ -0,0 +1 @@ +from .openbis_duplicates_processor import OpenbisDuplicatesHandler \ No newline at end of file diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/openbis_logic.py b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/processors/openbis_duplicates_processor.py similarity index 97% rename from openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/openbis_logic.py rename to openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/processors/openbis_duplicates_processor.py index 2e6c63b0bdd118e7bcb872c00ddf8a8756934101..8b0c3077a0cd6107d972e5428ddd31c6029c17ba 100644 --- a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/openbis_logic.py +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/processors/openbis_duplicates_processor.py @@ -7,7 +7,7 @@ from parsers import VocabularyDefinitionToCreationParser, PropertyTypeDefinition ProjectDefinitionToCreationParser, ExperimentDefinitionToCreationParser, ScriptDefinitionToCreationParser, SampleDefinitionToCreationParser -class OpenbisLogicHandler(object): +class OpenbisDuplicatesHandler(object): def __init__(self, creations, existing_elements): self.creations = creations @@ -101,7 +101,6 @@ class OpenbisLogicHandler(object): def _create_sample_identifier_string(self, creation): spaceId = creation.spaceId.creationId if creation.spaceId is not None else None projectId = creation.projectId.creationId if creation.projectId is not None else None -# experimentId = creation.experimentId.creationId if creation.experimentId is not None else None code = creation.code sample_identifier = SampleIdentifier(spaceId, projectId, None, code) return sample_identifier.identifier diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/life-sciences-types/scripts/dynamic/dynamic.py b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/test_files/scripts/dynamic/dynamic.py similarity index 100% rename from openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/life-sciences-types/scripts/dynamic/dynamic.py rename to openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/test_files/scripts/dynamic/dynamic.py diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/life-sciences-types/scripts/valid.py b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/test_files/scripts/valid.py similarity index 100% rename from openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/life-sciences-types/scripts/valid.py rename to openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/test_files/scripts/valid.py diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/life-sciences-types/types.xls b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/test_files/types.xls similarity index 95% rename from openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/life-sciences-types/types.xls rename to openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/test_files/types.xls index 473cc33398b77fb5980ba414df0437cd2cc91825..c2d224eb2ae234f8e00d673d04f887f8cc7922ea 100644 Binary files a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/life-sciences-types/types.xls and b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/test_files/types.xls differ diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/utils/__init__.py b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..2ca4ab4e79e7906b8ec602767cae0928adb74f46 --- /dev/null +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/utils/__init__.py @@ -0,0 +1,2 @@ +import file_handling +import openbis_utils \ No newline at end of file diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/file_handling.py b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/utils/file_handling.py similarity index 100% rename from openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/file_handling.py rename to openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/utils/file_handling.py diff --git a/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/utils/openbis_utils.py b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/utils/openbis_utils.py new file mode 100644 index 0000000000000000000000000000000000000000..994918600bda0c3678fd20b93c490cd5a9e55ed2 --- /dev/null +++ b/openbis_standard_technologies/dist/core-plugins/eln-lims-life-sciences/1/as/utils/openbis_utils.py @@ -0,0 +1,9 @@ +from utils.file_handling import get_filename_from_path + + +def is_internal_namespace(property_value): + return property_value.startswith(u'$') + + +def get_script_name_for(owner_code, script_path): + return owner_code + '.' + get_filename_from_path(script_path)