diff options
author | Philip Sargent <philip.sargent@klebos.com> | 2020-05-30 01:11:02 +0100 |
---|---|---|
committer | Philip Sargent <philip.sargent@klebos.com> | 2020-05-30 01:11:02 +0100 |
commit | 0776978c9c8d7ee921b446de18b40162ba231aab (patch) | |
tree | 7c1873fa42fff63387305c640a0a27334bf4ba6f /core/models.py | |
parent | 6568cb890015f43a97248bd48e92de67238ca325 (diff) | |
download | troggle-0776978c9c8d7ee921b446de18b40162ba231aab.tar.gz troggle-0776978c9c8d7ee921b446de18b40162ba231aab.tar.bz2 troggle-0776978c9c8d7ee921b446de18b40162ba231aab.zip |
Import rejigging to fix circular refs
Diffstat (limited to 'core/models.py')
-rw-r--r-- | core/models.py | 119 |
1 files changed, 1 insertions, 118 deletions
diff --git a/core/models.py b/core/models.py index 4243fe1..4d69481 100644 --- a/core/models.py +++ b/core/models.py @@ -5,7 +5,7 @@ import logging import re from subprocess import call -from urllib.parse import urljoin +import urllib.parse from decimal import Decimal, getcontext getcontext().prec=2 #use 2 significant figures for decimal calculations @@ -15,7 +15,6 @@ from django.db import models from django.contrib import admin 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 django.core.urlresolvers import reverse from django.template import Context, loader @@ -237,119 +236,3 @@ class PersonExpedition(TroggleModel): return res["day_max"] -class LogbookEntry(TroggleModel): - """Single parsed entry from Logbook - """ - LOGBOOK_ENTRY_TYPES = ( - ("wiki", "Wiki style logbook"), - ("html", "Html style logbook") - ) - - date = models.DateField()#MJG wants to turn this into a datetime such that multiple Logbook entries on the same day can be ordered.ld() - expeditionday = models.ForeignKey("ExpeditionDay", null=True)#MJG wants to KILL THIS (redundant information) - expedition = models.ForeignKey(Expedition,blank=True,null=True) # yes this is double- - title = models.CharField(max_length=settings.MAX_LOGBOOK_ENTRY_TITLE_LENGTH) - cave_slug = models.SlugField(max_length=50) - place = models.CharField(max_length=100,blank=True,null=True,help_text="Only use this if you haven't chosen a cave") - text = models.TextField() - slug = models.SlugField(max_length=50) - filename = models.CharField(max_length=200,null=True) - entry_type = models.CharField(default="wiki",null=True,choices=LOGBOOK_ENTRY_TYPES,max_length=50) - - class Meta: - 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 models_caves.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 - #https://github.com/django/django/pull/7653 - #return TroggleModel.__getattribute__(item) - #return super(LogbookEntry, self).__getattribute__(item) # works in py3.5, fails in 3.8 - return TroggleModel.__getattribute__(self,item) # works in py 3.5 AND in 3.8 - - def __init__(self, *args, **kwargs): - if "cave" in list(kwargs.keys()): - if kwargs["cave"] is not None: - kwargs["cave_slug"] = models_caves.CaveSlug.objects.get(cave=kwargs["cave"], primary=True).slug - kwargs.pop("cave") - # parse error in python3.8 - return TroggleModel.__init__(self, *args, **kwargs) # seems OK in 3.5 & 3.8! failure later elsewhere with 3.8 - #return TroggleModel().__init__(self, *args, **kwargs) # parses OK, fails at runtime in 3.8 - #return super().__init__(self, *args, **kwargs) # fails in 3.8 - #return super().__init__(*args, **kwargs) # works in py3.5 fails in 3.8 - #return super(LogbookEntry, self).__init__(*args, **kwargs) # works in py3.5 - #return TroggleModel.__init__(*args, **kwargs) # fails in py3.5, runtime fail in 3.8 - - def isLogbookEntry(self): # Function used in templates - return True - - def get_absolute_url(self): - return urllib.parse.urljoin(settings.URL_ROOT, reverse('logbookentry',kwargs={'date':self.date,'slug':self.slug})) - - def __str__(self): - return "%s: (%s)" % (self.date, self.title) - - def get_next_by_id(self): - LogbookEntry.objects.get(id=self.id+1) - - def get_previous_by_id(self): - LogbookEntry.objects.get(id=self.id-1) - - def new_QM_number(self): - """Returns """ - if self.cave: - nextQMnumber=self.cave.new_QM_number(self.date.year) - else: - return None - return nextQMnumber - - def new_QM_found_link(self): - """Produces a link to a new QM with the next number filled in and this LogbookEntry set as 'found by' """ - return settings.URL_ROOT + r'/admin/core/qm/add/?' + r'found_by=' + str(self.pk) +'&number=' + str(self.new_QM_number()) - - def DayIndex(self): - return list(self.expeditionday.logbookentry_set.all()).index(self) - - -# -# Single Person going on a trip, which may or may not be written up (accounts for different T/U for people in same logbook entry) -# -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: - return futurePTs[0] - else: - return None - - def persontrip_prev(self): - pastPTs = PersonTrip.objects.filter(personexpedition = self.personexpedition, logbook_entry__date__lt = self.logbook_entry.date).order_by('-logbook_entry__date').all() - if len(pastPTs) > 0: - return pastPTs[0] - else: - return None - - def place(self): - return self.logbook_entry.cave and self.logbook_entry.cave or self.logbook_entry.place - - def __str__(self): - return "%s (%s)" % (self.personexpedition, self.logbook_entry.date) - |