Ejemplo n.º 1
0
    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'))
Ejemplo n.º 2
0
    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
Ejemplo n.º 3
0
    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
Ejemplo n.º 4
0
    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'))