From b01c24a364dde2b8f39ee9779180628fed7f3c7e Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Fri, 26 Apr 2019 14:09:41 +0100 Subject: [PATCH] Update xanapage references. --- sourcing/model.py | 24 ++++++++++++++++++++++++ sourcing/view.py | 4 ++++ 2 files changed, 28 insertions(+) diff --git a/sourcing/model.py b/sourcing/model.py index 09703dc..ca13387 100644 --- a/sourcing/model.py +++ b/sourcing/model.py @@ -35,6 +35,8 @@ reserved_name = ['root', 'admin', 'administrator', 'support', 'info', re_username = re.compile(r'^\w+$', re.U) re_full_name = re.compile(r'^([-.\'" ]|[^\W\d_])+$', re.U) +re_comment = re.compile(r'#.*') + def item_url(): return url_for('view.view_item', @@ -279,6 +281,28 @@ class XanaPage(Item): def save_xanaedit_url(self): 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): __tablename__ = 'xanalink' __mapper_args__ = {'polymorphic_identity': 'xanalink'} diff --git a/sourcing/view.py b/sourcing/view.py index ab465de..d3d7d25 100644 --- a/sourcing/view.py +++ b/sourcing/view.py @@ -408,6 +408,7 @@ def create_xanapage_from_sourcedoc(username, hashid): page = XanaPage(user=current_user, text=edl) session.add(page) session.commit() + page.update_references() flash('New xanapage created.') return redirect(page.url) @@ -454,6 +455,7 @@ def save_xanaedit(username, hashid): page.text = new_edl session.commit() + page.update_references() flash('Edits saved.') @@ -473,6 +475,8 @@ def edit_item(username, hashid): if form.validate_on_submit(): form.populate_obj(obj) session.commit() + if obj.type == 'xanapage': + obj.update_references() flash('Changes to {} saved.'.format(obj.type)) return redirect(obj.url) return render_template('edit.html', form=form, doc=obj)