summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWookey <wookey@wookware.org>2019-04-02 00:57:54 +0100
committerWookey <wookey@wookware.org>2019-04-02 00:57:54 +0100
commitc4301cf6df56ba1bef4f2c908b949a2b45ea65dc (patch)
tree9c6bb4a4530824c8e072984a0346509298188030
parentde7d68b1eb70542f66092cb0048af3d096e6980c (diff)
parentbb8dbb381fe87c3a63e9586a1bf1e993b09c965b (diff)
downloadtroggle-c4301cf6df56ba1bef4f2c908b949a2b45ea65dc.tar.gz
troggle-c4301cf6df56ba1bef4f2c908b949a2b45ea65dc.tar.bz2
troggle-c4301cf6df56ba1bef4f2c908b949a2b45ea65dc.zip
Merge lots of troggle fixes
-rw-r--r--core/admin.py8
-rw-r--r--core/forms.py14
-rw-r--r--core/management/commands/reset_db.py89
-rw-r--r--core/models.py53
-rw-r--r--core/models_survex.py2
-rw-r--r--core/templatetags/survex_markup.py2
-rw-r--r--core/templatetags/wiki_markup.py11
-rw-r--r--core/views_caves.py55
-rw-r--r--core/views_logbooks.py27
-rw-r--r--core/views_other.py55
-rw-r--r--core/views_survex.py10
-rw-r--r--databaseReset.py20
-rw-r--r--flatpages/views.py10
-rw-r--r--parsers/QMs.py20
-rw-r--r--parsers/logbooks.py47
-rw-r--r--parsers/people.py25
-rw-r--r--parsers/survex.py4
-rw-r--r--parsers/surveys.py4
-rw-r--r--settings.py4
-rw-r--r--templates/editcave2.html1
-rw-r--r--templates/frontpage.html2
-rw-r--r--templates/logbookentry.html11
-rw-r--r--urls.py4
-rw-r--r--utils.py16
24 files changed, 239 insertions, 255 deletions
diff --git a/core/admin.py b/core/admin.py
index a8ce55f..59c93f2 100644
--- a/core/admin.py
+++ b/core/admin.py
@@ -74,11 +74,11 @@ class LogbookEntryAdmin(TroggleModelAdmin):
}
actions=('export_logbook_entries_as_html','export_logbook_entries_as_txt')
- def export_logbook_entries_as_html(modeladmin, request, queryset):
+ def export_logbook_entries_as_html(self, modeladmin, request, queryset):
response=downloadLogbook(request=request, queryset=queryset, extension='html')
return response
- def export_logbook_entries_as_txt(modeladmin, request, queryset):
+ def export_logbook_entries_as_txt(self, modeladmin, request, queryset):
response=downloadLogbook(request=request, queryset=queryset, extension='txt')
return response
@@ -141,14 +141,14 @@ admin.site.register(SurvexScanSingle)
def export_as_json(modeladmin, request, queryset):
- response = HttpResponse(mimetype="text/json")
+ response = HttpResponse(content_type="text/json")
response['Content-Disposition'] = 'attachment; filename=troggle_output.json'
serializers.serialize("json", queryset, stream=response)
return response
def export_as_xml(modeladmin, request, queryset):
- response = HttpResponse(mimetype="text/xml")
+ response = HttpResponse(content_type="text/xml")
response['Content-Disposition'] = 'attachment; filename=troggle_output.xml'
serializers.serialize("xml", queryset, stream=response)
return response
diff --git a/core/forms.py b/core/forms.py
index b091696..8265178 100644
--- a/core/forms.py
+++ b/core/forms.py
@@ -46,12 +46,12 @@ class EntranceForm(ModelForm):
#underground_centre_line = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
#notes = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
#references = forms.CharField(required = False, widget=TinyMCE(attrs={'cols': 80, 'rows': 10}))
- other_station = forms.CharField(required=False) # Trying to change this to a singl;e line entry
- tag_station = forms.CharField(required=False) # Trying to change this to a singl;e line entry
- exact_station = forms.CharField(required=False) # Trying to change this to a singl;e line entry
- northing = forms.CharField(required=False) # Trying to change this to a singl;e line entry
- easting = forms.CharField(required=False) # Trying to change this to a singl;e line entry
- alt = forms.CharField(required=False) # Trying to change this to a singl;e line entry
+ other_station = forms.CharField(required=False) # Trying to change this to a single line entry
+ tag_station = forms.CharField(required=False) # Trying to change this to a single line entry
+ exact_station = forms.CharField(required=False) # Trying to change this to a single line entry
+ northing = forms.CharField(required=False) # Trying to change this to a single line entry
+ easting = forms.CharField(required=False) # Trying to change this to a single line entry
+ alt = forms.CharField(required=False) # Trying to change this to a single line entry
class Meta:
model = Entrance
exclude = ("cached_primary_slug", "filename",)
@@ -123,7 +123,7 @@ def getTripForm(expedition):
html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
def clean(self):
- print dir(self)
+ print(dir(self))
if self.cleaned_data.get("caveOrLocation") == "cave" and not self.cleaned_data.get("cave"):
self._errors["cave"] = self.error_class(["This field is required"])
if self.cleaned_data.get("caveOrLocation") == "location" and not self.cleaned_data.get("location"):
diff --git a/core/management/commands/reset_db.py b/core/management/commands/reset_db.py
index 29f8e81..e95ddd9 100644
--- a/core/management/commands/reset_db.py
+++ b/core/management/commands/reset_db.py
@@ -2,6 +2,14 @@ from django.core.management.base import BaseCommand, CommandError
from optparse import make_option
from troggle.core.models import Cave
import settings
+import os
+
+from django.db import connection
+from django.core import management
+from django.contrib.auth.models import User
+from django.core.urlresolvers import reverse
+from troggle.core.models import Cave, Entrance
+import troggle.flatpages.models
databasename=settings.DATABASES['default']['NAME']
expouser=settings.EXPOUSER
@@ -12,22 +20,13 @@ class Command(BaseCommand):
help = 'This is normal usage, clear database and reread everything'
option_list = BaseCommand.option_list + (
- make_option('--foo',
+ make_option('--reset',
action='store_true',
- dest='foo',
+ dest='reset',
default=False,
- help='test'),
+ help='Reset the entier DB from files'),
)
- def add_arguments(self, parser):
-
- parser.add_argument(
- '--foo',
- action='store_true',
- dest='foo',
- help='Help text',
- )
-
def handle(self, *args, **options):
print(args)
print(options)
@@ -46,8 +45,8 @@ class Command(BaseCommand):
self.import_QMs()
elif "tunnel" in args:
self.import_tunnelfiles()
- elif "reset" in args:
- self.reset()
+ elif options['reset']:
+ self.reset(self)
elif "survex" in args:
self.import_survex()
elif "survexpos" in args:
@@ -61,13 +60,15 @@ class Command(BaseCommand):
self.dumplogbooks()
elif "writeCaves" in args:
self.writeCaves()
- elif "foo" in args:
- self.stdout.write('Tesing....')
+ elif options['foo']:
+ self.stdout.write(self.style.WARNING('Tesing....'))
else:
- self.stdout.write("%s not recognised" % args)
- self.usage(options)
+ #self.stdout.write("%s not recognised" % args)
+ #self.usage(options)
+ self.stdout.write("poo")
+ #print(args)
- def reload_db():
+ def reload_db(obj):
if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3':
try:
os.remove(databasename)
@@ -86,22 +87,22 @@ class Command(BaseCommand):
user.is_superuser = True
user.save()
- def make_dirs():
+ def make_dirs(obj):
"""Make directories that troggle requires"""
# should also deal with permissions here.
if not os.path.isdir(settings.PHOTOS_ROOT):
os.mkdir(settings.PHOTOS_ROOT)
- def import_caves():
+ def import_caves(obj):
import parsers.caves
- print("importing caves")
+ print("Importing Caves")
parsers.caves.readcaves()
- def import_people():
+ def import_people(obj):
import parsers.people
parsers.people.LoadPersonsExpos()
- def import_logbooks():
+ def import_logbooks(obj):
# The below line was causing errors I didn't understand (it said LOGFILE was a string), and I couldn't be bothered to figure
# what was going on so I just catch the error with a try. - AC 21 May
try:
@@ -112,57 +113,57 @@ class Command(BaseCommand):
import parsers.logbooks
parsers.logbooks.LoadLogbooks()
- def import_survex():
+ def import_survex(obj):
import parsers.survex
parsers.survex.LoadAllSurvexBlocks()
parsers.survex.LoadPos()
- def import_QMs():
+ def import_QMs(obj):
import parsers.QMs
- def import_surveys():
+ def import_surveys(obj):
import parsers.surveys
parsers.surveys.parseSurveys(logfile=settings.LOGFILE)
- def import_surveyscans():
+ def import_surveyscans(obj):
import parsers.surveys
parsers.surveys.LoadListScans()
- def import_tunnelfiles():
+ def import_tunnelfiles(obj):
import parsers.surveys
parsers.surveys.LoadTunnelFiles()
- def reset():
+ def reset(self, mgmt_obj):
""" Wipe the troggle database and import everything from legacy data
"""
- reload_db()
- make_dirs()
- pageredirects()
- import_caves()
- import_people()
- import_surveyscans()
- import_survex()
- import_logbooks()
- import_QMs()
+ self.reload_db()
+ self.make_dirs()
+ self.pageredirects()
+ self.import_caves()
+ self.import_people()
+ self.import_surveyscans()
+ self.import_survex()
+ self.import_logbooks()
+ self.import_QMs()
try:
- import_tunnelfiles()
+ self.import_tunnelfiles()
except:
print("Tunnel files parser broken.")
- import_surveys()
+ self.import_surveys()
- def pageredirects():
+ def pageredirects(obj):
for oldURL, newURL in [("indxal.htm", reverse("caveindex"))]:
f = troggle.flatpages.models.Redirect(originalURL=oldURL, newURL=newURL)
f.save()
- def writeCaves():
+ def writeCaves(obj):
for cave in Cave.objects.all():
cave.writeDataFile()
for entrance in Entrance.objects.all():
entrance.writeDataFile()
- def usage(self, parser):
+ def troggle_usage(obj):
print("""Usage is 'manage.py reset_db <command>'
where command is:
reset - this is normal usage, clear database and reread everything
diff --git a/core/models.py b/core/models.py
index 1b2875a..d978eaa 100644
--- a/core/models.py
+++ b/core/models.py
@@ -104,21 +104,19 @@ class Expedition(TroggleModel):
def day_max(self):
res = self.expeditionday_set.all()
return res and res[len(res) - 1] or None
-
-
+
class ExpeditionDay(TroggleModel):
expedition = models.ForeignKey("Expedition")
date = models.DateField()
class Meta:
- ordering = ('date',)
+ ordering = ('date',)
def GetPersonTrip(self, personexpedition):
personexpeditions = self.persontrip_set.filter(expeditionday=self)
return personexpeditions and personexpeditions[0] or None
-
-
+
#
# single Person, can go on many years
#
@@ -247,18 +245,22 @@ class PersonExpedition(TroggleModel):
# Single parsed entry from Logbook
#
class LogbookEntry(TroggleModel):
- date = models.DateField()#MJG wants to turn this into a datetime such that multiple Logbook entries on the same day can be ordered.
+
+ LOGBOOK_ENTRY_TYPES = (
+ ("wiki", "Wiki style logbook"),
+ ("html", "Html style logbook")
+ )
+
+ date = models.DateField()#MJG wants to turn this into a datetime such that multiple Logbook entries on the same day can be ordered.ld()
expeditionday = models.ForeignKey("ExpeditionDay", null=True)#MJG wants to KILL THIS (redundant information)
expedition = models.ForeignKey(Expedition,blank=True,null=True) # yes this is double-
- #author = models.ForeignKey(PersonExpedition,blank=True,null=True) # the person who writes it up doesn't have to have been on the trip.
- # Re: the above- so this field should be "typist" or something, not "author". - AC 15 jun 09
- #MJG wants to KILL THIS, as it is typically redundant with PersonTrip.is_logbook_entry_author, in the rare it was not redundanty and of actually interest it could be added to the text.
- title = models.CharField(max_length=settings.MAX_LOGBOOK_ENTRY_TITLE_LENGTH)
- cave_slug = models.SlugField(max_length=50)
- place = models.CharField(max_length=100,blank=True,null=True,help_text="Only use this if you haven't chosen a cave")
- text = models.TextField()
- slug = models.SlugField(max_length=50)
- filename = models.CharField(max_length=200,null=True)
+ title = models.CharField(max_length=settings.MAX_LOGBOOK_ENTRY_TITLE_LENGTH)
+ cave_slug = models.SlugField(max_length=50)
+ place = models.CharField(max_length=100,blank=True,null=True,help_text="Only use this if you haven't chosen a cave")
+ text = models.TextField()
+ slug = models.SlugField(max_length=50)
+ filename = models.CharField(max_length=200,null=True)
+ entry_type = models.CharField(default="wiki",null=True,choices=LOGBOOK_ENTRY_TYPES,max_length=50)
class Meta:
verbose_name_plural = "Logbook Entries"
@@ -297,7 +299,7 @@ class LogbookEntry(TroggleModel):
if self.cave:
nextQMnumber=self.cave.new_QM_number(self.date.year)
else:
- return none
+ return None
return nextQMnumber
def new_QM_found_link(self):
@@ -307,6 +309,7 @@ class LogbookEntry(TroggleModel):
def DayIndex(self):
return list(self.expeditionday.logbookentry_set.all()).index(self)
+
#
# Single Person going on a trip, which may or may not be written up (accounts for different T/U for people in same logbook entry)
#
@@ -452,7 +455,7 @@ class Cave(TroggleModel):
elif self.unofficial_number:
href = self.unofficial_number
else:
- href = official_name.lower()
+ href = self.official_name.lower()
#return settings.URL_ROOT + '/cave/' + href + '/'
return urlparse.urljoin(settings.URL_ROOT, reverse('cave',kwargs={'cave_id':href,}))
@@ -744,17 +747,17 @@ class QM(TroggleModel):
number = models.IntegerField(help_text="this is the sequential number in the year", )
GRADE_CHOICES=(
- ('A', 'A: Large obvious lead'),
- ('B', 'B: Average lead'),
- ('C', 'C: Tight unpromising lead'),
- ('D', 'D: Dig'),
- ('X', 'X: Unclimbable aven')
+ ('A', 'A: Large obvious lead'),
+ ('B', 'B: Average lead'),
+ ('C', 'C: Tight unpromising lead'),
+ ('D', 'D: Dig'),
+ ('X', 'X: Unclimbable aven')
)
grade = models.CharField(max_length=1, choices=GRADE_CHOICES)
location_description = models.TextField(blank=True)
- #should be a foreignkey to surveystation
nearest_station_description = models.CharField(max_length=400,null=True,blank=True)
- nearest_station = models.CharField(max_length=200,blank=True,null=True)
+ nearest_station_name = models.CharField(max_length=200,blank=True,null=True)
+ nearest_station = models.ForeignKey(SurvexStation,null=True,blank=True)
area = models.CharField(max_length=100,blank=True,null=True)
completion_description = models.TextField(blank=True,null=True)
comment=models.TextField(blank=True,null=True)
@@ -834,7 +837,7 @@ class ScannedImage(TroggleImageModel):
#This is an ugly hack to deal with the #s in our survey scan paths. The correct thing is to write a custom file storage backend which calls urlencode on the name for making file.url but not file.path.
def correctURL(self):
return string.replace(self.file.url,r'#',r'%23')
-
+
def __unicode__(self):
return get_scan_path(self,'')
diff --git a/core/models_survex.py b/core/models_survex.py
index f6b3284..ed581a3 100644
--- a/core/models_survex.py
+++ b/core/models_survex.py
@@ -225,4 +225,4 @@ class TunnelFile(models.Model):
class Meta:
ordering = ('tunnelpath',)
-
+
diff --git a/core/templatetags/survex_markup.py b/core/templatetags/survex_markup.py
index 5b9aa36..d6ddd0e 100644
--- a/core/templatetags/survex_markup.py
+++ b/core/templatetags/survex_markup.py
@@ -47,6 +47,6 @@ def survex_to_html(value, autoescape=None):
if autoescape:
value = conditional_escape(value)
for regex, sub in regexes:
- print sub
+ print(sub)
value = regex.sub(sub, value)
return mark_safe(value) \ No newline at end of file
diff --git a/core/templatetags/wiki_markup.py b/core/templatetags/wiki_markup.py
index 3bc5b07..2640594 100644
--- a/core/templatetags/wiki_markup.py
+++ b/core/templatetags/wiki_markup.py
@@ -7,7 +7,6 @@ from troggle.core.models import QM, DPhoto, LogbookEntry, Cave
import re, urlparse
register = template.Library()
-
@register.filter()
def plusone(n):
@@ -77,7 +76,7 @@ def wiki_to_html_short(value, autoescape=None):
if number>1:
return '<h'+num+'>'+matchobj.groups()[1]+'</h'+num+'>'
else:
- print 'morethanone'
+ print('morethanone')
return matchobj.group()
value = re.sub(r"(?m)^(=+)([^=]+)(=+)$",headerrepl,value)
@@ -143,13 +142,13 @@ def wiki_to_html_short(value, autoescape=None):
value = re.sub(photoSrcPattern,photoSrcRepl, value, re.DOTALL)
#make cave links
- value = re.sub("\[\[\s*cave:([^\s]+)\s*\s*\]\]", r'<a href="%scave/\1/">\1</a>' % settings.URL_ROOT, value, re.DOTALL)
+ value = re.sub(r"\[\[\s*cave:([^\s]+)\s*\s*\]\]", r'<a href="%scave/\1/">\1</a>' % settings.URL_ROOT, value, re.DOTALL)
#make people links
- value = re.sub("\[\[\s*person:(.+)\|(.+)\]\]",r'<a href="%sperson/\1/">\2</a>' % settings.URL_ROOT, value, re.DOTALL)
+ value = re.sub(r"\[\[\s*person:(.+)\|(.+)\]\]",r'<a href="%sperson/\1/">\2</a>' % settings.URL_ROOT, value, re.DOTALL)
#make subcave links
- value = re.sub("\[\[\s*subcave:(.+)\|(.+)\]\]",r'<a href="%ssubcave/\1/">\2</a>' % settings.URL_ROOT, value, re.DOTALL)
+ value = re.sub(r"\[\[\s*subcave:(.+)\|(.+)\]\]",r'<a href="%ssubcave/\1/">\2</a>' % settings.URL_ROOT, value, re.DOTALL)
#make cavedescription links
- value = re.sub("\[\[\s*cavedescription:(.+)\|(.+)\]\]",r'<a href="%scavedescription/\1/">\2</a>' % settings.URL_ROOT, value, re.DOTALL)
+ value = re.sub(r"\[\[\s*cavedescription:(.+)\|(.+)\]\]",r'<a href="%scavedescription/\1/">\2</a>' % settings.URL_ROOT, value, re.DOTALL)
diff --git a/core/views_caves.py b/core/views_caves.py
index a785170..af76b1e 100644
--- a/core/views_caves.py
+++ b/core/views_caves.py
@@ -10,11 +10,10 @@ from troggle.helper import login_required_if_public
from django.forms.models import modelformset_factory
from django import forms
from django.core.urlresolvers import reverse
-from utils import render_with_context # see views_logbooks for explanation on this.
from django.http import HttpResponse, HttpResponseRedirect
from django.conf import settings
import re, urlparse
-from django.shortcuts import get_object_or_404
+from django.shortcuts import get_object_or_404, render
import settings
@@ -58,7 +57,7 @@ def caveindex(request):
caves1626 = list(Cave.objects.filter(area__short_name = "1626"))
caves1623.sort(caveCmp)
caves1626.sort(caveCmp)
- return render_with_context(request,'caveindex.html', {'caves1623': caves1623, 'caves1626': caves1626, 'notablecaves':notablecaves, 'cavepage': True})
+ return render(request,'caveindex.html', {'caves1623': caves1623, 'caves1626': caves1626, 'notablecaves':notablecaves, 'cavepage': True})
def millenialcaves(request):
#RW messing around area
@@ -83,43 +82,43 @@ def cave3d(request, cave_id=''):
def cave(request, cave_id='', offical_name=''):
cave=getCave(cave_id)
if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated():
- return render_with_context(request,'nonpublic.html', {'instance': cave, 'cavepage': True, 'cave_id': cave_id})
+ return render(request,'nonpublic.html', {'instance': cave, 'cavepage': True, 'cave_id': cave_id})
else:
- return render_with_context(request,'cave.html', {'settings': settings, 'cave': cave, 'cavepage': True, 'cave_id': cave_id})
+ return render(request,'cave.html', {'settings': settings, 'cave': cave, 'cavepage': True, 'cave_id': cave_id})
def caveEntrance(request, slug):
cave = Cave.objects.get(caveslug__slug = slug)
if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated():
- return render_with_context(request,'nonpublic.html', {'instance': cave})
+ return render(request,'nonpublic.html', {'instance': cave})
else:
- return render_with_context(request,'cave_entrances.html', {'cave': cave})
+ return render(request,'cave_entrances.html', {'cave': cave})
def caveDescription(request, slug):
cave = Cave.objects.get(caveslug__slug = slug)
if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated():
- return render_with_context(request,'nonpublic.html', {'instance': cave})
+ return render(request,'nonpublic.html', {'instance': cave})
else:
- return render_with_context(request,'cave_uground_description.html', {'cave': cave})
+ return render(request,'cave_uground_description.html', {'cave': cave})
def caveQMs(request, slug):
cave = Cave.objects.get(caveslug__slug = slug)
if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated():
- return render_with_context(request,'nonpublic.html', {'instance': cave})
+ return render(request,'nonpublic.html', {'instance': cave})
else:
- return render_with_context(request,'cave_qms.html', {'cave': cave})
+ return render(request,'cave_qms.html', {'cave': cave})
def caveLogbook(request, slug):
cave = Cave.objects.get(caveslug__slug = slug)
if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated():
- return render_with_context(request,'nonpublic.html', {'instance': cave})
+ return render(request,'nonpublic.html', {'instance': cave})
else:
- return render_with_context(request,'cave_logbook.html', {'cave': cave})
+ return render(request,'cave_logbook.html', {'cave': cave})
def caveSlug(request, slug):
cave = Cave.objects.get(caveslug__slug = slug)
if cave.non_public and settings.PUBLIC_SITE and not request.user.is_authenticated():
- return render_with_context(request,'nonpublic.html', {'instance': cave, 'cave_editable': slug})
+ return render(request,'nonpublic.html', {'instance': cave, 'cave_editable': slug})
else:
- return render_with_context(request,'cave.html', {'cave': cave, 'cave_editable': slug})
+ return render(request,'cave.html', {'cave': cave, 'cave_editable': slug})
@login_required_if_public
def edit_cave(request, slug=None):
@@ -160,7 +159,7 @@ def edit_cave(request, slug=None):
ceFormSet = CaveAndEntranceFormSet(queryset=cave.caveandentrance_set.all())
versionControlForm = VersionControlCommentForm()
- return render_with_context(request,
+ return render(request,
'editcave2.html',
{'form': form,
'caveAndEntranceFormSet': ceFormSet,
@@ -204,7 +203,7 @@ def editEntrance(request, caveslug, slug=None):
entletter = EntranceLetterForm(request.POST)
else:
entletter = None
- return render_with_context(request,
+ return render(request,
'editentrance.html',
{'form': form,
'versionControlForm': versionControlForm,
@@ -215,7 +214,7 @@ def qm(request,cave_id,qm_id,year,grade=None):
year=int(year)
try:
qm=getCave(cave_id).get_QMs().get(number=qm_id,found_by__date__year=year)
- return render_with_context(request,'qm.html',locals())
+ return render(request,'qm.html',locals())
except QM.DoesNotExist:
url=urlparse.urljoin(settings.URL_ROOT, r'/admin/core/qm/add/'+'?'+ r'number=' + qm_id)
@@ -228,16 +227,16 @@ def qm(request,cave_id,qm_id,year,grade=None):
def ent(request, cave_id, ent_letter):
cave = Cave.objects.filter(kataster_number = cave_id)[0]
cave_and_ent = CaveAndEntrance.objects.filter(cave = cave).filter(entrance_letter = ent_letter)[0]
- return render_with_context(request,'entrance.html', {'cave': cave,
+ return render(request,'entrance.html', {'cave': cave,
'entrance': cave_and_ent.entrance,
'letter': cave_and_ent.entrance_letter,})
def entranceSlug(request, slug):
entrance = Entrance.objects.get(entranceslug__slug = slug)
if entrance.non_public and not request.user.is_authenticated():
- return render_with_context(request,'nonpublic.html', {'instance': entrance})
+ return render(request,'nonpublic.html', {'instance': entrance})
else:
- return render_with_context(request,'entranceslug.html', {'entrance': entrance})
+ return render(request,'entranceslug.html', {'entrance': entrance})
def survexblock(request, survexpath):
survexpath = re.sub("/", ".", survexpath)
@@ -245,12 +244,12 @@ def survexblock(request, survexpath):
survexblock = models.SurvexBlock.objects.get(survexpath=survexpath)
#ftext = survexblock.filecontents()
ftext = survexblock.text
- return render_with_context(request,'survexblock.html', {'survexblock':survexblock, 'ftext':ftext, })
+ return render(request,'survexblock.html', {'survexblock':survexblock, 'ftext':ftext, })
def surveyindex(request):
surveys=Survey.objects.all()
expeditions=Expedition.objects.order_by("-year")
- return render_with_context(request,'survey.html',locals())
+ return render(request,'survey.html',locals())
def survey(request,year,wallet_number):
surveys=Survey.objects.all()
@@ -263,19 +262,19 @@ def survey(request,year,wallet_number):
planSketches=current_survey.scannedimage_set.filter(contents='plan')
elevationSketches=current_survey.scannedimage_set.filter(contents='elevation')
- return render_with_context(request,'survey.html', locals())
+ return render(request,'survey.html', locals())
def cave_description(request, cavedescription_name):
cave_description = get_object_or_404(CaveDescription, short_name = cavedescription_name)
- return render_with_context(request,'cave_description.html', locals())
+ return render(request,'cave_description.html', locals())
def get_entrances(request, caveslug):
cave = Cave.objects.get(caveslug__slug = caveslug)
- return render_with_context(request,'options.html', {"items": [(e.entrance.slug(), e.entrance.slug()) for e in cave.entrances()]})
+ return render(request,'options.html', {"items": [(e.entrance.slug(), e.entrance.slug()) for e in cave.entrances()]})
def get_qms(request, caveslug):
cave = Cave.objects.get(caveslug__slug = caveslug)
- return render_with_context(request,'options.html', {"items": [(e.entrance.slug(), e.entrance.slug()) for e in cave.entrances()]})
+ return render(request,'options.html', {"items": [(e.entrance.slug(), e.entrance.slug()) for e in cave.entrances()]})
areanames = [
#('', 'Location unclear'),
@@ -313,7 +312,7 @@ def prospecting(request):
caves = list(a.cave_set.all())
caves.sort(caveCmp)
areas.append((name, a, caves))
- return render_with_context(request, 'prospecting.html', {"areas": areas})
+ return render(request, 'prospecting.html', {"areas": areas})
# Parameters for big map and zoomed subarea maps:
# big map first (zoom factor ignored)
diff --git a/core/views_logbooks.py b/core/views_logbooks.py
index ffd1243..b8069da 100644
--- a/core/views_logbooks.py
+++ b/core/views_logbooks.py
@@ -1,4 +1,4 @@
-from django.shortcuts import render_to_response
+from django.shortcuts import render_to_response, render
from troggle.core.models import Expedition, Person, PersonExpedition, PersonTrip, LogbookEntry, SurvexBlock
import troggle.core.models as models
import troggle.settings as settings
@@ -9,7 +9,6 @@ from troggle.core.forms import getTripForm#, get_name, PersonForm
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect, HttpResponse
from django.template import Context, loader
-from utils import render_with_context
import os.path
import troggle.parsers.logbooks as logbookparsers
from django.template.defaultfilters import slugify
@@ -55,7 +54,7 @@ def personindex(request):
if person.bisnotable():
notablepersons.append(person)
- return render_with_context(request,'personindex.html', {'persons': persons, 'personss':personss, 'notablepersons':notablepersons, })
+ return render(request,'personindex.html', {'persons': persons, 'personss':personss, 'notablepersons':notablepersons, })
def expedition(request, expeditionname):
@@ -77,7 +76,7 @@ def expedition(request, expeditionname):
if "reload" in request.GET:
LoadLogbookForExpedition(this_expedition)
- return render_with_context(request,'expedition.html', {'expedition': this_expedition, 'expeditions':expeditions, 'personexpeditiondays':personexpeditiondays, 'settings':settings, 'dateditems': dateditems })
+ return render(request,'expedition.html', {'expedition': this_expedition, 'expeditions':expeditions, 'personexpeditiondays':personexpeditiondays, 'settings':settings, 'dateditems': dateditems })
def get_absolute_url(self):
return ('expedition', (expedition.year))
@@ -102,7 +101,7 @@ def person(request, first_name='', last_name='', ):
this_person.save()
return HttpResponseRedirect(reverse('profiles_select_profile'))
- return render_with_context(request,'person.html', {'person': this_person, })
+ return render(request,'person.html', {'person': this_person, })
def GetPersonChronology(personexpedition):
@@ -135,17 +134,17 @@ def personexpedition(request, first_name='', last_name='', year=''):
this_expedition = Expedition.objects.get(year=year)
personexpedition = person.personexpedition_set.get(expedition=this_expedition)
personchronology = GetPersonChronology(personexpedition)
- return render_with_context(request,'personexpedition.html', {'personexpedition': personexpedition, 'personchronology':personchronology})
+ return render(request,'personexpedition.html', {'personexpedition': personexpedition, 'personchronology':personchronology})
def logbookentry(request, date, slug):
this_logbookentry = LogbookEntry.objects.filter(date=date, slug=slug)
if len(this_logbookentry)>1:
- return render_with_context(request, 'object_list.html',{'object_list':this_logbookentry})
+ return render(request, 'object_list.html',{'object_list':this_logbookentry})
else:
this_logbookentry=this_logbookentry[0]
- return render_with_context(request, 'logbookentry.html', {'logbookentry': this_logbookentry})
+ return render(request, 'logbookentry.html', {'logbookentry': this_logbookentry})
def logbookSearch(request, extra):
@@ -156,14 +155,14 @@ def logbookSearch(request, extra):
entry_query = search.get_query(query_string, ['text','title',])
found_entries = LogbookEntry.objects.filter(entry_query)
- return render_with_context(request,'logbooksearch.html',
+ return render(request,'logbooksearch.html',
{ 'query_string': query_string, 'found_entries': found_entries, })
#context_instance=RequestContext(request))
def personForm(request,pk):
person=Person.objects.get(pk=pk)
form=PersonForm(instance=person)
- return render_with_context(request,'personform.html', {'form':form,})
+ return render(request,'personform.html', {'form':form,})
def experimental(request):
@@ -180,7 +179,7 @@ def experimental(request):
survexlegs = models.SurvexLeg.objects.all()
totalsurvexlength = sum([survexleg.tape for survexleg in survexlegs])
- return render_with_context(request, 'experimental.html', { "nsurvexlegs":len(survexlegs), "totalsurvexlength":totalsurvexlength, "legsbyexpo":legsbyexpo })
+ return render(request, 'experimental.html', { "nsurvexlegs":len(survexlegs), "totalsurvexlength":totalsurvexlength, "legsbyexpo":legsbyexpo })
@login_required_if_public
def newLogbookEntry(request, expeditionyear, pdate = None, pslug = None):
@@ -239,7 +238,7 @@ def newLogbookEntry(request, expeditionyear, pdate = None, pslug = None):
tripForm = TripForm() # An unbound form
personTripFormSet = PersonTripFormSet()
- return render_with_context(request, 'newlogbookentry.html', {
+ return render(request, 'newlogbookentry.html', {
'tripForm': tripForm,
'personTripFormSet': personTripFormSet,
@@ -261,8 +260,8 @@ def delLogbookEntry(lbe):
def get_people(request, expeditionslug):
exp = Expedition.objects.get(year = expeditionslug)
- return render_with_context(request,'options.html', {"items": [(pe.slug, pe.name) for pe in exp.personexpedition_set.all()]})
+ return render(request,'options.html', {"items": [(pe.slug, pe.name) for pe in exp.personexpedition_set.all()]})
def get_logbook_entries(request, expeditionslug):
exp = Expedition.objects.get(year = expeditionslug)
- return render_with_context(request,'options.html', {"items": [(le.slug, "%s - %s" % (le.date, le.title)) for le in exp.logbookentry_set.all()]})
+ return render(request,'options.html', {"items": [(le.slug, "%s - %s" % (le.date, le.title)) for le in exp.logbookentry_set.all()]})
diff --git a/core/views_other.py b/core/views_other.py
index d99cc32..1297e7f 100644
--- a/core/views_other.py
+++ b/core/views_other.py
@@ -4,11 +4,11 @@ from django.conf import settings
from django import forms
from django.template import loader, Context
from django.db.models import Q
+from django.shortcuts import render
import databaseReset
import re
from django.http import HttpResponse, HttpResponseRedirect
from django.core.urlresolvers import reverse
-from utils import render_with_context
from troggle.core.models import *
from troggle.helper import login_required_if_public
@@ -21,18 +21,18 @@ def stats(request):
statsDict['caveCount'] = int(Cave.objects.count())
statsDict['personCount'] = int(Person.objects.count())
statsDict['logbookEntryCount'] = int(LogbookEntry.objects.count())
- return render_with_context(request,'statistics.html', statsDict)
+ return render(request,'statistics.html', statsDict)
def frontpage(request):
if request.user.is_authenticated():
- return render_with_context(request,'tasks.html')
+ return render(request,'tasks.html')
expeditions = Expedition.objects.order_by("-year")
logbookentry = LogbookEntry
cave = Cave
photo = DPhoto
from django.contrib.admin.templatetags import log
- return render_with_context(request,'frontpage.html', locals())
+ return render(request,'frontpage.html', locals())
def todo(request):
message = "no test message" #reverse('personn', kwargs={"name":"hkjhjh"})
@@ -45,7 +45,7 @@ def todo(request):
expeditions = Expedition.objects.order_by("-year")
totallogbookentries = LogbookEntry.objects.count()
- return render_with_context(request,'index.html', {'expeditions':expeditions, 'all':'all', 'totallogbookentries':totallogbookentries, "message":message})
+ return render(request,'index.html', {'expeditions':expeditions, 'all':'all', 'totallogbookentries':totallogbookentries, "message":message})
def controlPanel(request):
@@ -59,27 +59,27 @@ def controlPanel(request):
databaseReset.make_dirs()
for item in importlist:
if item in request.POST:
- print "running"+ " databaseReset."+item+"()"
- exec "databaseReset."+item+"()"
+ print("running"+ " databaseReset."+item+"()")
+ exec("databaseReset."+item+"()")
jobs_completed.append(item)
else:
if request.user.is_authenticated(): #The user is logged in, but is not a superuser.
- return render_with_context(request,'controlPanel.html', {'caves':Cave.objects.all(),'error':'You must be a superuser to use that feature.'})
+ return render(request,'controlPanel.html', {'caves':Cave.objects.all(),'error':'You must be a superuser to use that feature.'})
else:
return HttpResponseRedirect(reverse('auth_login'))
- return render_with_context(request,'controlPanel.html', {'caves':Cave.objects.all(),'expeditions':Expedition.objects.all(),'jobs_completed':jobs_completed})
+ return render(request,'controlPanel.html', {'caves':Cave.objects.all(),'expeditions':Expedition.objects.all(),'jobs_completed':jobs_completed})
def downloadCavetab(request):
from export import tocavetab
- response = HttpResponse(mimetype='text/csv')
+ response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=CAVETAB2.CSV'
tocavetab.writeCaveTab(response)
return response
def downloadSurveys(request):
from export import tosurveys
- response = HttpResponse(mimetype='text/csv')
+ response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=Surveys.csv'
tosurveys.writeCaveTab(response)
return response
@@ -94,20 +94,19 @@ def downloadLogbook(request,year=None,extension=None,queryset=None):
logbook_entries=queryset
filename='logbook'
else:
+ response = HttpResponse(content_type='text/plain')
return response(r"Error: Logbook downloader doesn't know what year you want")
if 'year' in request.GET:
year=request.GET['year']
if 'extension' in request.GET:
extension=request.GET['extension']
-
-
-
+
if extension =='txt':
- response = HttpResponse(mimetype='text/plain')
+ response = HttpResponse(content_type='text/plain')
style='2008'
elif extension == 'html':
- response = HttpResponse(mimetype='text/html')
+ response = HttpResponse(content_type='text/html')
style='2005'
template='logbook'+style+'style.'+extension
@@ -124,11 +123,11 @@ def downloadQMs(request):
try:
cave=Cave.objects.get(kataster_number=request.GET['cave_id'])
except Cave.DoesNotExist:
- cave=Cave.objects.get(name=cave_id)
+ cave=Cave.objects.get(name=request.GET['cave_id'])
from export import toqms
- response = HttpResponse(mimetype='text/csv')
+ response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename=qm.csv'
toqms.writeQmTable(response,cave)
return response
@@ -136,7 +135,7 @@ def downloadQMs(request):
def ajax_test(request):
post_text = request.POST['post_data']
return HttpResponse("{'response_text': '"+post_text+" recieved.'}",
- mimetype="application/json")
+ content_type="application/json")
def eyecandy(request):
return
@@ -144,9 +143,9 @@ def eyecandy(request):
def ajax_QM_number(request):
if request.method=='POST':
cave=Cave.objects.get(id=request.POST['cave'])
- print cave
+ print(cave)
exp=Expedition.objects.get(pk=request.POST['year'])
- print exp
+ print(exp)
res=cave.new_QM_number(exp.year)
return HttpResponse(res)
@@ -167,7 +166,7 @@ def logbook_entry_suggestions(request):
#unwiki_QMs=re.findall(unwiki_QM_pattern,lbo.text)
unwiki_QMs=[m.groupdict() for m in unwiki_QM_pattern.finditer(lbo.text)]
- print unwiki_QMs
+ print(unwiki_QMs)
for qm in unwiki_QMs:
#try:
if len(qm['year'])==2:
@@ -180,7 +179,7 @@ def logbook_entry_suggestions(request):
try:
lbo=LogbookEntry.objects.get(date__year=qm['year'],title__icontains="placeholder for QMs in")
except:
- print "failed to get placeholder for year "+str(qm['year'])
+ print("failed to get placeholder for year "+str(qm['year']))
temp_QM=QM(found_by=lbo,number=qm['number'],grade=qm['grade'])
temp_QM.grade=qm['grade']
@@ -188,7 +187,7 @@ def logbook_entry_suggestions(request):
#except:
#print 'failed'
- print unwiki_QMs
+ print(unwiki_QMs)
#wikilink_QMs=re.findall(wikilink_QM_pattern,lbo.text)
@@ -199,10 +198,10 @@ def logbook_entry_suggestions(request):
#for qm in wikilink_QMs:
#Try to look up the QM.
- print 'got 208'
+ print('got 208')
any_suggestions=True
- print 'got 210'
- return render_with_context(request,'suggestions.html',
+ print('got 210')
+ return render(request,'suggestions.html',
{
'unwiki_QMs':unwiki_QMs,
'any_suggestions':any_suggestions
@@ -262,7 +261,7 @@ def newFile(request, pslug = None):
# else:
# fileform = UploadFileForm() # An unbound form
- return render_with_context(request, 'editfile.html', {
+ return render(request, 'editfile.html', {
'fileForm': fileform,
})
diff --git a/core/views_survex.py b/core/views_survex.py
index 9fc334a..a0f4637 100644
--- a/core/views_survex.py
+++ b/core/views_survex.py
@@ -178,7 +178,7 @@ def svx(request, survex_file):
def svxraw(request, survex_file):
svx = open(os.path.join(settings.SURVEX_DATA, survex_file+".svx"), "rb")
- return HttpResponse(svx, mimetype="text")
+ return HttpResponse(svx, content_type="text")
# The cavern running function
@@ -193,20 +193,20 @@ def threed(request, survex_file):
process(survex_file)
try:
threed = open(settings.SURVEX_DATA + survex_file + ".3d", "rb")
- return HttpResponse(threed, mimetype="model/3d")
+ return HttpResponse(threed, content_type="model/3d")
except:
log = open(settings.SURVEX_DATA + survex_file + ".log", "rb")
- return HttpResponse(log, mimetype="text")
+ return HttpResponse(log, content_type="text")
def log(request, survex_file):
process(survex_file)
log = open(settings.SURVEX_DATA + survex_file + ".log", "rb")
- return HttpResponse(log, mimetype="text")
+ return HttpResponse(log, content_type="text")
def err(request, survex_file):
process(survex_file)
err = open(settings.SURVEX_DATA + survex_file + ".err", "rb")
- return HttpResponse(err, mimetype="text")
+ return HttpResponse(err, content_type="text")
diff --git a/databaseReset.py b/databaseReset.py
index c296274..7a5d0fa 100644
--- a/databaseReset.py
+++ b/databaseReset.py
@@ -109,10 +109,10 @@ def import_auto_logbooks():
for lbe in troggle.core.models.LogbookEntry.objects.all():
lbe.delete()
for expedition in troggle.core.models.Expedition.objects.all():
- directory = os.path.join(settings.EXPOWEB,
- "years",
- expedition.year,
- "autologbook")
+ directory = os.path.join(settings.EXPOWEB,
+ "years",
+ expedition.year,
+ "autologbook")
for root, dirs, filenames in os.walk(directory):
for filename in filenames:
print(os.path.join(root, filename))
@@ -195,9 +195,9 @@ if __name__ == "__main__":
elif "scans" in sys.argv:
import_surveyscans()
elif "caves" in sys.argv:
- reload_db()
- make_dirs()
- pageredirects()
+ # reload_db()
+ # make_dirs()
+ # pageredirects()
import_caves()
elif "people" in sys.argv:
import_people()
@@ -218,14 +218,14 @@ if __name__ == "__main__":
import_descriptions()
parse_descriptions()
elif "survex" in sys.argv:
- management.call_command('syncdb', interactive=False) # this sets the path so that import settings works in import_survex
+ # management.call_command('syncdb', interactive=False) # this sets the path so that import settings works in import_survex
import_survex()
elif "survexpos" in sys.argv:
- management.call_command('syncdb', interactive=False) # this sets the path so that import settings works in import_survex
+ # management.call_command('syncdb', interactive=False) # this sets the path so that import settings works in import_survex
import parsers.survex
parsers.survex.LoadPos()
elif "logbooks" in sys.argv:
- management.call_command('syncdb', interactive=False) # this sets the path so that import settings works in import_survex
+ # management.call_command('syncdb', interactive=False) # this sets the path so that import settings works in import_survex
import_logbooks()
elif "autologbooks" in sys.argv:
import_auto_logbooks()
diff --git a/flatpages/views.py b/flatpages/views.py
index 8bc25ba..6360393 100644
--- a/flatpages/views.py
+++ b/flatpages/views.py
@@ -1,6 +1,6 @@
import troggle.settings as settings
from troggle.helper import login_required_if_public
-from utils import render_with_context
+from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect, Http404
from django.core.urlresolvers import reverse
@@ -47,13 +47,13 @@ def flatpage(request, path):
o = open(os.path.normpath(settings.EXPOWEB + path + "index.htm"), "rb")
path = path + "index.htm"
except IOError:
- return render_with_context(request, 'pagenotfound.html', {'path': path})
+ return render(request, 'pagenotfound.html', {'path': path})
else:
try:
filetobeopened = os.path.normpath(settings.EXPOWEB + path)
o = open(filetobeopened, "rb")
except IOError:
- return render_with_context(request, 'pagenotfound.html', {'path': path})
+ return render(request, 'pagenotfound.html', {'path': path})
if path.endswith(".htm") or path.endswith(".html"):
html = o.read()
@@ -75,7 +75,7 @@ def flatpage(request, path):
if re.search(r"iso-8859-1", html):
body = unicode(body, "iso-8859-1")
body.strip
- return render_with_context(request, 'flatpage.html', {'editable': True, 'path': path, 'title': title, 'body': body, 'homepage': (path == "index.htm"), 'has_menu': has_menu})
+ return render(request, 'flatpage.html', {'editable': True, 'path': path, 'title': title, 'body': body, 'homepage': (path == "index.htm"), 'has_menu': has_menu})
else:
return HttpResponse(o.read(), content_type=getmimetype(path))
@@ -160,7 +160,7 @@ def editflatpage(request, path):
flatpageForm = FlatPageForm({"html": body, "title": title})
else:
flatpageForm = FlatPageForm()
- return render_with_context(request, 'editflatpage.html', {'path': path, 'form': flatpageForm, })
+ return render(request, 'editflatpage.html', {'path': path, 'form': flatpageForm, })
class FlatPageForm(forms.Form):
title = forms.CharField(widget=forms.TextInput(attrs={'size':'60'}))
diff --git a/parsers/QMs.py b/parsers/QMs.py
index efc8cd6..602b7af 100644
--- a/parsers/QMs.py
+++ b/parsers/QMs.py
@@ -17,19 +17,19 @@ def parseCaveQMs(cave,inputFile):
try:
steinBr=Cave.objects.get(official_name="Steinbr&uuml;ckenh&ouml;hle")
except Cave.DoesNotExist:
- print "Steinbruckenhoehle is not in the database. Please run parsers.cavetab first."
+ print("Steinbruckenhoehle is not in the database. Please run parsers.cavetab first.")
return
elif cave=='hauch':
try:
hauchHl=Cave.objects.get(official_name="Hauchh&ouml;hle")
except Cave.DoesNotExist:
- print "Hauchhoele is not in the database. Please run parsers.cavetab first."
+ print("Hauchhoele is not in the database. Please run parsers.cavetab first.")
return
elif cave =='kh':
try:
kh=Cave.objects.get(official_name="Kaninchenh&ouml;hle")
except Cave.DoesNotExist:
- print "KH is not in the database. Please run parsers.cavetab first."
+ print("KH is not in the database. Please run parsers.cavetab first.")
parse_KH_QMs(kh, inputFile=inputFile)
return
@@ -48,7 +48,7 @@ def parseCaveQMs(cave,inputFile):
elif cave=='hauch':
placeholder, hadToCreate = LogbookEntry.objects.get_or_create(date__year=year, title="placeholder for QMs in 234", text="QMs temporarily attached to this should be re-attached to their actual trips", defaults={"date": date(year, 1, 1),"cave":hauchHl})
if hadToCreate:
- print cave+" placeholder logbook entry for " + str(year) + " added to database"
+ print(cave + " placeholder logbook entry for " + str(year) + " added to database")
QMnum=re.match(r".*?-\d*?-X?(?P<numb>\d*)",line[0]).group("numb")
newQM = QM()
newQM.found_by=placeholder
@@ -71,19 +71,18 @@ def parseCaveQMs(cave,inputFile):
if preexistingQM.new_since_parsing==False: #if the pre-existing QM has not been modified, overwrite it
preexistingQM.delete()
newQM.save()
- print "overwriting " + str(preexistingQM) +"\r",
-
+ print("overwriting " + str(preexistingQM) +"\r")
else: # otherwise, print that it was ignored
- print "preserving "+ str(preexistingQM) + ", which was edited in admin \r",
+ print("preserving " + str(preexistingQM) + ", which was edited in admin \r")
except QM.DoesNotExist: #if there is no pre-existing QM, save the new one
newQM.save()
- print "QM "+str(newQM) + ' added to database\r',
+ print("QM "+str(newQM) + ' added to database\r')
except KeyError: #check on this one
continue
except IndexError:
- print "Index error in " + str(line)
+ print("Index error in " + str(line))
continue
def parse_KH_QMs(kh, inputFile):
@@ -104,7 +103,7 @@ def parse_KH_QMs(kh, inputFile):
}
nonLookupArgs={
'grade':res['grade'],
- 'nearest_station':res['nearest_station'],
+ 'nearest_station_name':res['nearest_station'],
'location_description':res['description']
}
@@ -115,3 +114,4 @@ parseCaveQMs(cave='stein',inputFile=r"1623/204/qm.csv")
parseCaveQMs(cave='hauch',inputFile=r"1623/234/qm.csv")
parseCaveQMs(cave='kh', inputFile="1623/161/qmtodo.htm")
#parseCaveQMs(cave='balkonhoehle',inputFile=r"1623/264/qm.csv")
+
diff --git a/parsers/logbooks.py b/parsers/logbooks.py
index ffd8e21..cecbdb3 100644
--- a/parsers/logbooks.py
+++ b/parsers/logbooks.py
@@ -45,7 +45,7 @@ def GetTripPersons(trippeople, expedition, logtime_underground):
author = res[-1][0]
return res, author
-def GetTripCave(place): #need to be fuzzier about matching here. Already a very slow function...
+def GetTripCave(place): #need to be fuzzier about matching here. Already a very slow function...
# print "Getting cave for " , place
try:
katastNumRes=[]
@@ -74,23 +74,23 @@ def GetTripCave(place): #need to be fuzzier about matching h
noncaveplaces = [ "Journey", "Loser Plateau" ]
-def EnterLogIntoDbase(date, place, title, text, trippeople, expedition, logtime_underground):
+def EnterLogIntoDbase(date, place, title, text, trippeople, expedition, logtime_underground, entry_type="wiki"):
""" saves a logbook entry and related persontrips """
trippersons, author = GetTripPersons(trippeople, expedition, logtime_underground)
if not author:
- print(" - skipping logentry" + title + " no author for entry")
+ print(" - Skipping logentry: " + title + " no author for entry")
return
-
-# tripCave = GetTripCave(place)
- #
+
+ #tripCave = GetTripCave(place)
+
lplace = place.lower()
if lplace not in noncaveplaces:
cave=GetCaveLookup().get(lplace)
#Check for an existing copy of the current entry, and save
expeditionday = expedition.get_expedition_day(date)
- lookupAttribs={'date':date, 'title':title}
- nonLookupAttribs={'place':place, 'text':text, 'expedition':expedition, 'cave':cave, 'slug':slugify(title)[:50]}
+ lookupAttribs={'date':date, 'title':title}
+ nonLookupAttribs={'place':place, 'text':text, 'expedition':expedition, 'cave':cave, 'slug':slugify(title)[:50], 'entry_type':entry_type}
lbo, created=save_carefully(models.LogbookEntry, lookupAttribs, nonLookupAttribs)
for tripperson, time_underground in trippersons:
@@ -115,7 +115,7 @@ def ParseDate(tripdate, year):
assert False, tripdate
return datetime.date(year, month, day)
-# 2007, 2008, 2006
+# 2006, 2008 - 2010
def Parselogwikitxt(year, expedition, txt):
trippara = re.findall(r"===(.*?)===([\s\S]*?)(?====)", txt)
for triphead, triptext in trippara:
@@ -140,9 +140,9 @@ def Parselogwikitxt(year, expedition, txt):
#print "\n", tripcave, "--- ppp", trippeople, len(triptext)
EnterLogIntoDbase(date = ldate, place = tripcave, title = tripplace, text = triptext, trippeople=trippeople, expedition=expedition, logtime_underground=0)
-# 2002, 2004, 2005
+# 2002, 2004, 2005, 2007, 2011 - 2018
def Parseloghtmltxt(year, expedition, txt):
- print(" - Using log html parser")
+ #print(" - Starting log html parser")
tripparas = re.findall(r"<hr\s*/>([\s\S]*?)(?=<hr)", txt)
logbook_entry_count = 0
for trippara in tripparas:
@@ -163,7 +163,6 @@ def Parseloghtmltxt(year, expedition, txt):
print("can't parse: ", trippara) # this is 2007 which needs editing
#assert s, trippara
continue
-
tripid, tripid1, tripdate, trippeople, triptitle, triptext, tu = s.groups()
ldate = ParseDate(tripdate.strip(), year)
#assert tripid[:-1] == "t" + tripdate, (tripid, tripdate)
@@ -174,16 +173,18 @@ def Parseloghtmltxt(year, expedition, txt):
tripcave = triptitles[0]
else:
tripcave = "UNKNOWN"
- #print "\n", tripcave, "--- ppp", trippeople, len(triptext)
+ #print("\n", tripcave, "--- ppp", trippeople, len(triptext))
ltriptext = re.sub(r"</p>", "", triptext)
ltriptext = re.sub(r"\s*?\n\s*", " ", ltriptext)
ltriptext = re.sub(r"<p>", "\n\n", ltriptext).strip()
- EnterLogIntoDbase(date = ldate, place = tripcave, title = triptitle, text = ltriptext, trippeople=trippeople, expedition=expedition, logtime_underground=0)
+ EnterLogIntoDbase(date = ldate, place = tripcave, title = triptitle, text = ltriptext,
+ trippeople=trippeople, expedition=expedition, logtime_underground=0,
+ entry_type="html")
if logbook_entry_count == 0:
print(" - No trip entrys found in logbook, check the syntax matches htmltxt format")
-# main parser for pre-2001. simpler because the data has been hacked so much to fit it
+# main parser for 1991 - 2001. simpler because the data has been hacked so much to fit it
def Parseloghtml01(year, expedition, txt):
tripparas = re.findall(r"<hr[\s/]*>([\s\S]*?)(?=<hr)", txt)
for trippara in tripparas:
@@ -227,9 +228,11 @@ def Parseloghtml01(year, expedition, txt):
#print ldate, trippeople.strip()
# could includ the tripid (url link for cross referencing)
- EnterLogIntoDbase(date=ldate, place=tripcave, title=triptitle, text=ltriptext, trippeople=trippeople, expedition=expedition, logtime_underground=0)
-
+ EnterLogIntoDbase(date=ldate, place=tripcave, title=triptitle, text=ltriptext,
+ trippeople=trippeople, expedition=expedition, logtime_underground=0,
+ entry_type="html")
+# parser for 2003
def Parseloghtml03(year, expedition, txt):
tripparas = re.findall(r"<hr\s*/>([\s\S]*?)(?=<hr)", txt)
for trippara in tripparas:
@@ -256,7 +259,9 @@ def Parseloghtml03(year, expedition, txt):
ltriptext = re.sub(r"\s*?\n\s*", " ", ltriptext)
ltriptext = re.sub(r"<p>", "\n\n", ltriptext).strip()
ltriptext = re.sub(r"[^\s0-9a-zA-Z\-.,:;'!&()\[\]<>?=+*%]", "_NONASCII_", ltriptext)
- EnterLogIntoDbase(date = ldate, place = tripcave, title = triptitle, text = ltriptext, trippeople=trippeople, expedition=expedition, logtime_underground=0)
+ EnterLogIntoDbase(date = ldate, place = tripcave, title = triptitle,
+ text = ltriptext, trippeople=trippeople, expedition=expedition,
+ logtime_underground=0, entry_type="html")
def SetDatesFromLogbookEntries(expedition):
@@ -281,8 +286,7 @@ def SetDatesFromLogbookEntries(expedition):
def LoadLogbookForExpedition(expedition):
""" Parses all logbook entries for one expedition """
- expowebbase = os.path.join(settings.EXPOWEB, "years")
- #year = str(expedition.year)
+ expowebbase = os.path.join(settings.EXPOWEB, "years")
yearlinks = settings.LOGBOOK_PARSER_SETTINGS
logbook_parseable = False
@@ -294,6 +298,7 @@ def LoadLogbookForExpedition(expedition):
file_in.close()
parsefunc = year_settings[1]
logbook_parseable = True
+ print(" - Parsing logbook: " + year_settings[0] + "\n - Using parser: " + year_settings[1])
else:
try:
file_in = open(os.path.join(expowebbase, expedition.year, settings.DEFAULT_LOGBOOK_FILE))
@@ -304,7 +309,7 @@ def LoadLogbookForExpedition(expedition):
parsefunc = settings.DEFAULT_LOGBOOK_PARSER
except (IOError):
logbook_parseable = False
- print("Couldn't open default logbook file and nothing set for expo " + expedition.year)
+ print("Couldn't open default logbook file and nothing in settings for expo " + expedition.year)
if logbook_parseable:
parser = globals()[parsefunc]
diff --git a/parsers/people.py b/parsers/people.py
index 9b06f4e..4bf84a0 100644
--- a/parsers/people.py
+++ b/parsers/people.py
@@ -59,22 +59,19 @@ def LoadPersonsExpos():
save_carefully(models.Expedition, lookupAttribs, nonLookupAttribs)
-
# make persons
print("Loading personexpeditions")
- #expoers2008 = """Edvin Deadman,Kathryn Hopkins,Djuke Veldhuis,Becka Lawson,Julian Todd,Natalie Uomini,Aaron Curtis,Tony Rooke,Ollie Stevens,Frank Tully,Martin Jahnke,Mark Shinwell,Jess Stirrups,Nial Peters,Serena Povia,Olly Madge,Steve Jones,Pete Harley,Eeva Makiranta,Keith Curtis""".split(",")
- #expomissing = set(expoers2008)
for personline in personreader:
name = personline[header["Name"]]
- name = re.sub("<.*?>", "", name)
- mname = re.match("(\w+)(?:\s((?:van |ten )?\w+))?(?:\s\(([^)]*)\))?", name)
+ name = re.sub(r"<.*?>", "", name)
+ mname = re.match(r"(\w+)(?:\s((?:van |ten )?\w+))?(?:\s\(([^)]*)\))?", name)
nickname = mname.group(3) or ""
-
+
lookupAttribs={'first_name':mname.group(1), 'last_name':(mname.group(2) or "")}
nonLookupAttribs={'is_vfho':personline[header["VfHO member"]],}
person, created = save_carefully(models.Person, lookupAttribs, nonLookupAttribs)
-
+
parseMugShotAndBlurb(personline=personline, header=header, person=person)
# make person expedition from table
@@ -88,6 +85,8 @@ def LoadPersonsExpos():
# this fills in those people for whom 2008 was their first expo
#print "Loading personexpeditions 2008"
+ #expoers2008 = """Edvin Deadman,Kathryn Hopkins,Djuke Veldhuis,Becka Lawson,Julian Todd,Natalie Uomini,Aaron Curtis,Tony Rooke,Ollie Stevens,Frank Tully,Martin Jahnke,Mark Shinwell,Jess Stirrups,Nial Peters,Serena Povia,Olly Madge,Steve Jones,Pete Harley,Eeva Makiranta,Keith Curtis""".split(",")
+ #expomissing = set(expoers2008)
#for name in expomissing:
# firstname, lastname = name.split()
# is_guest = name in ["Eeva Makiranta", "Keith Curtis"]
@@ -103,18 +102,6 @@ def LoadPersonsExpos():
# personexpedition = models.PersonExpedition(person=person, expedition=expedition, nickname="", is_guest=is_guest)
# personexpedition.save()
- #Notability is now a method of person. Makes no sense to store it in the database; it would need to be recalculated every time something changes. - AC 16 Feb 09
- # could rank according to surveying as well
- #print "Setting person notability"
- #for person in models.Person.objects.all():
- #person.notability = 0.0
- #for personexpedition in person.personexpedition_set.all():
- #if not personexpedition.is_guest:
- #person.notability += 1.0 / (2012 - int(personexpedition.expedition.year))
- #person.bisnotable = person.notability > 0.3 # I don't know how to filter by this
- #person.save()
-
-
# used in other referencing parser functions
# expedition name lookup cached for speed (it's a very big list)
Gpersonexpeditionnamelookup = { }
diff --git a/parsers/survex.py b/parsers/survex.py
index 536314f..a999c43 100644
--- a/parsers/survex.py
+++ b/parsers/survex.py
@@ -92,13 +92,13 @@ def RecursiveLoad(survexblock, survexfile, fin, textlines):
teammembers = [ ]
# uncomment to print out all files during parsing
- print("Reading file:", survexblock.survexfile.path)
+ print("Reading file: " + survexblock.survexfile.path)
while True:
svxline = fin.readline().decode("latin1")
if not svxline:
return
textlines.append(svxline)
-
+
# break the line at the comment
sline, comment = re.match(r"([^;]*?)\s*(?:;\s*(.*))?\n?$", svxline.strip()).groups()
diff --git a/parsers/surveys.py b/parsers/surveys.py
index 72a05f3..29070e8 100644
--- a/parsers/surveys.py
+++ b/parsers/surveys.py
@@ -99,7 +99,7 @@ def parseSurveyScans(expedition, logfile=None):
#scanList = listdir(expedition.year, surveyFolder)
scanList=os.listdir(os.path.join(yearPath,surveyFolder))
except AttributeError:
- print(surveyFolder + " ignored\r",)
+ print("Folder: " + surveyFolder + " ignored\r")
continue
for scan in scanList:
@@ -107,7 +107,7 @@ def parseSurveyScans(expedition, logfile=None):
scanChopped=re.match(r'(?i).*(notes|elev|plan|elevation|extend)(\d*)\.(png|jpg|jpeg)',scan).groups()
scanType,scanNumber,scanFormat=scanChopped
except AttributeError:
- print(scan + " ignored\r",)
+ print("File: " + scan + " ignored\r")
continue
if scanType == 'elev' or scanType == 'extend':
scanType = 'elevation'
diff --git a/settings.py b/settings.py
index b0656ae..9770fd7 100644
--- a/settings.py
+++ b/settings.py
@@ -45,8 +45,8 @@ NOTABLECAVESHREFS = [ "161", "204", "258", "76", "107", "264" ]
# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/troggle/media-admin/'
PHOTOS_ROOT = os.path.join(EXPOWEB, 'photos')
-CAVEDESCRIPTIONS = os.path.join(EXPOWEB, "noinfo", "cave_data")
-ENTRANCEDESCRIPTIONS = os.path.join(EXPOWEB, "noinfo", "entrance_data")
+CAVEDESCRIPTIONS = os.path.join(EXPOWEB, "cave_data")
+ENTRANCEDESCRIPTIONS = os.path.join(EXPOWEB, "entrance_data")
MEDIA_URL = urlparse.urljoin(URL_ROOT , '/site_media/')
SURVEYS_URL = urlparse.urljoin(URL_ROOT , '/survey_scans/')
diff --git a/templates/editcave2.html b/templates/editcave2.html
index 85df6e7..03deeea 100644
--- a/templates/editcave2.html
+++ b/templates/editcave2.html
@@ -9,6 +9,7 @@
<script src="{{ settings.TINY_MCE_MEDIA_URL }}tiny_mce.js" type="text/javascript"></script>
{% endblock %}
{% block content %}
+<h1>Edit Cave</h1>
<form action="" method="post">{% csrf_token %}
<table>{{ form }}{{caveAndEntranceFormSet}}</table>
{{ versionControlForm }}
diff --git a/templates/frontpage.html b/templates/frontpage.html
index 28206b6..eed6098 100644
--- a/templates/frontpage.html
+++ b/templates/frontpage.html
@@ -16,7 +16,7 @@
{% if entry.is_deletion %}
{{ entry.object_repr }}
{% else %}
- <a href="admin/{{ entry.get_admin_url }}">{{ entry.object_repr }}</a>
+ <a href="admin/{{ entry.get_admin_url }}/">{{ entry.object_repr }}</a>
{% endif %}
<br/>
{% if entry.content_type %}
diff --git a/templates/logbookentry.html b/templates/logbookentry.html
index 2b60996..0534de9 100644
--- a/templates/logbookentry.html
+++ b/templates/logbookentry.html
@@ -65,9 +65,14 @@
</div>
<div id="col1">
-<div class="logbookentry">
-<b>{{logbookentry.date}}</b>
- {{logbookentry.text|wiki_to_html}}</div>
+ <div class="logbookentry">
+ <b>{{logbookentry.date}}</b>
+ {% if logbookentry.entry_type == "html" %}
+ <p>{{logbookentry.text|safe}}</p>
+ {% else %}
+ {{logbookentry.text|wiki_to_html}}
+ {% endif %}
+ </div>
</div>
</div>
diff --git a/urls.py b/urls.py
index 0dbd9a0..287755b 100644
--- a/urls.py
+++ b/urls.py
@@ -53,7 +53,7 @@ actualurlpatterns = patterns('',
url(r'^getLogBookEntries/(?P<expeditionslug>.*)', views_logbooks.get_logbook_entries, name = "get_logbook_entries"),
- url(r'^cave/new/$', edit_cave, name="newcave"),
+ url(r'^cave/new/$', views_caves.edit_cave, name="newcave"),
url(r'^cave/(?P<cave_id>[^/]+)/?$', views_caves.cave, name="cave"),
url(r'^caveslug/([^/]+)/?$', views_caves.caveSlug, name="caveSlug"),
url(r'^cave/entrance/([^/]+)/?$', views_caves.caveEntrance),
@@ -71,7 +71,7 @@ actualurlpatterns = patterns('',
# url(r'^jgtuploadfile$', view_surveys.jgtuploadfile, name="jgtuploadfile"),
url(r'^cave/(?P<cave_id>[^/]+)/?(?P<ent_letter>[^/])$', ent),
- url(r'^cave/(?P<slug>[^/]+)/edit/$', edit_cave, name="edit_cave"),
+ url(r'^cave/(?P<slug>[^/]+)/edit/$', views_caves.edit_cave, name="edit_cave"),
#(r'^cavesearch', caveSearch),
diff --git a/utils.py b/utils.py
index a91a1aa..d5deeda 100644
--- a/utils.py
+++ b/utils.py
@@ -1,4 +1,5 @@
from django.conf import settings
+from django.shortcuts import render
import random, re, logging
from troggle.core.models import CaveDescription
@@ -58,21 +59,6 @@ def save_carefully(objectType, lookupAttribs={}, nonLookupAttribs={}):
if not created and not instance.new_since_parsing:
logging.info(str(instance) + " existed in the database unchanged since last parse. It was overwritten by the current script. \n")
return (instance, created)
-
-def render_with_context(req, *args, **kwargs):
- """this is the snippet from http://www.djangosnippets.org/snippets/3/
-
- Django uses Context, not RequestContext when you call render_to_response.
- We always want to use RequestContext, so that django adds the context from
- settings.TEMPLATE_CONTEXT_PROCESSORS. This way we automatically get
- necessary settings variables passed to each template. So we use a custom
- method, render_response instead of render_to_response. Hopefully future
- Django releases will make this unnecessary."""
-
- from django.shortcuts import render_to_response
- from django.template import RequestContext
- kwargs['context_instance'] = RequestContext(req)
- return render_to_response(*args, **kwargs)
re_body = re.compile(r"\<body[^>]*\>(.*)\</body\>", re.DOTALL)
re_title = re.compile(r"\<title[^>]*\>(.*)\</title\>", re.DOTALL)