summaryrefslogtreecommitdiffstats
path: root/core/models.py
diff options
context:
space:
mode:
Diffstat (limited to 'core/models.py')
-rw-r--r--core/models.py101
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)