Update xanapage references.

This commit is contained in:
Edward Betts 2019-04-26 14:09:41 +01:00
parent 95927d9d43
commit b01c24a364
2 changed files with 28 additions and 0 deletions

View file

@ -35,6 +35,8 @@ reserved_name = ['root', 'admin', 'administrator', 'support', 'info',
re_username = re.compile(r'^\w+$', re.U) re_username = re.compile(r'^\w+$', re.U)
re_full_name = re.compile(r'^([-.\'" ]|[^\W\d_])+$', re.U) re_full_name = re.compile(r'^([-.\'" ]|[^\W\d_])+$', re.U)
re_comment = re.compile(r'#.*')
def item_url(): def item_url():
return url_for('view.view_item', return url_for('view.view_item',
@ -279,6 +281,28 @@ class XanaPage(Item):
def save_xanaedit_url(self): def save_xanaedit_url(self):
return self.view_url('save_xanaedit') return self.view_url('save_xanaedit')
def iter_spans(self):
for line in self.text.splitlines():
line = re_comment.sub('', line).strip()
if not line:
continue
span_pointer = parse_span(line)
if span_pointer:
yield span_pointer
def update_references(self):
for url, start, length in self.iter_spans():
src_doc = Item.from_external(url)
if not src_doc or not src_doc.id:
continue
existing = Reference.query.get((self.id, src_doc.id))
if existing:
continue
ref = Reference(subject_id=self.id, object_id=src_doc.id)
session.add(ref)
session.commit()
class XanaLink(Item): class XanaLink(Item):
__tablename__ = 'xanalink' __tablename__ = 'xanalink'
__mapper_args__ = {'polymorphic_identity': 'xanalink'} __mapper_args__ = {'polymorphic_identity': 'xanalink'}

View file

@ -408,6 +408,7 @@ def create_xanapage_from_sourcedoc(username, hashid):
page = XanaPage(user=current_user, text=edl) page = XanaPage(user=current_user, text=edl)
session.add(page) session.add(page)
session.commit() session.commit()
page.update_references()
flash('New xanapage created.') flash('New xanapage created.')
return redirect(page.url) return redirect(page.url)
@ -454,6 +455,7 @@ def save_xanaedit(username, hashid):
page.text = new_edl page.text = new_edl
session.commit() session.commit()
page.update_references()
flash('Edits saved.') flash('Edits saved.')
@ -473,6 +475,8 @@ def edit_item(username, hashid):
if form.validate_on_submit(): if form.validate_on_submit():
form.populate_obj(obj) form.populate_obj(obj)
session.commit() session.commit()
if obj.type == 'xanapage':
obj.update_references()
flash('Changes to {} saved.'.format(obj.type)) flash('Changes to {} saved.'.format(obj.type))
return redirect(obj.url) return redirect(obj.url)
return render_template('edit.html', form=form, doc=obj) return render_template('edit.html', form=form, doc=obj)