def check_model_fields(model): """Checks the model structure to see whether it contains the required fields information """ inner_key = FIELDS_PARENT.get(get_resource_type(model), 'model') if check_model_structure(model, inner_key): model = model.get('object', model) fields = model.get("fields", model.get(inner_key, {}).get('fields')) input_fields = model.get("input_fields") # models only need model_fields to work. The rest of resources will # need all fields to work model_fields = model.get(inner_key, {}).get( \ 'model_fields', {}).keys() # fusions don't have input fields if input_fields is None and inner_key != "fusion": return False if not model_fields: fields_meta = model.get('fields_meta', \ model.get(inner_key, {}).get('fields_meta', {})) try: return fields_meta['count'] == fields_meta['total'] except KeyError: # stored old models will not have the fields_meta info, so # we return True to avoid failing in this case return True else: if fields is None: return False return all([field_id in fields.keys() \ for field_id in model_fields]) return False
def check_model_structure(model, inner_key=None): """Checks the model structure to see if it contains all the main expected keys """ if inner_key is None: inner_key = FIELDS_PARENT.get(get_resource_type(model), 'model') return (isinstance(model, dict) and 'resource' in model and model['resource'] is not None and (('object' in model and inner_key in model['object']) or inner_key in model))