diff options
author | Sam Wenham <sam@wenhams.co.uk> | 2019-07-16 00:07:37 +0100 |
---|---|---|
committer | Sam Wenham <sam@wenhams.co.uk> | 2019-07-16 00:07:37 +0100 |
commit | 08a41941f9e2b35b16548624d5070216dd933f79 (patch) | |
tree | cfd0bd7dfc68c77cf66d92d72b6d1d74e6155880 /core | |
parent | a26109cb3006dd64e1bec38100397ad636813e98 (diff) | |
download | troggle-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.py | 9 | ||||
-rw-r--r-- | core/models.py | 31 | ||||
-rw-r--r-- | core/models_survex.py | 25 | ||||
-rw-r--r-- | core/view_surveys.py | 14 | ||||
-rw-r--r-- | core/views_caves.py | 225 | ||||
-rw-r--r-- | core/views_logbooks.py | 8 | ||||
-rw-r--r-- | core/views_survex.py | 81 |
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 – Plateau: around Top Camp'), - ('1b', '1b – Western plateau near 182'), - ('1c', '1c – Eastern plateau near 204 walk-in path'), - ('1d', '1d – Further plateau around 76'), - ('2a', '2a – Southern Schwarzmooskogel near 201 path and the Nipple'), - ('2b', '2b – Eishöhle area'), - ('2b or 4 (unclear)', '2b or 4 (unclear)'), - ('2c', '2c – Kaninchenhöhle area'), - ('2d', '2d – Steinbrückenhöhle area'), - ('3', '3 – Bräuning Alm'), - ('4', '4 – Kratzer valley'), - ('5', '5 – Schwarzmoos-Wildensee'), - ('6', '6 – Far plateau'), - ('1626 or 6 (borderline)', '1626 or 6 (borderline)'), - ('7', '7 – Egglgrube'), - ('8a', '8a – Loser south face'), - ('8b', '8b – Loser below Dimmelwand'), - ('8c', '8c – Augst See'), - ('8d', '8d – Loser-Hochganger ridge'), - ('9', '9 – Gschwandt Alm'), - ('10', '10 – Altaussee'), - ('11', '11 – Augstbach') - ] + #('', 'Location unclear'), + ('1a', '1a – Plateau: around Top Camp'), + ('1b', '1b – Western plateau near 182'), + ('1c', '1c – Eastern plateau near 204 walk-in path'), + ('1d', '1d – Further plateau around 76'), + ('2a', '2a – Southern Schwarzmooskogel near 201 path and the Nipple'), + ('2b', '2b – Eishöhle area'), + ('2b or 4 (unclear)', '2b or 4 (unclear)'), + ('2c', '2c – Kaninchenhöhle area'), + ('2d', '2d – Steinbrückenhöhle area'), + ('3', '3 – Bräuning Alm'), + ('4', '4 – Kratzer valley'), + ('5', '5 – Schwarzmoos-Wildensee'), + ('6', '6 – Far plateau'), + ('1626 or 6 (borderline)', '1626 or 6 (borderline)'), + ('7', '7 – Egglgrube'), + ('8a', '8a – Loser south face'), + ('8b', '8b – Loser below Dimmelwand'), + ('8c', '8c – Augst See'), + ('8d', '8d – Loser-Hochganger ridge'), + ('9', '9 – Gschwandt Alm'), + ('10', '10 – Altaussee'), + ('11', '11 – 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öhle"], -"76": [35440.0, 83220.0, 36090.0, 82670.0, 1.3, - "Eislufthöhle"], -"204": [36354.1, 84154.5, 37047.4, 83300, 3.0, - "Steinbrückenhö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öhle"], +"76": [35440.0, 83220.0, 36090.0, 82670.0, 1.3, + "Eislufthöhle"], +"204": [36354.1, 84154.5, 37047.4, 83300, 3.0, + "Steinbrückenhö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ä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 }) - - - - |