From 922af24e1b6b4d15a21fb99eb903da7acc1124ba Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Thu, 31 May 2018 14:56:32 +0100 Subject: [PATCH] Add basic document snippets. --- sourcing/model.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/sourcing/model.py b/sourcing/model.py index 1fd1759..fa46023 100644 --- a/sourcing/model.py +++ b/sourcing/model.py @@ -230,6 +230,9 @@ class XanaDoc(Item): id = Column(Integer, ForeignKey(Item.id), primary_key=True) + def snippet(self): + return self.text + class XanaLink(Item): __tablename__ = 'xanalink' __mapper_args__ = {'polymorphic_identity': 'xanalink'} @@ -274,6 +277,9 @@ class XanaLink(Item): titles[item] = source_of_title.text[start:length + start] return titles + def snippet(self): + return self.text + class SourceDoc(Item): __tablename__ = 'sourcedoc' __mapper_args__ = {'polymorphic_identity': 'sourcedoc'} @@ -290,6 +296,16 @@ class SourceDoc(Item): def price_per_character(self): 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()