2011-07-11 01:49:03 +01:00
from django . conf import settings
2022-03-04 14:54:49 +00:00
from django . urls import include , re_path
2021-03-21 01:37:52 +00:00
from django . views . generic . base import RedirectView
2020-05-28 01:38:35 +01:00
from django . views . generic . edit import UpdateView
from django . views . generic . list import ListView
from django . contrib import admin
2021-04-06 00:49:09 +01:00
from django . contrib import auth
2022-03-02 21:15:24 +00:00
from django . urls import path , reverse , resolve
2020-06-22 00:03:23 +01:00
2022-03-18 20:00:15 +00:00
from troggle . core . views import statistics , survex
2022-07-21 08:32:11 +01:00
from troggle . core . views . scans import scansingle , allwallets , cavewallets
2021-05-04 14:16:48 +01:00
from troggle . core . views . drawings import dwgallfiles , dwgfilesingle
2022-03-13 01:01:00 +00:00
from troggle . core . views . uploads import dwgupload , scanupload , photoupload
2021-05-05 00:35:10 +01:00
from troggle . core . views . other import troggle404 , frontpage , todos , controlpanel , frontpage
2021-04-28 02:43:09 +01:00
from troggle . core . views . other import exportlogbook
2022-07-08 20:19:56 +01:00
from troggle . core . views . caves import ent , cavepage , caveindex , get_entrances , edit_cave , cave3d , caveEntrance , edit_entrance , caveQMs , qm
2021-04-16 21:28:44 +01:00
from troggle . core . views . logbooks import get_logbook_entries , logbookentry , logbookSearch
2021-04-30 21:32:53 +01:00
from troggle . core . views . logbooks import notablepersons , person , get_people
2021-04-16 21:28:44 +01:00
from troggle . core . views . logbooks import expedition , personexpedition , Expeditions_tsvListView , Expeditions_jsonListView
from troggle . core . views . prospect import prospecting_image
from troggle . core . views . prospect import prospecting
2021-04-11 20:00:09 +01:00
from troggle . core . views . statistics import pathsreport , stats , dataissues
2021-04-16 21:28:44 +01:00
from troggle . core . views . expo import expofiles_redirect , expofilessingle , expopage , editexpopage , mediapage , map , mapfile
2021-03-31 21:51:17 +01:00
from troggle . core . views . survex import survexcaveslist , survexcavesingle , svx
2021-04-06 00:49:09 +01:00
from troggle . core . views . auth import expologin , expologout
2022-06-25 23:17:19 +01:00
from troggle . core . views . editor_helpers import image_selector , new_image_form
2021-03-28 03:48:04 +01:00
""" This sets the actualurlpatterns[] and urlpatterns[] lists which django uses
2021-03-21 01:37:52 +00:00
to resolve urls - in both directions as these are declarative .
2020-05-28 01:38:35 +01:00
2020-07-18 16:23:54 +01:00
HOW THIS WORKS
This is a " url dispatcher " - something needed by every web framework .
2021-04-19 01:32:18 +01:00
re_path ( < regular expression that matches the thing in the web browser > ,
2020-07-18 16:23:54 +01:00
< reference to python function in ' core ' folder > , < optional name > )
2011-07-11 01:49:03 +01:00
2020-07-18 16:23:54 +01:00
Django also provides the reverse function : given an an object , provide the URL
which is vital to writing code for the webapp . So the URL dispatch is declarative .
2020-07-28 01:22:06 +01:00
The API urls return TSV or JSON and are new in July 2020.
2020-07-18 16:23:54 +01:00
"""
2021-03-21 01:37:52 +00:00
2021-10-31 17:25:45 +00:00
todo = ''' Replace most re_path() with modern and simpler path().
The admin and logout paths need to stay using re_path ( ) as they
have to be locked to the start .
The final _edit and CATCHALL also have to use re_path ( ) .
Test VERY CAREFULLY for each change . It is fragile .
2021-04-21 19:08:42 +01:00
'''
2020-07-18 16:23:54 +01:00
# Many of these patterns do not work because troggle spent many years broken and we have
# not yet restored all the functions. Some may have never been fully implemented in
# the first place and what they were intended to provide is obscure.
2020-06-22 00:03:23 +01:00
2021-03-26 13:51:00 +00:00
if settings . EXPOFILESREMOTE :
expofilesurls = [
2022-03-22 02:22:15 +00:00
path ( ' <path:filepath> ' , expofiles_redirect , name = " expofiles_redirect " ) , # to http://expo.survex.com/expofiles
2021-04-28 00:48:20 +01:00
path ( ' ' , expofiles_redirect , { ' filepath ' : " " } , name = " expofiles_redirect " ) ,
]
2021-03-26 13:51:00 +00:00
else :
expofilesurls = [
2021-04-28 00:48:20 +01:00
path ( ' ' , expofilessingle , { ' filepath ' : " " } , name = " single " ) ,
2022-03-22 02:22:15 +00:00
path ( ' <path:filepath> ' , expofilessingle , name = " single " ) , # local copy of EXPOFILES
2021-04-28 00:48:20 +01:00
]
2022-03-02 21:15:24 +00:00
# see https://docs.djangoproject.com/en/dev/topics/auth/default/
2021-04-06 00:49:09 +01:00
# The URLs provided by include('django.contrib.auth.urls') are:
2022-03-04 14:54:49 +00:00
#
2021-04-06 00:49:09 +01:00
# accounts/login/ [name='login']
# accounts/logout/ [name='logout']
# accounts/password_change/ [name='password_change']
# accounts/password_change/done/ [name='password_change_done']
# accounts/password_reset/ [name='password_reset']
# accounts/password_reset/done/ [name='password_reset_done']
# accounts/reset/<uidb64>/<token>/ [name='password_reset_confirm']
# accounts/reset/done/ [name='password_reset_complete']
2021-03-31 23:41:46 +01:00
2022-03-05 17:05:15 +00:00
# BUT many of these are set up by opinionated Django even if 'django.contrib.auth.urls' is NOT included.
# Some overlap with 'admin.site.urls' needs to be investigated.
2021-03-31 16:14:36 +01:00
trogglepatterns = [
2021-12-30 00:56:09 +00:00
path ( ' expofiles/ ' , include ( expofilesurls ) ) , # intercepted by Apache, if it is running.
2021-04-28 00:48:20 +01:00
path ( ' expofiles ' , include ( expofilesurls ) ) , # curious interaction with the include() here, not just a slash problem.
2021-03-26 13:51:00 +00:00
2022-03-18 20:00:15 +00:00
re_path ( r ' ^caves$ ' , caveindex , name = " caveindex " ) ,
re_path ( r ' ^indxal.htm$ ' , caveindex , name = " caveindex " ) , # ~420 hrefs to this url in expoweb files
2021-04-30 21:32:53 +01:00
re_path ( r ' ^people/?$ ' , notablepersons , name = " notablepersons " ) ,
2011-07-11 01:49:03 +01:00
2021-04-19 01:32:18 +01:00
re_path ( r ' ^admin/doc/ ' , include ( ' django.contrib.admindocs.urls ' ) ) , # needs docutils Python module (http://docutils.sf.net/).
re_path ( r ' ^admin/ ' , admin . site . urls ) , # includes admin login & logout urls
2021-03-27 18:22:07 +00:00
2021-05-04 14:16:48 +01:00
# Uploads - uploading a file
2022-03-18 11:28:35 +00:00
path ( ' scanupload/ ' , scanupload , name = ' scanupload ' ) , # path=2020#01
path ( ' scanupload/<path:path> ' , scanupload , name = ' scanupload ' ) , # path=2020#01
2022-03-13 01:01:00 +00:00
path ( ' photoupload/ ' , photoupload , name = ' photoupload ' ) , # restricted to current year
path ( ' photoupload/<path:folder> ' , photoupload , name = ' photoupload ' ) , # restricted to current year
path ( ' dwgupload/<path:folder> ' , dwgupload , name = ' dwgupload ' ) ,
path ( ' dwgupload/ ' , dwgupload , name = ' dwgupload ' ) ,
2021-10-31 17:25:45 +00:00
path ( ' dwguploadnogit/ ' , dwgupload , { ' gitdisable ' : ' yes ' } , name = ' dwguploadnogit ' ) , # used in testing
path ( ' dwguploadnogit/<path:folder> ' , dwgupload , { ' gitdisable ' : ' yes ' } , name = ' dwguploadnogit ' ) , # used in testing
2021-04-22 02:45:28 +01:00
2022-03-18 11:28:35 +00:00
# setting LOGIN_URL = '/accounts/login/' is default.
# NB setting url pattern name to 'login' instea dof 'expologin' with override Django, see https://docs.djangoproject.com/en/4.0/topics/http/urls/#naming-url-patterns
2022-03-02 21:15:24 +00:00
path ( ' accounts/logout/ ' , expologout , name = ' expologout ' ) , # same as in django.contrib.auth.urls
path ( ' accounts/login/ ' , expologin , name = ' expologin ' ) , # same as in django.contrib.auth.urls
#re_path(r'^accounts/', include('django.contrib.auth.urls')), # see site-packages\registration\auth_urls_classes.py
2021-04-06 00:49:09 +01:00
2021-04-16 21:28:44 +01:00
# Persons - nasty surname recognition logic fails for 19 people!
2021-04-20 23:57:51 +01:00
re_path ( r ' ^person/(?P<first_name>[A-Z]*[a-z \ - \' &;]*)[^a-zA-Z]*(?P<last_name>[a-z \ - \' ]*[^a-zA-Z]*[ \ -]*[A-Z]*[a-zA-Z \ -&;]*)/? ' , person , name = " person " ) ,
2021-04-19 01:32:18 +01:00
re_path ( r ' ^personexpedition/(?P<first_name>[A-Z]*[a-z&;]*)[^a-zA-Z]*(?P<last_name>[A-Z]*[a-zA-Z&;]*)/(?P<year> \ d+)/?$ ' , personexpedition , name = " personexpedition " ) ,
2020-06-18 15:54:40 +01:00
2021-04-22 02:45:28 +01:00
# Expedition master page & API exports
2021-04-19 01:32:18 +01:00
re_path ( r ' ^expedition/( \ d+)$ ' , expedition , name = " expedition " ) ,
re_path ( r ' ^api/expeditions_tsv$ ' , Expeditions_tsvListView . as_view ( ) ) ,
re_path ( r ' ^api/expeditions_json$ ' , Expeditions_jsonListView . as_view ( ) ) ,
2021-04-11 03:02:06 +01:00
# Logbook entries
2021-04-19 01:32:18 +01:00
re_path ( r ' ^logbookentry/(?P<date>.*)/(?P<slug>.*)/?$ ' , logbookentry , name = " logbookentry " ) ,
2021-04-21 22:09:20 +01:00
re_path ( r ' ^logbooksearch/(.*)/?$ ' , logbookSearch ) , # name 'search' not defined in views/logbooks.py
2021-04-28 02:43:09 +01:00
re_path ( r ' ^logbook(?P<year> \ d \ d \ d \ d) \ .(?P<extension>.*)/?$ ' , exportlogbook , name = ' exportlogbook ' ) , # e.g. /logbook2019.html # working but old CSS in
re_path ( r ' ^logbook$ ' , exportlogbook , name = ' exportlogbook ' ) ,
2021-04-16 21:28:44 +01:00
# Internal. editfile.html template uses these internally
2021-04-19 01:32:18 +01:00
re_path ( r ' ^getPeople/(?P<expeditionslug>.*) ' , get_people , name = " get_people " ) ,
re_path ( r ' ^getLogBookEntries/(?P<expeditionslug>.*) ' , get_logbook_entries , name = " get_logbook_entries " ) ,
2022-07-08 20:19:56 +01:00
#re_path(r'^getQMs/(?P<caveslug>.*)', get_qms, name = "get_qms"), # Not used anywhere ?
re_path ( r ' ^getEntrances/(?P<caveslug>.*) ' , get_entrances , name = " get_entrances " ) , # used internally ?
2021-04-16 21:28:44 +01:00
2021-04-11 03:02:06 +01:00
# Cave description pages
2022-03-18 20:00:15 +00:00
re_path ( r ' ^newcave/$ ' , edit_cave , name = " newcave " ) ,
re_path ( r ' ^cave/3d/(?P<cave_id>[^/]+)$ ' , cave3d , name = " cave3d " ) ,
#re_path(r'^cave/description/([^/]+)/?$', caves.caveDescription), #!!!BAD, local links fail..
#re_path(r'^cave/(?P<cave_id>[^/]+)/?$', caves.cave, name="cave"), # used only in testing !? XXXXXXXXXXXXXXXXXXXXXXXXXX
#re_path(r'^cave/(?P<cave_id>[^/]+)/?(?P<ent_letter>[^/])$', ent), #!!!BAD, local links fail..# view_caves.ent
re_path ( r ' ^(?P<slug>[^/]+)_cave_edit/$ ' , edit_cave , name = " edit_cave " ) , # edit_cave needed by cave.html template for url matching
2022-06-19 00:49:07 +01:00
re_path ( r ' ^(.*)_edit$ ' , editexpopage , name = " editexpopage " ) ,
2022-03-18 20:00:15 +00:00
re_path ( r ' ^(?P<karea> \ d \ d \ d \ d)(?P<subpath>.*)$ ' , cavepage , name = " cavepage " ) , # shorthand /1623/264 or 1623/161/top.htm
2022-07-21 08:32:11 +01:00
# Note that urls eg '/1623/161/l/rl89a.htm' are handled by cavepage which redirects them to 'expopage' # Note that _edit$ for a cave description page in a subfolder e.g. /1623/204/204.html_edit gets caught here and breaks with 404
2021-03-31 21:51:17 +01:00
2021-04-16 21:28:44 +01:00
# Entrances
2022-03-18 20:00:15 +00:00
re_path ( r ' ^cave/entrance/([^/]+)/?$ ' , caveEntrance ) , # lists all entrances !!!BAD, local links fail
re_path ( r ' ^entrance/(?P<caveslug>[^/]+)/(?P<slug>[^/]+)/edit/ ' , edit_entrance , name = " editentrance " ) , #edit existing entrance
re_path ( r ' ^entrance/new/(?P<caveslug>[^/]+)$ ' , edit_entrance , name = " newentrance " ) , # new entrance for a cave
2021-04-17 23:59:11 +01:00
2021-04-21 19:08:42 +01:00
# System admin and monitoring
2021-04-27 19:02:11 +01:00
path ( ' statistics ' , statistics . stats , name = " stats " ) ,
path ( ' stats ' , statistics . stats , name = " stats " ) ,
path ( ' pathsreport ' , statistics . pathsreport , name = " pathsreport " ) ,
path ( ' dataissues ' , statistics . dataissues , name = " dataissues " ) ,
2021-05-09 00:55:37 +01:00
path ( ' eastings ' , statistics . eastings , name = " eastings " ) ,
2020-06-04 21:57:04 +01:00
2021-04-30 03:44:53 +01:00
path ( ' troggle ' , frontpage , name = " frontpage " ) , # control panel. Shows recent actions.
path ( ' todo/<path:module> ' , todos , name = " todos " ) ,
path ( ' controlpanel ' , controlpanel , name = " controlpanel " ) ,
2011-07-11 01:49:03 +01:00
2021-04-11 03:02:06 +01:00
# The survexfile pages
2021-04-28 00:48:20 +01:00
path ( ' survexfile ' , survex . survexcavesingle , { ' survex_cave ' : ' ' } , name = " survexcavessingle " ) ,
path ( ' survexfile/ ' , survex . survexcavesingle , { ' survex_cave ' : ' ' } , name = " survexcavessingle " ) ,
path ( ' survexfile/caves ' , survex . survexcaveslist , name = " survexcaveslist " ) ,
path ( ' survexfile/caves/ ' , survex . survexcaveslist , name = " survexcaveslist " ) , # auto slash not working
2021-04-27 19:02:11 +01:00
path ( ' survexfile/<path:survex_file>.svx ' , survex . svx , name = " svx " ) ,
path ( ' survexfile/<path:survex_file>.3d ' , survex . threed , name = " threed " ) ,
2022-03-11 16:22:37 +00:00
path ( ' survexfile/<path:survex_file>.log ' , survex . svxlog , name = " svxlog " ) ,
2021-04-27 19:02:11 +01:00
path ( ' survexfile/<path:survex_file>.err ' , survex . err , name = " err " ) ,
2021-04-28 00:48:20 +01:00
path ( ' survexfile/<path:survex_cave> ' , survex . survexcavesingle , name = " survexcavessingle " ) ,
2021-04-19 01:32:18 +01:00
2022-04-18 20:48:49 +01:00
# The survey scans in the wallets. This short-cuts SCANS_URL which is not actually used anywhere!
2021-04-28 00:48:20 +01:00
path ( ' survey_scans/ ' , allwallets , name = " allwallets " ) ,
2022-03-18 11:28:35 +00:00
path ( ' survey_scans/<path:path>/ ' , scanupload , name = " singlewallet " ) , # replaced singlewallet()
2022-07-21 08:32:11 +01:00
path ( ' survey_scans/<path:path>/<file> ' , scansingle , name = " scansingle " ) , # works, but html href goes direct to /expofiles/ too
re_path ( r ' ^cave/scans/(?P<cave_id>[^/]+)$ ' , cavewallets , name = " cavewallets " ) , # like allwallets, but for just one cave
2020-06-04 21:57:04 +01:00
2021-04-11 03:02:06 +01:00
# The tunnel and therion drawings files pages
2021-05-04 14:16:48 +01:00
path ( ' dwgfiles ' , dwgallfiles , name = " dwgallfiles " ) ,
2022-02-20 00:21:56 +00:00
path ( ' dwgfiles/ ' , dwgallfiles , name = " dwgallfiles " ) ,
2021-05-04 14:16:48 +01:00
path ( ' dwgdataraw/<path:path> ' , dwgfilesingle , name = " dwgfilesingle " ) ,
2021-04-17 23:59:11 +01:00
2021-04-28 00:48:20 +01:00
# QMs pages - must precede other /caves pages?
2022-07-21 08:32:11 +01:00
re_path ( r ' ^cave/qms/([^/]+)/?$ ' , caveQMs , name = " caveQMs " ) ,
2022-07-20 18:47:29 +01:00
re_path ( r ' ^cave/qms/(?P<cave_id>[^/]+)/(?P<year> \ d \ d \ d \ d)-(?P<qm_id> \ d*)(?P<grade>[ABCDXV \ ?]?)-?(?P<blockname>[a-zA-Z]+.*)?$ ' , qm , name = " qm " ) , # Dogs breakfast
2022-07-06 13:38:53 +01:00
# the resolution of a QM uses several fields together, there is no clean slug field. Artefact of history.
2021-04-17 23:59:11 +01:00
2021-04-16 21:28:44 +01:00
# Prospecting Guide document
2022-03-05 17:05:15 +00:00
re_path ( r ' ^prospecting_guide/$ ' , prospecting ) , # disabled. Bad links, incompatible image package use and very, very out of date.
2021-04-16 21:28:44 +01:00
2021-04-11 03:02:06 +01:00
# This next set are all intercepted by Apache, if it is running.
2021-04-19 01:32:18 +01:00
re_path ( r ' ^photos/(?P<subpath>.*)$ ' , mediapage , { ' doc_root ' : settings . PHOTOS_ROOT } , name = " mediapage " ) , # photo galleries
re_path ( r ' ^site_media/(?P<subpath>.*)$ ' , mediapage , { ' doc_root ' : settings . MEDIA_ROOT } , name = " mediapage " ) , # MEDIA_ROOT: CSS and JS
2022-02-20 00:21:56 +00:00
re_path ( r ' ^static/(?P<subpath>.*)$ ' , mediapage , { ' doc_root ' : settings . MEDIA_ROOT } , name = " mediapage " ) , # STATIC only used by admin pages
2021-04-30 00:24:36 +01:00
path ( ' javascript/<path:subpath> ' , mediapage , { ' doc_root ' : settings . JSLIB_ROOT } , name = " mediapage " ) , # JSLIB_URL
2021-04-28 00:48:20 +01:00
re_path ( r ' ^/loser/(?P<subpath>.*)$ ' , mediapage , { ' doc_root ' : settings . SURVEX_DATA } , name = " mediapage " ) , # Oddly not working !?
2021-04-19 01:32:18 +01:00
re_path ( r ' ^map/map.html ' , map , name = " map " ) , # Redirects to OpenStreetMap JavaScript
re_path ( r ' ^map/(?P<path>.*)$ ' , mapfile , name = " mapfile " ) , # css, js, gpx
2022-06-25 23:17:19 +01:00
# Helpers to edit HTML
re_path ( r ' ^image_selector/(?P<path>.*) ' , image_selector , name = ' image_selector ' ) ,
re_path ( r ' ^new_image_form/(?P<path>.*) ' , new_image_form , name = ' new_image_form ' ) ,
2020-06-20 23:08:34 +01:00
2021-04-11 03:02:06 +01:00
# Final catchall which also serves expoweb handbook pages and images
2021-04-19 01:32:18 +01:00
re_path ( r ' ^(.*)$ ' , expopage , name = " expopage " ) , # CATCHALL assumed relative to EXPOWEB
2020-06-17 22:55:51 +01:00
]
2011-07-11 01:49:03 +01:00
2021-04-27 19:02:11 +01:00
# do NOT allow DIR_ROOT prefix to all urls
2020-06-17 22:55:51 +01:00
urlpatterns = [
2021-04-19 01:32:18 +01:00
# re_path('^%s' % settings.DIR_ROOT, include(trogglepatterns))
re_path ( ' ' , include ( trogglepatterns ) )
2020-06-17 22:55:51 +01:00
]
2021-03-25 16:15:26 +00:00
2021-03-21 01:37:52 +00:00
# When apache is running these prempt Django so Django never sees them.
2021-04-10 15:30:29 +01:00
# NB apache has its own ideas about mimetypes, so behaviour may not be identical for .xml files by troggle
2021-03-21 01:37:52 +00:00
2021-04-02 19:22:53 +01:00
# NEW apache configurations suggested as of 2 April 2021:
2021-03-21 01:37:52 +00:00
# Alias /site-media/ /home/expo/troggle/media/
2022-02-20 00:21:56 +00:00
# Alias /robots.txt /home/expo/troggle/media/robots.txt # does not exist!
2021-03-21 01:37:52 +00:00
# Alias /favicon.ico /home/expo/troggle/media/favicon.ico # comes from /expoweb/* when running runserver
2021-04-02 19:22:53 +01:00
# Alias /javascript /home/expo/troggle/media/jslib # empty
2022-03-05 17:05:15 +00:00
# Alias /search ? # the Xapian text search thinggy
# Alias /kanboard ? # the Kanban Trello-clone thinggy
2021-03-21 01:37:52 +00:00
# Copy of old standard apache configurations:
# Alias /expofiles /home/expo/expofiles
# Alias /photos /home/expo/webphotos
# Alias /map /home/expo/expoweb/map
2022-02-20 00:21:56 +00:00
# Alias /javascript /usr/share/javascript # to be changed, see above
# Alias /robots.txt /home/expo/static/robots.txt # to be changed, see above
# Alias /favicon.ico /home/expo/static/favicon.ico # to be deleted. favicon.ico now in expoweb/
# Alias /static/ /home/expo/static/ # only used by Django admin, tinymce
2021-03-21 01:37:52 +00:00
2022-02-20 00:21:56 +00:00
# ScriptAlias /repositories /home/expo/config/apache/services/hgweb/hgweb.cgi # UPDATE this for git
2021-03-21 01:37:52 +00:00
# ScriptAlias /boe /home/expo/boe/boc/boc.pl
# ScriptAlias /boe-lastyear /home/expo/boe/boc-previous/boc.pl