diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/admin.py | 14 | ||||
-rw-r--r-- | core/fileAbstraction.py | 4 | ||||
-rw-r--r-- | core/forms.py | 40 | ||||
-rw-r--r-- | core/imagekit_specs.py | 18 | ||||
-rw-r--r-- | core/models.py | 120 | ||||
-rw-r--r-- | core/models_survex.py | 60 | ||||
-rw-r--r-- | core/view_surveys.py | 68 | ||||
-rw-r--r-- | core/views_caves.py | 4 | ||||
-rw-r--r-- | core/views_logbooks.py | 40 | ||||
-rw-r--r-- | core/views_other.py | 56 | ||||
-rw-r--r-- | core/views_survex.py | 46 |
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ür Hö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 += "–" + 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äuning Nase laser point", name, draw, img) plot("226-96", "BZkn", "Reference", "Brä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ß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:])) |