summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
Diffstat (limited to 'core')
-rw-r--r--core/admin.py14
-rw-r--r--core/fileAbstraction.py4
-rw-r--r--core/forms.py40
-rw-r--r--core/imagekit_specs.py18
-rw-r--r--core/models.py120
-rw-r--r--core/models_survex.py60
-rw-r--r--core/view_surveys.py68
-rw-r--r--core/views_caves.py4
-rw-r--r--core/views_logbooks.py40
-rw-r--r--core/views_other.py56
-rw-r--r--core/views_survex.py46
11 files changed, 235 insertions, 235 deletions
diff --git a/core/admin.py b/core/admin.py
index 0b7cf13..c5a1484 100644
--- a/core/admin.py
+++ b/core/admin.py
@@ -9,12 +9,12 @@ from troggle.core.views_other import downloadLogbook
class TroggleModelAdmin(admin.ModelAdmin):
-
+
def save_model(self, request, obj, form, change):
"""overriding admin save to fill the new_since parsing_field"""
obj.new_since_parsing=True
obj.save()
-
+
class Media:
js = ('jquery/jquery.min.js','js/QM_helper.js')
@@ -44,7 +44,7 @@ class OtherCaveInline(admin.TabularInline):
class SurveyAdmin(TroggleModelAdmin):
inlines = (ScannedImageInline,)
- search_fields = ('expedition__year','wallet_number')
+ search_fields = ('expedition__year','wallet_number')
class QMsFoundInline(admin.TabularInline):
@@ -52,7 +52,7 @@ class QMsFoundInline(admin.TabularInline):
fk_name='found_by'
fields=('number','grade','location_description','comment')#need to add foreignkey to cave part
extra=1
-
+
class PhotoInline(admin.TabularInline):
model = DPhoto
@@ -68,7 +68,7 @@ class PersonTripInline(admin.TabularInline):
#class LogbookEntryAdmin(VersionAdmin):
class LogbookEntryAdmin(TroggleModelAdmin):
- prepopulated_fields = {'slug':("title",)}
+ prepopulated_fields = {'slug':("title",)}
search_fields = ('title','expedition__year')
date_heirarchy = ('date')
inlines = (PersonTripInline, PhotoInline, QMsFoundInline)
@@ -77,11 +77,11 @@ class LogbookEntryAdmin(TroggleModelAdmin):
"all": ("css/troggleadmin.css",)
}
actions=('export_logbook_entries_as_html','export_logbook_entries_as_txt')
-
+
def export_logbook_entries_as_html(self, modeladmin, request, queryset):
response=downloadLogbook(request=request, queryset=queryset, extension='html')
return response
-
+
def export_logbook_entries_as_txt(self, modeladmin, request, queryset):
response=downloadLogbook(request=request, queryset=queryset, extension='txt')
return response
diff --git a/core/fileAbstraction.py b/core/fileAbstraction.py
index 86191b7..141ae0e 100644
--- a/core/fileAbstraction.py
+++ b/core/fileAbstraction.py
@@ -15,7 +15,7 @@ def listdir(*path):
for p in os.listdir(root):
if os.path.isdir(os.path.join(root, p)):
l += p + "/\n"
-
+
elif os.path.isfile(os.path.join(root, p)):
l += p + "\n"
#Ignore non-files and non-directories
@@ -28,7 +28,7 @@ def listdir(*path):
c = c.replace("#", "%23")
print("FILE: ", settings.FILES + "listdir/" + c)
return urllib.urlopen(settings.FILES + "listdir/" + c).read()
-
+
def dirsAsList(*path):
return [d for d in listdir(*path).split("\n") if len(d) > 0 and d[-1] == "/"]
diff --git a/core/forms.py b/core/forms.py
index 8265178..15e86d8 100644
--- a/core/forms.py
+++ b/core/forms.py
@@ -16,7 +16,7 @@ class CaveForm(ModelForm):
underground_centre_line = forms.CharField(required = False, widget=forms.Textarea())
notes = forms.CharField(required = False, widget=forms.Textarea())
references = forms.CharField(required = False, widget=forms.Textarea())
- url = forms.CharField(required = True)
+ url = forms.CharField(required = True)
class Meta:
model = Cave
exclude = ("filename",)
@@ -24,9 +24,9 @@ class CaveForm(ModelForm):
def clean(self):
if self.cleaned_data.get("kataster_number") == "" and self.cleaned_data.get("unofficial_number") == "":
- self._errors["unofficial_number"] = self.error_class(["Either the kataster or unoffical number is required."])
+ self._errors["unofficial_number"] = self.error_class(["Either the kataster or unoffical number is required."])
if self.cleaned_data.get("kataster_number") != "" and self.cleaned_data.get("official_name") == "":
- self._errors["official_name"] = self.error_class(["This field is required when there is a kataster number."])
+ self._errors["official_name"] = self.error_class(["This field is required when there is a kataster number."])
if self.cleaned_data.get("area") == []:
self._errors["area"] = self.error_class(["This field is required."])
if self.cleaned_data.get("url") and self.cleaned_data.get("url").startswith("/"):
@@ -82,11 +82,11 @@ class EntranceLetterForm(ModelForm):
# This function returns html-formatted paragraphs for each of the
# wikilink types that are related to this logbookentry. Each paragraph
# contains a list of all of the related wikilinks.
-#
+#
# Perhaps an admin javascript solution would be better.
# """
# res = ["Please use the following wikilinks, which are related to this logbook entry:"]
-#
+#
# res.append(r'</p><p style="float: left;"><b>QMs found:</b>')
# for QM in LogbookEntry.instance.QMs_found.all():
# res.append(QM.wiki_link())
@@ -94,12 +94,12 @@ class EntranceLetterForm(ModelForm):
# res.append(r'</p><p style="float: left;"><b>QMs ticked off:</b>')
# for QM in LogbookEntry.instance.QMs_ticked_off.all():
# res.append(QM.wiki_link())
-
+
# res.append(r'</p><p style="float: left; "><b>People</b>')
# for persontrip in LogbookEntry.instance.persontrip_set.all():
# res.append(persontrip.wiki_link())
# res.append(r'</p>')
-
+
# return string.join(res, r'<br />')
# def __init__(self, *args, **kwargs):
@@ -107,7 +107,7 @@ class EntranceLetterForm(ModelForm):
# self.fields['text'].help_text=self.wikiLinkHints()#
#class CaveForm(forms.Form):
-# html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
+# html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
def getTripForm(expedition):
@@ -118,18 +118,18 @@ def getTripForm(expedition):
caves.sort()
caves = ["-----"] + caves
cave = forms.ChoiceField([(c, c) for c in caves], required=False)
- location = forms.CharField(max_length=200, required=False)
+ location = forms.CharField(max_length=200, required=False)
caveOrLocation = forms.ChoiceField([("cave", "Cave"), ("location", "Location")], widget = forms.widgets.RadioSelect())
- html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
+ html = forms.CharField(widget=TinyMCE(attrs={'cols': 80, 'rows': 30}))
def clean(self):
print(dir(self))
if self.cleaned_data.get("caveOrLocation") == "cave" and not self.cleaned_data.get("cave"):
- self._errors["cave"] = self.error_class(["This field is required"])
+ self._errors["cave"] = self.error_class(["This field is required"])
if self.cleaned_data.get("caveOrLocation") == "location" and not self.cleaned_data.get("location"):
- self._errors["location"] = self.error_class(["This field is required"])
+ self._errors["location"] = self.error_class(["This field is required"])
return self.cleaned_data
-
+
class PersonTripForm(forms.Form):
names = [get_name(pe) for pe in PersonExpedition.objects.filter(expedition = expedition)]
names.sort()
@@ -141,7 +141,7 @@ def getTripForm(expedition):
PersonTripFormSet = formset_factory(PersonTripForm, extra=1)
return PersonTripFormSet, TripForm
-
+
def get_name(pe):
if pe.nickname:
return pe.nickname
@@ -162,18 +162,18 @@ def get_name(pe):
# caves = ["-----"] + caves
# cave = forms.ChoiceField([(c, c) for c in caves], required=False)
-# entrance = forms.ChoiceField([("-----", "Please select a cave"), ], required=False)
-# qm = forms.ChoiceField([("-----", "Please select a cave"), ], required=False)
+# entrance = forms.ChoiceField([("-----", "Please select a cave"), ], required=False)
+# qm = forms.ChoiceField([("-----", "Please select a cave"), ], required=False)
# expeditions = [e.year for e in Expedition.objects.all()]
# expeditions.sort()
# expeditions = ["-----"] + expeditions
-# expedition = forms.ChoiceField([(e, e) for e in expeditions], required=False)
+# expedition = forms.ChoiceField([(e, e) for e in expeditions], required=False)
+
+# logbookentry = forms.ChoiceField([("-----", "Please select an expedition"), ], required=False)
-# logbookentry = forms.ChoiceField([("-----", "Please select an expedition"), ], required=False)
+# person = forms.ChoiceField([("-----", "Please select an expedition"), ], required=False)
-# person = forms.ChoiceField([("-----", "Please select an expedition"), ], required=False)
-
# survey_point = forms.CharField()
diff --git a/core/imagekit_specs.py b/core/imagekit_specs.py
index fd2e0a1..0cec6e5 100644
--- a/core/imagekit_specs.py
+++ b/core/imagekit_specs.py
@@ -1,21 +1,21 @@
from imagekit.specs import ImageSpec
from imagekit import processors
-class ResizeThumb(processors.Resize):
- width = 100
+class ResizeThumb(processors.Resize):
+ width = 100
crop = False
class ResizeDisplay(processors.Resize):
- width = 600
-
-#class EnhanceThumb(processors.Adjustment):
+ width = 600
+
+#class EnhanceThumb(processors.Adjustment):
#contrast = 1.2
#sharpness = 2
-class Thumbnail(ImageSpec):
- access_as = 'thumbnail_image'
- pre_cache = True
- processors = [ResizeThumb]
+class Thumbnail(ImageSpec):
+ access_as = 'thumbnail_image'
+ pre_cache = True
+ processors = [ResizeThumb]
class Display(ImageSpec):
increment_count = True
diff --git a/core/models.py b/core/models.py
index af25107..9029fd3 100644
--- a/core/models.py
+++ b/core/models.py
@@ -27,10 +27,10 @@ def get_related_by_wikilinks(wiki_text):
qm=QM.objects.get(found_by__cave_slug__in = cave_slugs,
found_by__date__year = qmdict['year'],
number = qmdict['number'])
- res.append(qm)
+ res.append(qm)
except QM.DoesNotExist:
print('fail on '+str(wikilink))
-
+
return res
try:
@@ -38,7 +38,7 @@ try:
filename=settings.LOGFILE,
filemode='w')
except:
- subprocess.call(settings.FIX_PERMISSIONS)
+ subprocess.call(settings.FIX_PERMISSIONS)
logging.basicConfig(level=logging.DEBUG,
filename=settings.LOGFILE,
filemode='w')
@@ -58,7 +58,7 @@ class TroggleModel(models.Model):
class TroggleImageModel(models.Model):
new_since_parsing = models.BooleanField(default=False, editable=False)
-
+
def object_name(self):
return self._meta.object_name
@@ -69,23 +69,23 @@ class TroggleImageModel(models.Model):
class Meta:
abstract = True
-#
+#
# single Expedition, usually seen by year
#
class Expedition(TroggleModel):
year = models.CharField(max_length=20, unique=True)
name = models.CharField(max_length=100)
-
+
def __unicode__(self):
return self.year
class Meta:
ordering = ('-year',)
get_latest_by = 'year'
-
+
def get_absolute_url(self):
return urlparse.urljoin(settings.URL_ROOT, reverse('expedition', args=[self.year]))
-
+
# construction function. should be moved out
def get_expedition_day(self, date):
expeditiondays = self.expeditionday_set.filter(date=date)
@@ -95,11 +95,11 @@ class Expedition(TroggleModel):
res = ExpeditionDay(expedition=self, date=date)
res.save()
return res
-
+
def day_min(self):
res = self.Expeditionday_set.all()
return res and res[0] or None
-
+
def day_max(self):
res = self.Expeditionday_set.all()
return res and res[len(res) - 1] or None
@@ -129,23 +129,23 @@ class Person(TroggleModel):
is_vfho = models.BooleanField(help_text="VFHO is the Vereines f&uuml;r H&ouml;hlenkunde in Obersteier, a nearby Austrian caving club.", default=False)
mug_shot = models.CharField(max_length=100, blank=True,null=True)
blurb = models.TextField(blank=True,null=True)
-
+
#href = models.CharField(max_length=200)
- orderref = models.CharField(max_length=200) # for alphabetic
+ orderref = models.CharField(max_length=200) # for alphabetic
user = models.OneToOneField(User, null=True, blank=True)
def get_absolute_url(self):
return urlparse.urljoin(settings.URL_ROOT,reverse('person',kwargs={'first_name':self.first_name,'last_name':self.last_name}))
class Meta:
verbose_name_plural = "People"
- ordering = ('orderref',) # "Wookey" makes too complex for: ('last_name', 'first_name')
-
+ ordering = ('orderref',) # "Wookey" makes too complex for: ('last_name', 'first_name')
+
def __unicode__(self):
if self.last_name:
return "%s %s" % (self.first_name, self.last_name)
return self.first_name
-
+
def notability(self):
notability = Decimal(0)
max_expo_val = 0
@@ -161,15 +161,15 @@ class Person(TroggleModel):
def bisnotable(self):
return self.notability() > Decimal(1)/Decimal(3)
-
+
def surveyedleglength(self):
return sum([personexpedition.surveyedleglength() for personexpedition in self.personexpedition_set.all()])
-
+
def first(self):
return self.personexpedition_set.order_by('-expedition')[0]
def last(self):
return self.personexpedition_set.order_by('expedition')[0]
-
+
#def Sethref(self):
#if self.last_name:
#self.href = self.first_name.lower() + "_" + self.last_name.lower()
@@ -178,7 +178,7 @@ class Person(TroggleModel):
# self.href = self.first_name.lower()
#self.orderref = self.first_name
#self.notability = 0.0 # set temporarily
-
+
#
# Person's attenance to one Expo
@@ -187,8 +187,8 @@ class PersonExpedition(TroggleModel):
expedition = models.ForeignKey(Expedition)
person = models.ForeignKey(Person)
slugfield = models.SlugField(max_length=50,blank=True,null=True)
-
- is_guest = models.BooleanField(default=False)
+
+ is_guest = models.BooleanField(default=False)
COMMITTEE_CHOICES = (
('leader','Expo leader'),
('medical','Expo medical officer'),
@@ -198,7 +198,7 @@ class PersonExpedition(TroggleModel):
)
expo_committee_position = models.CharField(blank=True,null=True,choices=COMMITTEE_CHOICES,max_length=200)
nickname = models.CharField(max_length=100,blank=True,null=True)
-
+
def GetPersonroles(self):
res = [ ]
for personrole in self.personrole_set.order_by('survexblock'):
@@ -214,8 +214,8 @@ class PersonExpedition(TroggleModel):
def __unicode__(self):
return "%s: (%s)" % (self.person, self.expedition)
-
-
+
+
#why is the below a function in personexpedition, rather than in person? - AC 14 Feb 09
def name(self):
if self.nickname:
@@ -226,11 +226,11 @@ class PersonExpedition(TroggleModel):
def get_absolute_url(self):
return urlparse.urljoin(settings.URL_ROOT, reverse('personexpedition',kwargs={'first_name':self.person.first_name,'last_name':self.person.last_name,'year':self.expedition.year}))
-
+
def surveyedleglength(self):
survexblocks = [personrole.survexblock for personrole in self.personrole_set.all() ]
return sum([survexblock.totalleglength for survexblock in set(survexblocks)])
-
+
# would prefer to return actual person trips so we could link to first and last ones
def day_min(self):
res = self.persontrip_set.aggregate(day_min=Min("expeditionday__date"))
@@ -242,7 +242,7 @@ class PersonExpedition(TroggleModel):
#
# Single parsed entry from Logbook
-#
+#
class LogbookEntry(TroggleModel):
LOGBOOK_ENTRY_TYPES = (
@@ -265,7 +265,7 @@ class LogbookEntry(TroggleModel):
verbose_name_plural = "Logbook Entries"
# several PersonTrips point in to this object
ordering = ('-date',)
-
+
def __getattribute__(self, item):
if item == "cave": #Allow a logbookentries cave to be directly accessed despite not having a proper foreignkey
return CaveSlug.objects.get(slug = self.cave_slug).cave
@@ -314,18 +314,18 @@ class LogbookEntry(TroggleModel):
#
class PersonTrip(TroggleModel):
personexpedition = models.ForeignKey("PersonExpedition",null=True)
-
+
#expeditionday = models.ForeignKey("ExpeditionDay")#MJG wants to KILL THIS (redundant information)
#date = models.DateField() #MJG wants to KILL THIS (redundant information)
time_underground = models.FloatField(help_text="In decimal hours")
logbook_entry = models.ForeignKey(LogbookEntry)
is_logbook_entry_author = models.BooleanField(default=False)
-
-
+
+
# sequencing by person (difficult to solve locally)
#persontrip_next = models.ForeignKey('PersonTrip', related_name='pnext', blank=True,null=True)#MJG wants to KILL THIS (and use funstion persontrip_next_auto)
#persontrip_prev = models.ForeignKey('PersonTrip', related_name='pprev', blank=True,null=True)#MJG wants to KILL THIS(and use funstion persontrip_prev_auto)
-
+
def persontrip_next(self):
futurePTs = PersonTrip.objects.filter(personexpedition = self.personexpedition, logbook_entry__date__gt = self.logbook_entry.date).order_by('logbook_entry__date').all()
if len(futurePTs) > 0:
@@ -345,7 +345,7 @@ class PersonTrip(TroggleModel):
def __unicode__(self):
return "%s (%s)" % (self.personexpedition, self.logbook_entry.date)
-
+
##########################################
@@ -375,7 +375,7 @@ class CaveAndEntrance(models.Model):
def __unicode__(self):
return unicode(self.cave) + unicode(self.entrance_letter)
-
+
class CaveSlug(models.Model):
cave = models.ForeignKey('Cave')
slug = models.SlugField(max_length=50, unique = True)
@@ -385,7 +385,7 @@ class CaveSlug(models.Model):
return self.slug
class Cave(TroggleModel):
- # too much here perhaps,
+ # too much here perhaps,
official_name = models.CharField(max_length=160)
area = models.ManyToManyField(Area, blank=True)
kataster_code = models.CharField(max_length=20,blank=True,null=True)
@@ -411,13 +411,13 @@ class Cave(TroggleModel):
#class Meta:
# unique_together = (("area", "kataster_number"), ("area", "unofficial_number"))
- # FIXME Kataster Areas and CUCC defined sub areas need seperating
+ # FIXME Kataster Areas and CUCC defined sub areas need seperating
#href = models.CharField(max_length=100)
-
+
class Meta:
- ordering = ('kataster_code', 'unofficial_number')
+ ordering = ('kataster_code', 'unofficial_number')
def hassurvey(self):
if not self.underground_centre_line:
@@ -432,7 +432,7 @@ class Cave(TroggleModel):
if self.survex_file:
return "Yes"
return "Missing"
-
+
def slug(self):
primarySlugs = self.caveslug_set.filter(primary = True)
if primarySlugs:
@@ -450,7 +450,7 @@ class Cave(TroggleModel):
return "%s-%s" % (self.kat_area(), self.kataster_number)
else:
return "%s-%s" % (self.kat_area(), self.unofficial_number)
-
+
def get_absolute_url(self):
if self.kataster_number:
href = self.kataster_number
@@ -479,13 +479,13 @@ class Cave(TroggleModel):
for a in self.area.all():
if a.kat_area():
return a.kat_area()
-
+
def entrances(self):
return CaveAndEntrance.objects.filter(cave=self)
def singleentrance(self):
return len(CaveAndEntrance.objects.filter(cave=self)) == 1
-
+
def entrancelist(self):
rs = []
res = ""
@@ -513,12 +513,12 @@ class Cave(TroggleModel):
else:
res += "&ndash;" + prevR
return res
-
+
def writeDataFile(self):
try:
f = open(os.path.join(settings.CAVEDESCRIPTIONS, self.filename), "w")
except:
- subprocess.call(settings.FIX_PERMISSIONS)
+ subprocess.call(settings.FIX_PERMISSIONS)
f = open(os.path.join(settings.CAVEDESCRIPTIONS, self.filename), "w")
t = loader.get_template('dataformat/cave.xml')
c = Context({'cave': self})
@@ -526,7 +526,7 @@ class Cave(TroggleModel):
u8 = u.encode("utf-8")
f.write(u8)
f.close()
-
+
def getArea(self):
areas = self.area.all()
lowestareas = list(areas)
@@ -543,7 +543,7 @@ def getCaveByReference(reference):
#print(areaname, code)
area = Area.objects.get(short_name = areaname)
#print(area)
- foundCaves = list(Cave.objects.filter(area = area, kataster_number = code).all()) + list(Cave.objects.filter(area = area, unofficial_number = code).all())
+ foundCaves = list(Cave.objects.filter(area = area, kataster_number = code).all()) + list(Cave.objects.filter(area = area, unofficial_number = code).all())
print(list(foundCaves))
if len(foundCaves) == 1:
return foundCaves[0]
@@ -555,7 +555,7 @@ class OtherCaveName(TroggleModel):
cave = models.ForeignKey(Cave)
def __unicode__(self):
return unicode(self.name)
-
+
class EntranceSlug(models.Model):
entrance = models.ForeignKey('Entrance')
slug = models.SlugField(max_length=50, unique = True)
@@ -669,28 +669,28 @@ class Entrance(TroggleModel):
for f in self.FINDABLE_CHOICES:
if f[0] == self.findability:
return f[1]
-
+
def tag(self):
return SurvexStation.objects.lookup(self.tag_station)
-
+
def needs_surface_work(self):
return self.findability != "S" or not self.has_photo or self.marking != "T"
def get_absolute_url(self):
-
+
ancestor_titles='/'.join([subcave.title for subcave in self.get_ancestors()])
if ancestor_titles:
res = '/'.join((self.get_root().cave.get_absolute_url(), ancestor_titles, self.title))
-
+
else:
res = '/'.join((self.get_root().cave.get_absolute_url(), self.title))
-
+
return res
def slug(self):
if not self.cached_primary_slug:
primarySlugs = self.entranceslug_set.filter(primary = True)
- if primarySlugs:
+ if primarySlugs:
self.cached_primary_slug = primarySlugs[0].slug
self.save()
else:
@@ -704,7 +704,7 @@ class Entrance(TroggleModel):
try:
f = open(os.path.join(settings.ENTRANCEDESCRIPTIONS, self.filename), "w")
except:
- subprocess.call(settings.FIX_PERMISSIONS)
+ subprocess.call(settings.FIX_PERMISSIONS)
f = open(os.path.join(settings.ENTRANCEDESCRIPTIONS, self.filename), "w")
t = loader.get_template('dataformat/entrance.xml')
c = Context({'entrance': self})
@@ -726,10 +726,10 @@ class CaveDescription(TroggleModel):
return unicode(self.long_name)
else:
return unicode(self.short_name)
-
+
def get_absolute_url(self):
return urlparse.urljoin(settings.URL_ROOT, reverse('cavedescription', args=(self.short_name,)))
-
+
def save(self):
"""
Overridden save method which stores wikilinks in text as links in database.
@@ -798,7 +798,7 @@ class QM(TroggleModel):
return u"%s%s%s" % ('[[QM:',self.code(),']]')
photoFileStorage = FileSystemStorage(location=settings.PHOTOS_ROOT, base_url=settings.PHOTOS_URL)
-class DPhoto(TroggleImageModel):
+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)
@@ -810,12 +810,12 @@ class DPhoto(TroggleImageModel):
nearest_QM = models.ForeignKey(QM,blank=True,null=True)
lon_utm = models.FloatField(blank=True,null=True)
lat_utm = models.FloatField(blank=True,null=True)
-
+
class IKOptions:
spec_module = 'core.imagekit_specs'
cache_dir = 'thumbs'
image_field = 'file'
-
+
#content_type = models.ForeignKey(ContentType)
#object_id = models.PositiveIntegerField()
#location = generic.GenericForeignKey('content_type', 'object_id')
@@ -832,7 +832,7 @@ def get_scan_path(instance, filename):
number=str(instance.survey.wallet_letter) + number #two strings formatting because convention is 2009#01 or 2009#X01
return os.path.join('./',year,year+r'#'+number,str(instance.contents)+str(instance.number_in_wallet)+r'.jpg')
-class ScannedImage(TroggleImageModel):
+class ScannedImage(TroggleImageModel):
file = models.ImageField(storage=scansFileStorage, upload_to=get_scan_path)
scanned_by = models.ForeignKey(Person,blank=True, null=True)
scanned_on = models.DateField(null=True)
diff --git a/core/models_survex.py b/core/models_survex.py
index 3becffb..91e4621 100644
--- a/core/models_survex.py
+++ b/core/models_survex.py
@@ -9,7 +9,7 @@ from django.core.urlresolvers import reverse
###########################################################
# These will allow browsing and editing of the survex data
###########################################################
-# Needs to add:
+# Needs to add:
# Equates
# reloading
@@ -29,21 +29,21 @@ class SurvexFile(models.Model):
path = models.CharField(max_length=200)
survexdirectory = models.ForeignKey("SurvexDirectory", blank=True, null=True)
cave = models.ForeignKey('Cave', blank=True, null=True)
-
+
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")
return os.path.isfile(fname)
-
+
def OpenFile(self):
fname = os.path.join(settings.SURVEX_DATA, self.path + ".svx")
return open(fname)
-
+
def SetDirectory(self):
dirpath = os.path.split(self.path)[0]
survexdirectorylist = SurvexDirectory.objects.filter(cave=self.cave, path=dirpath)
@@ -67,7 +67,7 @@ class SurvexStationLookUpManager(models.Manager):
name__iexact = stationname)
class SurvexStation(models.Model):
- name = models.CharField(max_length=100)
+ name = models.CharField(max_length=100)
block = models.ForeignKey('SurvexBlock')
equate = models.ForeignKey('SurvexEquate', blank=True, null=True)
objects = SurvexStationLookUpManager()
@@ -103,8 +103,8 @@ class SurvexLeg(models.Model):
#
-# Single SurvexBlock
-#
+# Single SurvexBlock
+#
class SurvexBlockLookUpManager(models.Manager):
def lookup(self, name):
if name == "":
@@ -122,20 +122,20 @@ class SurvexBlock(models.Model):
parent = models.ForeignKey('SurvexBlock', blank=True, null=True)
text = models.TextField()
cave = models.ForeignKey('Cave', 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)
-
+
survexfile = models.ForeignKey("SurvexFile", blank=True, null=True)
begin_char = models.IntegerField() # code for where in the survex data files this block sits
survexpath = models.CharField(max_length=200) # the path for the survex stations
-
- survexscansfolder = models.ForeignKey("SurvexScansFolder", null=True)
+
+ survexscansfolder = models.ForeignKey("SurvexScansFolder", null=True)
#refscandir = models.CharField(max_length=100)
-
+
totalleglength = models.FloatField()
-
+
class Meta:
ordering = ('id',)
@@ -144,7 +144,7 @@ class SurvexBlock(models.Model):
def __unicode__(self):
return self.name and unicode(self.name) or 'no name'
-
+
def GetPersonroles(self):
res = [ ]
for personrole in self.personrole_set.order_by('personexpedition'):
@@ -163,10 +163,10 @@ class SurvexBlock(models.Model):
ss = SurvexStation(name=name, block=self)
ss.save()
return ss
-
+
def DayIndex(self):
return list(self.expeditionday.survexblock_set.all()).index(self)
-
+
class SurvexTitle(models.Model):
survexblock = models.ForeignKey('SurvexBlock')
@@ -195,41 +195,41 @@ class SurvexPersonRole(models.Model):
personname = models.CharField(max_length=100)
person = models.ForeignKey('Person', blank=True, null=True)
personexpedition = models.ForeignKey('PersonExpedition', blank=True, null=True)
- persontrip = models.ForeignKey('PersonTrip', blank=True, null=True)
+ persontrip = models.ForeignKey('PersonTrip', blank=True, null=True)
expeditionday = models.ForeignKey("ExpeditionDay", null=True)
-
+
def __unicode__(self):
return unicode(self.person) + " - " + unicode(self.survexblock) + " - " + unicode(self.nrole)
-
-
+
+
class SurvexScansFolder(models.Model):
fpath = models.CharField(max_length=200)
walletname = models.CharField(max_length=200)
-
+
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)}))
-
+
class SurvexScanSingle(models.Model):
ffile = models.CharField(max_length=200)
name = models.CharField(max_length=200)
survexscansfolder = models.ForeignKey("SurvexScansFolder", null=True)
-
+
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}))
-
-
+
+
class TunnelFile(models.Model):
tunnelpath = models.CharField(max_length=200)
tunnelname = models.CharField(max_length=200)
@@ -241,8 +241,8 @@ class TunnelFile(models.Model):
filesize = models.IntegerField(default=0)
npaths = models.IntegerField(default=0)
survextitles = models.ManyToManyField("SurvexTitle")
-
-
+
+
class Meta:
ordering = ('tunnelpath',)
diff --git a/core/view_surveys.py b/core/view_surveys.py
index 04c6ca6..05e617e 100644
--- a/core/view_surveys.py
+++ b/core/view_surveys.py
@@ -8,7 +8,7 @@ from troggle.core.models import SurvexScansFolder, SurvexScanSingle, SurvexBlock
import parsers.surveys
import urllib
-# inline fileabstraction into here if it's not going to be useful anywhere else
+# inline fileabstraction into here if it's not going to be useful anywhere else
# keep things simple and ignore exceptions everywhere for now
@@ -33,7 +33,7 @@ def upload(request, path):
def download(request, path):
#try:
-
+
return HttpResponse(fileAbstraction.readFile(path), content_type=getMimeType(path.split(".")[-1]))
#except:
# raise Http404
@@ -49,32 +49,32 @@ extmimetypes = {".txt": "text/plain",
".jpg": "image/jpeg",
".jpeg": "image/jpeg",
}
-
+
# dead
def jgtfile(request, f):
fp = os.path.join(settings.SURVEYS, f)
# could also surf through SURVEX_DATA
-
+
# directory listing
if os.path.isdir(fp):
listdirfiles = [ ]
listdirdirs = [ ]
-
+
for lf in sorted(os.listdir(fp)):
hpath = os.path.join(f, lf) # not absolute path
if lf[0] == "." or lf[-1] == "~":
continue
-
+
hpath = hpath.replace("\\", "/") # for windows users
href = hpath.replace("#", "%23") # '#' in file name annoyance
-
+
flf = os.path.join(fp, lf)
if os.path.isdir(flf):
nfiles = len([sf for sf in os.listdir(flf) if sf[0] != "."])
listdirdirs.append((href, hpath + "/", nfiles))
else:
listdirfiles.append((href, hpath, os.path.getsize(flf)))
-
+
upperdirs = [ ]
lf = f
while lf:
@@ -85,9 +85,9 @@ def jgtfile(request, f):
lf = os.path.split(lf)[0]
upperdirs.append((href, hpath))
upperdirs.append(("", "/"))
-
+
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):
ext = os.path.splitext(fp)[1].lower()
@@ -123,16 +123,16 @@ def SaveImageInDir(name, imgdir, project, fdata, bbinary):
print "*** Making directory", fprojdir
os.path.mkdir(fprojdir)
print "hhh"
-
+
fname = os.path.join(fprojdir, name)
print fname, "fff"
fname = UniqueFile(fname)
-
+
p2, p1 = os.path.split(fname)
p3, p2 = os.path.split(p2)
p4, p3 = os.path.split(p3)
res = os.path.join(p3, p2, p1)
-
+
print "saving file", fname
fout = open(fname, (bbinary and "wb" or "w"))
fout.write(fdata.read())
@@ -175,61 +175,61 @@ def surveyscansingle(request, path, file):
survexscansingle = SurvexScanSingle.objects.get(survexscansfolder=survexscansfolder, name=file)
return HttpResponse(content=open(survexscansingle.ffile), content_type=getMimeType(path.split(".")[-1]))
#return render(request, 'survexscansfolder.html', { 'survexscansfolder':survexscansfolder, 'settings': settings })
-
+
def surveyscansfolders(request):
survexscansfolders = SurvexScansFolder.objects.all()
return render(request, 'survexscansfolders.html', { 'survexscansfolders':survexscansfolders, 'settings': settings })
-
-
+
+
def tunneldata(request):
tunnelfiles = TunnelFile.objects.all()
return render(request, 'tunnelfiles.html', { 'tunnelfiles':tunnelfiles, 'settings': settings })
-
+
def tunnelfile(request, path):
tunnelfile = TunnelFile.objects.get(tunnelpath=urllib.unquote(path))
tfile = os.path.join(settings.TUNNEL_DATA, tunnelfile.tunnelpath)
return HttpResponse(content=open(tfile), content_type="text/plain")
-
+
def tunnelfileupload(request, path):
tunnelfile = TunnelFile.objects.get(tunnelpath=urllib.unquote(path))
tfile = os.path.join(settings.TUNNEL_DATA, tunnelfile.tunnelpath)
-
+
project, user, password, tunnelversion = request.POST["tunnelproject"], request.POST["tunneluser"], request.POST["tunnelpassword"], request.POST["tunnelversion"]
print (project, user, tunnelversion)
-
-
+
+
assert len(request.FILES.values()) == 1, "only one file to upload"
-
+
uploadedfile = request.FILES.values()[0]
-
+
if uploadedfile.field_name != "sketch":
return HttpResponse(content="Error: non-sketch file uploaded", content_type="text/plain")
if uploadedfile.content_type != "text/plain":
return HttpResponse(content="Error: non-plain content type", content_type="text/plain")
-
+
# could use this to add new files
- if os.path.split(path)[1] != uploadedfile.name:
+ if os.path.split(path)[1] != uploadedfile.name:
return HttpResponse(content="Error: name disagrees", content_type="text/plain")
-
+
orgsize = tunnelfile.filesize # = os.stat(tfile)[stat.ST_SIZE]
-
+
ttext = uploadedfile.read()
-
+
# could check that the user and projects agree here
-
+
fout = open(tfile, "w")
fout.write(ttext)
fout.close()
-
- # redo its settings of
+
+ # redo its settings of
parsers.surveys.SetTunnelfileInfo(tunnelfile)
tunnelfile.save()
-
+
uploadedfile.close()
message = "File size %d overwritten with size %d" % (orgsize, tunnelfile.filesize)
return HttpResponse(content=message, content_type="text/plain")
-
-
+
+
diff --git a/core/views_caves.py b/core/views_caves.py
index 5ee0d82..6e7a671 100644
--- a/core/views_caves.py
+++ b/core/views_caves.py
@@ -383,7 +383,7 @@ def mungecoord(x, y, mapcode, img):
# image is 1417 by 2201
# FACTOR1 = 1000.0 / (36670.0-34542.0)
# FACTOR2 = (1201.0-562.0) / (83317 - 81967)
- # FACTOR = (FACTOR1 + FACTOR2)/2
+ # 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.
@@ -465,7 +465,7 @@ def prospecting_image(request, name):
plot("laser.0_7", "BNase", "Reference", "Br&auml;uning Nase laser point", name, draw, img)
plot("226-96", "BZkn", "Reference", "Br&auml;uning Zinken trig point", name, draw, img)
plot("vd1","VD1","Reference", "VD1 survey point", name, draw, img)
- plot("laser.kt114_96","HSK","Reference", "Hinterer Schwarzmooskogel trig point", name, draw, img)
+ plot("laser.kt114_96","HSK","Reference", "Hinterer Schwarzmooskogel trig point", name, draw, img)
plot("2000","Nipple","Reference", "Nipple (Wei&szlig;e Warze)", name, draw, img)
plot("3000","VSK","Reference", "Vorderer Schwarzmooskogel summit", name, draw, img)
plot("topcamp", "TC", "Reference", "Top Camp", name, draw, img)
diff --git a/core/views_logbooks.py b/core/views_logbooks.py
index ef920d2..c1a7dcb 100644
--- a/core/views_logbooks.py
+++ b/core/views_logbooks.py
@@ -37,7 +37,7 @@ def getNotablePersons():
for person in Person.objects.all():
if person.bisnotable():
notablepersons.append(person)
- return notablepersons
+ return notablepersons
def personindex(request):
@@ -48,7 +48,7 @@ def personindex(request):
nc = (len(persons) + ncols - 1) / ncols
for i in range(ncols):
personss.append(persons[i * nc: (i + 1) * nc])
-
+
notablepersons = []
for person in Person.objects.all():
if person.bisnotable():
@@ -67,13 +67,13 @@ def expedition(request, expeditionname):
for personexpedition in this_expedition.personexpedition_set.all():
prow = [ ]
for date in dates:
- pcell = { "persontrips": PersonTrip.objects.filter(personexpedition=personexpedition,
+ pcell = { "persontrips": PersonTrip.objects.filter(personexpedition=personexpedition,
logbook_entry__date=date) }
- pcell["survexblocks"] = set(SurvexBlock.objects.filter(survexpersonrole__personexpedition=personexpedition,
+ pcell["survexblocks"] = set(SurvexBlock.objects.filter(survexpersonrole__personexpedition=personexpedition,
date=date))
prow.append(pcell)
personexpeditiondays.append({"personexpedition":personexpedition, "personrow":prow})
-
+
if "reload" in request.GET:
LoadLogbookForExpedition(this_expedition)
return render(request,'expedition.html', {'this_expedition': this_expedition,
@@ -97,14 +97,14 @@ class ExpeditionListView(ListView):
def person(request, first_name='', last_name='', ):
this_person = Person.objects.get(first_name = first_name, last_name = last_name)
-
+
# This is for removing the reference to the user's profile, in case they set it to the wrong person
if request.method == 'GET':
if request.GET.get('clear_profile')=='True':
this_person.user=None
this_person.save()
return HttpResponseRedirect(reverse('profiles_select_profile'))
-
+
return render(request,'person.html', {'person': this_person, })
@@ -117,19 +117,19 @@ def GetPersonChronology(personexpedition):
for personrole in personexpedition.survexpersonrole_set.all():
a = res.setdefault(personrole.survexblock.date, { })
a.setdefault("personroles", [ ]).append(personrole.survexblock)
-
+
# build up the tables
rdates = res.keys()
rdates.sort()
-
-
+
+
res2 = [ ]
for rdate in rdates:
persontrips = res[rdate].get("persontrips", [])
personroles = res[rdate].get("personroles", [])
for n in range(max(len(persontrips), len(personroles))):
res2.append(((n == 0 and rdate or "--"), (n < len(persontrips) and persontrips[n]), (n < len(personroles) and personroles[n])))
-
+
return res2
@@ -180,7 +180,7 @@ def experimental(request):
survexleglength += survexblock.totalleglength
legsbyexpo.append((expedition, {"nsurvexlegs":len(survexlegs), "survexleglength":survexleglength}))
legsbyexpo.reverse()
-
+
survexlegs = models.SurvexLeg.objects.all()
totalsurvexlength = sum([survexleg.tape for survexleg in survexlegs])
return render(request, 'experimental.html', { "nsurvexlegs":len(survexlegs), "totalsurvexlength":totalsurvexlength, "legsbyexpo":legsbyexpo })
@@ -198,11 +198,11 @@ def newLogbookEntry(request, expeditionyear, pdate = None, pslug = None):
personTripFormSet = PersonTripFormSet(request.POST)
if tripForm.is_valid() and personTripFormSet.is_valid(): # All validation rules pass
dateStr = tripForm.cleaned_data["date"].strftime("%Y-%m-%d")
- directory = os.path.join(settings.EXPOWEB,
- "years",
- expedition.year,
+ directory = os.path.join(settings.EXPOWEB,
+ "years",
+ expedition.year,
"autologbook")
- filename = os.path.join(directory,
+ filename = os.path.join(directory,
dateStr + "." + slugify(tripForm.cleaned_data["title"])[:50] + ".html")
if not os.path.isdir(directory):
os.mkdir(directory)
@@ -210,7 +210,7 @@ def newLogbookEntry(request, expeditionyear, pdate = None, pslug = None):
delLogbookEntry(previouslbe)
f = open(filename, "w")
template = loader.get_template('dataformat/logbookentry.html')
- context = Context({'trip': tripForm.cleaned_data,
+ context = Context({'trip': tripForm.cleaned_data,
'persons': personTripFormSet.cleaned_data,
'date': dateStr,
'expeditionyear': expeditionyear})
@@ -234,11 +234,11 @@ def newLogbookEntry(request, expeditionyear, pdate = None, pslug = None):
"location": previouslbe.place,
"caveOrLocation": "location",
"html": previouslbe.text})
- personTripFormSet = PersonTripFormSet(initial=[{"name": get_name(py.personexpedition),
- "TU": py.time_underground,
+ personTripFormSet = PersonTripFormSet(initial=[{"name": get_name(py.personexpedition),
+ "TU": py.time_underground,
"author": py.is_logbook_entry_author}
for py in previouslbe.persontrip_set.all()])
- else:
+ else:
tripForm = TripForm() # An unbound form
personTripFormSet = PersonTripFormSet()
diff --git a/core/views_other.py b/core/views_other.py
index 1297e7f..bb7e915 100644
--- a/core/views_other.py
+++ b/core/views_other.py
@@ -35,7 +35,7 @@ def frontpage(request):
return render(request,'frontpage.html', locals())
def todo(request):
- message = "no test message" #reverse('personn', kwargs={"name":"hkjhjh"})
+ message = "no test message" #reverse('personn', kwargs={"name":"hkjhjh"})
if "reloadexpos" in request.GET:
message = LoadPersonsExpos()
message = "Reloaded personexpos"
@@ -52,7 +52,7 @@ def controlPanel(request):
jobs_completed=[]
if request.method=='POST':
if request.user.is_superuser:
-
+
#importlist is mostly here so that things happen in the correct order.
#http post data seems to come in an unpredictable order, so we do it this way.
importlist=['reload_db', 'import_people', 'import_cavetab', 'import_logbooks', 'import_surveys', 'import_QMs']
@@ -85,7 +85,7 @@ def downloadSurveys(request):
return response
def downloadLogbook(request,year=None,extension=None,queryset=None):
-
+
if year:
current_expedition=Expedition.objects.get(year=year)
logbook_entries=LogbookEntry.objects.filter(expedition=current_expedition)
@@ -96,7 +96,7 @@ def downloadLogbook(request,year=None,extension=None,queryset=None):
else:
response = HttpResponse(content_type='text/plain')
return response(r"Error: Logbook downloader doesn't know what year you want")
-
+
if 'year' in request.GET:
year=request.GET['year']
if 'extension' in request.GET:
@@ -108,14 +108,14 @@ def downloadLogbook(request,year=None,extension=None,queryset=None):
elif extension == 'html':
response = HttpResponse(content_type='text/html')
style='2005'
-
+
template='logbook'+style+'style.'+extension
- response['Content-Disposition'] = 'attachment; filename='+filename+'.'+extension
+ response['Content-Disposition'] = 'attachment; filename='+filename+'.'+extension
t=loader.get_template(template)
c=Context({'logbook_entries':logbook_entries})
response.write(t.render(c))
return response
-
+
def downloadQMs(request):
# Note to self: use get_cave method for the below
@@ -131,14 +131,14 @@ def downloadQMs(request):
response['Content-Disposition'] = 'attachment; filename=qm.csv'
toqms.writeQmTable(response,cave)
return response
-
+
def ajax_test(request):
post_text = request.POST['post_data']
- return HttpResponse("{'response_text': '"+post_text+" recieved.'}",
+ return HttpResponse("{'response_text': '"+post_text+" recieved.'}",
content_type="application/json")
-
+
def eyecandy(request):
- return
+ return
def ajax_QM_number(request):
if request.method=='POST':
@@ -158,14 +158,14 @@ def logbook_entry_suggestions(request):
unwiki_QM_pattern=r"(?P<whole>(?P<explorer_code>[ABC]?)(?P<cave>\d*)-?(?P<year>\d\d\d?\d?)-(?P<number>\d\d)(?P<grade>[ABCDXV]?))"
unwiki_QM_pattern=re.compile(unwiki_QM_pattern)
#wikilink_QM_pattern=settings.QM_PATTERN
-
+
slug=request.POST['slug']
date=request.POST['date']
lbo=LogbookEntry.objects.get(slug=slug, date=date)
-
+
#unwiki_QMs=re.findall(unwiki_QM_pattern,lbo.text)
unwiki_QMs=[m.groupdict() for m in unwiki_QM_pattern.finditer(lbo.text)]
-
+
print(unwiki_QMs)
for qm in unwiki_QMs:
#try:
@@ -180,7 +180,7 @@ def logbook_entry_suggestions(request):
lbo=LogbookEntry.objects.get(date__year=qm['year'],title__icontains="placeholder for QMs in")
except:
print("failed to get placeholder for year "+str(qm['year']))
-
+
temp_QM=QM(found_by=lbo,number=qm['number'],grade=qm['grade'])
temp_QM.grade=qm['grade']
qm['wikilink']=temp_QM.wiki_link()
@@ -188,16 +188,16 @@ def logbook_entry_suggestions(request):
#print 'failed'
print(unwiki_QMs)
-
-
+
+
#wikilink_QMs=re.findall(wikilink_QM_pattern,lbo.text)
attached_QMs=lbo.QMs_found.all()
unmentioned_attached_QMs=''#not implemented, fill this in by subtracting wiklink_QMs from attached_QMs
-
+
#Find unattached_QMs. We only look at the QMs with a proper wiki link.
#for qm in wikilink_QMs:
- #Try to look up the QM.
-
+ #Try to look up the QM.
+
print('got 208')
any_suggestions=True
print('got 210')
@@ -217,11 +217,11 @@ def newFile(request, pslug = None):
# personTripFormSet = PersonTripFormSet(request.POST)
# if tripForm.is_valid() and personTripFormSet.is_valid(): # All validation rules pass
# dateStr = tripForm.cleaned_data["date"].strftime("%Y-%m-%d")
-# directory = os.path.join(settings.EXPOWEB,
-# "years",
-# expedition.year,
+# directory = os.path.join(settings.EXPOWEB,
+# "years",
+# expedition.year,
# "autologbook")
-# filename = os.path.join(directory,
+# filename = os.path.join(directory,
# dateStr + "." + slugify(tripForm.cleaned_data["title"])[:50] + ".html")
# if not os.path.isdir(directory):
# os.mkdir(directory)
@@ -229,7 +229,7 @@ def newFile(request, pslug = None):
# delLogbookEntry(previouslbe)
# f = open(filename, "w")
# template = loader.get_template('dataformat/logbookentry.html')
-# context = Context({'trip': tripForm.cleaned_data,
+# context = Context({'trip': tripForm.cleaned_data,
# 'persons': personTripFormSet.cleaned_data,
# 'date': dateStr,
# 'expeditionyear': expeditionyear})
@@ -254,11 +254,11 @@ def newFile(request, pslug = None):
# "location": previouslbe.place,
# "caveOrLocation": "location",
# "html": previouslbe.text})
-# personTripFormSet = PersonTripFormSet(initial=[{"name": get_name(py.personexpedition),
-# "TU": py.time_underground,
+# personTripFormSet = PersonTripFormSet(initial=[{"name": get_name(py.personexpedition),
+# "TU": py.time_underground,
# "author": py.is_logbook_entry_author}
# for py in previouslbe.persontrip_set.all()])
-# else:
+# else:
# fileform = UploadFileForm() # An unbound form
return render(request, 'editfile.html', {
diff --git a/core/views_survex.py b/core/views_survex.py
index 2582e40..cc04cb1 100644
--- a/core/views_survex.py
+++ b/core/views_survex.py
@@ -17,7 +17,7 @@ import troggle.settings as settings
import parsers.survex
survextemplatefile = """; Locn: Totes Gebirge, Austria - Loser/Augst-Eck Plateau (kataster group 1623)
-; Cave:
+; Cave:
*begin [surveyname]
@@ -65,7 +65,7 @@ class SvxForm(forms.Form):
datetime = forms.DateTimeField(widget=forms.TextInput(attrs={"readonly":True}))
outputtype = forms.CharField(widget=forms.TextInput(attrs={"readonly":True}))
code = forms.CharField(widget=forms.Textarea(attrs={"cols":150, "rows":18}))
-
+
def GetDiscCode(self):
fname = settings.SURVEX_DATA + self.data['filename'] + ".svx"
if not os.path.isfile(fname):
@@ -75,7 +75,7 @@ class SvxForm(forms.Form):
svxtext = ReplaceTabs(svxtext).strip()
fin.close()
return svxtext
-
+
def DiffCode(self, rcode):
code = self.GetDiscCode()
difftext = difflib.unified_diff(code.splitlines(), rcode.splitlines())
@@ -86,14 +86,14 @@ class SvxForm(forms.Form):
fname = settings.SURVEX_DATA + self.data['filename'] + ".svx"
if not os.path.isfile(fname):
# only save if appears valid
- if re.search(r"\[|\]", rcode):
+ if re.search(r"\[|\]", rcode):
return "Error: clean up all []s from the text"
mbeginend = re.search(r"(?s)\*begin\s+(\w+).*?\*end\s+(\w+)", rcode)
if not mbeginend:
return "Error: no begin/end block here"
if mbeginend.group(1) != mbeginend.group(2):
return "Error: mismatching beginend"
-
+
fout = open(fname, "w")
res = fout.write(rcode.encode("latin1"))
fout.close()
@@ -118,21 +118,21 @@ def svx(request, survex_file):
dirname += "/"
nowtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
outputtype = "normal"
- form = SvxForm({'filename':survex_file, 'dirname':dirname, 'datetime':nowtime, 'outputtype':outputtype})
-
+ form = SvxForm({'filename':survex_file, 'dirname':dirname, 'datetime':nowtime, 'outputtype':outputtype})
+
# if the form has been returned
difflist = [ ]
logmessage = ""
message = ""
if request.method == 'POST': # If the form has been submitted...
- rform = SvxForm(request.POST) #
+ rform = SvxForm(request.POST) #
if rform.is_valid(): # All validation rules pass (how do we check it against the filename and users?)
rcode = rform.cleaned_data['code']
outputtype = rform.cleaned_data['outputtype']
difflist = form.DiffCode(rcode)
#print "ssss", rform.data
-
+
if "revert" in rform.data:
pass
if "process" in rform.data:
@@ -153,20 +153,20 @@ def svx(request, survex_file):
form.data['code'] = rcode
if "diff" in rform.data:
form.data['code'] = rcode
-
-
+
+
#process(survex_file)
- if 'code' not in form.data:
+ if 'code' not in form.data:
form.data['code'] = form.GetDiscCode()
-
+
if not difflist:
difflist.append("none")
if message:
difflist.insert(0, message)
-
+
#print [ form.data['code'] ]
svxincludes = re.findall(r'\*include\s+(\S+)(?i)', form.data['code'] or "")
-
+
vmap = {'settings': settings,
'has_3d': os.path.isfile(settings.SURVEX_DATA + survex_file + ".3d"),
'title': survex_file,
@@ -227,13 +227,13 @@ def identifycavedircontents(gcavedir):
pass
elif name == "115" and (f in ["115cufix.svx", "115fix.svx"]):
pass
-
+
elif os.path.isdir(os.path.join(gcavedir, f)):
if f[0] != ".":
subdirs.append(f)
elif f[-4:] == ".svx":
nf = f[:-4]
-
+
if nf.lower() == name.lower() or nf[:3] == "all" or (name, nf) in [("resurvey2005", "145-2005"), ("cucc", "cu115")]:
if primesvx:
if nf[:3] == "all":
@@ -272,16 +272,16 @@ def survexcaveslist(request):
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.sort()
-
+
onefilecaves = [ ]
multifilecaves = [ ]
subdircaves = [ ]
print(fnumlist)
-
+
# go through the list and identify the contents of each cave directory
for num, cavedir, area in fnumlist:
if cavedir in ["144", "40"]:
@@ -293,10 +293,10 @@ def survexcaveslist(request):
if os.path.isdir(gcavedir) and cavedir[0] != ".":
subdirs, subsvx = identifycavedircontents(gcavedir)
survdirobj = [ ]
-
+
for lsubsvx in subsvx:
survdirobj.append(("caves-" + area + "/"+cavedir+"/"+lsubsvx, lsubsvx))
-
+
# caves with subdirectories
if subdirs:
subsurvdirs = [ ]
@@ -308,7 +308,7 @@ def survexcaveslist(request):
lsurvdirobj.append(("caves-" + area + "/"+cavedir+"/"+subdir+"/"+lsubsvx, lsubsvx))
subsurvdirs.append((lsurvdirobj[0], lsurvdirobj[1:]))
subdircaves.append((cavedir, (survdirobj[0], survdirobj[1:]), subsurvdirs))
-
+
# multifile caves
elif len(survdirobj) > 1:
multifilecaves.append((survdirobj[0], survdirobj[1:]))