コード例 #1
0
 def _create_with_audit(self, wfdocObj, docid, input_data):
     wfdoc_repo = DomainRepo("Wfdoc")
     msg = wfdoc_repo.add_list_of_domain_obj([wfdocObj])
     try:
         audit_msg = self._create_audit_record(wfdocObj, 'Create', input_data)
         msg.update({"audit_msg": audit_msg})
         if audit_msg.get('status').lower().strip() in ['failed', 'Failed', 'error']:
             raise rexc.AuditRecordCreationFailed(docid, audit_msg.get('message') )
     except (rexc.AuditRecordCreationFailed, rexc.FlexFlowException, Exception)  as e:
         status = wfdoc_repo.delete(**{"name": docid})
         #status_roll_back_holddoc = holddoc_repo.delete(**search_filter)
         rollback_msg = {"status": status, "message": str(e) }
         msg.update({"rollback_msg": rollback_msg})
         raise rexc.AuditRecordCreationFailed(docid, audit_msg.get('message'), str(e) )
     return msg
コード例 #2
0
 def _validate_editable_fields(self, wfdocObj, data:dict, new_born=False):
     if data:
         efacs_list = wfdocObj.editable_fields_at_current_status
         efacs_names = [fObj.name.lower().strip() for fObj in efacs_list]  
         for k, v in data.items():
             if k.lower().strip() not in efacs_names and new_born is False :
                     raise rexc.EditNotAllowedForThisField(k, wfdocObj.current_status, efacs_names)
             for fieldObj in efacs_list:
                 if k.lower() == fieldObj.name.lower():
                     flength = fieldObj.flength
                     if not len(str(v)) <= flength:
                         raise rexc.DataLengthViolation(k, len(v), flength)
                     ctype = fieldObj.ftype.lower()
                     utils.convert_data_values_as_per_conf(ctype, data, k, v)
     return data
コード例 #3
0
 def _create_audit_record(self, wfdocObj, intended_action, input_data:dict):
     WfdocauditObj = ent.Wfdocaudit(name=str(uuid.uuid4()), #self.wfc.request_id,
                                    wfdoc=wfdocObj, 
                                    username=self.wfc.username, 
                                    email=self.wfc.email, 
                                    time_stamp=self.wfc.time_stamp, 
                                    client_address=self.wfc.client_address, 
                                    org=self.wfc.org, 
                                    orgunit=self.wfc.orgunit, 
                                    department=self.wfc.department,                                       
                                    roles=self.wfc.roles, 
                                    action=intended_action,
                                    data=input_data)
     wfdocaudit_repo = DomainRepo('Wfdocaudit')
     msg = wfdocaudit_repo.add_list_of_domain_obj([WfdocauditObj])
     #print(msg)
     return msg
コード例 #4
0
 def _create_draft_or_roll_back(self, wfdocObj, draft_data):
     draft_create_msg = {}
     draftdataObj = ent.Draftdata(name=wfdocObj.name, drafted_by=self.wfc.email,
                                target_role = self.wfc.roles,
                                wfdoc=wfdocObj, doc_data=draft_data)
     try:
         draftdoc_repo = DomainRepo("Draftdata")
         draft_search_string = {"name": wfdocObj.name}#delete before creating
         prev_draf_cleared_status = draftdoc_repo.delete(**draft_search_string)
         status = draftdoc_repo.add_list_of_domain_obj([draftdataObj])            
         wfdoc_update_msg = self._update_wfdoc_draft_status(wfdocObj, self.wfc.roles)
         draft_create_msg.update({"draft_create_msg": status, 
                                  "wfdoc_update_msg": wfdoc_update_msg,
                                  "prev_draf_cleared_status": prev_draf_cleared_status})
     except (rexc.FlexFlowException, Exception)  as e:
         delete_stat = draftdoc_repo.delete(**{"name": wfdocObj.name})
         reset_wfdoc_stat = self._update_wfdoc_draft_status(wfdocObj)            
         draft_create_msg.update({"delete_stat": delete_stat,
                                  "reset_wfdoc_stat": reset_wfdoc_stat,
                                  "rollback_msg": str(e)})
         raise rexc.FlexFlowException
     return draft_create_msg
コード例 #5
0
 def _updadate_with_audit(self, wfdocObj, intended_action, changed_data ):
     ''' also takes care "has_draft_for_roles" role back'''
     wfdoc_repo = DomainRepo("Wfdoc")
     draftdata_repo = DomainRepo("Draftdata")
     target_doc_name = {"name": wfdocObj.name}
     msg = wfdoc_repo.update_from_dict(changed_data, **target_doc_name)
     try:
         draft_search_string = {"name": wfdocObj.name}            
         audit_msg = self._create_audit_record(wfdocObj, intended_action,  changed_data)
         draf_cleared_status = draftdata_repo.delete(**draft_search_string)
         msg.update({"audit_msg": audit_msg, "draf_cleared_status": draf_cleared_status})
         if audit_msg.get('status').lower().strip() in ['failed', 'Failed', 'error']:
             raise rexc.AuditRecordCreationFailed(target_doc_name, audit_msg.get('message') )
     except Exception as e:
         updated_data_dict = {"current_status": wfdocObj.current_status,
                              "prev_status": wfdocObj.prev_status,
                              "has_draft_for_roles": wfdocObj.has_draft_for_roles,
                              "doc_data": wfdocObj.doc_data}
         rollback_msg = wfdoc_repo.update_from_dict(updated_data_dict, **target_doc_name)
         msg.update({"rollback_msg": rollback_msg})
         raise rexc.AuditRecordCreationFailed(target_doc_name, audit_msg.get('message'), str(e) )
     return msg