From 511eea5bdfdabdeb1dc61ee9588995b015bc63b1 Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Wed, 7 Jun 2017 13:31:29 +0100 Subject: [PATCH] refactor --- sourcing/model.py | 43 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/sourcing/model.py b/sourcing/model.py index 8ff3ec4..8c55023 100644 --- a/sourcing/model.py +++ b/sourcing/model.py @@ -123,21 +123,22 @@ class User(TimeStampedModel, UserMixin): return user class Item(TimeStampedModel): - __versioned__ = {} __tablename__ = 'item' + __versioned__ = {'base_classes': (TimeStampedModel,)} id = Column(Integer, primary_key=True) user_id = Column(Integer, ForeignKey('user.id')) published = Column(DateTime) - type = Column(Enum('sourcedoc', 'xanadoc', 'xanalink', name='item_type'), nullable=False) + type = Column(Enum('sourcedoc', 'xanadoc', 'xanalink', name='item_type'), + nullable=False) filename = Column(Unicode) text = Column(UnicodeText) user = relationship('User', backref='items') __mapper_args__ = { - 'polymorphic_identity': 'item', 'polymorphic_on': type, + 'with_polymorphic': '*', } @property @@ -179,11 +180,34 @@ class Item(TimeStampedModel): def edit_url(self): return url_for('.edit_item', username=self.user.username, hashid=self.hashid) + @property + def add_title_url(self): + return url_for('.add_title', username=self.user.username, hashid=self.hashid) + def title(self, titles=None): if not titles: titles = XanaLink.get_all_titles() return self.type + ": " + titles.get(self, self.hashid) + def has_title(self): + titles = XanaLink.get_all_titles() + print(titles) + return self in titles + + def add_title(self, title, user): + title_source_doc = SourceDoc(text=title, user=user) + session.add(title_source_doc) + session.commit() + link_text = '''type=title + +facet= +sourcedoc: {} +facet= +span: {},start=0,length={}'''.format(self.external_url, title_source_doc.external_url, len(title)) + title_link = XanaLink(text=link_text, user=user) + session.add(title_link) + session.commit() + @classmethod def from_external(cls, url): home = url_for('.home', _external=True) @@ -200,16 +224,16 @@ class Item(TimeStampedModel): class XanaDoc(Item): __tablename__ = 'xanadoc' - id = Column(Integer, ForeignKey('item.id'), primary_key=True) - __mapper_args__ = {'polymorphic_identity': 'xanadoc'} + id = Column(Integer, ForeignKey(Item.id), primary_key=True) + class XanaLink(Item): __tablename__ = 'xanalink' - id = Column(Integer, ForeignKey('item.id'), primary_key=True) - __mapper_args__ = {'polymorphic_identity': 'xanalink'} + id = Column(Integer, ForeignKey(Item.id), primary_key=True) + def parse(self): return parse_link(self.text) @@ -250,7 +274,9 @@ class XanaLink(Item): class SourceDoc(Item): __tablename__ = 'sourcedoc' - id = Column(Integer, ForeignKey('item.id'), primary_key=True) + __mapper_args__ = {'polymorphic_identity': 'sourcedoc'} + + id = Column(Integer, ForeignKey(Item.id), primary_key=True) db_price_per_character = Column(Integer) db_document_price = Column(Integer) @@ -262,7 +288,6 @@ class SourceDoc(Item): def price_per_character(self): return self.db_price_per_character or self.db_document_price / len(self.text) - __mapper_args__ = {'polymorphic_identity': 'sourcedoc'} configure_mappers()