Add basic document snippets.

This commit is contained in:
Edward Betts 2018-05-31 14:56:32 +01:00
parent caf36174e4
commit 922af24e1b

View file

@ -230,6 +230,9 @@ class XanaDoc(Item):
id = Column(Integer, ForeignKey(Item.id), primary_key=True) id = Column(Integer, ForeignKey(Item.id), primary_key=True)
def snippet(self):
return self.text
class XanaLink(Item): class XanaLink(Item):
__tablename__ = 'xanalink' __tablename__ = 'xanalink'
__mapper_args__ = {'polymorphic_identity': 'xanalink'} __mapper_args__ = {'polymorphic_identity': 'xanalink'}
@ -274,6 +277,9 @@ class XanaLink(Item):
titles[item] = source_of_title.text[start:length + start] titles[item] = source_of_title.text[start:length + start]
return titles return titles
def snippet(self):
return self.text
class SourceDoc(Item): class SourceDoc(Item):
__tablename__ = 'sourcedoc' __tablename__ = 'sourcedoc'
__mapper_args__ = {'polymorphic_identity': 'sourcedoc'} __mapper_args__ = {'polymorphic_identity': 'sourcedoc'}
@ -290,6 +296,16 @@ 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)
def snippet(self, length=255, killwords=False, end='...', leeway=5):
s = self.text
assert length >= len(end), 'expected length >= %s, got %s' % (len(end), length)
assert leeway >= 0, 'expected leeway >= 0, got %s' % leeway
if len(s) <= length + leeway:
return s
if killwords:
return s[:length - len(end)] + end
result = s[:length - len(end)].rsplit(' ', 1)[0]
return result + end
configure_mappers() configure_mappers()