Use first line of sourcedoc as title

This commit is contained in:
Edward Betts 2018-08-20 13:33:18 +01:00
parent ea1fa43d5b
commit 12f36e938d
3 changed files with 44 additions and 6 deletions

View file

@ -1,6 +1,7 @@
from flask import url_for
from .database import session
from .parse import parse_link, parse_sourcedoc_facet, parse_span
from .text import first_non_empty_line
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, ForeignKey
from sqlalchemy.types import String, Unicode, Integer, DateTime, Boolean, UnicodeText, Enum
@ -203,18 +204,18 @@ class Item(TimeStampedModel):
def set_title_url(self):
return self.view_url('set_title')
def title(self, titles=None):
def title_from_link(self, titles=None):
if not titles:
titles = XanaLink.get_all_titles()
return self.type + ": " + titles.get(self, self.hashid)
return titles.get(self)
def title(self, titles=None):
return self.type + ': ' + (self.title_from_link(titles) or self.hashid)
def has_title(self):
titles = XanaLink.get_all_titles()
return self in titles
def title_from_link(self):
return XanaLink.get_all_titles().get(self)
def set_title(self, title, user):
title_source_doc = SourceDoc(text=title, user=user)
session.add(title_source_doc)
@ -278,7 +279,7 @@ class XanaLink(Item):
if titles is None:
titles = XanaLink.get_all_titles()
if self in titles:
return self.type + ": " + titles[self]
return self.type + ': ' + titles[self]
parsed = self.parse()
@ -348,5 +349,15 @@ class SourceDoc(Item):
result = s[:length - len(end)].rsplit(' ', 1)[0]
return result + end
def title(self, titles=None):
titles = XanaLink.get_all_titles()
from_link = self.title_from_link(titles=titles)
if from_link:
return self.type + ': ' + from_link
first_line = first_non_empty_line(self.text)
if first_line:
return self.type + ': ' + first_line
return self.type + ': ' + self.hashid
configure_mappers()

View file

@ -39,3 +39,9 @@ def add_highlight(text, span_start, span_length):
cur.append({'text': after})
yield start, cur
def first_non_empty_line(text):
for start, cur in iter_lines(text):
tidy = cur.strip()
if tidy:
return tidy

21
tests/test_text.py Normal file
View file

@ -0,0 +1,21 @@
from sourcing import text
def test_find_newlines():
sample = ''
assert list(text.find_newlines(sample)) == []
sample = 'aaa\nbbb\nccc\n'
assert list(text.find_newlines(sample)) == [4, 8, 12]
def test_iter_lines():
sample = ''
result = list(text.iter_lines(sample))
assert result == []
sample = 'aaa\nbbb\nccc\n'
result = list(text.iter_lines(sample))
assert result == [(0, 'aaa\n'), (4, 'bbb\n'), (8, 'ccc\n')]
def test_first_non_empty_line():
assert text.first_non_empty_line('') is None
assert text.first_non_empty_line(' \n \n') is None