diff options
Diffstat (limited to 'core/models.py')
-rw-r--r-- | core/models.py | 101 |
1 files changed, 55 insertions, 46 deletions
diff --git a/core/models.py b/core/models.py index 5b9f48c..dc51024 100644 --- a/core/models.py +++ b/core/models.py @@ -1,5 +1,18 @@ -import urllib, urlparse, string, os, datetime, logging, re +import string +import os +import datetime +import logging +import re import subprocess + +from urllib.request import * +from urllib.parse import * +from urllib.error import * +from decimal import Decimal, getcontext +getcontext().prec=2 #use 2 significant figures for decimal calculations + +import settings + from django.forms import ModelForm from django.db import models from django.contrib import admin @@ -8,12 +21,8 @@ from django.contrib.auth.models import User from django.contrib.contenttypes.models import ContentType from django.db.models import Min, Max from django.conf import settings -from decimal import Decimal, getcontext from django.core.urlresolvers import reverse -from imagekit.models import ImageModel from django.template import Context, loader -import settings -getcontext().prec=2 #use 2 significant figures for decimal calculations from troggle.core.models_survex import * @@ -30,7 +39,7 @@ def get_related_by_wikilinks(wiki_text): number = qmdict['number']) res.append(qm) except QM.DoesNotExist: - print('fail on '+str(wikilink)) + print(('fail on '+str(wikilink))) return res @@ -52,7 +61,7 @@ class TroggleModel(models.Model): return self._meta.object_name def get_admin_url(self): - return urlparse.urljoin(settings.URL_ROOT, "/admin/core/" + self.object_name().lower() + "/" + str(self.pk)) + return urllib.parse.urljoin(settings.URL_ROOT, "/admin/core/" + self.object_name().lower() + "/" + str(self.pk)) class Meta: abstract = True @@ -64,7 +73,7 @@ class TroggleImageModel(models.Model): return self._meta.object_name def get_admin_url(self): - return urlparse.urljoin(settings.URL_ROOT, "/admin/core/" + self.object_name().lower() + "/" + str(self.pk)) + return urllib.parse.urljoin(settings.URL_ROOT, "/admin/core/" + self.object_name().lower() + "/" + str(self.pk)) class Meta: @@ -85,7 +94,7 @@ class Expedition(TroggleModel): get_latest_by = 'year' def get_absolute_url(self): - return urlparse.urljoin(settings.URL_ROOT, reverse('expedition', args=[self.year])) + return urllib.parse.urljoin(settings.URL_ROOT, reverse('expedition', args=[self.year])) # construction function. should be moved out def get_expedition_day(self, date): @@ -117,10 +126,9 @@ class ExpeditionDay(TroggleModel): personexpeditions = self.persontrip_set.filter(expeditionday=self) return personexpeditions and personexpeditions[0] or None -# -# single Person, can go on many years -# class Person(TroggleModel): + """single Person, can go on many years + """ first_name = models.CharField(max_length=100) last_name = models.CharField(max_length=100) fullname = models.CharField(max_length=200) @@ -132,7 +140,7 @@ class Person(TroggleModel): 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})) + return urllib.parse.urljoin(settings.URL_ROOT,reverse('person',kwargs={'first_name':self.first_name,'last_name':self.last_name})) class Meta: verbose_name_plural = "People" @@ -153,7 +161,7 @@ class Person(TroggleModel): for personexpedition in self.personexpedition_set.all(): if not personexpedition.is_guest: - print(personexpedition.expedition.year) + print((personexpedition.expedition.year)) notability += Decimal(1) / (max_expo_val - int(personexpedition.expedition.year)) return notability @@ -178,10 +186,9 @@ class Person(TroggleModel): #self.notability = 0.0 # set temporarily -# -# Person's attenance to one Expo -# class PersonExpedition(TroggleModel): + """Person's attendance to one Expo + """ expedition = models.ForeignKey(Expedition) person = models.ForeignKey(Person) slugfield = models.SlugField(max_length=50,blank=True,null=True) @@ -213,7 +220,6 @@ 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: @@ -223,7 +229,7 @@ class PersonExpedition(TroggleModel): return self.person.first_name 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})) + return urllib.parse.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() ] @@ -238,11 +244,9 @@ class PersonExpedition(TroggleModel): res = self.persontrip_set.all().aggregate(day_max=Max("expeditionday__date")) return res["day_max"] -# -# Single parsed entry from Logbook -# class LogbookEntry(TroggleModel): - + """Single parsed entry from Logbook + """ LOGBOOK_ENTRY_TYPES = ( ("wiki", "Wiki style logbook"), ("html", "Html style logbook") @@ -265,22 +269,27 @@ class LogbookEntry(TroggleModel): 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 - return super(LogbookEntry, self).__getattribute__(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 + # parse error in python3.8 + # https://stackoverflow.com/questions/41343263/provide-classcell-example-for-python-3-6-metaclass + return super(LogbookEntry, self).__getattribute__(item) def __init__(self, *args, **kwargs): - if "cave" in kwargs.keys(): + if "cave" in list(kwargs.keys()): if kwargs["cave"] is not None: kwargs["cave_slug"] = CaveSlug.objects.get(cave=kwargs["cave"], primary=True).slug kwargs.pop("cave") + # parse error in python3.8 + # https://stackoverflow.com/questions/41343263/provide-classcell-example-for-python-3-6-metaclass return super(LogbookEntry, self).__init__(*args, **kwargs) def isLogbookEntry(self): # Function used in templates return True def get_absolute_url(self): - return urlparse.urljoin(settings.URL_ROOT, reverse('logbookentry',kwargs={'date':self.date,'slug':self.slug})) + return urllib.parse.urljoin(settings.URL_ROOT, reverse('logbookentry',kwargs={'date':self.date,'slug':self.slug})) def __unicode__(self): return "%s: (%s)" % (self.date, self.title) @@ -357,9 +366,9 @@ class Area(TroggleModel): parent = models.ForeignKey('Area', blank=True, null=True) def __unicode__(self): if self.parent: - return unicode(self.parent) + u" - " + unicode(self.short_name) + return str(self.parent) + " - " + str(self.short_name) else: - return unicode(self.short_name) + return str(self.short_name) def kat_area(self): if self.short_name in ["1623", "1626"]: return self.short_name @@ -371,7 +380,7 @@ class CaveAndEntrance(models.Model): entrance = models.ForeignKey('Entrance') entrance_letter = models.CharField(max_length=20,blank=True,null=True) def __unicode__(self): - return unicode(self.cave) + unicode(self.entrance_letter) + return str(self.cave) + str(self.entrance_letter) class CaveSlug(models.Model): cave = models.ForeignKey('Cave') @@ -454,10 +463,10 @@ class Cave(TroggleModel): else: href = self.official_name.lower() #return settings.URL_ROOT + '/cave/' + href + '/' - return urlparse.urljoin(settings.URL_ROOT, reverse('cave',kwargs={'cave_id':href,})) + return urllib.parse.urljoin(settings.URL_ROOT, reverse('cave',kwargs={'cave_id':href,})) - def __unicode__(self, sep = u": "): - return unicode("slug:"+self.slug()) + def __unicode__(self, sep = ": "): + return str("slug:"+self.slug()) def get_QMs(self): return QM.objects.filter(found_by__cave_slug=self.caveslug_set.all()) @@ -539,7 +548,7 @@ def getCaveByReference(reference): 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()) - print(list(foundCaves)) + print((list(foundCaves))) if len(foundCaves) == 1: return foundCaves[0] else: @@ -549,7 +558,7 @@ class OtherCaveName(TroggleModel): name = models.CharField(max_length=160) cave = models.ForeignKey(Cave) def __unicode__(self): - return unicode(self.name) + return str(self.name) class EntranceSlug(models.Model): entrance = models.ForeignKey('Entrance') @@ -597,7 +606,7 @@ class Entrance(TroggleModel): cached_primary_slug = models.CharField(max_length=200,blank=True,null=True) def __unicode__(self): - return unicode(self.slug()) + return str(self.slug()) def exact_location(self): return SurvexStation.objects.lookup(self.exact_station) @@ -714,12 +723,12 @@ class CaveDescription(TroggleModel): def __unicode__(self): if self.long_name: - return unicode(self.long_name) + return str(self.long_name) else: - return unicode(self.short_name) + return str(self.short_name) def get_absolute_url(self): - return urlparse.urljoin(settings.URL_ROOT, reverse('cavedescription', args=(self.short_name,))) + return urllib.parse.urljoin(settings.URL_ROOT, reverse('cavedescription', args=(self.short_name,))) def save(self): """ @@ -734,7 +743,7 @@ class CaveDescription(TroggleModel): class NewSubCave(TroggleModel): name = models.CharField(max_length=200, unique = True) def __unicode__(self): - return unicode(self.name) + return str(self.name) class QM(TroggleModel): #based on qm.csv in trunk/expoweb/1623/204 which has the fields: @@ -762,14 +771,14 @@ class QM(TroggleModel): comment=models.TextField(blank=True,null=True) def __unicode__(self): - return u"%s %s" % (self.code(), self.grade) + return "%s %s" % (self.code(), self.grade) def code(self): - return u"%s-%s-%s" % (unicode(self.found_by.cave)[6:], self.found_by.date.year, self.number) + return "%s-%s-%s" % (str(self.found_by.cave)[6:], self.found_by.date.year, self.number) def get_absolute_url(self): #return settings.URL_ROOT + '/cave/' + self.found_by.cave.kataster_number + '/' + str(self.found_by.date.year) + '-' + '%02d' %self.number - return urlparse.urljoin(settings.URL_ROOT, reverse('qm',kwargs={'cave_id':self.found_by.cave.kataster_number,'year':self.found_by.date.year,'qm_id':self.number,'grade':self.grade})) + return urllib.parse.urljoin(settings.URL_ROOT, reverse('qm',kwargs={'cave_id':self.found_by.cave.kataster_number,'year':self.found_by.date.year,'qm_id':self.number,'grade':self.grade})) def get_next_by_id(self): return QM.objects.get(id=self.id+1) @@ -778,7 +787,7 @@ class QM(TroggleModel): return QM.objects.get(id=self.id-1) def wiki_link(self): - return u"%s%s%s" % ('[[QM:',self.code(),']]') + return "%s%s%s" % ('[[QM:',self.code(),']]') #photoFileStorage = FileSystemStorage(location=settings.PHOTOS_ROOT, base_url=settings.PHOTOS_URL) #class DPhoto(TroggleImageModel): @@ -880,4 +889,4 @@ class DataIssue(TroggleModel): ordering = ['date'] def __unicode__(self): - return u"%s - %s" % (self.parser, self.message) + return "%s - %s" % (self.parser, self.message) |