From 2eabe72776e403ab8a6194fe2009844a862ae082 Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Tue, 5 Jun 2018 12:05:07 +0100 Subject: [PATCH] Refactor model URL builder. --- sourcing/model.py | 40 ++++++++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 16 deletions(-) diff --git a/sourcing/model.py b/sourcing/model.py index e2cf5fc..2033d49 100644 --- a/sourcing/model.py +++ b/sourcing/model.py @@ -35,6 +35,12 @@ reserved_name = ['root', 'admin', 'administrator', 'support', 'info', re_username = re.compile('^\w+$', re.U) re_full_name = re.compile('^([-.\'" ]|[^\W\d_])+$', re.U) +def item_url(): + return url_for('view.view_item', + username=self.user.username, + hashid=self.hashid) + + def user_exists(field, value): return session.query(exists().where(field == value)).scalar() @@ -168,36 +174,34 @@ class Item(TimeStampedModel): return return cls.query.get(item_id) - @property - def url(self): - return url_for('view.view_item', - username=self.user.username, - hashid=self.hashid) - - def version_url(self, version): - return url_for('view.view_item', + def view_url(self, endpoint, **kwargs): + return url_for('view.' + endpoint, username=self.user.username, hashid=self.hashid, - v=version) + **kwargs) + + @property + def url(self): + return self.view_url('view_item') + + def version_url(self, version): + return self.view_url('view_item', v=version) @property def history_url(self): - return url_for('view.history', username=self.user.username, hashid=self.hashid) + return self.view_url('history') @property def external_url(self): - return url_for('view.view_item', - username=self.user.username, - hashid=self.hashid, - _external=True) + return self.view_url('view_item', _external=True) @property def edit_url(self): - return url_for('view.edit_item', username=self.user.username, hashid=self.hashid) + return self.view_url('edit_item') @property def set_title_url(self): - return url_for('view.set_title', username=self.user.username, hashid=self.hashid) + return self.view_url('set_title') def title(self, titles=None): if not titles: @@ -249,6 +253,10 @@ class XanaDoc(Item): def snippet(self): return self.text + @property + def xanaedit_url(self): + return self.view_url('xanaedit') + class XanaLink(Item): __tablename__ = 'xanalink' __mapper_args__ = {'polymorphic_identity': 'xanalink'}