Exemple #1
0
    def test_it(self):
        class _FormatterTest1:
            def to_dict(self):
                return dict()

        # Should work
        register_json_formatter(_FormatterTest1)

        class _FormatterTest2:
            def to_dictomat(self):
                return dict()

        # Should not work
        with self.assertRaises(ValueError) as cm:
            register_json_formatter(_FormatterTest2)
        self.assertTrue(f'{cm.exception}'.endswith(
            "FormatterTest2'> must define a to_dict() method"),
                        msg=f'{cm.exception}')
Exemple #2
0
        for property_name, property_schema in self.properties.items():
            if property_name in mapping:
                property_value = mapping[property_name]
                converted_property_value = getattr(property_schema,
                                                   method_name)(property_value)
                converted_mapping[property_name] = converted_property_value
            else:
                property_value = property_schema.default
                if property_value is not UNDEFINED:
                    converted_property_value = getattr(
                        property_schema, method_name)(property_value)
                    if property_name in required_set or converted_property_value is not None:
                        converted_mapping[
                            property_name] = converted_property_value

        if self.additional_properties is None or self.additional_properties:
            properties_schema = self.additional_properties \
                if isinstance(self.additional_properties, JsonSchema) else None
            # Note, additional_properties defaults to True
            for property_name, property_value in mapping.items():
                if property_name not in converted_mapping and property_value is not UNDEFINED:
                    if properties_schema:
                        property_value = properties_schema.from_instance(
                            property_value)
                    converted_mapping[property_name] = property_value

        return converted_mapping


register_json_formatter(JsonSchema)
Exemple #3
0
            f'illegal data_type,'
            f' must be compatible with {GEO_DATA_FRAME_TYPE!r}')
        self.feature_schema = feature_schema

    @classmethod
    def get_schema(cls) -> JsonObjectSchema:
        schema = super().get_schema()
        schema.properties.update(
            feature_schema=JsonObjectSchema(additional_properties=True), )
        schema.required = ['data_id']
        schema.additional_properties = False
        schema.factory = cls
        return schema


register_json_formatter(DataDescriptor)
register_json_formatter(DatasetDescriptor)
register_json_formatter(VariableDescriptor)
register_json_formatter(MultiLevelDatasetDescriptor)
register_json_formatter(GeoDataFrameDescriptor)

#############################################################################
# Implementation helpers


def _build_variable_descriptor_dict(variables) \
        -> Mapping[str, 'VariableDescriptor']:
    return {
        str(var_name): VariableDescriptor(
            name=str(var_name),
            dtype=str(var.dtype),
Exemple #4
0
                    getattr(self._component, 'to_dict')):
                component = self._component.to_dict()
            else:
                component = repr(self._component)
        else:
            component = '<not loaded yet>'
        d = dict(
            name=self.name,
            **self.metadata,
            point=self.point,
            component=component,
        )
        return d


register_json_formatter(Extension)


# noinspection PyShadowingBuiltins
class ExtensionRegistry:
    """
    A registry of extensions.
    Typically used by plugins to register extensions.
    """
    def __init__(self):
        self._extension_points = {}

    def has_extension(self, point: str, name: str) -> bool:
        """
        Test if an extension with given *point* and *name* is registered.