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))
def get_fields(resource): """Returns the field information in a resource dictionary structure """ try: resource_type = get_resource_type(resource) except ValueError: raise ValueError("Unknown resource structure. Failed to find" " a valid resource dictionary as argument.") if resource_type in RESOURCES_WITH_FIELDS: resource = resource.get('object', resource) # fields structure if resource_type in list(FIELDS_PARENT.keys()): fields = resource[FIELDS_PARENT[resource_type]].get('fields', {}) else: fields = resource.get('fields', {}) if resource_type == SAMPLE_PATH: fields = dict([(field['id'], field) for field in fields]) return fields