mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2024-11-22 23:31:52 +00:00
Backed out changeset: f23440eb11a3
This commit is contained in:
parent
b505a26ce4
commit
e01507d541
@ -1,24 +1,2 @@
|
|||||||
import utm
|
def emptyfun():
|
||||||
import math
|
return
|
||||||
from django.conf import settings
|
|
||||||
|
|
||||||
def lat_lon_entrance(utmstring):
|
|
||||||
try:
|
|
||||||
x = float(utmstring.split()[0])
|
|
||||||
y = float(utmstring.split()[1])
|
|
||||||
#return ' '+str(x+y)+' '+str(y)
|
|
||||||
q = utm.to_latlon(x, y, 33, 'U')
|
|
||||||
return "{:.5f} {:.5f}".format(q[0],q[1])
|
|
||||||
except:
|
|
||||||
return 'Not found'
|
|
||||||
|
|
||||||
def top_camp_distance(utmstring):
|
|
||||||
try:
|
|
||||||
x = float(utmstring.split()[0])
|
|
||||||
y = float(utmstring.split()[1])
|
|
||||||
tx = settings.TOPCAMPX
|
|
||||||
ty = settings.TOPCAMPY
|
|
||||||
dist = math.sqrt( (tx-x)*(tx-x) + (ty-y)*(ty-y) )
|
|
||||||
return "{:.1f}".format(dist)
|
|
||||||
except:
|
|
||||||
return 'Not found'
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
from django.db import models
|
from django.db import models
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
|
|
||||||
import troggle.core.methods_millenial as methods_millenial
|
from troggle.core.methods_millenial import *
|
||||||
|
|
||||||
#
|
#
|
||||||
# This file was created in 2019
|
# This file was created in 2019
|
||||||
@ -37,32 +37,15 @@ class CaveM(models.Model): #instance of this class corresponds to one 'thing' th
|
|||||||
survex_file = models.TextField() #gives path to top level survex file
|
survex_file = models.TextField() #gives path to top level survex file
|
||||||
total_length = models.FloatField() #holds total length of this cave (as given by cavern)
|
total_length = models.FloatField() #holds total length of this cave (as given by cavern)
|
||||||
total_depth = models.FloatField() #holds total depth of this cave (as given by cavern)
|
total_depth = models.FloatField() #holds total depth of this cave (as given by cavern)
|
||||||
description = models.TextField() #holds link to description
|
description = models.TextField() #holds decription of the cave
|
||||||
date = models.TextField() #holds date of last visit
|
|
||||||
def top_camp_distance(self): #returns distance of this cave from topcamp
|
def top_camp_distance(self): #returns distance of this cave from topcamp
|
||||||
return methods_millenial.top_camp_distance(self.entrance)
|
return 0
|
||||||
def top_camp_bearing(self): #returns bearing to this cave from topcamp in format 235.5 (float north-based azimuth)
|
def top_camp_bearing(self): #returns bearing to this cave from topcamp in format 235.5 (float north-based azimuth)
|
||||||
return methods_millenial.top_camp_bearing(self.entrance)
|
return 0
|
||||||
def top_camp_bearing_letter(self): #returns bearing to this cave from topcamp in format e.g. 'NE'
|
def top_camp_bearing_letter(self): #returns bearing to this cave from topcamp in format e.g. 'NE'
|
||||||
return methods_millenial.top_camp_bearing_letter(self.entrance)
|
return 0
|
||||||
def lat_lon_entrance(self): #lat_lon entrance location
|
def last_visit(self): #returns Survey class instance of the most recent visit
|
||||||
return methods_millenial.lat_lon_entrance(self.entrance)
|
return 0
|
||||||
|
|
||||||
|
|
||||||
class Cave_descriptionM(models.Model): #instance of this class corresponds to each of the .html files in descriptions
|
|
||||||
#each of those holds one XML field
|
|
||||||
slug = models.TextField()
|
|
||||||
explorers = models.TextField()
|
|
||||||
underground_description = models.TextField()
|
|
||||||
equipment = models.TextField()
|
|
||||||
references = models.TextField()
|
|
||||||
survey = models.TextField()
|
|
||||||
kataster_status = models.TextField()
|
|
||||||
underground_centre_line = models.TextField()
|
|
||||||
survex_file = models.TextField() #as given in .html file
|
|
||||||
notes = models.TextField()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class ExpeditionM(models.Model): #instance of this class corresponds to one expo (usually one year)
|
class ExpeditionM(models.Model): #instance of this class corresponds to one expo (usually one year)
|
||||||
date = models.CharField(max_length=100) #date in format YYYY.MM.DD-YYYY.MM.DD
|
date = models.CharField(max_length=100) #date in format YYYY.MM.DD-YYYY.MM.DD
|
||||||
@ -74,7 +57,7 @@ class SurveyM(models.Model): #instance of this class corresponds to one .svx fil
|
|||||||
|
|
||||||
class Logbook_entryM(models.Model): #instance of this class corresponds to one bit of logbook (c.f. expo.survex.com/years/2015/logbook.html or simil)
|
class Logbook_entryM(models.Model): #instance of this class corresponds to one bit of logbook (c.f. expo.survex.com/years/2015/logbook.html or simil)
|
||||||
date = models.CharField(max_length=100) #date as typed into logbook
|
date = models.CharField(max_length=100) #date as typed into logbook
|
||||||
contents = models.TextField() #contents of the logbook chunk
|
title = models.TextField() #contents of the logbook chunk
|
||||||
|
|
||||||
class Parser_messageM(models.Model): #instance of this class contains one error or warining message produce by any of the parsers
|
class Parser_messageM(models.Model): #instance of this class contains one error or warining message produce by any of the parsers
|
||||||
parsername = models.CharField(max_length = 20) #name of parser
|
parsername = models.CharField(max_length = 20) #name of parser
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
from troggle.core.models import CaveSlug, Cave, CaveAndEntrance, Survey, Expedition, QM, CaveDescription, EntranceSlug, Entrance, Area, SurvexStation, CaveM, Cave_descriptionM
|
from troggle.core.models import CaveSlug, Cave, CaveAndEntrance, Survey, Expedition, QM, CaveDescription, EntranceSlug, Entrance, Area, SurvexStation
|
||||||
from troggle.core.forms import CaveForm, CaveAndEntranceFormSet, VersionControlCommentForm, EntranceForm, EntranceLetterForm
|
from troggle.core.forms import CaveForm, CaveAndEntranceFormSet, VersionControlCommentForm, EntranceForm, EntranceLetterForm
|
||||||
import troggle.core.models as models
|
import troggle.core.models as models
|
||||||
import troggle.settings as settings
|
import troggle.settings as settings
|
||||||
@ -21,17 +21,6 @@ import settings
|
|||||||
from PIL import Image, ImageDraw, ImageFont
|
from PIL import Image, ImageDraw, ImageFont
|
||||||
import string, os, sys, subprocess
|
import string, os, sys, subprocess
|
||||||
|
|
||||||
def millenialcaves(request):
|
|
||||||
#RW messing around area
|
|
||||||
caves = CaveM.objects.all()
|
|
||||||
descr = Cave_descriptionM.objects.all()
|
|
||||||
return render_with_context(request,'millenialcaves.html',{'caves': caves,'descriptions' : descr})
|
|
||||||
|
|
||||||
def millenialdescription(request, slug):
|
|
||||||
desc = Cave_descriptionM.objects.get(slug=slug)
|
|
||||||
return render_with_context(request,'cave_uground_description.html', {'cave': desc})
|
|
||||||
|
|
||||||
|
|
||||||
def getCave(cave_id):
|
def getCave(cave_id):
|
||||||
"""Returns a cave object when given a cave name or number. It is used by views including cavehref, ent, and qm."""
|
"""Returns a cave object when given a cave name or number. It is used by views including cavehref, ent, and qm."""
|
||||||
try:
|
try:
|
||||||
@ -65,16 +54,16 @@ def caveindex(request):
|
|||||||
caves = Cave.objects.all()
|
caves = Cave.objects.all()
|
||||||
notablecavehrefs = settings.NOTABLECAVESHREFS
|
notablecavehrefs = settings.NOTABLECAVESHREFS
|
||||||
notablecaves = [Cave.objects.get(kataster_number=kataster_number) for kataster_number in notablecavehrefs ]
|
notablecaves = [Cave.objects.get(kataster_number=kataster_number) for kataster_number in notablecavehrefs ]
|
||||||
#caves1623 = list(Cave.objects.filter(area__short_name = "1623"))
|
caves1623 = list(Cave.objects.filter(area__short_name = "1623"))
|
||||||
caves1623 = list(Cave.objects.all())
|
|
||||||
caves1626 = list(Cave.objects.filter(area__short_name = "1626"))
|
caves1626 = list(Cave.objects.filter(area__short_name = "1626"))
|
||||||
caves1623.sort(caveCmp)
|
caves1623.sort(caveCmp)
|
||||||
caves1626.sort(caveCmp)
|
caves1626.sort(caveCmp)
|
||||||
return render_with_context(request,'caveindex.html', {'caves1623': caves1623, 'caves1626': caves1626, 'notablecaves':notablecaves, 'cavepage': True})
|
return render_with_context(request,'caveindex.html', {'caves1623': caves1623, 'caves1626': caves1626, 'notablecaves':notablecaves, 'cavepage': True})
|
||||||
|
|
||||||
|
def millenialcaves(request):
|
||||||
|
#RW messing around area
|
||||||
|
return HttpResponse("Test text", content_type="text/plain")
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def cave3d(request, cave_id=''):
|
def cave3d(request, cave_id=''):
|
||||||
|
@ -9,7 +9,7 @@ from django.contrib.auth.models import User
|
|||||||
from django.http import HttpResponse
|
from django.http import HttpResponse
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
from troggle.core.models import Cave, Entrance
|
from troggle.core.models import Cave, Entrance
|
||||||
from troggle.core.models import PersonM, SurveyM, CaveM, ExpeditionM, Logbook_entryM, Cave_descriptionM
|
from troggle.core.models import PersonM, SurveyM, CaveM, ExpeditionM, Logbook_entryM
|
||||||
import troggle.flatpages.models
|
import troggle.flatpages.models
|
||||||
|
|
||||||
databasename=settings.DATABASES['default']['NAME']
|
databasename=settings.DATABASES['default']['NAME']
|
||||||
@ -42,7 +42,6 @@ def gracefull_flush():
|
|||||||
SurveyM.objects.all().delete()
|
SurveyM.objects.all().delete()
|
||||||
ExpeditionM.objects.all().delete()
|
ExpeditionM.objects.all().delete()
|
||||||
Logbook_entryM.objects.all().delete()
|
Logbook_entryM.objects.all().delete()
|
||||||
Cave_descriptionM.objects.all().delete()
|
|
||||||
print('Deleted contents of the database, ready to load new stuff :)')
|
print('Deleted contents of the database, ready to load new stuff :)')
|
||||||
|
|
||||||
def load_redirects():
|
def load_redirects():
|
||||||
|
@ -34,18 +34,17 @@ function filterTable(tablename)
|
|||||||
rows = table.rows;
|
rows = table.rows;
|
||||||
for(i=1; i< rows.length; i++)
|
for(i=1; i< rows.length; i++)
|
||||||
{
|
{
|
||||||
name = (rows[i].getElementsByTagName("TD")[1]).innerHTML.toLowerCase();
|
name = (rows[i].getElementsByTagName("TD")[0]).innerHTML.toLowerCase();
|
||||||
|
|
||||||
depth = (rows[i].getElementsByTagName("TD")[2]).innerHTML.toLowerCase();
|
depth = (rows[i].getElementsByTagName("TD")[1]).innerHTML.toLowerCase();
|
||||||
depth = Number(depth.replace(/[^0-9.]/g,''));
|
depth = Number(depth.replace(/[^0-9.]/g,''));
|
||||||
|
|
||||||
length = (rows[i].getElementsByTagName("TD")[3]).innerHTML.toLowerCase();
|
length = (rows[i].getElementsByTagName("TD")[2]).innerHTML.toLowerCase();
|
||||||
length = Number(length.replace(/[^0-9.]/g,''));
|
length = Number(length.replace(/[^0-9.]/g,''));
|
||||||
|
|
||||||
date = (rows[i].getElementsByTagName("TD")[4]).innerHTML.toLowerCase();
|
date = (rows[i].getElementsByTagName("TD")[3]).innerHTML.toLowerCase();
|
||||||
|
|
||||||
//recentvisitor = (rows[i].getElementsByTagName("TD")[4]).innerHTML.toLowerCase();
|
recentvisitor = (rows[i].getElementsByTagName("TD")[4]).innerHTML.toLowerCase();
|
||||||
recentvisitor = ""
|
|
||||||
|
|
||||||
if(cavename != "" && !name.includes(cavename))
|
if(cavename != "" && !name.includes(cavename))
|
||||||
{
|
{
|
||||||
|
@ -19,23 +19,16 @@ def load():
|
|||||||
print('Hi! I\'m caves parser. Ready to work')
|
print('Hi! I\'m caves parser. Ready to work')
|
||||||
|
|
||||||
print('Loading caves of 1623 area')
|
print('Loading caves of 1623 area')
|
||||||
loadarea('1623')
|
loadarea('caves-1623/')
|
||||||
|
|
||||||
|
|
||||||
def loadarea(areacode):
|
def loadarea(areacode):
|
||||||
|
|
||||||
if not file_exists(settings.SURVEX_DATA+'1623-and-1626.3d'):
|
|
||||||
print('Computing master .3d file')
|
|
||||||
bash('cavern -o'+settings.SURVEX_DATA+' '+settings.SURVEX_DATA+'1623-and-1626.svx')
|
|
||||||
else:
|
|
||||||
print('Loading from existing master .3d file')
|
|
||||||
|
|
||||||
master3d = bash('dump3d -d '+settings.SURVEX_DATA+'1623-and-1626.3d').splitlines()
|
|
||||||
master3dN = [x for x in master3d if ('NODE' in x)] #list of nodes of master survex file
|
|
||||||
master3dL = [x for x in master3d if ('LINE' in x)] #list of nodes of master survex file
|
|
||||||
|
|
||||||
print('Searching all cave dirs files')
|
print('Searching all cave dirs files')
|
||||||
basedir = settings.SURVEX_DATA+'caves-'+areacode+'/'
|
basedir = settings.SURVEX_DATA+areacode
|
||||||
|
|
||||||
|
bash('cavern -o'+settings.SURVEX_DATA+' '+settings.SURVEX_DATA+'1623-and-1626.svx')
|
||||||
|
|
||||||
cavedirs = bash("find "+basedir+" -maxdepth 1 -type d").splitlines() #this command finds all directories
|
cavedirs = bash("find "+basedir+" -maxdepth 1 -type d").splitlines() #this command finds all directories
|
||||||
print('Obtained list of directories! (#dirs='+str(len(cavedirs))+')')
|
print('Obtained list of directories! (#dirs='+str(len(cavedirs))+')')
|
||||||
@ -47,14 +40,14 @@ def loadarea(areacode):
|
|||||||
cavename = bash('echo '+cavedir+' | rev | cut -f1 -d \'/\' | rev').splitlines()[0] #get final bit of the directory
|
cavename = bash('echo '+cavedir+' | rev | cut -f1 -d \'/\' | rev').splitlines()[0] #get final bit of the directory
|
||||||
|
|
||||||
test = bash('if [ ! -f '+cavedir+'/'+cavename+'.svx ] ; then echo MISSING; fi')#test for file exisence
|
test = bash('if [ ! -f '+cavedir+'/'+cavename+'.svx ] ; then echo MISSING; fi')#test for file exisence
|
||||||
if not file_exists(cavedir+'/'+cavename+'.svx'):
|
if 'MISSING' in test: #send error message to the database
|
||||||
msg = models.Parser_messageM(parsername='caves',content=cavedir+'/'+cavename+' MISSING!',message_type='warn')
|
msg = models.Parser_messageM(parsername='caves',content=cavedir+'/'+cavename+' MISSING!',message_type='warn')
|
||||||
print('Cave missing'+cavename+' :(')
|
print('Cave missing'+cavename+' :(')
|
||||||
msg.save()
|
msg.save()
|
||||||
continue
|
continue
|
||||||
fullname=cavedir+'/'+cavename+'.svx'
|
fullname=cavedir+'/'+cavename+'.svx'
|
||||||
print('Found cave:'+cavename)
|
print('Found cave:'+cavename)
|
||||||
cavernout = bash('cavern -o '+cavedir+' '+fullname) #make cavern process the thing
|
cavernout = bash('cavern -q '+fullname) #make cavern process the thing
|
||||||
if 'cavern: error:' in cavernout:
|
if 'cavern: error:' in cavernout:
|
||||||
msg = models.Parser_messageM(parsername='caves',content=cavedir+'/'+cavename+' Survex file messed up!',message_type='warn')
|
msg = models.Parser_messageM(parsername='caves',content=cavedir+'/'+cavename+' Survex file messed up!',message_type='warn')
|
||||||
print('Fucked svx'+cavename+' :(')
|
print('Fucked svx'+cavename+' :(')
|
||||||
@ -64,71 +57,28 @@ def loadarea(areacode):
|
|||||||
cavernout = cavernout.splitlines()
|
cavernout = cavernout.splitlines()
|
||||||
depth = float(([x for x in cavernout if ('Total vertical length' in x)][0].split()[-1])[:-2])
|
depth = float(([x for x in cavernout if ('Total vertical length' in x)][0].split()[-1])[:-2])
|
||||||
length = float(([x for x in cavernout if ('Total length' in x)][0].split()[6])[:-1])
|
length = float(([x for x in cavernout if ('Total length' in x)][0].split()[6])[:-1])
|
||||||
cavefile = open(fullname,'r')
|
surveyname = bash('cat '+fullname+' | grep \'\*begin\' | head -n1 | cut -f2 -d \' \' ').splitlines().pop()
|
||||||
cavefilecontents = cavefile.read().splitlines()
|
title = (bash('cat '+fullname+' | grep \'\*title\' | head -n1 | cut -f2 -d \' \' ').splitlines() or ["Not found"])[0]
|
||||||
surveyname = [x for x in cavefilecontents if ('*begin ') in x][0].split()[1].lower()
|
print((('depth','length','surv name'),(depth,length,surveyname)))
|
||||||
try:
|
print('dump3d '+settings.SURVEX_DATA+'1623-and-1626.3d | grep NODE | grep \'\\[\\.'+surveyname+'.*\\]\'')
|
||||||
title = [x for x in cavefilecontents if ('*title ') in x][0].split()[1]
|
nodes = bash('dump3d '+settings.SURVEX_DATA+'1623-and-1626.3d | grep NODE | grep \'\\[.*\\.'+surveyname+'.*\\]\'').splitlines()
|
||||||
except:
|
entran = [x for x in nodes if ('ENTRANCE' in x) ]
|
||||||
syrveyname = "Untitled"
|
print(nodes)
|
||||||
|
|
||||||
relevant_nodes = [x for x in master3dN if (('['+areacode+'.'+surveyname+'.' in x) or ('['+areacode+'.'+surveyname+']' in x))]
|
|
||||||
entrance_nodes = [x for x in relevant_nodes if 'ENTRANCE' in x]
|
|
||||||
surface_nodes = [x for x in relevant_nodes if 'SURFACE' in x]
|
|
||||||
location_nodes = []
|
|
||||||
print('rel_nodes'+str(len(relevant_nodes)))
|
|
||||||
if len(entrance_nodes) > 0:
|
|
||||||
location_nodes = entrance_nodes
|
|
||||||
elif len(surface_nodes) > 0:
|
|
||||||
location_nodes = surface_nodes
|
|
||||||
elif len(relevant_nodes) > 0:
|
|
||||||
location_nodes = relevant_nodes
|
|
||||||
|
|
||||||
try:
|
newcave = models.CaveM(survex_file = fullname, total_length = length, name=title, total_depth = depth)
|
||||||
location = sorted(location_nodes, key = lambda y : float(y.split()[3])).pop()
|
|
||||||
except:
|
|
||||||
print(location_nodes)
|
|
||||||
location = 'Not found'
|
|
||||||
|
|
||||||
relevant_lines = [x for x in master3dL if (('['+areacode+'.'+surveyname+'.' in x) or ('['+areacode+'.'+surveyname+']' in x))]
|
|
||||||
try:
|
|
||||||
lastleg = sorted(relevant_lines, key = lambda y : y.split().pop()).pop()
|
|
||||||
except:
|
|
||||||
lastleg = ['LINE 1900.01.01']
|
|
||||||
try:
|
|
||||||
lastdate = lastleg.split().pop()
|
|
||||||
if 'STYLE' in lastdate:
|
|
||||||
lastdate = lastleg.split().pop().pop()
|
|
||||||
except:
|
|
||||||
lastdate = '1900.01.01'
|
|
||||||
|
|
||||||
entrance = ' '.join(location.split()[1:3])
|
|
||||||
print((('depth','length','surv name','entr','date'),(depth,length,surveyname,entrance,lastdate))) #sanity check print
|
|
||||||
|
|
||||||
|
|
||||||
newcave = models.CaveM(
|
|
||||||
survex_file = fullname,
|
|
||||||
total_length = length,
|
|
||||||
name=areacode+'.'+surveyname,
|
|
||||||
total_depth = depth,
|
|
||||||
date = lastdate,
|
|
||||||
entrance = entrance)
|
|
||||||
newcave.save()
|
newcave.save()
|
||||||
#end of reading survex masterfiles
|
#end of reading survex masterfiles
|
||||||
|
|
||||||
print ("Reading cave descriptions")
|
print ("Reading cave descriptions")
|
||||||
cavefiles = bash('find '+settings.CAVEDESCRIPTIONS+' -name \'*.html\'').splitlines()
|
cavefiles = bash('find '+settings.CAVEDESCRIPTIONS+' -name \'*.html\'').splitlines()
|
||||||
for fn in cavefiles:
|
for fn in cavefiles:
|
||||||
f = open(fn, "r")
|
f = open(fn, "r")
|
||||||
print(fn)
|
print(fn)
|
||||||
contents = f.read()
|
contents = f.read()
|
||||||
|
|
||||||
slug = re.sub(r"\s+", "", extractXML(contents,'caveslug'))
|
|
||||||
desc = extractXML(contents,'underground_description')
|
desc = extractXML(contents,'underground_description')
|
||||||
name = slug[5:] #get survex compatible name
|
name = re.search(r'>.*<',extractXML(contents,'caveslug')).group()[6:-1]
|
||||||
area = slug[0:4]
|
|
||||||
|
|
||||||
print([area,name])
|
|
||||||
|
|
||||||
if desc==None or name==None:
|
if desc==None or name==None:
|
||||||
msg = models.Parser_messageM(parsername='caves',content=fn+' Description meesed up!',message_type='warn')
|
msg = models.Parser_messageM(parsername='caves',content=fn+' Description meesed up!',message_type='warn')
|
||||||
@ -136,56 +86,26 @@ def loadarea(areacode):
|
|||||||
msg.save()
|
msg.save()
|
||||||
continue
|
continue
|
||||||
|
|
||||||
print(area+'/'+name+'/'+name+'.svx')
|
|
||||||
|
|
||||||
updatecave = models.CaveM.objects.filter(survex_file__icontains=area+'/'+name+'/'+name+'.svx')
|
updatecave = models.CaveM.objects.filter(survex_file__icontains='/'+name+'.svx')
|
||||||
if len(updatecave)>1:
|
if len(updatecave)>1:
|
||||||
print('Non unique solution - skipping. Name:'+name)
|
print('Non unique solution - skipping. Name:'+name)
|
||||||
elif len(updatecave)==0:
|
elif len(updatecave)==0:
|
||||||
print('Cave with no survex data:'+name)
|
print('Cave with no survex data'+name)
|
||||||
continue
|
newcave = models.CaveM(description = desc, name = name)
|
||||||
|
newcave.save()
|
||||||
else: #exaclty one match
|
else: #exaclty one match
|
||||||
print('Adding desc:'+name)
|
|
||||||
updatecave = updatecave[0]
|
updatecave = updatecave[0]
|
||||||
updatecave.description = '/cave/descriptionM/'+slug #area-name
|
updatecave.description = desc
|
||||||
|
if updatecave.name=="Not found":
|
||||||
|
updatecave.name=name
|
||||||
updatecave.title=name
|
updatecave.title=name
|
||||||
updatecave.save()
|
updatecave.save()
|
||||||
|
|
||||||
|
|
||||||
slugS = slug
|
|
||||||
explorersS = extractXML(contents,'explorers')
|
|
||||||
underground_descriptionS = extractXML(contents,'underground_description')
|
|
||||||
equipmentS = extractXML(contents,'equipment')
|
|
||||||
referencesS = extractXML(contents,'references')
|
|
||||||
surveyS = extractXML(contents,'survey')
|
|
||||||
kataster_statusS = extractXML(contents,'kataster_status')
|
|
||||||
underground_centre_lineS = extractXML(contents,'underground_centre_line')
|
|
||||||
survex_fileS = extractXML(contents,'survex_file')
|
|
||||||
notesS = extractXML(contents,'notes')
|
|
||||||
|
|
||||||
|
|
||||||
newcavedesc = models.Cave_descriptionM(
|
|
||||||
slug = slugS,
|
|
||||||
explorers = explorersS,
|
|
||||||
underground_description = underground_descriptionS,
|
|
||||||
equipment = equipmentS,
|
|
||||||
references = referencesS,
|
|
||||||
survey = surveyS,
|
|
||||||
kataster_status = kataster_statusS,
|
|
||||||
underground_centre_line = underground_centre_lineS,
|
|
||||||
survex_file = survex_fileS,
|
|
||||||
notes = notesS)
|
|
||||||
newcavedesc.save()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#end of reading cave descriptions
|
#end of reading cave descriptions
|
||||||
|
|
||||||
def file_exists(filename):
|
|
||||||
test = bash('if [ ! -f '+filename+' ] ; then echo MISSING; fi')#test for file exisence
|
|
||||||
if 'MISSING' in test: #send error message to the database
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
|
|
||||||
def extractXML(contents,tag):
|
def extractXML(contents,tag):
|
||||||
#find correct lines
|
#find correct lines
|
||||||
@ -199,10 +119,9 @@ def extractXML(contents,tag):
|
|||||||
if endi!=begi:
|
if endi!=begi:
|
||||||
segment = '\n'.join(lines[begi:endi+1])
|
segment = '\n'.join(lines[begi:endi+1])
|
||||||
else:
|
else:
|
||||||
segment = lines[begi:endi+1][0]
|
segment = lines[begi:endi+1]
|
||||||
|
return segment[0]
|
||||||
hit = re.findall('<'+tag+'>(.*)</'+tag+'>', segment, re.S)[0]
|
|
||||||
return hit
|
|
||||||
|
|
||||||
def bash(cmd): #calls command in bash shell, returns output
|
def bash(cmd): #calls command in bash shell, returns output
|
||||||
process = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)
|
process = subprocess.Popen(cmd,shell=True,stdout=subprocess.PIPE)
|
||||||
|
@ -71,9 +71,6 @@ if django.VERSION[0] == 1 and django.VERSION[1] < 4:
|
|||||||
else:
|
else:
|
||||||
authmodule = 'django.contrib.auth.context_processors.auth'
|
authmodule = 'django.contrib.auth.context_processors.auth'
|
||||||
|
|
||||||
TOPCAMPX=411571.00
|
|
||||||
TOPCAMPY=5282639.00
|
|
||||||
|
|
||||||
TEMPLATE_CONTEXT_PROCESSORS = ( authmodule, "core.context.troggle_context", )
|
TEMPLATE_CONTEXT_PROCESSORS = ( authmodule, "core.context.troggle_context", )
|
||||||
|
|
||||||
LOGIN_REDIRECT_URL = '/'
|
LOGIN_REDIRECT_URL = '/'
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<table class="searchable">
|
<table class="searchable">
|
||||||
{% for cave in caves1623 %}
|
{% for cave in caves1623 %}
|
||||||
|
|
||||||
<tr><td> <a href="{{ cave.url }}">{% if cave.kataster_number %}{{ cave.kataster_number }}{% else %}{{cave.unofficial_number }}{%endif %} {{cave.official_name|safe}}</a> {{ cave.slug }}</td></tr>
|
<tr><td> <a href="{{ cave.url }}">{% if cave.kataster_number %}{{ cave.kataster_number }}{% else %}{{cave.unofficial_number }}{%endif %} {{cave.official_name|safe}}</a> </td></tr>
|
||||||
|
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
@ -8,62 +8,116 @@
|
|||||||
|
|
||||||
<body>
|
<body>
|
||||||
|
|
||||||
<h2>Caves of loserplateau (locations acording to all.3d)</h2>
|
<table>
|
||||||
<span style="font-size:70%">
|
|
||||||
Name contains:<br>
|
|
||||||
<div id="inputf"><input type="text" name="CaveName" id="CaveName" style="width:100%"></div><br>
|
|
||||||
Depth between (min, max) in meters (0 disables filter):<br>
|
|
||||||
<div id="inputf"><input type="number" name="CaveDepthMin" id="CaveDepthMin" style="width:45%"> - <input type="number" name="CaveDepthMax" id="CaveDepthMax" style="width:45%"></div><br>
|
|
||||||
Length between (min, max) in meters (0 disables filter):<br>
|
|
||||||
<div id="inputf"><input type="number" name="CaveLengthMin" id="CaveLengthMin" style="width:45%"> - <input type="number" name="CaveLengthMax" id="CaveLengthMax" style="width:45%"></div><br>
|
|
||||||
Last visit after (date in YYYY.MM.DD format works best):<br>
|
|
||||||
<div id="inputf"><input type="text" name="VisitDate" id="VisitDate" style="width:100%"></div><br>
|
|
||||||
Last visited by (single word or regular expression, search is not case sensitive):<br>
|
|
||||||
(e.g. <span id="mono">/da.e/</span> matches both Dave and Dane, <span id="mono">/w..k|ol{2}y/</span> matches either Wook and Olly)<br>
|
|
||||||
<div id="inputf"><input type="text" name="Visitor" id="Visitor" style="width:100%"></div><br>
|
|
||||||
Hide incomplete entries:<br>
|
|
||||||
<div id="inputf"><input type="checkbox" name="Incomplete" id="Incomplete" style="width:100%"></div><br><br>
|
|
||||||
|
|
||||||
<button onclick="filterTable('caves_table')">Filter</button><br>
|
|
||||||
<button onclick="filterTableReset('caves_table')">Reset filters</button><br>
|
|
||||||
|
|
||||||
Click on column headers to sort/reverse sort<br><br><br>
|
|
||||||
</span>
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
<table id="caves_table">
|
|
||||||
<tr>
|
<tr>
|
||||||
<th onclick="sortTable(0,'caves_table',0)">Cave survex id</th>
|
<th>Cave</th>
|
||||||
<th onclick="sortTable(1,'caves_table',0)">Cave name</th>
|
<th>Components</th>
|
||||||
<th onclick="sortTable(2,'caves_table',1)">Cave depth</th>
|
<th>aaa</th>
|
||||||
<th onclick="sortTable(3,'caves_table',1)">Cave length</th>
|
<th>bbb</th>
|
||||||
<th onclick="sortTable(4,'caves_table',0)">Last leg date</th>
|
|
||||||
<th onclick="sortTable(5,'caves_table',0)">Cave location (UTM)</th>
|
|
||||||
<th onclick="sortTable(6,'caves_table',0)">Cave location (lat/lon)</th>
|
|
||||||
<th onclick="sortTable(7,'caves_table',1)">Top camp distance [m]</th>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
{% for cave in caves %}
|
|
||||||
|
{% for subdircave, cavefiles, subsurvdirs in subdircaves %}
|
||||||
<tr>
|
<tr>
|
||||||
<td><a href={{cave.description}}>{{ cave.name }}</a></td>
|
<td><b><a href="{% url "svx" cavefiles.0.0 %}">{{cavefiles.0.1}}</a></b></td>
|
||||||
<td>{{ cave.title }}</td>
|
<td>
|
||||||
<td>{{ cave.total_depth }}</td>
|
root: {% for cavepath, cavename in cavefiles.1 %}
|
||||||
<td>{{ cave.total_length }}</td>
|
<a href="{% url "svx" cavepath %}">{{cavename}}</a>
|
||||||
<td>{{ cave.date }}</td>
|
{% endfor %}
|
||||||
<td>33U {{ cave.entrance }}</td>
|
<br>
|
||||||
<td>{{ cave.lat_lon_entrance }}</td>
|
{% for primarycavefile, subcavefiles in subsurvdirs %}
|
||||||
<td>{{ cave.top_camp_distance}}</td>
|
{{ primarycavefile.1 }}:
|
||||||
|
{% for cavepath, cavename in subcavefiles %}
|
||||||
|
<a href="{% url "svx" cavepath %}">{{cavename}}</a>
|
||||||
|
{% endfor %}
|
||||||
|
<br>
|
||||||
|
{% endfor %}
|
||||||
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
{% for primarycavefile, subcavefiles in multifilecaves %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="{% url "survexcavessingle" primarycavefile.1 %}">{{primarycavefile.1}}</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
{% for cavepath, cavename in subcavefiles %}
|
||||||
|
<a href="{% url "svx" cavepath %}">{{cavename}}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<script type="text/javascript" src="{{ settings.MEDIA_URL }}/scripts/TableSort.js"></script>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
|
|
||||||
|
======================= OLD STUFF ==============================
|
||||||
|
|
||||||
|
<td><a href="{% url "svx" cavefiles.0.0 %}">{{cavefiles.0.1}}</a></td>
|
||||||
|
|
||||||
|
<p><a href="#cdir">caves with subdirectories</a> | <a href="#cmult">caves with multiple files</a> | <a href="#csing">caves with single files</a></p>
|
||||||
|
|
||||||
|
<h3><a href="/survexfile/all.svx">Link to all.svx for processing</a></h3>
|
||||||
|
|
||||||
|
<h2 id="cdir">Caves with subdirectories</h2>
|
||||||
|
|
||||||
|
{% for subdircave, cavefiles, subsurvdirs in subdircaves %}
|
||||||
|
<h3>{{cavefiles.0.1}} - <a href="{% url "survexcavessingle" cavefiles.0.1 %}">dates and explorers</a></h3>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><b><a href="{% url "svx" cavefiles.0.0 %}">{{cavefiles.0.1}}</a></b></td>
|
||||||
|
<td>
|
||||||
|
{% for cavepath, cavename in cavefiles.1 %}
|
||||||
|
<a href="{% url "svx" cavepath %}">{{cavename}}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
{% for primarycavefile, subcavefiles in subsurvdirs %}
|
||||||
|
<tr>
|
||||||
|
<td><a href="{% url "svx" primarycavefile.0 %}">{{primarycavefile.1}}</a></td>
|
||||||
|
<td>
|
||||||
|
{% for cavepath, cavename in subcavefiles %}
|
||||||
|
<a href="{% url "svx" cavepath %}">{{cavename}}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
|
||||||
|
<h2 id="cmult">Caves of multiple files</h2>
|
||||||
|
<table>
|
||||||
|
<tr><th>Dates and explorers</th><th>Survex files</th></tr>
|
||||||
|
{% for primarycavefile, subcavefiles in multifilecaves %}
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<a href="{% url "survexcavessingle" primarycavefile.1 %}">{{primarycavefile.1}}</a>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<a href="{% url "svx" primarycavefile.0 %}">{{primarycavefile.1}}</a> -
|
||||||
|
{% for cavepath, cavename in subcavefiles %}
|
||||||
|
<a href="{% url "svx" cavepath %}">{{cavename}}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h2 id="csing">Caves of one file</h2>
|
||||||
|
<p>
|
||||||
|
{% for cavepath, cavename in onefilecaves %}
|
||||||
|
<a href="{% url "svx" cavepath %}">{{cavename}}</a>
|
||||||
|
{% endfor %}
|
||||||
|
</p>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="scripts/TableSort.js"></script>
|
||||||
|
|
||||||
</html>
|
</html>
|
||||||
|
|
||||||
|
4
urls.py
4
urls.py
@ -23,9 +23,7 @@ admin.autodiscover()
|
|||||||
actualurlpatterns = patterns('',
|
actualurlpatterns = patterns('',
|
||||||
|
|
||||||
|
|
||||||
url(r'^millenialcaves/?$', views_caves.millenialcaves, name="millenialcaves"),
|
url(r'^millenialcaves/?$', views_survex.millenialcaves, name="millenialcaves"),
|
||||||
url(r'^cave/descriptionM/([^/]+)/?$', views_caves.millenialdescription),
|
|
||||||
#url(r'^cave/description/([^/]+)/?$', views_caves.caveDescription),
|
|
||||||
|
|
||||||
url(r'^troggle$', views_other.frontpage, name="frontpage"),
|
url(r'^troggle$', views_other.frontpage, name="frontpage"),
|
||||||
url(r'^todo/$', views_other.todo, name="todo"),
|
url(r'^todo/$', views_other.todo, name="todo"),
|
||||||
|
Loading…
Reference in New Issue
Block a user