Use first line of sourcedoc as title
This commit is contained in:
parent
ea1fa43d5b
commit
12f36e938d
|
@ -1,6 +1,7 @@
|
||||||
from flask import url_for
|
from flask import url_for
|
||||||
from .database import session
|
from .database import session
|
||||||
from .parse import parse_link, parse_sourcedoc_facet, parse_span
|
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.ext.declarative import declarative_base
|
||||||
from sqlalchemy import Column, ForeignKey
|
from sqlalchemy import Column, ForeignKey
|
||||||
from sqlalchemy.types import String, Unicode, Integer, DateTime, Boolean, UnicodeText, Enum
|
from sqlalchemy.types import String, Unicode, Integer, DateTime, Boolean, UnicodeText, Enum
|
||||||
|
@ -203,18 +204,18 @@ class Item(TimeStampedModel):
|
||||||
def set_title_url(self):
|
def set_title_url(self):
|
||||||
return self.view_url('set_title')
|
return self.view_url('set_title')
|
||||||
|
|
||||||
def title(self, titles=None):
|
def title_from_link(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 titles.get(self)
|
||||||
|
|
||||||
|
def title(self, titles=None):
|
||||||
|
return self.type + ': ' + (self.title_from_link(titles) or self.hashid)
|
||||||
|
|
||||||
def has_title(self):
|
def has_title(self):
|
||||||
titles = XanaLink.get_all_titles()
|
titles = XanaLink.get_all_titles()
|
||||||
return self in titles
|
return self in titles
|
||||||
|
|
||||||
def title_from_link(self):
|
|
||||||
return XanaLink.get_all_titles().get(self)
|
|
||||||
|
|
||||||
def set_title(self, title, user):
|
def set_title(self, title, user):
|
||||||
title_source_doc = SourceDoc(text=title, user=user)
|
title_source_doc = SourceDoc(text=title, user=user)
|
||||||
session.add(title_source_doc)
|
session.add(title_source_doc)
|
||||||
|
@ -278,7 +279,7 @@ class XanaLink(Item):
|
||||||
if titles is None:
|
if titles is None:
|
||||||
titles = XanaLink.get_all_titles()
|
titles = XanaLink.get_all_titles()
|
||||||
if self in titles:
|
if self in titles:
|
||||||
return self.type + ": " + titles[self]
|
return self.type + ': ' + titles[self]
|
||||||
|
|
||||||
parsed = self.parse()
|
parsed = self.parse()
|
||||||
|
|
||||||
|
@ -348,5 +349,15 @@ class SourceDoc(Item):
|
||||||
result = s[:length - len(end)].rsplit(' ', 1)[0]
|
result = s[:length - len(end)].rsplit(' ', 1)[0]
|
||||||
return result + end
|
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()
|
configure_mappers()
|
||||||
|
|
|
@ -39,3 +39,9 @@ def add_highlight(text, span_start, span_length):
|
||||||
cur.append({'text': after})
|
cur.append({'text': after})
|
||||||
|
|
||||||
yield start, cur
|
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
21
tests/test_text.py
Normal 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
|
Loading…
Reference in a new issue