def __init__(self, *args, **kwargs): super(Project, self).__init__(*args, **kwargs) self.__original_label_config = self.label_config self.__maximum_annotations = self.maximum_annotations self.__overlap_cohort_percentage = self.overlap_cohort_percentage # TODO: once bugfix with incorrect data types in List # logging.warning('! Please, remove code below after patching of all projects (extract_data_types)') if self.label_config is not None: if self.data_types != extract_data_types(self.label_config): self.data_types = extract_data_types(self.label_config)
def save(self, *args, recalc=True, **kwargs): exists = True if self.pk else False if self.label_config and (self._label_config_has_changed() or not exists or not self.control_weights): self.control_weights = self.get_updated_weights() super(Project, self).save(*args, **kwargs) project_with_config_just_created = not exists and self.pk and self.label_config if self._label_config_has_changed( ) or project_with_config_just_created: self.data_types = extract_data_types(self.label_config) if self._label_config_has_changed(): self.__original_label_config = self.label_config if not exists: steps = ProjectOnboardingSteps.objects.all() objs = [ ProjectOnboarding(project=self, step=step) for step in steps ] ProjectOnboarding.objects.bulk_create(objs) # argument for recalculate project task stats if recalc: self.update_tasks_states( maximum_annotations_changed=self.__maximum_annotations != self.maximum_annotations, overlap_cohort_percentage_changed=self. __overlap_cohort_percentage != self.overlap_cohort_percentage, tasks_number_changed=False) self.__maximum_annotations = self.maximum_annotations self.__overlap_cohort_percentage = self.overlap_cohort_percentage
def save(self, *args, recalc=True, **kwargs): exists = True if self.pk else False project_with_config_just_created = not exists and self.label_config if self._label_config_has_changed() or project_with_config_just_created: self.data_types = extract_data_types(self.label_config) self.parsed_label_config = parse_config(self.label_config) if self.label_config and (self._label_config_has_changed() or not exists or not self.control_weights): self.control_weights = self.get_updated_weights() if self._label_config_has_changed(): self.__original_label_config = self.label_config super(Project, self).save(*args, **kwargs) if not exists: steps = ProjectOnboardingSteps.objects.all() objs = [ProjectOnboarding(project=self, step=step) for step in steps] ProjectOnboarding.objects.bulk_create(objs) # argument for recalculate project task stats if recalc: self.update_tasks_states( maximum_annotations_changed=self.__maximum_annotations != self.maximum_annotations, overlap_cohort_percentage_changed=self.__overlap_cohort_percentage != self.overlap_cohort_percentage, tasks_number_changed=False, ) self.__maximum_annotations = self.maximum_annotations self.__overlap_cohort_percentage = self.overlap_cohort_percentage if self.__skip_queue != self.skip_queue: bulk_update_stats_project_tasks( self.tasks.filter(Q(annotations__isnull=False) & Q(annotations__ground_truth=False)) ) if hasattr(self, 'summary'): # Ensure project.summary is consistent with current tasks / annotations if self.num_tasks == 0: self.summary.reset() elif self.num_annotations == 0: self.summary.reset(tasks_data_based=False)