Source code for yapydata.datatree.synjson4627

# -*- coding: utf-8 -*-
"""The *YapyData.json4627* module provides *JSON* access in compliance to RFC-4627 [RFC4627]_.
"""

from yapydata.datatree.synjson import DataTreeJSON, YapyDataJSONError

__author__ = 'Arno-Can Uestuensoez'
__license__ = "Artistic-License-2.0 + Forced-Fairplay-Constraints"
__copyright__ = "Copyright (C) 2019 Arno-Can Uestuensoez" \
                " @Ingenieurbuero Arno-Can Uestuensoez"
__version__ = '0.1.1'
__uuid__ = "60cac28d-efe6-4a8d-802f-fa4fc94fa741"

__docformat__ = "restructuredtext en"


[docs]class YapyDataJSON4627Error(YapyDataJSONError): """Basic JSON syntax error. """ pass
[docs]class DataTreeJSON4627(DataTreeJSON): """Provides additional constraints for JSON based on RFC-4627. The main point is here probably the required *object* or *array* as the root node, while RFC-7159 permits in general values. """
[docs] @staticmethod def isvalid_top(value, **kargs): """Validate conformance of top-node to RFC-4627. """ if not isinstance(value, (dict, list,)): raise YapyDataJSON4627Error( "top 'node' must be a valid JSON-RFC-4627 type, got: " + str(type(value)) )
[docs] def __init__(self, data, **kargs): """ Args: data: Configuration data in accordance to RFC-4627:: data := <RFC-4627-type-for-json> RFC-4627-type-for-json := ( dict | list # see: object, list ) The initial data defines the permitted type of the first item within the *subpath* of the spanned data tree. Thus atomic data types define a single node data tree only - new in RFC-7159. Returns: None / initialized object Raises: YapyDataDataTreeError pass-through """ DataTreeJSON4627.isvalid_top(data) super(DataTreeJSON4627, self).__init__(data)
[docs] def __setattr__(self, name, value): """Validates types of own data attributes. Args: name: Name of the attribute. Following are reserved and treated special: * type: str - 'data' The value is treated as the replacement of the internal data attribute. Replaces or creates the complete data of teh current instance. value: The value of the attribute. This by default superposes present values by replacement. Non-present are created. Returns: Raises: YapyDataDataTreeError """ if name == 'data': # # replacement of current managed data # DataTreeJSON4627.isvalid_top(value) self.__dict__[name] = value else: # # any standard attribute with standard behavior # return object.__setattr__(self, name, value)