def update(self, event, revisions, _filter=None): """Update parent object's snapshots.""" _, for_update = self.analyze() result = self._update(for_update=for_update, event=event, revisions=revisions, _filter=_filter) updated = result.response if not self.dry_run: indexer.reindex_pairs_bg(updated) self._copy_snapshot_relationships() self._create_audit_relationships() return result
def create(self, event, revisions, _filter=None): """Create snapshots of parent object's neighborhood per provided rules and split in chuncks if there are too many snapshottable objects.""" for_create, _ = self.analyze() result = self._create( for_create=for_create, event=event, revisions=revisions, _filter=_filter) created = result.response if not self.dry_run: indexer.reindex_pairs_bg(created) self._copy_snapshot_relationships() self._create_audit_relationships() return result
def _upsert(self, event, revisions, _filter): """Update and (if needed) create snapshots Args: event: A ggrc.models.Event instance revisions: A set of tuples of pairs with revisions to which it should either create or update a snapshot of that particular audit _filter: Callable that should return True if it should be updated Returns: OperationResponse """ for_create, for_update = self.analyze() create, update = None, None created, updated = set(), set() if for_update: update = self._update(for_update=for_update, event=event, revisions=revisions, _filter=_filter) updated = update.response if for_create: create = self._create(for_create=for_create, event=event, revisions=revisions, _filter=_filter) created = create.response to_reindex = updated | created if not self.dry_run: indexer.reindex_pairs_bg(to_reindex) self._remove_lost_snapshot_mappings() self._copy_snapshot_relationships() self._create_audit_relationships() return OperationResponse("upsert", True, { "create": create, "update": update }, {"dry-run": self.dry_run})