From 6f0be2c492cce8012a9bcd4cd31e91566511f3cb Mon Sep 17 00:00:00 2001 From: substantialnoninfringinguser Date: Sat, 11 Jul 2009 01:36:00 +0100 Subject: [PATCH] [svn] override save for CaveDescriptions to scan qm wikilinks and add into the manytomany field linked_qms --- core/models.py | 25 ++++++++++++++++++++++++- core/templatetags/wiki_markup.py | 6 +++--- settings.py | 2 +- templates/cave_description.html | 1 - utils.py | 14 +++++++------- 5 files changed, 35 insertions(+), 13 deletions(-) diff --git a/core/models.py b/core/models.py index facc5ff..7c23ad9 100644 --- a/core/models.py +++ b/core/models.py @@ -1,4 +1,4 @@ -import urllib, urlparse, string, os, datetime, logging +import urllib, urlparse, string, os, datetime, logging, re from django.forms import ModelForm from django.db import models from django.contrib import admin @@ -13,6 +13,21 @@ getcontext().prec=2 #use 2 significant figures for decimal calculations from models_survex import * +def get_related_by_wikilinks(wiki_text): + found=re.findall(settings.QM_PATTERN,wiki_text) + res=[] + for wikilink in found: + qmdict={'urlroot':settings.URL_ROOT,'cave':wikilink[2],'year':wikilink[1],'number':wikilink[3]} + try: + qm=QM.objects.get(found_by__cave__kataster_number = qmdict['cave'], + found_by__date__year = qmdict['year'], + number = qmdict['number']) + res.append(qm) + except QM.DoesNotExist: + print 'fail on '+str(wikilink) + + return res + logging.basicConfig(level=logging.DEBUG, filename=settings.LOGFILE, filemode='w') @@ -524,6 +539,14 @@ class CaveDescription(TroggleModel): def get_absolute_url(self): return urlparse.urljoin(settings.URL_ROOT, reverse('cavedescription', args=(self.short_name,))) + + def save(self): + super(CaveDescription, self).save() + qm_list=get_related_by_wikilinks(self.description) + print qm_list + for qm in qm_list: + self.linked_qms.add(qm) + super(CaveDescription, self).save() class NewSubCave(TroggleModel): name = models.CharField(max_length=200, unique = True) diff --git a/core/templatetags/wiki_markup.py b/core/templatetags/wiki_markup.py index b4d97ac..ec8a997 100644 --- a/core/templatetags/wiki_markup.py +++ b/core/templatetags/wiki_markup.py @@ -40,7 +40,7 @@ def wiki_list(line, listdepth): def wiki_to_html(value, autoescape=None): """ This is the tag which turns wiki syntax into html. It is intended for long pieces of wiki. - Hence it splits the wiki into paragraphs double line feeds. + Hence it splits the wiki into HTML paragraphs based on double line feeds. """ #find paragraphs outValue = "" @@ -55,7 +55,7 @@ def wiki_to_html(value, autoescape=None): def wiki_to_html_short(value, autoescape=None): """ This is the tag which turns wiki syntax into html. It is intended for short pieces of wiki. - Hence it is not split the wiki into paragraphs using where it find double line feeds. + Hence it is not split the wiki into paragraphs using where it finds double line feeds. """ if autoescape: value = conditional_escape(value) @@ -71,7 +71,7 @@ def wiki_to_html_short(value, autoescape=None): value = re.sub("\[\[\s*person:(.+)\]\]",r'\1' % url_root, value, re.DOTALL) #make qm links. this takes a little doing - qmMatchPattern="\[\[\s*[Qq][Mm]:([ABC]?)(\d{4})-(\d*)-(\d*)\]\]" + qmMatchPattern=settings.QM_PATTERN def qmrepl(matchobj): """ A function for replacing wikicode qm links with html qm links. diff --git a/settings.py b/settings.py index 0b2b172..d1a8686 100644 --- a/settings.py +++ b/settings.py @@ -88,6 +88,6 @@ INSTALLED_APPS = ( 'troggle.imagekit', ) -FEINCMS_ADMIN_MEDIA=MEDIA_URL + 'feincms/' +QM_PATTERN="\[\[\s*[Qq][Mm]:([ABC]?)(\d{4})-(\d*)-(\d*)\]\]" from localsettings import * #localsettings needs to take precedence. Call it to override any existing vars. \ No newline at end of file diff --git a/templates/cave_description.html b/templates/cave_description.html index f41d9fd..12b9e1b 100644 --- a/templates/cave_description.html +++ b/templates/cave_description.html @@ -1,6 +1,5 @@ {% extends "cavebase.html" %} {% load wiki_markup %} -{% load mptt_tags %} {% block title %} {{cave_description.short_name}} {% endblock title %} {% block editLink %}Edit description {{cave_description}}{% endblock %} diff --git a/utils.py b/utils.py index 2c181c7..5245589 100644 --- a/utils.py +++ b/utils.py @@ -1,8 +1,5 @@ from django.conf import settings -try: - from django.db import models -except:#We want to get rid of this try statement if possible - from troggle.core.models import LogbookEntry + import random, re, logging def weighted_choice(lst): @@ -14,16 +11,17 @@ def weighted_choice(lst): return item def randomLogbookSentence(): + from troggle.core.models import LogbookEntry randSent={} # needs to handle empty logbooks without crashing #Choose a random logbook entry - randSent['entry']=models.LogbookEntry.objects.order_by('?')[0] + randSent['entry']=LogbookEntry.objects.order_by('?')[0] #Choose again if there are no sentances (this happens if it is a placeholder entry) while len(re.findall('[A-Z].*?\.',randSent['entry'].text))==0: - randSent['entry']=models.LogbookEntry.objects.order_by('?')[0] + randSent['entry']=LogbookEntry.objects.order_by('?')[0] #Choose a random sentence from that entry. Store the sentence as randSent['sentence'], and the number of that sentence in the entry as randSent['number'] sentenceList=re.findall('[A-Z].*?\.',randSent['entry'].text) @@ -157,4 +155,6 @@ def html_to_wiki(text, codec = "utf-8"): #substitutions for regex, repl in re_subs: out = regex.sub(repl, out) - return out \ No newline at end of file + return out + +