def _validate_id_obj_list_by_schema(self, id_obj_list, vc, group_by_warning=False): element_type = vc.curr_element_type assert element_type is not None schema = vc.schema anc_list = vc.anc_list #_LOG.debug('using schema type = ' + vc.schema_name()) using_hbf_meta = vc._using_hbf_meta #pylint: disable=W0212 _by_warn_type = {} for obj_nex_id, obj in id_obj_list: wrong_type = [] unrec_meta_keys = [] unrec_non_meta_keys = [] if using_hbf_meta: for k, v in obj.items(): is_meta = k[0] == '^' if k not in schema.ALLOWED_KEY_SET: if is_meta: unrec_meta_keys.append(k) else: unrec_non_meta_keys.append(k) else: correct_type, info = schema.K2VT[k](v, obj, k, vc) if not correct_type: wrong_type.append((k, v, info)) else: for k, v in obj.items(): if k not in schema.ALLOWED_KEY_SET: unrec_non_meta_keys.append(k) else: correct_type, info = schema.K2VT[k](v, obj, k, vc) if not correct_type: wrong_type.append((k, v, info)) m = self._get_list_key(obj, 'meta', vc) if m: # might want a flag of meta? md = self._bf_meta_list_to_dict(m, obj, vc) #_LOG.debug('md = ' + str(md)) mrmk = [ i for i in schema.REQUIRED_META_KEY_SET if i not in md ] memk = [ i for i in schema.EXPECTED_META_KEY_SET if i not in md ] if memk: if group_by_warning: memk.sort() foks = frozenset(memk) t = _by_warn_type.setdefault(foks, [[], []]) t[0].append(obj) t[1].append(obj_nex_id) else: self._warn_event( element_type, obj=obj, err_type=gen_MissingOptionalKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=memk) if mrmk: self._error_event( element_type, obj=obj, err_type=gen_MissingMandatoryKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=mrmk) msgf = 'missing mandatory meta key(s) according to {s} schema' msg = msgf.format(s=vc.schema_name()) return errorReturn(msg) for k, v in md.items(): if k not in schema.ALLOWED_META_KEY_SET: unrec_meta_keys.append(k) else: #_LOG.debug('{k} --> "{v}"'.format(k=k, v=repr(v))) correct_type, info = schema.K2VT[k](v, obj, k, vc) if not correct_type: v = extract_meta(v) wrong_type.append((k, v, info)) if wrong_type: self._error_event(element_type, obj=obj, err_type=gen_WrongValueTypeWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_val_type_list=wrong_type) return errorReturn( 'wrong value type according to {s} schema'.format( s=vc.schema_name())) if unrec_non_meta_keys: self._warn_event(element_type, obj=obj, err_type=gen_UnrecognizedKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=unrec_non_meta_keys) if unrec_meta_keys: # might want a flag of meta? self._warn_event(element_type, obj=obj, err_type=gen_UnrecognizedKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=unrec_meta_keys) off_key = [k for k in schema.EXPECETED_KEY_SET if k not in obj] if off_key: if group_by_warning: off_key.sort() foks = frozenset(off_key) t = _by_warn_type.setdefault(foks, [[], []]) t[0].append(obj) t[1].append(obj_nex_id) else: self._warn_event(element_type, obj=obj, err_type=gen_MissingOptionalKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=off_key) off_key = [k for k in schema.REQUIRED_KEY_SET if k not in obj] if off_key: self._error_event(element_type, obj=obj, err_type=gen_MissingMandatoryKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=off_key) return errorReturn( 'missing key(s) according to {s} schema'.format( s=vc.schema_name())) if _by_warn_type: for ks, obj_lists in _by_warn_type.items(): mlist = list(ks) mlist.sort() id_arg = obj_lists[1] if len(id_arg) == 1: id_arg = id_arg[0] obj_arg = obj_lists[0] if len(obj_arg) == 1: obj_arg = obj_arg[0] self._warn_event(element_type, obj=obj_arg, err_type=gen_MissingOptionalKeyWarning, anc=anc_list, obj_nex_id=id_arg, key_list=mlist) return True
def check_obj_meta_str_list(x, obj, k, vc): mo = extract_meta(x) _check_id(x, obj, k, vc) return check_raw_str_list(mo, obj, k, vc)
def check_obj_meta_bool(x, obj, k, vc): mo = extract_meta(x) _check_id(x, obj, k, vc) return check_raw_bool(mo, obj, k, vc)
def check_obj_meta_float(x, obj, k, vc): mo = extract_meta(x) _check_id(x, obj, k, vc) return check_raw_float(mo, obj, k, vc)
def _validate_id_obj_list_by_schema(self, id_obj_list, vc, group_by_warning=False): element_type = vc.curr_element_type assert element_type is not None schema = vc.schema anc_list = vc.anc_list # _LOG.debug('using schema type = ' + vc.schema_name()) using_hbf_meta = vc._using_hbf_meta # pylint: disable=W0212 _by_warn_type = {} for obj_nex_id, obj in id_obj_list: wrong_type = [] unrec_meta_keys = [] unrec_non_meta_keys = [] if using_hbf_meta: for k, v in obj.items(): is_meta = k[0] == '^' if k not in schema.ALLOWED_KEY_SET: if is_meta: unrec_meta_keys.append(k) else: unrec_non_meta_keys.append(k) else: correct_type, info = schema.K2VT[k](v, obj, k, vc) if not correct_type: wrong_type.append((k, v, info)) else: for k, v in obj.items(): if k not in schema.ALLOWED_KEY_SET: unrec_non_meta_keys.append(k) else: correct_type, info = schema.K2VT[k](v, obj, k, vc) if not correct_type: wrong_type.append((k, v, info)) m = self._get_list_key(obj, 'meta', vc) if m: # might want a flag of meta? md = self._bf_meta_list_to_dict(m, obj, vc) # _LOG.debug('md = ' + str(md)) mrmk = [i for i in schema.REQUIRED_META_KEY_SET if i not in md] memk = [i for i in schema.EXPECTED_META_KEY_SET if i not in md] if memk: if group_by_warning: memk.sort() foks = frozenset(memk) t = _by_warn_type.setdefault(foks, [[], []]) t[0].append(obj) t[1].append(obj_nex_id) else: self._warn_event(element_type, obj=obj, err_type=gen_MissingOptionalKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=memk) if mrmk: self._error_event(element_type, obj=obj, err_type=gen_MissingMandatoryKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=mrmk) msgf = 'missing mandatory meta key(s) according to {s} schema' msg = msgf.format(s=vc.schema_name()) return errorReturn(msg) for k, v in md.items(): if k not in schema.ALLOWED_META_KEY_SET: unrec_meta_keys.append(k) else: # _LOG.debug('{k} --> "{v}"'.format(k=k, v=repr(v))) correct_type, info = schema.K2VT[k](v, obj, k, vc) if not correct_type: v = extract_meta(v) wrong_type.append((k, v, info)) if wrong_type: self._error_event(element_type, obj=obj, err_type=gen_WrongValueTypeWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_val_type_list=wrong_type) return errorReturn('wrong value type according to {s} schema'.format(s=vc.schema_name())) if unrec_non_meta_keys: self._warn_event(element_type, obj=obj, err_type=gen_UnrecognizedKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=unrec_non_meta_keys) if unrec_meta_keys: # might want a flag of meta? self._warn_event(element_type, obj=obj, err_type=gen_UnrecognizedKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=unrec_meta_keys) off_key = [k for k in schema.EXPECETED_KEY_SET if k not in obj] if off_key: if group_by_warning: off_key.sort() foks = frozenset(off_key) t = _by_warn_type.setdefault(foks, [[], []]) t[0].append(obj) t[1].append(obj_nex_id) else: self._warn_event(element_type, obj=obj, err_type=gen_MissingOptionalKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=off_key) off_key = [k for k in schema.REQUIRED_KEY_SET if k not in obj] if off_key: self._error_event(element_type, obj=obj, err_type=gen_MissingMandatoryKeyWarning, anc=anc_list, obj_nex_id=obj_nex_id, key_list=off_key) return errorReturn('missing key(s) according to {s} schema'.format(s=vc.schema_name())) if _by_warn_type: for ks, obj_lists in _by_warn_type.items(): mlist = list(ks) mlist.sort() id_arg = obj_lists[1] if len(id_arg) == 1: id_arg = id_arg[0] obj_arg = obj_lists[0] if len(obj_arg) == 1: obj_arg = obj_arg[0] self._warn_event(element_type, obj=obj_arg, err_type=gen_MissingOptionalKeyWarning, anc=anc_list, obj_nex_id=id_arg, key_list=mlist) return True