def clean(self): super().clean() example_doc = {'id': '12345', 'document_number': '67890'} eval_locals = IManageConfig.prepare_eval_locals( example_doc, log=ErrorCollectingLogger()) password = self.cleaned_data.get('auth_password') if password is False and self.instance and self.instance.pk: conf = IManageConfig.objects.filter( pk=self.instance.pk).first() # type: IManageConfig if conf: self.cleaned_data['auth_password'] = conf.auth_password assignee = self.cleaned_data['assignee'] project = self.cleaned_data['project'] assignee_code = self.cleaned_data['assignee_resolving_code'] project_code = self.cleaned_data['project_resolving_code'] if project and project_code: self.add_error( 'project', 'Both project and project resolving code specified. ' 'Please use only one of the options.') if assignee and assignee_code: self.add_error( 'assignee', 'Both assignee and assignee resolving code specified.' 'Please use only one of the options.') if assignee_code: try: test_value = exec_script( 'assignee resolving on a test document', assignee_code, eval_locals) if test_value is not None and not isinstance(test_value, User): raise RuntimeError( 'Assignee resolving script must return either None or a User.' ) except RuntimeError as err: self.add_error('assignee_resolving_code', str(err).split('\n')) if project_code: try: test_value = exec_script('test project resolving', project_code, eval_locals) if not isinstance(test_value, Project): raise RuntimeError( 'Project resolving script must return either a Project.' ) except RuntimeError as err: self.add_error('project_resolving_code', str(err).split('\n'))
def resolve_assignee(self, imanage_doc_data: Dict, log: ProcessLogger) -> Optional[User]: if self.assignee: return self.assignee if not self.assignee_resolving_code: return None eval_locals = self.prepare_eval_locals(imanage_doc_data, log) assignee = exec_script('assignee by iManage doc resolution', self.assignee_resolving_code, eval_locals) return assignee
def resolve_dst_project(self, imanage_doc_data: Dict, log: ProcessLogger) -> Project: if self.project: return self.project if not self.project_resolving_code: raise RuntimeError('Unable to resolve project for iManage document. Neither project nor project ' 'resolving code are defined in iManage Config {0}'.format(self.code)) eval_locals = self.prepare_eval_locals(imanage_doc_data, log) project = exec_script('project by iManage doc resolution', self.project_resolving_code, eval_locals) return project
def clean(self): super().clean() example_doc = { 'id': '12345', 'document_number': '67890' } eval_locals = IManageConfig.prepare_eval_locals(example_doc) assignee_code = self.cleaned_data['assignee_resolving_code'] project_code = self.cleaned_data['project_resolving_code'] if assignee_code: try: test_value = exec_script('assignee resolving on a test document', assignee_code, eval_locals) if test_value is not None and not isinstance(test_value, User): raise RuntimeError('Assignee resolving script must return either None or a User.') except RuntimeError as err: self.add_error('assignee_resolving_code', str(err).split('\n')) if project_code: try: test_value = exec_script('test project resolving', project_code, eval_locals) if not isinstance(test_value, Project): raise RuntimeError('Project resolving script must return either a Project.') except RuntimeError as err: self.add_error('project_resolving_code', str(err).split('\n'))