def save(self, *args, **kwargs): created = self.pk is None with transaction.atomic(): # set group if not already set state = { 'saved': False, } if self.group_id is None: name = self.pid def pre_save(group, obj, _state=state): obj.group_id=group.pk _state['saved'] = True self.group, _ = Group.objects.get_or_create_unique( parent=self, name=self.pid, defaults={'description': self.name}, pre_parent_save=pre_save, ) if not state['saved']: # save the object super(Project, self).save(*args, **kwargs) if created: log.add(self, 'Created') for field in self._tracker.changed(): log.change(self, 'Changed %s to %s' % (field, getattr(self, field))) # has pid changed? self._tracker.has_changed("pid") if self._tracker.has_changed("pid"): old_pid = self._tracker.previous('pid') if old_pid is not None: from karaage.datastores import machine_category_set_project_pid machine_category_set_project_pid(self, old_pid, self.pid) log.change(self, 'Renamed %s to %s' % (old_pid, self.pid)) # update the datastore from karaage.datastores import machine_category_save_project machine_category_save_project(self) # has group changed? if self._tracker.has_changed("group_id"): old_group_pk = self._tracker.previous("group_id") new_group = self.group if old_group_pk is not None: old_group = Group.objects.get(pk=old_group_pk) from karaage.datastores import remove_accounts_from_project query = Account.objects.filter(person__groups=old_group) remove_accounts_from_project(query, self) if new_group is not None: from karaage.datastores import add_accounts_to_project query = Account.objects.filter(person__groups=new_group) add_accounts_to_project(query, self)
def _add_person_to_group(person, group): """ Call datastores after adding a person to a group. """ from karaage.datastores import add_accounts_to_group from karaage.datastores import add_accounts_to_project from karaage.datastores import add_accounts_to_institute a_list = person.account_set add_accounts_to_group(a_list, group) for project in group.project_set.all(): add_accounts_to_project(a_list, project) for institute in group.institute_set.all(): add_accounts_to_institute(a_list, institute)
def save(self, *args, **kwargs): created = self.pk is None # set group if not already set if self.group_id is None: name = self.pid self.group, _ = Group.objects.get_or_create(name=name) # save the object super(Project, self).save(*args, **kwargs) if created: log.add(self, 'Created') for field in self._tracker.changed(): log.change(self, 'Changed %s to %s' % (field, getattr(self, field))) # has pid changed? self._tracker.has_changed("pid") if self._tracker.has_changed("pid"): old_pid = self._tracker.previous('pid') if old_pid is not None: from karaage.datastores import set_project_pid set_project_pid(self, old_pid, self.pid) log.change(self, 'Renamed %s to %s' % (old_pid, self.pid)) # update the datastore from karaage.datastores import save_project save_project(self) # has group changed? if self._tracker.has_changed("group_id"): old_group_pk = self._tracker.previous("group_id") new_group = self.group if old_group_pk is not None: old_group = Group.objects.get(pk=old_group_pk) from karaage.datastores import remove_accounts_from_project query = Account.objects.filter(person__groups=old_group) remove_accounts_from_project(query, self) if new_group is not None: from karaage.datastores import add_accounts_to_project query = Account.objects.filter(person__groups=new_group) add_accounts_to_project(query, self)
def save(self, *args, **kwargs): created = self.pk is None super(ProjectQuota, self).save(*args, **kwargs) if created: log.add( self.project, 'Quota %s: Created' % self.machine_category) for field in self._tracker.changed(): log.change( self.project, 'Quota %s: Changed %s to %s' % (self.machine_category, field, getattr(self, field))) from karaage.datastores import machine_category_save_project machine_category_save_project(self.project) if created: from karaage.datastores import add_accounts_to_project query = Account.objects.filter(person__groups=self.project.group) add_accounts_to_project(query, self.project)