This commit is contained in:
Edward Betts 2017-06-07 13:31:29 +01:00
parent 95c196076b
commit 511eea5bdf

View file

@ -123,21 +123,22 @@ class User(TimeStampedModel, UserMixin):
return user return user
class Item(TimeStampedModel): class Item(TimeStampedModel):
__versioned__ = {}
__tablename__ = 'item' __tablename__ = 'item'
__versioned__ = {'base_classes': (TimeStampedModel,)}
id = Column(Integer, primary_key=True) id = Column(Integer, primary_key=True)
user_id = Column(Integer, ForeignKey('user.id')) user_id = Column(Integer, ForeignKey('user.id'))
published = Column(DateTime) 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) filename = Column(Unicode)
text = Column(UnicodeText) text = Column(UnicodeText)
user = relationship('User', backref='items') user = relationship('User', backref='items')
__mapper_args__ = { __mapper_args__ = {
'polymorphic_identity': 'item',
'polymorphic_on': type, 'polymorphic_on': type,
'with_polymorphic': '*',
} }
@property @property
@ -179,11 +180,34 @@ class Item(TimeStampedModel):
def edit_url(self): def edit_url(self):
return url_for('.edit_item', username=self.user.username, hashid=self.hashid) 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): def title(self, titles=None):
if not titles: if not titles:
titles = XanaLink.get_all_titles() titles = XanaLink.get_all_titles()
return self.type + ": " + titles.get(self, self.hashid) 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 @classmethod
def from_external(cls, url): def from_external(cls, url):
home = url_for('.home', _external=True) home = url_for('.home', _external=True)
@ -200,16 +224,16 @@ class Item(TimeStampedModel):
class XanaDoc(Item): class XanaDoc(Item):
__tablename__ = 'xanadoc' __tablename__ = 'xanadoc'
id = Column(Integer, ForeignKey('item.id'), primary_key=True)
__mapper_args__ = {'polymorphic_identity': 'xanadoc'} __mapper_args__ = {'polymorphic_identity': 'xanadoc'}
id = Column(Integer, ForeignKey(Item.id), primary_key=True)
class XanaLink(Item): class XanaLink(Item):
__tablename__ = 'xanalink' __tablename__ = 'xanalink'
id = Column(Integer, ForeignKey('item.id'), primary_key=True)
__mapper_args__ = {'polymorphic_identity': 'xanalink'} __mapper_args__ = {'polymorphic_identity': 'xanalink'}
id = Column(Integer, ForeignKey(Item.id), primary_key=True)
def parse(self): def parse(self):
return parse_link(self.text) return parse_link(self.text)
@ -250,7 +274,9 @@ class XanaLink(Item):
class SourceDoc(Item): class SourceDoc(Item):
__tablename__ = 'sourcedoc' __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_price_per_character = Column(Integer)
db_document_price = Column(Integer) db_document_price = Column(Integer)
@ -262,7 +288,6 @@ class SourceDoc(Item):
def price_per_character(self): def price_per_character(self):
return self.db_price_per_character or self.db_document_price / len(self.text) return self.db_price_per_character or self.db_document_price / len(self.text)
__mapper_args__ = {'polymorphic_identity': 'sourcedoc'}
configure_mappers() configure_mappers()