def get_resolve(self, component=str()): da_object = DAComponent(component=component) message_display_templates = d_utils.json_to_pytype( lkup.MESSAGES_LKUPS["message_templates"])["templates"] lookup_messages = d_utils.json_to_pytype( lkup.MESSAGES_LKUPS["lookup_messages"])["properties"] component_dict = dict() message_dict = dict() resolved_dict = self.publication_metadata() if resolved_dict.get("status") == "success": message_dict = message_display_templates.get("success", dict()) message_dict["text"] = lookup_messages.get( "doi_metadata_crosscheck", str()).get("text", str()) for f in da_object.get_schema().get("schema"): data_dict = resolved_dict.get("data", dict()) key = f.id.split(".")[-1] if key in data_dict: val = data_dict[key] # reconcile schema type mismatch if isinstance(val, list) and f.type == "string": val = ','.join(str(e) for e in val) # account for numbers if isinstance(val, str) and f.type == "object": object_type_control = d_utils.object_type_control_map( ).get(f.control.lower(), str()) if object_type_control == "ontology_annotation": object_schema = d_utils.get_db_json_schema( object_type_control) value_dict = dict(annotationValue=val) for k in object_schema: object_schema[k] = value_dict.get( k, d_utils.default_jsontype( object_schema.get(k, dict()).get( "type", "object"))) val = object_schema component_dict[key] = val if key not in component_dict: # set default values based on type component_dict[key] = d_utils.default_jsontype(f.type) else: error_list = resolved_dict.get("error", list()) message_dict = message_display_templates.get("danger", dict()) message_dict["text"] = '; '.join( str(e) for e in error_list) + lookup_messages.get( "doi_metadata_error", str()).get("text", str()) return dict(component_dict=component_dict, message_dict=message_dict)
def get_resolve(self, component=str()): da_object = DAComponent(component=component) message_display_templates = d_utils.json_to_pytype(lkup.MESSAGES_LKUPS["message_templates"])["templates"] lookup_messages = d_utils.json_to_pytype(lkup.MESSAGES_LKUPS["lookup_messages"])["properties"] component_dict = dict() message_dict = dict() resolved_dict = self.publication_metadata() if resolved_dict.get("status") == "success": message_dict = message_display_templates.get("success", dict()) message_dict["text"] = lookup_messages.get("doi_metadata_crosscheck", str()).get("text", str()) for f in da_object.get_schema().get("schema"): data_dict = resolved_dict.get("data", dict()) key = f.id.split(".")[-1] if key in data_dict: val = data_dict[key] # reconcile schema type mismatch if isinstance(val, list) and f.type == "string": val = ','.join(str(e) for e in val) # account for numbers if isinstance(val, str) and f.type == "object": object_type_control = d_utils.control_to_schema_name(f.control.lower()) if object_type_control == "ontology_annotation": object_schema = d_utils.get_isa_schema(object_type_control) value_dict = dict(annotationValue=val ) for k in object_schema: object_schema[k] = value_dict.get(k, d_utils.default_jsontype( object_schema.get(k, dict()).get("type", "object"))) val = object_schema component_dict[key] = val if key not in component_dict: # set default values based on type component_dict[key] = d_utils.default_jsontype(f.type) else: error_list = resolved_dict.get("error", list()) message_dict = message_display_templates.get("danger", dict()) message_dict["text"] = '; '.join( str(e) for e in error_list) + lookup_messages.get("doi_metadata_error", str()).get("text", str()) return dict(component_dict=component_dict, message_dict=message_dict )
def save_record(self, auto_fields=dict(), **kwargs): fields = dict() # set auto fields if auto_fields: fields = DecoupleFormSubmission(auto_fields, self.get_schema().get("schema")).get_schema_fields_updated() # should have target_id for updates and return empty string for inserts target_id = kwargs.pop("target_id", str()) # set system fields system_fields = dict( date_modified=data_utils.get_datetime(), deleted=data_utils.get_not_deleted_flag() ) if not target_id: system_fields["date_created"] = data_utils.get_datetime() system_fields["profile_id"] = self.profile_id # extend system fields for k, v in kwargs.items(): system_fields[k] = v # add system fields to 'fields' and set default values - insert mode only for f in self.get_schema().get("schema"): f_id = f.id.split(".")[-1] if f_id in system_fields: fields[f_id] = system_fields.get(f_id) if not target_id and f_id not in fields: fields[f_id] = data_utils.default_jsontype(f.type) # if True, then the database action (to save/update) is never performed, but validated 'fields' is returned validate_only = kwargs.pop("validate_only", False) # prefer this testto save guard against all sorts of value the 'validate_only' can assume if validate_only == True: return fields else: if target_id: self.get_collection_handle().update( {"_id": ObjectId(target_id)}, {'$set': fields}) else: doc = self.get_collection_handle().insert(fields) target_id = str(doc) # return saved record rec = self.get_record(target_id) return rec
def save_record(self, auto_fields=dict(), **kwargs): fields = dict() schema = kwargs.get("schema", list()) or self.get_component_schema() # set auto fields if auto_fields: fields = DecoupleFormSubmission( auto_fields, schema).get_schema_fields_updated_dict() # should have target_id for updates and return empty string for inserts target_id = kwargs.pop("target_id", str()) # set system fields system_fields = dict(date_modified=data_utils.get_datetime(), deleted=data_utils.get_not_deleted_flag()) if not target_id: system_fields["date_created"] = data_utils.get_datetime() system_fields["profile_id"] = self.profile_id # extend system fields for k, v in kwargs.items(): system_fields[k] = v # add system fields to 'fields' and set default values - insert mode only for f in schema: f_id = f["id"].split(".")[-1] if f_id in system_fields: fields[f_id] = system_fields.get(f_id) if not target_id and f_id not in fields: fields[f_id] = data_utils.default_jsontype(f["type"]) # if True, then the database action (to save/update) is never performed, but validated 'fields' are returned validate_only = kwargs.pop("validate_only", False) if validate_only is True: return fields else: if target_id: self.get_collection_handle().update( {"_id": ObjectId(target_id)}, {'$set': fields}) else: doc = self.get_collection_handle().insert(fields) target_id = str(doc) # return saved record rec = self.get_record(target_id) return rec
def generate_component_records(component=str(), profile_id=str()): da_object = DAComponent(component=component, profile_id=profile_id) component_records = list() for record in da_object.get_all_records(): rec_dict = dict(_id=str(record["_id"])) for f in da_object.get_schema().get("schema_dict"): if f.get("show_in_form", True): key_split = f["id"].split(".")[-1] rec_dict[key_split] = record.get(key_split, d_utils.default_jsontype(f.get("type", str()))) component_records.append(rec_dict) return component_records