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 = ''' - -CUCC Expedition - index - - - - - -

Expo

-

CUCC Expedition

- -''' # 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. &pound;;. ]*)>(.*)<\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 (.*)", head, re.DOTALL + re.IGNORECASE) - if m: - title, = m.groups() - else: - title = "" - m = re.search(r"^]*)noedit", head, re.DOTALL + re.IGNORECASE) - if m: - editable = False - else: - editable = os.access(Path(expowebpath / path), os.W_OK) # are file permissions writeable? - - has_menu = False - menumatch = re.match(r'(.*)