summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorSam Wenham <sam@wenhams.co.uk>2019-07-16 00:07:37 +0100
committerSam Wenham <sam@wenhams.co.uk>2019-07-16 00:07:37 +0100
commit08a41941f9e2b35b16548624d5070216dd933f79 (patch)
treecfd0bd7dfc68c77cf66d92d72b6d1d74e6155880 /core
parenta26109cb3006dd64e1bec38100397ad636813e98 (diff)
downloadtroggle-08a41941f9e2b35b16548624d5070216dd933f79.tar.gz
troggle-08a41941f9e2b35b16548624d5070216dd933f79.tar.bz2
troggle-08a41941f9e2b35b16548624d5070216dd933f79.zip
Part one of getting troggle to work with django 1.10
Major rework of how survex is processed
Diffstat (limited to 'core')
-rw-r--r--core/admin.py9
-rw-r--r--core/models.py31
-rw-r--r--core/models_survex.py25
-rw-r--r--core/view_surveys.py14
-rw-r--r--core/views_caves.py225
-rw-r--r--core/views_logbooks.py8
-rw-r--r--core/views_survex.py81
7 files changed, 216 insertions, 177 deletions
diff --git a/core/admin.py b/core/admin.py
index 71bbd61..ca38cfb 100644
--- a/core/admin.py
+++ b/core/admin.py
@@ -118,24 +118,27 @@ class EntranceAdmin(TroggleModelAdmin):
admin.site.register(DPhoto)
admin.site.register(Cave, CaveAdmin)
+admin.site.register(CaveSlug)
admin.site.register(Area)
#admin.site.register(OtherCaveName)
admin.site.register(CaveAndEntrance)
admin.site.register(NewSubCave)
admin.site.register(CaveDescription)
admin.site.register(Entrance, EntranceAdmin)
-admin.site.register(SurvexBlock, SurvexBlockAdmin)
admin.site.register(Expedition)
admin.site.register(Person,PersonAdmin)
-admin.site.register(SurvexPersonRole)
admin.site.register(PersonExpedition,PersonExpeditionAdmin)
admin.site.register(LogbookEntry, LogbookEntryAdmin)
#admin.site.register(PersonTrip)
admin.site.register(QM, QMAdmin)
admin.site.register(Survey, SurveyAdmin)
admin.site.register(ScannedImage)
-admin.site.register(SurvexStation)
+admin.site.register(SurvexDirectory)
+admin.site.register(SurvexFile)
+admin.site.register(SurvexStation)
+admin.site.register(SurvexBlock)
+admin.site.register(SurvexPersonRole)
admin.site.register(SurvexScansFolder)
admin.site.register(SurvexScanSingle)
diff --git a/core/models.py b/core/models.py
index f65efed..9529582 100644
--- a/core/models.py
+++ b/core/models.py
@@ -153,7 +153,7 @@ class Person(TroggleModel):
for personexpedition in self.personexpedition_set.all():
if not personexpedition.is_guest:
- print(personexpedition.expedition.year)
+ # print(personexpedition.expedition.year)
notability += Decimal(1) / (max_expo_val - int(personexpedition.expedition.year))
return notability
@@ -248,7 +248,7 @@ class LogbookEntry(TroggleModel):
("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()
+ date = models.DateTimeField()#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-
title = models.CharField(max_length=settings.MAX_LOGBOOK_ENTRY_TITLE_LENGTH)
@@ -377,12 +377,14 @@ class CaveSlug(models.Model):
cave = models.ForeignKey('Cave')
slug = models.SlugField(max_length=50, unique = True)
primary = models.BooleanField(default=False)
-
+
+ def __unicode__(self):
+ return self.slug
class Cave(TroggleModel):
# too much here perhaps,
official_name = models.CharField(max_length=160)
- area = models.ManyToManyField(Area, blank=True, null=True)
+ area = models.ManyToManyField(Area, blank=True)
kataster_code = models.CharField(max_length=20,blank=True,null=True)
kataster_number = models.CharField(max_length=10,blank=True, null=True)
unofficial_number = models.CharField(max_length=60,blank=True, null=True)
@@ -535,13 +537,15 @@ class Cave(TroggleModel):
def getCaveByReference(reference):
areaname, code = reference.split("-", 1)
- print(areaname, code)
+ #print(areaname, code)
area = Area.objects.get(short_name = areaname)
- print(area)
+ #print(area)
foundCaves = list(Cave.objects.filter(area = area, kataster_number = code).all()) + list(Cave.objects.filter(area = area, unofficial_number = code).all())
print(list(foundCaves))
- assert len(foundCaves) == 1
- return foundCaves[0]
+ if len(foundCaves) == 1:
+ return foundCaves[0]
+ else:
+ return False
class OtherCaveName(TroggleModel):
name = models.CharField(max_length=160)
@@ -706,9 +710,9 @@ class CaveDescription(TroggleModel):
short_name = models.CharField(max_length=50, unique = True)
long_name = models.CharField(max_length=200, blank=True, null=True)
description = models.TextField(blank=True,null=True)
- linked_subcaves = models.ManyToManyField("NewSubCave", blank=True,null=True)
- linked_entrances = models.ManyToManyField("Entrance", blank=True,null=True)
- linked_qms = models.ManyToManyField("QM", blank=True,null=True)
+ linked_subcaves = models.ManyToManyField("NewSubCave", blank=True)
+ linked_entrances = models.ManyToManyField("Entrance", blank=True)
+ linked_qms = models.ManyToManyField("QM", blank=True)
def __unicode__(self):
if self.long_name:
@@ -782,7 +786,7 @@ photoFileStorage = FileSystemStorage(location=settings.PHOTOS_ROOT, base_url=set
class DPhoto(TroggleImageModel):
caption = models.CharField(max_length=1000,blank=True,null=True)
contains_logbookentry = models.ForeignKey(LogbookEntry,blank=True,null=True)
- contains_person = models.ManyToManyField(Person,blank=True,null=True)
+ contains_person = models.ManyToManyField(Person,blank=True)
file = models.ImageField(storage=photoFileStorage, upload_to='.',)
is_mugshot = models.BooleanField(default=False)
contains_cave = models.ForeignKey(Cave,blank=True,null=True)
@@ -856,8 +860,9 @@ class Survey(TroggleModel):
integrated_into_main_sketch_on = models.DateField(blank=True,null=True)
integrated_into_main_sketch_by = models.ForeignKey('Person' ,related_name='integrated_into_main_sketch_by', blank=True,null=True)
rendered_image = models.ImageField(upload_to='renderedSurveys',blank=True,null=True)
+
def __unicode__(self):
- return self.expedition.year+"#"+"%02d" % int(self.wallet_number)
+ return self.expedition.year+"#" + "%s%02d" % (self.wallet_letter, int(self.wallet_number))
def notes(self):
return self.scannedimage_set.filter(contents='notes')
diff --git a/core/models_survex.py b/core/models_survex.py
index 3bae04c..e78cd48 100644
--- a/core/models_survex.py
+++ b/core/models_survex.py
@@ -18,10 +18,13 @@ class SurvexDirectory(models.Model):
cave = models.ForeignKey('Cave', blank=True, null=True)
primarysurvexfile = models.ForeignKey('SurvexFile', related_name='primarysurvexfile', blank=True, null=True)
# could also include files in directory but not referenced
-
+
+ def __unicode__(self):
+ return self.path
+
class Meta:
- ordering = ('id',)
-
+ ordering = ('path',)
+
class SurvexFile(models.Model):
path = models.CharField(max_length=200)
survexdirectory = models.ForeignKey("SurvexDirectory", blank=True, null=True)
@@ -29,6 +32,9 @@ class SurvexFile(models.Model):
class Meta:
ordering = ('id',)
+
+ def __unicode__(self):
+ return self.path + '.svx' or 'no file'
def exists(self):
fname = os.path.join(settings.SURVEX_DATA, self.path + ".svx")
@@ -66,6 +72,9 @@ class SurvexStation(models.Model):
x = models.FloatField(blank=True, null=True)
y = models.FloatField(blank=True, null=True)
z = models.FloatField(blank=True, null=True)
+
+ def __unicode__(self):
+ return self.block.cave.slug() + '/' + self.block.name + '/' + self.name or 'No station name'
def path(self):
r = self.name
@@ -109,7 +118,7 @@ class SurvexBlock(models.Model):
text = models.TextField()
cave = models.ForeignKey('Cave', blank=True, null=True)
- date = models.DateField(blank=True, null=True)
+ date = models.DateTimeField(blank=True, null=True)
expeditionday = models.ForeignKey("ExpeditionDay", null=True)
expedition = models.ForeignKey('Expedition', blank=True, null=True)
@@ -177,7 +186,7 @@ ROLE_CHOICES = (
class SurvexPersonRole(models.Model):
survexblock = models.ForeignKey('SurvexBlock')
nrole = models.CharField(choices=ROLE_CHOICES, max_length=200, blank=True, null=True)
- # increasing levels of precision
+ # increasing levels of precision
personname = models.CharField(max_length=100)
person = models.ForeignKey('Person', blank=True, null=True)
personexpedition = models.ForeignKey('PersonExpedition', blank=True, null=True)
@@ -194,6 +203,9 @@ class SurvexScansFolder(models.Model):
class Meta:
ordering = ('walletname',)
+
+ def __unicode__(self):
+ return self.walletname or 'no wallet'
def get_absolute_url(self):
return urlparse.urljoin(settings.URL_ROOT, reverse('surveyscansfolder', kwargs={"path":re.sub("#", "%23", self.walletname)}))
@@ -205,6 +217,9 @@ class SurvexScanSingle(models.Model):
class Meta:
ordering = ('name',)
+
+ def __unicode__(self):
+ return self.survexscansfolder.walletname + '/' + self.name
def get_absolute_url(self):
return urlparse.urljoin(settings.URL_ROOT, reverse('surveyscansingle', kwargs={"path":re.sub("#", "%23", self.survexscansfolder.walletname), "file":self.name}))
diff --git a/core/view_surveys.py b/core/view_surveys.py
index aad48c3..04c6ca6 100644
--- a/core/view_surveys.py
+++ b/core/view_surveys.py
@@ -1,6 +1,6 @@
from django.conf import settings
import fileAbstraction
-from django.shortcuts import render_to_response
+from django.shortcuts import render
from django.http import HttpResponse, Http404
import os, stat
import re
@@ -86,7 +86,7 @@ def jgtfile(request, f):
upperdirs.append((href, hpath))
upperdirs.append(("", "/"))
- return render_to_response('listdir.html', {'file':f, 'listdirfiles':listdirfiles, 'listdirdirs':listdirdirs, 'upperdirs':upperdirs, 'settings': settings})
+ return render(request, 'listdir.html', {'file':f, 'listdirfiles':listdirfiles, 'listdirdirs':listdirdirs, 'upperdirs':upperdirs, 'settings': settings})
# flat output of file when loaded
if os.path.isfile(fp):
@@ -163,27 +163,27 @@ def jgtuploadfile(request):
#print ("FFF", request.FILES.values())
message = ""
print "gothere"
- return render_to_response('fileupload.html', {'message':message, 'filesuploaded':filesuploaded, 'settings': settings})
+ return render(request, 'fileupload.html', {'message':message, 'filesuploaded':filesuploaded, 'settings': settings})
def surveyscansfolder(request, path):
#print [ s.walletname for s in SurvexScansFolder.objects.all() ]
survexscansfolder = SurvexScansFolder.objects.get(walletname=urllib.unquote(path))
- return render_to_response('survexscansfolder.html', { 'survexscansfolder':survexscansfolder, 'settings': settings })
+ return render(request, 'survexscansfolder.html', { 'survexscansfolder':survexscansfolder, 'settings': settings })
def surveyscansingle(request, path, file):
survexscansfolder = SurvexScansFolder.objects.get(walletname=urllib.unquote(path))
survexscansingle = SurvexScanSingle.objects.get(survexscansfolder=survexscansfolder, name=file)
return HttpResponse(content=open(survexscansingle.ffile), content_type=getMimeType(path.split(".")[-1]))
- #return render_to_response('survexscansfolder.html', { 'survexscansfolder':survexscansfolder, 'settings': settings })
+ #return render(request, 'survexscansfolder.html', { 'survexscansfolder':survexscansfolder, 'settings': settings })
def surveyscansfolders(request):
survexscansfolders = SurvexScansFolder.objects.all()
- return render_to_response('survexscansfolders.html', { 'survexscansfolders':survexscansfolders, 'settings': settings })
+ return render(request, 'survexscansfolders.html', { 'survexscansfolders':survexscansfolders, 'settings': settings })
def tunneldata(request):
tunnelfiles = TunnelFile.objects.all()
- return render_to_response('tunnelfiles.html', { 'tunnelfiles':tunnelfiles, 'settings': settings })
+ return render(request, 'tunnelfiles.html', { 'tunnelfiles':tunnelfiles, 'settings': settings })
def tunnelfile(request, path):
diff --git a/core/views_caves.py b/core/views_caves.py
index af76b1e..7b0555f 100644
--- a/core/views_caves.py
+++ b/core/views_caves.py
@@ -37,7 +37,7 @@ def numericalcmp(x, y):
-def caveCmp(x, y):
+def caveCmp(x, y):
if x.kataster_number:
if y.kataster_number:
return numericalcmp(x.kataster_number, y.kataster_number) # Note that cave kataster numbers are not generally integers.
@@ -240,7 +240,7 @@ def entranceSlug(request, slug):
def survexblock(request, survexpath):
survexpath = re.sub("/", ".", survexpath)
- print "jjjjjj", survexpath
+ print("jjjjjj", survexpath)
survexblock = models.SurvexBlock.objects.get(survexpath=survexpath)
#ftext = survexblock.filecontents()
ftext = survexblock.text
@@ -277,30 +277,30 @@ def get_qms(request, caveslug):
return render(request,'options.html', {"items": [(e.entrance.slug(), e.entrance.slug()) for e in cave.entrances()]})
areanames = [
- #('', 'Location unclear'),
- ('1a', '1a &ndash; Plateau: around Top Camp'),
- ('1b', '1b &ndash; Western plateau near 182'),
- ('1c', '1c &ndash; Eastern plateau near 204 walk-in path'),
- ('1d', '1d &ndash; Further plateau around 76'),
- ('2a', '2a &ndash; Southern Schwarzmooskogel near 201 path and the Nipple'),
- ('2b', '2b &ndash; Eish&ouml;hle area'),
- ('2b or 4 (unclear)', '2b or 4 (unclear)'),
- ('2c', '2c &ndash; Kaninchenh&ouml;hle area'),
- ('2d', '2d &ndash; Steinbr&uuml;ckenh&ouml;hle area'),
- ('3', '3 &ndash; Br&auml;uning Alm'),
- ('4', '4 &ndash; Kratzer valley'),
- ('5', '5 &ndash; Schwarzmoos-Wildensee'),
- ('6', '6 &ndash; Far plateau'),
- ('1626 or 6 (borderline)', '1626 or 6 (borderline)'),
- ('7', '7 &ndash; Egglgrube'),
- ('8a', '8a &ndash; Loser south face'),
- ('8b', '8b &ndash; Loser below Dimmelwand'),
- ('8c', '8c &ndash; Augst See'),
- ('8d', '8d &ndash; Loser-Hochganger ridge'),
- ('9', '9 &ndash; Gschwandt Alm'),
- ('10', '10 &ndash; Altaussee'),
- ('11', '11 &ndash; Augstbach')
- ]
+ #('', 'Location unclear'),
+ ('1a', '1a &ndash; Plateau: around Top Camp'),
+ ('1b', '1b &ndash; Western plateau near 182'),
+ ('1c', '1c &ndash; Eastern plateau near 204 walk-in path'),
+ ('1d', '1d &ndash; Further plateau around 76'),
+ ('2a', '2a &ndash; Southern Schwarzmooskogel near 201 path and the Nipple'),
+ ('2b', '2b &ndash; Eish&ouml;hle area'),
+ ('2b or 4 (unclear)', '2b or 4 (unclear)'),
+ ('2c', '2c &ndash; Kaninchenh&ouml;hle area'),
+ ('2d', '2d &ndash; Steinbr&uuml;ckenh&ouml;hle area'),
+ ('3', '3 &ndash; Br&auml;uning Alm'),
+ ('4', '4 &ndash; Kratzer valley'),
+ ('5', '5 &ndash; Schwarzmoos-Wildensee'),
+ ('6', '6 &ndash; Far plateau'),
+ ('1626 or 6 (borderline)', '1626 or 6 (borderline)'),
+ ('7', '7 &ndash; Egglgrube'),
+ ('8a', '8a &ndash; Loser south face'),
+ ('8b', '8b &ndash; Loser below Dimmelwand'),
+ ('8c', '8c &ndash; Augst See'),
+ ('8d', '8d &ndash; Loser-Hochganger ridge'),
+ ('9', '9 &ndash; Gschwandt Alm'),
+ ('10', '10 &ndash; Altaussee'),
+ ('11', '11 &ndash; Augstbach')
+ ]
def prospecting(request):
@@ -318,21 +318,21 @@ def prospecting(request):
# big map first (zoom factor ignored)
maps = {
-# id left top right bottom zoom
-# G&K G&K G&K G&K factor
-"all": [33810.4, 85436.5, 38192.0, 81048.2, 0.35,
- "All"],
-"40": [36275.6, 82392.5, 36780.3, 81800.0, 3.0,
- "Eish&ouml;hle"],
-"76": [35440.0, 83220.0, 36090.0, 82670.0, 1.3,
- "Eislufth&ouml;hle"],
-"204": [36354.1, 84154.5, 37047.4, 83300, 3.0,
- "Steinbr&uuml;ckenh&ouml;hle"],
-"tc": [35230.0, 82690.0, 36110.0, 82100.0, 3.0,
- "Near Top Camp"],
+# id left top right bottom zoom
+# G&K G&K G&K G&K factor
+"all": [33810.4, 85436.5, 38192.0, 81048.2, 0.35,
+ "All"],
+"40": [36275.6, 82392.5, 36780.3, 81800.0, 3.0,
+ "Eish&ouml;hle"],
+"76": [35440.0, 83220.0, 36090.0, 82670.0, 1.3,
+ "Eislufth&ouml;hle"],
+"204": [36354.1, 84154.5, 37047.4, 83300, 3.0,
+ "Steinbr&uuml;ckenh&ouml;hle"],
+"tc": [35230.0, 82690.0, 36110.0, 82100.0, 3.0,
+ "Near Top Camp"],
"grieß":
- [36000.0, 86300.0, 38320.0, 84400.0, 4.0,
- "Grießkogel Area"],
+ [36000.0, 86300.0, 38320.0, 84400.0, 4.0,
+ "Grießkogel Area"],
}
for n in maps.keys():
@@ -353,50 +353,50 @@ ZOOM = 4
DESC = 5
areacolours = {
- '1a' : '#00ffff',
- '1b' : '#ff00ff',
- '1c' : '#ffff00',
- '1d' : '#ffffff',
- '2a' : '#ff0000',
- '2b' : '#00ff00',
- '2c' : '#008800',
- '2d' : '#ff9900',
- '3' : '#880000',
- '4' : '#0000ff',
- '6' : '#000000', # doubles for surface fixed pts, and anything else
- '7' : '#808080'
- }
+ '1a' : '#00ffff',
+ '1b' : '#ff00ff',
+ '1c' : '#ffff00',
+ '1d' : '#ffffff',
+ '2a' : '#ff0000',
+ '2b' : '#00ff00',
+ '2c' : '#008800',
+ '2d' : '#ff9900',
+ '3' : '#880000',
+ '4' : '#0000ff',
+ '6' : '#000000', # doubles for surface fixed pts, and anything else
+ '7' : '#808080'
+ }
for FONT in [
- "/usr/share/fonts/truetype/freefont/FreeSans.ttf",
- "/usr/X11R6/lib/X11/fonts/truetype/arial.ttf",
- "C:\WINNT\Fonts\ARIAL.TTF"
- ]:
- if os.path.isfile(FONT): break
+ "/usr/share/fonts/truetype/freefont/FreeSans.ttf",
+ "/usr/X11R6/lib/X11/fonts/truetype/arial.ttf",
+ "C:\WINNT\Fonts\ARIAL.TTF"
+ ]:
+ if os.path.isfile(FONT): break
TEXTSIZE = 16
CIRCLESIZE =8
LINEWIDTH = 2
myFont = ImageFont.truetype(FONT, TEXTSIZE)
def mungecoord(x, y, mapcode, img):
- # Top of Zinken is 73 1201 = dataset 34542 81967
- # Top of Hinter is 1073 562 = dataset 36670 83317
- # image is 1417 by 2201
- # FACTOR1 = 1000.0 / (36670.0-34542.0)
- # FACTOR2 = (1201.0-562.0) / (83317 - 81967)
- # FACTOR = (FACTOR1 + FACTOR2)/2
- # The factors aren't the same as the scanned map's at a slight angle. I
- # can't be bothered to fix this. Since we zero on the Hinter it makes
- # very little difference for caves in the areas round 76 or 204.
- # xoffset = (x - 36670)*FACTOR
- # yoffset = (y - 83317)*FACTOR
- # return (1073 + xoffset, 562 - yoffset)
-
- m = maps[mapcode]
- factorX, factorY = img.size[0] / (m[R] - m[L]), img.size[1] / (m[T] - m[B])
- return ((x - m[L]) * factorX, (m[T] - y) * factorY)
-
+ # Top of Zinken is 73 1201 = dataset 34542 81967
+ # Top of Hinter is 1073 562 = dataset 36670 83317
+ # image is 1417 by 2201
+ # FACTOR1 = 1000.0 / (36670.0-34542.0)
+ # FACTOR2 = (1201.0-562.0) / (83317 - 81967)
+ # FACTOR = (FACTOR1 + FACTOR2)/2
+ # The factors aren't the same as the scanned map's at a slight angle. I
+ # can't be bothered to fix this. Since we zero on the Hinter it makes
+ # very little difference for caves in the areas round 76 or 204.
+ # xoffset = (x - 36670)*FACTOR
+ # yoffset = (y - 83317)*FACTOR
+ # return (1073 + xoffset, 562 - yoffset)
+
+ m = maps[mapcode]
+ factorX, factorY = img.size[0] / (m[R] - m[L]), img.size[1] / (m[T] - m[B])
+ return ((x - m[L]) * factorX, (m[T] - y) * factorY)
+
COL_TYPES = {True: "red",
False: "#dddddd",
"Reference": "#dddddd"}
@@ -422,40 +422,40 @@ def prospecting_image(request, name):
m = maps[name]
#imgmaps = []
if name == "all":
- img = mainImage
+ img = mainImage
else:
- M = maps['all']
- W, H = mainImage.size
- l = int((m[L] - M[L]) / (M[R] - M[L]) * W)
- t = int((m[T] - M[T]) / (M[B] - M[T]) * H)
- r = int((m[R] - M[L]) / (M[R] - M[L]) * W)
- b = int((m[B] - M[T]) / (M[B] - M[T]) * H)
- img = mainImage.crop((l, t, r, b))
- w = int(round(m[ZOOM] * (m[R] - m[L]) / (M[R] - M[L]) * W))
- h = int(round(m[ZOOM] * (m[B] - m[T]) / (M[B] - M[T]) * H))
- img = img.resize((w, h), Image.BICUBIC)
+ M = maps['all']
+ W, H = mainImage.size
+ l = int((m[L] - M[L]) / (M[R] - M[L]) * W)
+ t = int((m[T] - M[T]) / (M[B] - M[T]) * H)
+ r = int((m[R] - M[L]) / (M[R] - M[L]) * W)
+ b = int((m[B] - M[T]) / (M[B] - M[T]) * H)
+ img = mainImage.crop((l, t, r, b))
+ w = int(round(m[ZOOM] * (m[R] - m[L]) / (M[R] - M[L]) * W))
+ h = int(round(m[ZOOM] * (m[B] - m[T]) / (M[B] - M[T]) * H))
+ img = img.resize((w, h), Image.BICUBIC)
draw = ImageDraw.Draw(img)
draw.setfont(myFont)
if name == "all":
for maparea in maps.keys():
- if maparea == "all":
- continue
- localm = maps[maparea]
- l,t = mungecoord(localm[L], localm[T], "all", img)
- r,b = mungecoord(localm[R], localm[B], "all", img)
- text = maparea + " map"
- textlen = draw.textsize(text)[0] + 3
- draw.rectangle([l, t, l+textlen, t+TEXTSIZE+2], fill='#ffffff')
- draw.text((l+2, t+1), text, fill="#000000")
- #imgmaps.append( [l, t, l+textlen, t+SIZE+2, "submap" + maparea, maparea + " subarea map"] )
- draw.line([l, t, r, t], fill='#777777', width=LINEWIDTH)
- draw.line([l, b, r, b], fill='#777777', width=LINEWIDTH)
- draw.line([l, t, l, b], fill='#777777', width=LINEWIDTH)
- draw.line([r, t, r, b], fill='#777777', width=LINEWIDTH)
- draw.line([l, t, l+textlen, t], fill='#777777', width=LINEWIDTH)
- draw.line([l, t+TEXTSIZE+2, l+textlen, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
- draw.line([l, t, l, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
- draw.line([l+textlen, t, l+textlen, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
+ if maparea == "all":
+ continue
+ localm = maps[maparea]
+ l,t = mungecoord(localm[L], localm[T], "all", img)
+ r,b = mungecoord(localm[R], localm[B], "all", img)
+ text = maparea + " map"
+ textlen = draw.textsize(text)[0] + 3
+ draw.rectangle([l, t, l+textlen, t+TEXTSIZE+2], fill='#ffffff')
+ draw.text((l+2, t+1), text, fill="#000000")
+ #imgmaps.append( [l, t, l+textlen, t+SIZE+2, "submap" + maparea, maparea + " subarea map"] )
+ draw.line([l, t, r, t], fill='#777777', width=LINEWIDTH)
+ draw.line([l, b, r, b], fill='#777777', width=LINEWIDTH)
+ draw.line([l, t, l, b], fill='#777777', width=LINEWIDTH)
+ draw.line([r, t, r, b], fill='#777777', width=LINEWIDTH)
+ draw.line([l, t, l+textlen, t], fill='#777777', width=LINEWIDTH)
+ draw.line([l, t+TEXTSIZE+2, l+textlen, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
+ draw.line([l, t, l, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
+ draw.line([l+textlen, t, l+textlen, t+TEXTSIZE+2], fill='#777777', width=LINEWIDTH)
#imgmaps[maparea] = []
# Draw scale bar
m100 = int(100 / (m[R] - m[L]) * img.size[0])
@@ -477,14 +477,15 @@ def prospecting_image(request, name):
plot("laser.0_5", "LSR5", "Reference", "Laser Point 0/5", name, draw, img)
plot("225-96", "BAlm", "Reference", "Br&auml;uning Alm trig point", name, draw, img)
for entrance in Entrance.objects.all():
- station = entrance.best_station()
- if station:
- #try:
- areaName = entrance.caveandentrance_set.all()[0].cave.getArea().short_name
- plot(station, "%s-%s" % (areaName, str(entrance)[5:]), entrance.needs_surface_work(), str(entrance), name, draw, img)
- #except:
- # pass
-
+ station = entrance.best_station()
+ if station:
+ #try:
+ areaName = entrance.caveandentrance_set.all()[0].cave.getArea().short_name
+ plot(station, "%s-%s" % (areaName, str(entrance)
+ [5:]), entrance.needs_surface_work(), str(entrance), name, draw, img)
+ #except:
+ # pass
+
for (N, E, D, num) in [(35975.37, 83018.21, 100,"177"), # Calculated from bearings
(35350.00, 81630.00, 50, "71"), # From Auer map
(36025.00, 82475.00, 50, "146"), # From mystery map
diff --git a/core/views_logbooks.py b/core/views_logbooks.py
index 1bc709c..ef920d2 100644
--- a/core/views_logbooks.py
+++ b/core/views_logbooks.py
@@ -70,13 +70,17 @@ def expedition(request, expeditionname):
pcell = { "persontrips": PersonTrip.objects.filter(personexpedition=personexpedition,
logbook_entry__date=date) }
pcell["survexblocks"] = set(SurvexBlock.objects.filter(survexpersonrole__personexpedition=personexpedition,
- date = date))
+ date=date))
prow.append(pcell)
personexpeditiondays.append({"personexpedition":personexpedition, "personrow":prow})
if "reload" in request.GET:
LoadLogbookForExpedition(this_expedition)
- return render(request,'expedition.html', {'expedition': this_expedition, 'expeditions':expeditions, 'personexpeditiondays':personexpeditiondays, 'settings':settings, 'dateditems': dateditems })
+ return render(request,'expedition.html', {'this_expedition': this_expedition,
+ 'expeditions':expeditions,
+ 'personexpeditiondays':personexpeditiondays,
+ 'settings':settings,
+ 'dateditems': dateditems })
def get_absolute_url(self):
return ('expedition', (expedition.year))
diff --git a/core/views_survex.py b/core/views_survex.py
index 1e6c1bf..2582e40 100644
--- a/core/views_survex.py
+++ b/core/views_survex.py
@@ -1,7 +1,8 @@
from django import forms
from django.http import HttpResponseRedirect, HttpResponse
-from django.shortcuts import render_to_response, render
-from django.core.context_processors import csrf
+from django.shortcuts import render
+from django.views.decorators import csrf
+from django.views.decorators.csrf import csrf_protect
from django.http import HttpResponse, Http404
import re
import os
@@ -39,9 +40,9 @@ survextemplatefile = """; Locn: Totes Gebirge, Austria - Loser/Augst-Eck Plateau
*data passage station left right up down ignoreall
1 [L] [R] [U] [D] comment
-*end [surveyname]"""
-
-
+*end [surveyname]"""
+
+
def ReplaceTabs(stext):
res = [ ]
nsl = 0
@@ -110,7 +111,7 @@ class SvxForm(forms.Form):
log = re.sub("(?s).*?(Survey contains)", "\\1", log)
return log
-
+@csrf_protect
def svx(request, survex_file):
# get the basic data from the file given in the URL
dirname = os.path.split(survex_file)[0]
@@ -173,10 +174,10 @@ def svx(request, survex_file):
'difflist': difflist,
'logmessage':logmessage,
'form':form}
- vmap.update(csrf(request))
+ # vmap.update(csrf(request))
if outputtype == "ajax":
- return render_to_response('svxfiledifflistonly.html', vmap)
- return render_to_response('svxfile.html', vmap)
+ return render(request, 'svxfiledifflistonly.html', vmap)
+ return render(request, 'svxfile.html', vmap)
def svxraw(request, survex_file):
svx = open(os.path.join(settings.SURVEX_DATA, survex_file+".svx"), "rb")
@@ -200,19 +201,19 @@ def threed(request, survex_file):
log = open(settings.SURVEX_DATA + survex_file + ".log", "rb")
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, content_type="text")
+
def err(request, survex_file):
process(survex_file)
err = open(settings.SURVEX_DATA + survex_file + ".err", "rb")
return HttpResponse(err, content_type="text")
-
-
def identifycavedircontents(gcavedir):
# find the primary survex file in each cave directory
name = os.path.split(gcavedir)[1]
@@ -252,37 +253,49 @@ def identifycavedircontents(gcavedir):
if primesvx:
subsvx.insert(0, primesvx)
return subdirs, subsvx
-
-
+
# direct local non-database browsing through the svx file repositories
# perhaps should use the database and have a reload button for it
def survexcaveslist(request):
- cavesdir = os.path.join(settings.SURVEX_DATA, "caves-1623")
- #cavesdircontents = { }
-
- onefilecaves = [ ]
- multifilecaves = [ ]
- subdircaves = [ ]
+ kat_areas = settings.KAT_AREAS
+
+ fnumlist = []
+
+ kat_areas = ['1623']
+
+ for area in kat_areas:
+ print(area)
+ cavesdir = os.path.join(settings.SURVEX_DATA, "caves-%s" % area)
+ print(cavesdir)
+ #cavesdircontents = { }
+ fnumlist += [ (-int(re.match(r"\d*", f).group(0) or "0"), f, area) for f in os.listdir(cavesdir) ]
+ print(fnumlist)
+ print(len(fnumlist))
# first sort the file list
- fnumlist = [ (-int(re.match(r"\d*", f).group(0) or "0"), f) for f in os.listdir(cavesdir) ]
fnumlist.sort()
+ onefilecaves = [ ]
+ multifilecaves = [ ]
+ subdircaves = [ ]
+
print(fnumlist)
# go through the list and identify the contents of each cave directory
- for num, cavedir in fnumlist:
+ for num, cavedir, area in fnumlist:
if cavedir in ["144", "40"]:
continue
-
+
+ cavesdir = os.path.join(settings.SURVEX_DATA, "caves-%s" % area)
+
gcavedir = os.path.join(cavesdir, cavedir)
if os.path.isdir(gcavedir) and cavedir[0] != ".":
subdirs, subsvx = identifycavedircontents(gcavedir)
survdirobj = [ ]
for lsubsvx in subsvx:
- survdirobj.append(("caves-1623/"+cavedir+"/"+lsubsvx, lsubsvx))
+ survdirobj.append(("caves-" + area + "/"+cavedir+"/"+lsubsvx, lsubsvx))
# caves with subdirectories
if subdirs:
@@ -292,7 +305,7 @@ def survexcaveslist(request):
assert not dsubdirs
lsurvdirobj = [ ]
for lsubsvx in dsubsvx:
- lsurvdirobj.append(("caves-1623/"+cavedir+"/"+subdir+"/"+lsubsvx, lsubsvx))
+ lsurvdirobj.append(("caves-" + area + "/"+cavedir+"/"+subdir+"/"+lsubsvx, lsubsvx))
subsurvdirs.append((lsurvdirobj[0], lsurvdirobj[1:]))
subdircaves.append((cavedir, (survdirobj[0], survdirobj[1:]), subsurvdirs))
@@ -304,24 +317,22 @@ def survexcaveslist(request):
#print("survdirobj = ")
#print(survdirobj)
onefilecaves.append(survdirobj[0])
-
- return render_to_response('svxfilecavelist.html', {'settings': settings, "onefilecaves":onefilecaves, "multifilecaves":multifilecaves, "subdircaves":subdircaves })
-
-
-
+ return render(request, 'svxfilecavelist.html', {"onefilecaves":onefilecaves, "multifilecaves":multifilecaves, "subdircaves":subdircaves })
# parsing all the survex files of a single cave and showing that it's consistent and can find all the files and people
# doesn't use recursion. just writes it twice
def survexcavesingle(request, survex_cave):
breload = False
- cave = Cave.objects.get(kataster_number=survex_cave)
+ cave = Cave.objects.filter(kataster_number=survex_cave)
+ if len(cave) < 1:
+ cave = Cave.objects.filter(unofficial_number=survex_cave)
+
if breload:
parsers.survex.ReloadSurvexCave(survex_cave)
- return render_to_response('svxcavesingle.html', {'settings': settings, "cave":cave })
+ if len(cave) > 0:
+ return render(request, 'svxcavesingle.html', {"cave":cave[0] })
+ else:
+ return render(request, 'svxcavesingle.html', {"cave":cave })
-
-
-
-