mirror of
https://expo.survex.com/repositories/troggle/.git
synced 2024-11-25 08:41:51 +00:00
[svn] Add beginnings of virtual survey binder: new Survey and ScannedImage models, survey parser. Still has lots of problems, but I need some help with the file upload aspect so am committing now. Biggest problem is trying to call save() on the images from the API. It needs arguments that I don't understand. Also, the # in our survey paths was causing trouble. I worked around this with a correctURL method which urlencodes the actual URL, but admin still tries to use a URL with a # in it.
Copied from http://cucc@cucc.survex.com/svn/trunk/expoweb/troggle/, rev. 8152 by aaron @ 1/15/2009 6:22 AM
This commit is contained in:
parent
95a08ffbd9
commit
c6cce8d2fe
@ -8,6 +8,13 @@ class RoleInline(admin.TabularInline):
|
||||
class SurvexBlockAdmin(admin.ModelAdmin):
|
||||
inlines = (RoleInline,)
|
||||
|
||||
class SurveyInline(admin.TabularInline):
|
||||
model = ScannedImage
|
||||
extra = 4
|
||||
|
||||
class SurveyAdmin(admin.ModelAdmin):
|
||||
inlines = (SurveyInline,)
|
||||
|
||||
admin.site.register(Photo)
|
||||
admin.site.register(Cave)
|
||||
admin.site.register(Area)
|
||||
@ -24,4 +31,6 @@ admin.site.register(Role)
|
||||
admin.site.register(LogbookEntry)
|
||||
admin.site.register(PersonTrip)
|
||||
admin.site.register(QM)
|
||||
admin.site.register(Survey, SurveyAdmin)
|
||||
admin.site.register(ScannedImage)
|
||||
|
||||
|
@ -1,6 +1,10 @@
|
||||
import urllib
|
||||
from django.forms import ModelForm
|
||||
from django.db import models
|
||||
from django.contrib import admin
|
||||
from django.core.files.storage import FileSystemStorage
|
||||
import os
|
||||
import troggle.settings as settings
|
||||
from models_survex import *
|
||||
|
||||
class Expedition(models.Model):
|
||||
@ -108,7 +112,7 @@ class Cave(models.Model):
|
||||
length = models.CharField(max_length=100,blank=True,null=True)
|
||||
depth = models.CharField(max_length=100,blank=True,null=True)
|
||||
extent = models.CharField(max_length=100,blank=True,null=True)
|
||||
survex_file = models.CharField(max_length=100,blank=True,null=True)
|
||||
survex_file = models.CharField(max_length=100,blank=True,null=True) #should be filefield, need to fix parser first
|
||||
def __unicode__(self):
|
||||
if self.kataster_number:
|
||||
if self.kat_area():
|
||||
@ -296,3 +300,53 @@ class Photo(models.Model):
|
||||
def __str__(self):
|
||||
return self.caption
|
||||
|
||||
scansFileStorage = FileSystemStorage(location=settings.SURVEYS, base_url=settings.SURVEYS_URL)
|
||||
def get_scan_path(instance, filename):
|
||||
year=instance.survey.expedition_year.year
|
||||
number="%02d" % instance.survey.wallet_number + instance.survey.wallet_letter #using %02d string formatting because convention was 2009#01
|
||||
return os.path.join('./',year,year+r'#'+number,instance.contents+str(instance.number_in_wallet)+r'.jpg')
|
||||
|
||||
class ScannedImage(models.Model):
|
||||
file = models.ImageField(storage=scansFileStorage, upload_to=get_scan_path)
|
||||
scannedBy = models.ForeignKey(Person,blank=True, null=True)
|
||||
scannedOn = models.DateField(null=True)
|
||||
survey = models.ForeignKey('Survey')
|
||||
contents = models.CharField(max_length=20,choices=(('notes','notes'),('plan','plan_sketch'),('elevation','elevation_sketch')))
|
||||
number_in_wallet = models.IntegerField(null=True)
|
||||
lon_utm = models.FloatField(blank=True,null=True)
|
||||
lat_utm = models.FloatField(blank=True,null=True)
|
||||
#content_type = models.ForeignKey(ContentType)
|
||||
#object_id = models.PositiveIntegerField()
|
||||
#location = generic.GenericForeignKey('content_type', 'object_id')
|
||||
|
||||
def correctURL(self):
|
||||
return urllib.quote(self.file.url)
|
||||
|
||||
def __str__(self):
|
||||
return get_scan_path(self,'')
|
||||
|
||||
class admin():
|
||||
pass
|
||||
|
||||
class Survey(models.Model):
|
||||
expedition_year = models.ForeignKey('Expedition')
|
||||
wallet_number = models.IntegerField(blank=True,null=True)
|
||||
wallet_letter = models.CharField(max_length=1,blank=True,null=True)
|
||||
comments = models.TextField(blank=True,null=True)
|
||||
location = models.CharField(max_length=400,blank=True,null=True)
|
||||
#notes_scan = models.ForeignKey('ScannedImage',related_name='notes_scan',blank=True, null=True) #Replaced by contents field of ScannedImage model
|
||||
survex_block = models.ForeignKey('SurvexBlock',blank=True, null=True)
|
||||
centreline_printed_on = models.DateField(blank=True, null=True)
|
||||
centreline_printed_by = models.ForeignKey('Person',related_name='centreline_printed_by',blank=True,null=True)
|
||||
#sketch_scan = models.ForeignKey(ScannedImage,blank=True, null=True) #Replaced by contents field of ScannedImage model
|
||||
tunnel_file = models.FileField(upload_to='surveyXMLfiles',blank=True, null=True)
|
||||
tunnel_main_sketch = models.ForeignKey('Survey',blank=True,null=True)
|
||||
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 __str__(self):
|
||||
return self.expedition_year.year+"#"+"%02d" % self.wallet_number
|
||||
|
||||
class admin():
|
||||
pass
|
||||
|
@ -1,5 +1,5 @@
|
||||
from django.shortcuts import render_to_response
|
||||
from troggle.expo.models import Cave, CaveAndEntrance
|
||||
from troggle.expo.models import Cave, CaveAndEntrance, Survey
|
||||
import troggle.settings as settings
|
||||
from troggle.expo.forms import CaveForm
|
||||
import search
|
||||
@ -33,5 +33,17 @@ def caveSearch(request):
|
||||
{ 'query_string': query_string, 'found_entries': found_entries, 'settings': settings})
|
||||
#context_instance=RequestContext(request))
|
||||
|
||||
def surveyindex(request):
|
||||
surveys=Survey.objects.all()
|
||||
return render_to_response('survey.html',{'settings':settings,'surveys':surveys})
|
||||
|
||||
|
||||
def survey(request,survey_id):
|
||||
surveys=Survey.objects.all()
|
||||
current_survey=Survey.objects.get(pk=survey_id)
|
||||
notes=current_survey.scannedimage_set.filter(contents='notes')
|
||||
planSketches=current_survey.scannedimage_set.filter(contents='plan')
|
||||
elevationSketches=current_survey.scannedimage_set.filter(contents='elevation')
|
||||
dictToPass=locals()
|
||||
dictToPass.update({'settings':settings})
|
||||
|
||||
return render_to_response('survey.html',dictToPass)
|
@ -5,6 +5,7 @@ import expo.models as models
|
||||
import csv
|
||||
import re
|
||||
import datetime
|
||||
import os
|
||||
|
||||
persontab = open(os.path.join(settings.EXPOWEB, "noinfo", "folk.csv"))
|
||||
personreader = csv.reader(persontab)
|
||||
|
86
parsers/surveys.py
Normal file
86
parsers/surveys.py
Normal file
@ -0,0 +1,86 @@
|
||||
import sys
|
||||
import os
|
||||
import types
|
||||
sys.path.append('C:\\Expo\\expoweb')
|
||||
from troggle import *
|
||||
os.environ['DJANGO_SETTINGS_MODULE']='troggle.settings'
|
||||
import troggle.settings as settings
|
||||
import troggle.expo.models as models
|
||||
|
||||
#import settings
|
||||
#import expo.models as models
|
||||
import csv
|
||||
import re
|
||||
import datetime
|
||||
|
||||
surveytab = open(os.path.join(settings.SURVEYS, "Surveys.csv"))
|
||||
dialect=csv.Sniffer().sniff(surveytab.read())
|
||||
surveytab.seek(0,0)
|
||||
surveyreader = csv.reader(surveytab,dialect=dialect)
|
||||
headers = surveyreader.next()
|
||||
header = dict(zip(headers, range(len(headers)))) #set up a dictionary where the indexes are header names and the values are column numbers
|
||||
|
||||
# test if the expeditions have been added yet
|
||||
if len(models.Expedition.objects.all())==0:
|
||||
print "There are no expeditions in the database. Please run the logbook parser."
|
||||
sys.exit()
|
||||
models.ScannedImage.objects.all().delete()
|
||||
models.Survey.objects.all().delete()
|
||||
for survey in surveyreader:
|
||||
walletNumberLetter = re.match(r'(?P<number>\d*)(?P<letter>[a-zA-Z]*)',survey[header['Survey Number']]) #I hate this, but some surveys have a letter eg 2000#34a. This line deals with that.
|
||||
# print walletNumberLetter.groups()
|
||||
|
||||
surveyobj = models.Survey(
|
||||
expedition_year = models.Expedition.objects.filter(year=survey[header['Year']])[0],
|
||||
wallet_number = walletNumberLetter.group('number'),
|
||||
|
||||
comments = survey[header['Comments']],
|
||||
location = survey[header['Location']]
|
||||
)
|
||||
surveyobj.wallet_letter = walletNumberLetter.group('letter')
|
||||
if survey[header['Finished']]=='Yes':
|
||||
#try and find the sketch_scan
|
||||
pass
|
||||
surveyobj.save()
|
||||
print "added survey " + survey[header['Year']] + "#" + surveyobj.wallet_number
|
||||
|
||||
# add survey scans
|
||||
def parseSurveyScans(year):
|
||||
yearPath=os.path.join(settings.SURVEYS, year.year)
|
||||
yearFileList=os.listdir(yearPath)
|
||||
for surveyFolder in yearFileList:
|
||||
try:
|
||||
surveyNumber=re.match(r'\d\d\d\d#0*(\d+)',surveyFolder).groups()
|
||||
scanList=os.listdir(os.path.join(yearPath,surveyFolder))
|
||||
except AttributeError:
|
||||
print surveyFolder + " ignored"
|
||||
continue
|
||||
|
||||
for scan in scanList:
|
||||
try:
|
||||
scanChopped=re.match(r'([a-zA-Z]*)(\d*)\.(png|jpg|JPG|PNG)',scan).groups()
|
||||
scanType,scanNumber,scanFormat=scanChopped
|
||||
except AttributeError:
|
||||
print scan + " ignored"
|
||||
continue
|
||||
if scanNumber=='':
|
||||
scanNumber=1
|
||||
|
||||
if type(surveyNumber)==types.TupleType:
|
||||
surveyNumber=surveyNumber[0]
|
||||
try:
|
||||
survey=models.Survey.objects.get_or_create(wallet_number=surveyNumber, expedition_year=year)[0]
|
||||
except models.Survey.MultipleObjectsReturned:
|
||||
survey=models.Survey.objects.filter(wallet_number=surveyNumber, expedition_year=year)[0]
|
||||
|
||||
scanObj = models.ScannedImage(
|
||||
file=os.path.join(yearPath, surveyFolder, scan),
|
||||
contents=scanType,
|
||||
number_in_wallet=scanNumber,
|
||||
survey=survey
|
||||
)
|
||||
print "Added scanned image at " + str(scanObj)
|
||||
scanObj.save()
|
||||
|
||||
for year in models.Expedition.objects.filter(year__gte=2000): #expos since 2000, because paths and filenames were nonstandard before then
|
||||
parseSurveyScans(year)
|
@ -8,6 +8,22 @@
|
||||
<script src="{{ settings.MEDIA_URL }}js/base.js" type="text/javascript"></script>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<body onLoad="fadeText()">
|
||||
<img src="{{ settings.MEDIA_URL }}loserBanner.jpg" style="width:100%;position:absolute; z-index:-4;width:100%;left:0;right:0;height:100px">
|
||||
<div id="expoHeader" style="display:inline;">
|
||||
<h1>CUCC Expeditions to Austria: 1976 - </h1>
|
||||
<div id="expoFinalDate" style="display:inline;" >
|
||||
<h1>1976</h1>
|
||||
</div>
|
||||
</div>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<p> </p>
|
||||
<center><iframe src="{{ settings.MEDIA_URL }}intro.html" style="height:600px; width:800px; border:hidden"></iframe></center>
|
||||
|
||||
</body>
|
||||
|
||||
<div id="editLink" style="right:0px; top:0px; text-align: right; position: absolute; top:0; right:0; z-index:1">
|
||||
{% block editLink %}not editable
|
||||
{% endblock %}
|
||||
|
7
urls.py
7
urls.py
@ -27,10 +27,17 @@ urlpatterns = patterns('',
|
||||
|
||||
(r'^statistics/?$', stats),
|
||||
|
||||
(r'^survey/?$', surveyindex),
|
||||
(r'^survey/(?P<survey_id>.*)$', survey),
|
||||
|
||||
(r'^admin/doc/?', include('django.contrib.admindocs.urls')),
|
||||
(r'^admin/(.*)', admin.site.root),
|
||||
|
||||
(r'^site_media/(?P<path>.*)$', 'django.views.static.serve',
|
||||
{'document_root': settings.MEDIA_ROOT, 'show_indexes': True}),
|
||||
|
||||
(r'^survey_scans/(?P<path>.*)$', 'django.views.static.serve',
|
||||
{'document_root': settings.SURVEYS, 'show_indexes':True}),
|
||||
|
||||
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user