summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/models.py6
-rw-r--r--core/views/logbooks.py41
2 files changed, 40 insertions, 7 deletions
diff --git a/core/models.py b/core/models.py
index 8082d6e..cd8db02 100644
--- a/core/models.py
+++ b/core/models.py
@@ -32,7 +32,11 @@ There are more subclasses define in models_caves.py models_survex.py etc.
# This variable is a dictionary holding gloablly visible indexes and cache functions.
# It is a Global Object, see https://python-patterns.guide/python/module-globals/
# troggle.models.TROG
-TROG = {}
+TROG = {
+ 'pagecache' : {
+ 'expedition' : {}
+ }
+}
def get_process_memory():
usage=resource.getrusage(resource.RUSAGE_SELF)
diff --git a/core/views/logbooks.py b/core/views/logbooks.py
index 11ea3d6..4abb205 100644
--- a/core/views/logbooks.py
+++ b/core/views/logbooks.py
@@ -12,10 +12,9 @@ from django.template.defaultfilters import slugify
from django.utils import timezone
from django.views.generic.list import ListView
-import troggle.core.models as models
-import troggle.parsers.logbooks as logbookparsers
+#import troggle.parsers.logbooks as logbookparsers
from troggle.core.forms import getTripForm # , get_name, PersonForm
-from troggle.core.models import Expedition, Person, PersonExpedition
+from troggle.core.models import Expedition, Person, PersonExpedition, TROG
from troggle.core.models_caves import LogbookEntry, PersonTrip
from troggle.core.models_survex import SurvexBlock
from .login import login_required_if_public
@@ -24,6 +23,11 @@ from troggle.parsers.people import GetPersonExpeditionNameLookup
import troggle.settings as settings
+'''These views are for logbook items when they appear in an 'expedition' page
+and for persons: their individual pages and their perseonexpedition pages.
+
+It uses the global object TROG to hold some cached pages.
+'''
def getNotablePersons():
notablepersons = []
@@ -51,7 +55,27 @@ def personindex(request):
def expedition(request, expeditionname):
+ '''Returns a rendered page for one expedition, specified by the year e.g. '2019'.
+ If page caching is enabled, it caches the dictionaries used to render the template page.
+
+ The cache is refreshed if '?reload' is present in the requesting URL, which also re-parses the logbook.
+ By specifying a '0' for the expected number of entries in the logbook cache, this forces the parser to
+ re-parse the original logbook HTML file.
+ '''
+ if "reload" in request.GET:
+ this_expedition = Expedition.objects.get(year=int(expeditionname))
+ LoadLogbookForExpedition(this_expedition, 0)
+
+ ts = TROG['pagecache']['expedition']
+ if settings.CACHEDPAGES:
+ nexpos = len( TROG['pagecache']['expedition'])
+ #print(f'! - expo {expeditionname} CACHEDPAGES {nexpos} expo pages in cache.')
+ if expeditionname in ts:
+ #print('! - expo {expeditionanme} using cached page')
+ return render(request,'expedition.html', ts[expeditionname] )
+
this_expedition = Expedition.objects.get(year=int(expeditionname))
+
expeditions = Expedition.objects.all()
personexpeditiondays = [ ]
dateditems = list(this_expedition.logbookentry_set.all()) + list(this_expedition.survexblock_set.all())
@@ -66,9 +90,14 @@ def expedition(request, expeditionname):
prow.append(pcell)
personexpeditiondays.append({"personexpedition":personexpedition, "personrow":prow})
- if "reload" in request.GET:
- LoadLogbookForExpedition(this_expedition)
- return render(request,'expedition.html', {'expedition': this_expedition, 'expeditions':expeditions, 'personexpeditiondays':personexpeditiondays, 'settings':settings, 'dateditems': dateditems })
+
+ ts[expeditionname] = {'expedition': this_expedition, 'expeditions':expeditions,
+ 'personexpeditiondays':personexpeditiondays, 'settings':settings,
+ 'dateditems': dateditems }
+ TROG['pagecache']['expedition'][expeditionname] = ts[expeditionname]
+ nexpos = len( TROG['pagecache']['expedition'])
+ #print(f'! - expo {expeditionname} pre-render N expos:{nexpos}')
+ return render(request,'expedition.html', ts[expeditionname] )
def get_absolute_url(self):