Exemple #1
0
def test_coerce(nested_approx):
    r"""Test serialization of coerced types."""
    from yggdrasil.metaschema.datatypes.JSONObjectMetaschemaType import (
        JSONObjectMetaschemaType)
    from yggdrasil import serialize
    typedef = {
        'type': 'object',
        'properties': {
            'a': {
                'type': '1darray',
                'subtype': 'float',
                'title': 'a',
                'precision': 64
            }
        }
    }
    x = JSONObjectMetaschemaType(**typedef)
    key_order = ['a']
    msg_recv = {'a': np.zeros(3, 'float64')}
    msg_send_list = [{
        'a': np.zeros(3, 'float32')
    },
                     serialize.dict2numpy(msg_recv, order=key_order),
                     serialize.dict2pandas(msg_recv, order=key_order),
                     serialize.dict2list(msg_recv, order=key_order)]

    def do_send_recv(msg_send):
        msg_seri = x.serialize(msg_send, tyepdef=typedef, key_order=key_order)
        assert (x.deserialize(msg_seri)[0] == nested_approx(msg_recv))

    for y in msg_send_list:
        do_send_recv(y)
Exemple #2
0
def test_coerce():
    r"""Test serialization of coerced types."""
    typedef = {
        'type': 'object',
        'properties': {
            'a': {
                'type': '1darray',
                'subtype': 'float',
                'title': 'a',
                'precision': 64
            }
        }
    }
    x = JSONObjectMetaschemaType(**typedef)
    key_order = ['a']
    msg_recv = {'a': np.zeros(3, 'float64')}
    msg_send_list = [
        serialize.dict2numpy(msg_recv, order=key_order),
        serialize.dict2pandas(msg_recv, order=key_order),
        serialize.dict2list(msg_recv, order=key_order)
    ]

    def do_send_recv(msg_send):
        msg_seri = x.serialize(msg_send, tyepdef=typedef, key_order=key_order)
        assert_equal(x.deserialize(msg_seri)[0], msg_recv)

    for y in msg_send_list:
        do_send_recv(y)
Exemple #3
0
    def encode_data(cls, obj, typedef):
        r"""Encode an object's data.

        Args:
            obj (object): Object to encode.
            typedef (dict): Type definition that should be used to encode the
                object.

        Returns:
            string: Encoded object.

        """
        args = ArgsMetaschemaProperty.instance2args(obj)
        kwargs = KwargsMetaschemaProperty.instance2kwargs(obj)
        typedef_args = None
        typedef_kwargs = None
        if isinstance(typedef, dict):
            if 'args' in typedef:
                typedef_args = {'items': typedef['args']}
            if 'kwargs' in typedef:
                typedef_kwargs = {'properties': typedef['kwargs']}
        out = [
            JSONArrayMetaschemaType.encode_data(args, typedef_args),
            JSONObjectMetaschemaType.encode_data(kwargs, typedef_kwargs)
        ]
        return out
Exemple #4
0
    def decode_data(cls, obj, typedef):
        r"""Decode an object.

        Args:
            obj (string): Encoded object to decode.
            typedef (dict): Type definition that should be used to decode the
                object.

        Returns:
            object: Decoded object.

        """
        # TODO: Normalization can be removed if metadata is normalized
        typedef = cls.normalize_definition(typedef)
        args = JSONObjectMetaschemaType.decode_data(
            obj, {'properties': typedef.get('args', {})})
        return typedef['class'](**args)
Exemple #5
0
    def encode_data(cls, obj, typedef):
        r"""Encode an object's data.

        Args:
            obj (object): Object to encode.
            typedef (dict): Type definition that should be used to encode the
                object.

        Returns:
            string: Encoded object.

        """
        args = ArgsMetaschemaProperty.instance2args(obj)
        if isinstance(typedef, dict) and ('args' in typedef):
            typedef_args = {'properties': typedef['args']}
        else:
            typedef_args = None
        return JSONObjectMetaschemaType.encode_data(args, typedef_args)
Exemple #6
0
    def decode_data(cls, obj, typedef):
        r"""Decode an object.

        Args:
            obj (string): Encoded object to decode.
            typedef (dict): Type definition that should be used to decode the
                object.

        Returns:
            object: Decoded object.

        """
        # TODO: Normalization can be removed if metadata is normalized
        typedef = cls.normalize_definition(typedef)
        assert (isinstance(obj, list))
        assert (len(obj) == 2)
        args = JSONArrayMetaschemaType.decode_data(
            obj[0], {'items': typedef.get('args', [])})
        kwargs = JSONObjectMetaschemaType.decode_data(
            obj[1], {'properties': typedef.get('kwargs', {})})
        return typedef['class'](*args, **kwargs)
Exemple #7
0
    def _generate_data(cls, typedef):
        r"""Generate mock data for the specified type.

        Args:
            typedef (dict): Type definition.

        Returns:
            object: Python object of the specified type.

        """
        args = JSONArrayMetaschemaType.generate_data({
            'type':
            'array',
            'items':
            typedef.get('args', [])
        })
        kwargs = JSONObjectMetaschemaType.generate_data({
            'type':
            'object',
            'properties':
            typedef.get('kwargs', {})
        })
        return typedef['class'](*args, **kwargs)