Beispiel #1
0
    def non_test_get_ids(self):
        ids = ProjectsNameFilter.filter_objects_by_name(Project, 'lit_%')
        self.assertEqual([66, 67, 68, 71, 72], ids)

        ids = ProjectsNameFilter.filter_objects_by_name(
            Project, '"lit_%" and !"lit_selected"')
        self.assertEqual([66, 67, 71, 72], ids)
Beispiel #2
0
 def test_complex_query(self):
     query = ProjectsNameFilter.make_query(
         Project, '"test" or ("lit_%" and !"lit_unknown")')
     self.assertEqual(
         'SELECT id FROM project_project WHERE name LIKE %s or (name LIKE %s and name NOT LIKE %s);',
         query.query.sql)
     self.assertEqual(['test', 'lit_%', 'lit_unknown'], query.query.params)
    def process(self, **kwargs):
        self.set_push_steps(3)

        target = kwargs.pop('target')

        # restrict to certain project otherwise test set could be too large
        projects = kwargs.pop('project')
        project_name_filter = kwargs.pop('project_name_filter')

        project_ids = [p['pk'] for p in projects] if projects else []
        if not project_ids and project_name_filter:
            project_ids = ProjectsNameFilter.filter_objects_by_name(
                Project, project_name_filter)

        classifier_selection = kwargs.pop('classifier', None)
        classifier_id = classifier_selection[
            'pk'] if classifier_selection else None

        min_confidence = kwargs.pop('min_confidence', 80)
        unit_type = kwargs.pop('unit_type', 'sentence')

        engine_cls = ClassifyDocuments if target == 'document' else ClassifyTextUnits
        engine = engine_cls()

        self.push()  # 1

        if kwargs['delete_suggestions']:
            deleted = engine.suggestion_db_model.objects.filter(
                classifier_id=classifier_id).delete()
            self.log_info(f'Deleted "{deleted[1]}"')

        self.push()  # 2

        classifier = engine.classifier_db_model.objects.get(
            pk=classifier_id)  # type: BaseClassifier

        self.log_info(f'Run classifier "{classifier}"')
        # log info about classifier model args
        clf_model = pickle.loads(classifier.model_object)
        self.log_info('Classifier model: {}'.format(
            clf_model.get_params()['classifier']))

        count_created_suggestions = engine.run_classifier(
            classifier,
            test_project_id=project_ids,
            unit_type=unit_type,
            min_confidence=min_confidence)

        self.log_info(f'Created {count_created_suggestions} '
                      f'"{engine.suggestion_db_model.__name__}" objects')

        self.push()  # 3
Beispiel #4
0
 def test_simple_query(self):
     query = ProjectsNameFilter.make_query(Project, 'lit_%')
     self.assertEqual('SELECT id FROM project_project WHERE name LIKE %s;',
                      query.query.sql)
     self.assertEqual(['lit_%'], query.query.params)
Beispiel #5
0
 def filter_projects_by_name(self):
     project_name_filter = (self.project_name_filter or '').strip()
     if project_name_filter and not self.project_id:
         self.project_id = ProjectsNameFilter.filter_objects_by_name(
             Project, project_name_filter)
         self.project_name_filter = ''