def _assert_correct_converter_single_value(self, data_type: DataType,
                                               expected_converter_type):
        # given:
        column_spec = ColumnSpecification('field', 'object_type',
                                          'main_category', data_type)

        # when:
        converter = column_spec.determine_converter()

        # then:
        self.assertIsInstance(converter, expected_converter_type)
Exemple #2
0
    def test_determine_converter_for_multivalue_type(self):
        data_types_to_test = [
            DataType.BOOLEAN, DataType.INTEGER, DataType.STRING,
            DataType.UNDEFINED
        ]

        for data_type in data_types_to_test:
            sample_metadata_schema_json = {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "$id":
                "https://schema.humancellatlas.org/module/protocol/2.0.2/someschema",
                "description": "Just a plain old test schema",
                "type": "object",
                "properties": {
                    "multivalue_property": {
                        "description": "Some generic multivalue property",
                        "type": "array",
                        "multivalue": True,
                        "items": {
                            "type": data_type.value
                        }
                    }
                }
            }
            schema_template = SchemaTemplate(
                json_schema_docs=[sample_metadata_schema_json])

            column_specification = ColumnSpecification(
                schema_template, "someschema.multivalue_property",
                "someschema")

            self.assertEqual(column_specification.field_name,
                             "someschema.multivalue_property")
            self.assertTrue(column_specification.is_multivalue())
            self.assertIsInstance(column_specification.determine_converter(),
                                  ListConverter)
            self.assertEqual(
                column_specification.determine_converter().base_type,
                data_type)
    def _assert_correct_converter_multivalue(self, data_type):
        # given:
        column_spec = ColumnSpecification('field',
                                          'object_type',
                                          'main_category',
                                          data_type,
                                          multivalue=True)

        # when:
        converter = column_spec.determine_converter()

        # then:
        self.assertIsInstance(converter, ListConverter)
        self.assertEqual(data_type, converter.base_type)
Exemple #4
0
def determine_strategy(column_spec: ColumnSpecification):
    strategy = DO_NOTHING
    if column_spec is not None:
        field_name = column_spec.field_name
        converter = column_spec.determine_converter()
        conversion_type = column_spec.get_conversion_type()
        if ConversionType.MEMBER_FIELD == conversion_type:
            strategy = DirectCellConversion(field_name, converter)
        elif ConversionType.FIELD_OF_LIST_ELEMENT == conversion_type:
            strategy = ListElementCellConversion(field_name, converter)
        elif ConversionType.LINKING_DETAIL == conversion_type:
            strategy = LinkingDetailCellConversion(field_name, converter)
        elif ConversionType.IDENTITY == conversion_type:
            strategy = IdentityCellConversion(field_name, converter)
        elif ConversionType.LINKED_IDENTITY == conversion_type:
            strategy = LinkedIdentityCellConversion(field_name, column_spec.main_category)
        elif ConversionType.EXTERNAL_REFERENCE == conversion_type:
            strategy = ExternalReferenceCellConversion(field_name, column_spec.main_category)
    return strategy
Exemple #5
0
    def test_determine_converter_for_single_value(self):
        data_types_to_test = [
            DataType.BOOLEAN, DataType.INTEGER, DataType.STRING,
            DataType.UNDEFINED
        ]
        expected_respective_converter = [
            BooleanConverter, IntegerConverter, StringConverter,
            DefaultConverter
        ]

        for data_type, expected_converter in zip(
                data_types_to_test, expected_respective_converter):
            sample_metadata_schema_json = {
                "$schema": "http://json-schema.org/draft-07/schema#",
                "$id":
                "https://schema.humancellatlas.org/module/protocol/2.0.2/someschema",
                "description": "Just a plain old test schema",
                "type": "object",
                "properties": {
                    "some_property": {
                        "description": "Some generic property",
                        "type": data_type.value,
                        "multivalue": False,
                    }
                }
            }
            schema_template = SchemaTemplate(
                json_schema_docs=[sample_metadata_schema_json])

            column_specification = ColumnSpecification(
                schema_template, "someschema.some_property", "someschema")

            self.assertIsInstance(column_specification.determine_converter(),
                                  expected_converter)
            self.assertEqual(column_specification.get_conversion_type(),
                             ConversionType.MEMBER_FIELD)