def update_created_annotations_and_labels(self, annotations): created_annotations = dict(self.created_annotations) labels = dict(self.created_labels) for annotation in annotations: results = get_attr_or_item(annotation, 'result') or [] for result in results: # aggregate annotation types key = self._get_annotation_key(result) if not key: continue created_annotations[key] = created_annotations.get(key, 0) + 1 from_name = result['from_name'] # aggregate labels if from_name not in self.created_labels: labels[from_name] = dict() for label in self._get_labels(result): labels[from_name][label] = labels[from_name].get(label, 0) + 1 self.created_annotations = created_annotations self.created_labels = labels self.save()
def remove_created_annotations_and_labels(self, annotations): created_annotations = dict(self.created_annotations) labels = dict(self.created_labels) for annotation in annotations: for result in get_attr_or_item(annotation, 'result'): # reduce annotation counters key = self._get_annotation_key(result) if key in created_annotations: created_annotations[key] -= 1 if created_annotations[key] == 0: created_annotations.pop(key) # reduce labels counters from_name = result['from_name'] if from_name not in labels: continue for label in self._get_labels(result): if label in labels[from_name]: labels[from_name][label] -= 1 if labels[from_name][label] == 0: labels[from_name].pop(label) if not labels[from_name]: labels.pop(from_name) self.created_annotations = created_annotations self.created_labels = labels self.save()
def remove_created_annotations_and_labels(self, annotations): created_annotations = dict(self.created_annotations) labels = dict(self.created_labels) for annotation in annotations: results = get_attr_or_item(annotation, 'result') or [] if not isinstance(results, list): continue for result in results: # reduce annotation counters key = self._get_annotation_key(result) if key in created_annotations: created_annotations[key] -= 1 if created_annotations[key] == 0: created_annotations.pop(key) # reduce labels counters from_name = result.get('from_name', None) if from_name not in labels: continue for label in self._get_labels(result): label = str(label) if label in labels[from_name]: labels[from_name][label] -= 1 if labels[from_name][label] == 0: labels[from_name].pop(label) if not labels[from_name]: labels.pop(from_name) logger.debug(f'summary.created_annotations = {created_annotations}') logger.debug(f'summary.created_labels = {labels}') self.created_annotations = created_annotations self.created_labels = labels self.save(update_fields=['created_annotations', 'created_labels'])
def update_created_annotations_and_labels(self, annotations): created_annotations = dict(self.created_annotations) labels = dict(self.created_labels) for annotation in annotations: results = get_attr_or_item(annotation, 'result') or [] if not isinstance(results, list): continue for result in results: # aggregate annotation types key = self._get_annotation_key(result) if not key: continue created_annotations[key] = created_annotations.get(key, 0) + 1 from_name = result['from_name'] # aggregate labels if from_name not in self.created_labels: labels[from_name] = dict() for label in self._get_labels(result): labels[from_name][label] = labels[from_name].get(label, 0) + 1 logger.debug(f'summary.created_annotations = {created_annotations}') logger.debug(f'summary.created_labels = {labels}') self.created_annotations = created_annotations self.created_labels = labels self.save(update_fields=['created_annotations', 'created_labels'])
def update_data_columns(self, tasks): common_data_columns = set() all_data_columns = dict(self.all_data_columns) for task in tasks: try: task_data = get_attr_or_item(task, 'data') except KeyError: task_data = task task_data_keys = task_data.keys() for column in task_data_keys: all_data_columns[column] = all_data_columns.get(column, 0) + 1 if not common_data_columns: common_data_columns = set(task_data_keys) else: common_data_columns &= set(task_data_keys) self.all_data_columns = all_data_columns if not self.common_data_columns: self.common_data_columns = list(sorted(common_data_columns)) else: self.common_data_columns = list( sorted(set(self.common_data_columns) & common_data_columns)) logger.debug(f'summary.all_data_columns = {self.all_data_columns}') logger.debug( f'summary.common_data_columns = {self.common_data_columns}') self.save()
def remove_data_columns(self, tasks): all_data_columns = dict(self.all_data_columns) keys_to_remove = [] for task in tasks: task_data = get_attr_or_item(task, 'data') for key in task_data.keys(): if key in all_data_columns: all_data_columns[key] -= 1 if all_data_columns[key] == 0: keys_to_remove.append(key) all_data_columns.pop(key) self.all_data_columns = all_data_columns if keys_to_remove: common_data_columns = list(self.common_data_columns) for key in keys_to_remove: if key in common_data_columns: common_data_columns.remove(key) self.common_data_columns = common_data_columns self.save()
def remove_data_columns(self, tasks): all_data_columns = dict(self.all_data_columns) keys_to_remove = [] for task in tasks: task_data = get_attr_or_item(task, 'data') for key in task_data.keys(): if key in all_data_columns: all_data_columns[key] -= 1 if all_data_columns[key] == 0: keys_to_remove.append(key) all_data_columns.pop(key) self.all_data_columns = all_data_columns if keys_to_remove: common_data_columns = list(self.common_data_columns) for key in keys_to_remove: if key in common_data_columns: common_data_columns.remove(key) self.common_data_columns = common_data_columns logger.debug(f'summary.all_data_columns = {self.all_data_columns}') logger.debug(f'summary.common_data_columns = {self.common_data_columns}') self.save(update_fields=['all_data_columns', 'common_data_columns', ])