def commit(self): VersionedArtifact.commit(self) monitoring_email = self.app.config.options.get('TicketMonitoringEmail') if self.version > 1: hist = TicketHistory.query.get(artifact_id=self._id, version=self.version - 1) old = hist.data changes = [ 'Ticket %s has been modified: %s' % (self.ticket_num, self.summary), 'Edited By: %s (%s)' % (c.user.get_pref('display_name'), c.user.username) ] fields = [('Summary', old.summary, self.summary), ('Status', old.status, self.status)] if old.status != self.status and self.status in c.app.globals.set_of_closed_status_names: h.log_action(log, 'closed').info('') for key in self.custom_fields: fields.append( (key, old.custom_fields.get(key, ''), self.custom_fields[key])) for title, o, n in fields: if o != n: changes.append('%s updated: %r => %r' % (title, o, n)) o = hist.assigned_to n = self.assigned_to if o != n: changes.append('Owner updated: %r => %r' % (o and o.username, n and n.username)) self.subscribe(user=n) if old.description != self.description: changes.append('Description updated:') changes.append('\n'.join( difflib.unified_diff(a=old.description.split('\n'), b=self.description.split('\n'), fromfile='description-old', tofile='description-new'))) description = '\n'.join(changes) else: self.subscribe() if self.assigned_to_id: self.subscribe(user=User.query.get(_id=self.assigned_to_id)) description = '' subject = self.email_subject Thread(discussion_id=self.app_config.discussion_id, ref_id=self.index_id()) n = Notification.post(artifact=self, topic='metadata', text=description, subject=subject) if monitoring_email and n: n.send_simple(monitoring_email) Feed.post(self, description)
def upsert(cls, title, version=None): """Update page with `title` or insert new page with that name""" if version is None: #Check for existing page object obj = cls.query.get(app_config_id=context.app.config._id, title=title) if obj is None: obj = cls( title=title, app_config_id=context.app.config._id, ) Thread(discussion_id=obj.app_config.discussion_id, ref_id=obj.index_id()) return obj else: pg = cls.upsert(title) HC = cls.__mongometa__.history_class ss = HC.query.find({ 'artifact_id': pg._id, 'version': int(version) }).one() return ss