2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2024-11-25 08:41:51 +00:00

New wallet goes to next available slot now

This commit is contained in:
Philip Sargent 2023-01-31 20:28:39 +00:00
parent 1f5b56a593
commit 3c7661836c
3 changed files with 65 additions and 58 deletions

View File

@ -22,7 +22,7 @@ from .auth import login_required_if_public
todo = """
- Register uploaded filenames in the Django db without needing to wait for a reset & bulk file import
- Need to validate uploaded file as being a valid image file, not a dubious script or hack
- Need to validate uploaded file as being a valid file type, not a dubious script or hack
- Write equivalent GPX upload form system, similar to walletedit() but in expofiles/gpslogs/
Need to validate it as being a valid GPX file using an XML parser, not a dubious script or hack

View File

@ -27,9 +27,7 @@ from troggle.core.views.uploads import FilesForm
from troggle.parsers.scans import contentsjson
# from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt
"""File upload 'views'
"""Main wallet editing form, which includes scan file upload into the wallet
"""
todo = """
@ -38,17 +36,6 @@ todo = """
- Refactor walletedit() as it contains all the wallets 'complaints' code from the old script wallets.py
- Need to validate uploaded file as being a valid image file, not a dubious script or hack
- Write equivalent GPX upload form system, similar to walletedit() but in expofiles/gpslogs/
Need to validate it as being a valid GPX file using an XML parser, not a dubious script or hack
- Validate Tunnel & Therion files using an XML parser in dwgupload(). Though Julian says tunnel is only mostly correct XML
- Validate image files using a magic recogniser in walletedit() https://pypi.org/project/reportlab/ or
https://stackoverflow.com/questions/889333/how-to-check-if-a-file-is-a-valid-image-file
- Enable folder creation in dwguploads or as a separate form
"""
WALLET_BLANK_JSON = {
"cave": "",
@ -277,8 +264,7 @@ def walletedit(request, path=None):
You will find the Django documentation on forms very confusing,
as it covers many very differnet things we do not need. This is simpler.
This subsumes much of the code which was in the old wallets.py script and so this function is very long
indeed and needs refactoring.
This subsumes much of the code which was in the old wallets.py script and so this function is very long indeed and needs refactoring.
REWRITE bits using the ticklist, dateify, caveify, populate etc utility functions in core.view.scans.py
"""
@ -286,6 +272,54 @@ def walletedit(request, path=None):
filesaved = False
actual_saved = []
def get_next_empty():
latest = Wallet.objects.filter(walletname__startswith="20").latest('walletname')
print(f"Latest {latest=}")
next = int(latest.walletname[5:]) + 1
return f"{latest.walletname[:4]}:{next:02d}"
def preprocess_path(path):
if path:
wpath = urllib.parse.unquote(path)
else:
return (None, get_next_empty() )
try:
year = wpath[:4] # if path too short, exception catches it
sepr = wpath[4]
y = int(year) # exception catches non-integer [:4]
wnumber = int(wpath[5:]) # exception catches nonumeric wallet number
if sepr != "#" and sepr != ":":
return (oldwallet(request, path), None)
except:
# if nonumeric wpath name for example
raise
return (oldwallet(request, path), None)
if not re.match("(19|20)\d\d[:#]\d\d\d?", wpath):
return (None, get_next_empty() )
if int(year) < 1977:
year = "1977"
if int(year) > 2050:
year = "2050"
wallet = f"{year}:{wnumber:02d}"
return (None, wallet)
def create_nav_links(wallet):
print(f" --- {wallet}")
y = wallet[:4]
n = wallet[5:]
nexty = f"{int(y)+1}"
prevy = f"{int(y)-1}"
next = f"{int(n)+1:02d}"
prev = f"{int(n)-1:02d}"
if int(n) == 0:
prev = f"{int(n):02d}"
return next, nexty, prev, prevy, y
def read_json():
"""Read JSON from the wallet metadata file in the repo
or fills with blank data if that files can't be read
@ -405,45 +439,12 @@ def walletedit(request, path=None):
"elev drawn",
"electronic survey",
]
if path:
wallet = urllib.parse.unquote(path)
else:
wallet = "2022#00" # improve this later
year = wallet[:4]
try:
if wallet[4] != "#" and wallet[4] != ":":
# print(f'! - FORM walletedit - {wallet[4]} unurlencoded {unquote(wallet)[4]}')
# print(f'! - FORM walletedit - start {wallet} REDIRECT TO OLDWALLET')
return oldwallet(request, path)
except:
# if nonumeric wallet name for example
return oldwallet(request, path)
if str(wallet).lower().endswith("indexpages"):
# print(f'! - FORM walletedit - start {wallet} REDIRECT TO OLDWALLET')
return walletindex(request, path)
if not re.match("(19|20)\d\d[:#]\d\d", wallet):
wallet = "2022:00" # improve this later
# print(f'! - FORM walletedit - start {wallet}')
if path:
pass
# print(f'! - FORM walletedit - start wallet:{wallet}: path:{path}:')
if int(year) < 1977:
year = "1977"
if int(year) > 2050:
year = "2050"
nexty = f"{int(year)+1}"
prevy = f"{int(year)-1}"
wnumber = wallet[5:]
next = f"{int(wnumber)+1:02d}"
prev = f"{int(wnumber)-1:02d}"
if int(wnumber) == 0:
prev = f"{int(wnumber):02d}"
redirect, wallet = preprocess_path(path)
if redirect:
return redirect
print(f"{wallet=}")
next, nexty, prev, prevy, year = create_nav_links(wallet)
wurl = f"/walletedit/{wallet}".replace("#", ":")
wallet = wallet.replace(":", "#")
@ -706,7 +707,13 @@ def walletedit(request, path=None):
except:
samedate = None
try:
thisexpo = Expedition.objects.get(year=int(year))
except: # creating a wallet for an expo that does not exist perhaps
message = f"Trying to access an Expo for '{year}' which does not exist (yet)."
message += " See /handbook/computing/newyear.html"
print(message)
return render(request, "errors/generic.html", {"message": message})
if samedate:
svxothers = SurvexBlock.objects.filter(date=samedate)
trips = LogbookEntry.objects.filter(date=samedate)

View File

@ -18,7 +18,7 @@
<input
label = "WalletGoto" name = "walletgoto" size="7"
title="Wallet name to go to directly"
placeholder="2022#nn" value="2022#" />
placeholder="2023#nn" value="2023#" />
</form>