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)
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
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)
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 = ''