diff --git a/_deploy/wsl/check-for-later-copy-of-localsettings.WSL.txt b/_deploy/wsl/check-for-later-copy-of-localsettings.WSL.txt
index 1f6a21f..db557ee 100644
--- a/_deploy/wsl/check-for-later-copy-of-localsettings.WSL.txt
+++ b/_deploy/wsl/check-for-later-copy-of-localsettings.WSL.txt
@@ -1,3 +1,3 @@
-The copy in this /_deploy/ folder may not be the latest if active development
-has been going on in the parent folder. Check there for a later copy of
+The copy in this /_deploy/ folder may not be the latest if active development
+has been going on in the parent folder. Check there for a later copy of
the localsettingsWSL file.
\ No newline at end of file
diff --git a/core/views/expo.py b/core/views/expo.py
index 2b769db..45f588f 100644
--- a/core/views/expo.py
+++ b/core/views/expo.py
@@ -1,368 +1,368 @@
-import os
-import re
-import subprocess
-from pathlib import Path
-from urllib.parse import urljoin, unquote as urlunquote
-from urllib.request import urlopen
-
-from django.shortcuts import render, redirect
-from django.http import HttpResponse, HttpResponseRedirect, Http404
-from django.urls import reverse, resolve
-from django.template import Context, loader
-from django.views.decorators.csrf import ensure_csrf_cookie
-from django.contrib import admin
-
-import django.forms as forms
-
-from .auth import login_required_if_public
-from troggle.core.models.caves import Cave
-import troggle.core.views.caves
-import troggle.settings as settings
-
-'''Formerly a separate package called 'flatpages' written by Martin Green 2011.
-This was NOT django.contrib.flatpages which stores HTML in the database, so the name was changed to expopages.
-Then it was incorporated into troggle directly, rather than being an unnecessary external package.
-'''
-
-default_head = '''
''' # this gets overwritten by templates/menu.html by django for most normal pages
-
-def expofiles_redirect(request, filepath):
- '''This is used only when running as a test system without a local copy of /expofiles/
- when settings.EXPOFILESREMOTE is True
- '''
- return redirect(urljoin('http://expo.survex.com/expofiles/', filepath))
-
-def map(request):
- '''Serves unadorned the expoweb/map/map.html file
- '''
- fn = Path(settings.EXPOWEB, 'map', 'map.html')
- return HttpResponse(content=open(fn, "r"),content_type='text/html')
-
-def mapfile(request, path):
- '''Serves unadorned file
- '''
- fn = Path(settings.EXPOWEB, 'map', path)
- return HttpResponse(content=open(fn, "r"),content_type=getmimetype(fn))
-
-def expofilessingle(request, filepath):
- '''sends a single binary file to the user, if not found, show the parent directory
- If the path actually is a directory, then show that.
- '''
- #print(f' - expofilessingle {filepath}')
- if filepath =="" or filepath =="/":
- return expofilesdir(request, settings.EXPOFILES, "")
-
- fn=urlunquote(filepath)
- fn = Path(settings.EXPOFILES,filepath)
- if fn.is_dir():
- return expofilesdir(request, Path(fn), Path(filepath))
- if fn.is_file():
- return HttpResponse(content=open(fn, "rb"),content_type=getmimetype(filepath)) # any file
- else:
- # not a file, so show parent directory - DANGER need to check this is limited to below expofiles
- if Path(fn).parent == Path(settings.EXPOFILES).parent:
- return expofilesdir(request, Path(settings.EXPOFILES), Path(filepath).parent)
- else:
- return expofilesdir(request, Path(fn).parent, Path(filepath).parent)
-
-def expofilesdir(request, dirpath, filepath):
- '''does a directory display. If there is an index.html file we should display that.
- - dirpath is a full Path() resolved including local machine /expofiles/
- - filepath is a Path() and it does not have /expofiles/ in it
- '''
- #print(f' - expofilesdir {dirpath} settings.EXPOFILESREMOTE: {settings.EXPOFILESREMOTE}')
- if filepath:
- urlpath = 'expofiles' / Path(filepath)
- else:
- urlpath = Path('expofiles')
- try:
- for f in dirpath.iterdir():
- pass
- except FileNotFoundError:
- #print(f' - expofilesdir error {dirpath}')
- return expofilesdir(request, dirpath.parent, filepath.parent)
-
- fileitems = []
- diritems = []
- for f in dirpath.iterdir():
- if f.is_dir():
- diritems.append((urlpath / f.parts[-1], str(f.parts[-1])))
- else:
- # if f.parts[-1].lower() == 'index.htm' or f.parts[-1].lower() == 'index.html': # css cwd problem
- # return HttpResponse(content=open(f, "rb"),content_type=getmimetype(filepath)) # any file
- # return expofilessingle(request, str(Path(filepath / f.parts[-1])))
- fileitems.append((Path(urlpath) / f.parts[-1], str(f.parts[-1]), getmimetype(f)))
- return render(request, 'dirdisplay.html', { 'filepath': urlpath, 'fileitems':fileitems, 'diritems': diritems,'settings': settings })
-
-def expowebpage(request, expowebpath, path):
- '''Adds menus and serves an HTML page
- '''
- if not Path(expowebpath / path).is_file():
- # Should not get here if the path has suffix "_edit"
- print(f' - 404 error in expowebpage() {path}')
- return render(request, 'pagenotfound.html', {'path': path}, status="404")
-
- try:
- with open(os.path.normpath(expowebpath / path), "r") as o:
- html = o.read()
- except:
- try:
- with open(os.path.normpath(expowebpath / path), "rb") as o:
- html = str(o.read()).replace("
","
BAD NON-UTF-8 characters here - ")
- except:
- return HttpResponse(default_head + '
UTF-8 Parsing Failure: Page could not be parsed using UTF-8: failure detected in expowebpage in views.expo.py
Please edit this :expoweb: page to replace dubious umlauts and £ symbols with correct HTML entities e.g. £;. ]*)>(.*)<\s*/head\s*>(.*)<\s*body([^>]*)>(.*)<\s*/body\s*>(.*)', html, re.DOTALL + re.IGNORECASE)
- if m:
- preheader, headerattrs, head, postheader, bodyattrs, body, postbody = m.groups()
- else:
- return HttpResponse(default_head + html + '
HTML Parsing failure: Page could not be parsed into header and body: failure detected in expowebpage in views.expo.py
Please edit this :expoweb: page to be in the expected full HTML format