Esempio n. 1
0
    def _prep_object(self, obj):
        obj = self._normalize_keys(obj)
        schema = self.schema
        if not schema:
            # build schema off normalized key version
            _obj = self._normalize_keys(obj)
            # cache a key map from old key->normalized keys
            self._key_map = {k: self._normalize_key(k) for k in obj.iterkeys()}
            # in the case we don't have a schema already defined, we need to
            # build on now; all objects are assumed to have the SAME SCHEMA!
            schema = autoschema([_obj], exclude_keys=self.RESTRICTED_KEYS)
            self.config['schema'] = schema

        # optimization; lookup in local scope
        kmap = self._key_map or {}
        for key, value in obj.items():
            # map original key to normalized key, if normal map exists
            _key = kmap.get(key) or key
            _schema = schema.get(_key) or {}
            try:
                value = self._prep_value(value, schema=_schema)
            except Exception as e:
                # make sure the value contents are loggable
                _value = to_encoding(value)
                obj.setdefault('_e', {})
                msg = 'prep(key=%s, value=%s) failed: %s' % (_key, _value, e)
                logger.error(msg)
                # set error field with original values
                obj['_e'].update({_key: value})

                # FIXME: should we leave original as-is? if not of correct
                # type, etc, this might cause problems

                # normalize invalid value to None
                value = None
            obj[key] = value
            variants = self._add_variants(_key, value, _schema)
            obj.update(variants)
        obj['_v'] = self.version
        obj = self._object_cls(**obj)
        return obj
Esempio n. 2
0
    def _prep_object(self, obj):
        obj = self._normalize_keys(obj)
        schema = self.schema
        if not schema:
            # build schema off normalized key version
            _obj = self._normalize_keys(obj)
            # cache a key map from old key->normalized keys
            self._key_map = {k: self._normalize_key(k) for k in obj.iterkeys()}
            # in the case we don't have a schema already defined, we need to
            # build on now; all objects are assumed to have the SAME SCHEMA!
            schema = autoschema([_obj], exclude_keys=self.RESTRICTED_KEYS)
            self.config['schema'] = schema

        # optimization; lookup in local scope
        kmap = self._key_map or {}
        for key, value in obj.items():
            # map original key to normalized key, if normal map exists
            _key = kmap.get(key) or key
            _schema = schema.get(_key) or {}
            try:
                value = self._prep_value(value, schema=_schema)
            except Exception as e:
                # make sure the value contents are loggable
                _value = to_encoding(value)
                obj.setdefault('_e', {})
                msg = 'prep(key=%s, value=%s) failed: %s' % (_key, _value, e)
                logger.error(msg)
                # set error field with original values
                obj['_e'].update({_key: value})

                # FIXME: should we leave original as-is? if not of correct
                # type, etc, this might cause problems

                # normalize invalid value to None
                value = None
            obj[key] = value
            variants = self._add_variants(_key, value, _schema)
            obj.update(variants)
        obj['_v'] = self.version
        obj = self._object_cls(**obj)
        return obj
Esempio n. 3
0
 def autoschema(self, objects, **kwargs):
     ''' wrapper around utils.autoschema function '''
     return autoschema(objects=objects,
                       exclude_keys=self.RESTRICTED_KEYS,
                       **kwargs)
Esempio n. 4
0
 def autoschema(self, objects, **kwargs):
     ''' wrapper around utils.autoschema function '''
     return autoschema(objects=objects, exclude_keys=self.RESTRICTED_KEYS,
                       **kwargs)