2
0
mirror of https://expo.survex.com/repositories/troggle/.git synced 2024-11-22 07:11:52 +00:00

Fix wallets scan upload faults

This commit is contained in:
Philip Sargent 2022-08-14 22:52:14 +03:00
parent b093d00ff4
commit 284e044a03
5 changed files with 80 additions and 38 deletions

View File

@ -23,7 +23,7 @@ from django.core.exceptions import ObjectDoesNotExist, MultipleObjectsReturned
#from troggle import settings
from troggle.parsers.imports import import_caves, import_people, import_surveyscans
from troggle.parsers.imports import import_logbooks, import_QMs, import_drawingsfiles, import_survex
from troggle.parsers.scans import wallet_blank_json, wallet_blank_html, contentsjson, indexhtml, CopyWalletData
from troggle.parsers.scans import wallet_blank_json, contentsjson, CopyWalletData
# from databaseReset import reinit_db # don't do this. databaseRest runs code *at import time*
from troggle.core.models.troggle import DataIssue
from troggle.core.models.troggle import Expedition, Person, PersonExpedition
@ -63,6 +63,9 @@ class FilesForm(forms.Form): # not a model-form, just a form-form
class FilesRenameForm(forms.Form): # not a model-form, just a form-form
uploadfiles = forms.FileField()
renameto = forms.CharField(strip=True, required=False)
class WalletGotoForm(forms.Form): # not a model-form, just a form-form
walletgoto = forms.CharField(strip=True, required=False)
class TextForm(forms.Form): # not a model-form, just a form-form
photographer = forms.CharField(strip=True)
@ -200,6 +203,10 @@ def scanupload(request, path=None):
'''Upload scanned image files into a wallet on /expofiles
Also display AND EDIT the contents.json data in the wallet.
The Wallet object and the contents.json file are only created when the user
edits the JSON data, not when they upload files. This may be a bad idea
as the wallet will not appear in reports untilt his is done.
This does NOT use a Django model linked to a Django form. Just a simple Django form.
You will find the Django documentation on forms very confusing, This is simpler.
@ -269,7 +276,6 @@ def scanupload(request, path=None):
# Also lots of hassle with lists of strings interpreted as a single string
# Unset checkboxes do not return any value, checked ones return "True". So need initialising to False
if formj.is_valid():
#print(f'--- JSON Update form is VALID, saving to {contents_path}')
posted = request.POST.copy()
posted.pop("csrfmiddlewaretoken") # discard this
wd = wallet_blank_json
@ -295,11 +301,17 @@ def scanupload(request, path=None):
wd["survex file"][i] = elem.strip()
#print(f'--- {wd["survex file"]} - {type(wd["survex file"])}')
newfolder = contents_path.parent
print(f'--- wallet directory in :drawings: repo {newfolder=}')
if not os.path.exists(contents_path.parent):
print(f'--- No wallet directory in :drawings: repo, so creating it')
os.makedirs(contents_path.parent)
with open(contents_path, "w") as jfile:
json.dump(wd, jfile, indent = 1)
# print(f'--- FINISHED saving to JSON\n')
print(f'--- FINISHED saving to JSON at {contents_path}')
# This copies the new data to the drawings repo and commits it
# This commits it,
# needs the troggle object wallet, not a string
try:
@ -311,7 +323,8 @@ def scanupload(request, path=None):
except:
print(f'wallet string {wallet}, FAIL TO GET or create WALLET OBJECT')
raise
# now we do the git add and commit
destfolder = contents_path.parent
dr_add = subprocess.run([git, "add", contentsjson], cwd=destfolder, capture_output=True, text=True)
if dr_add.returncode != 0:
@ -333,6 +346,13 @@ def scanupload(request, path=None):
print(formj.errors)
return render(request,'errors/generic.html', {'message': formj.errors})
elif "walletgoto" in request.POST: # not editing wallet data, uploading a file.. going direct to a named wallet
formg = WalletGotoForm(request.POST,request.FILES)
if formg.is_valid():
walletgoto = request.POST["walletgoto"]
return HttpResponseRedirect(f'/scanupload/{walletgoto.replace("#",":")}')
else: # not editing wallet data, uploading a file..
form = FilesForm(request.POST,request.FILES)
@ -354,15 +374,18 @@ def scanupload(request, path=None):
# print(f'! - FORM scanupload multiple {actual_saved}')
filesaved = True
if not contents_path.is_file(): # double-check
with open(contents_path, "w") as json_file:
json.dump(wallet_blank_json, json_file, sort_keys=True, indent = 1)
index_path = dirpath / indexhtml
if not index_path.is_file(): # double-check
thishtml = wallet_blank_html.replace("YEAR", str(year))
thishtml = thishtml.replace("WALLET", str(wallet))
with open(index_path, "w") as html_file:
html_file.write(thishtml )
# Don't do this when uploading a file.
# The contents.json file will be created when the wallet data is edited for the first time.
# if not contents_path.is_file(): # double-check: it doesn't exist yet so create it when uploading a file.
# with open(contents_path, "w") as json_file:
# json.dump(wallet_blank_json, json_file, sort_keys=True, indent = 1)
# index_path = dirpath / indexhtml
# if not index_path.is_file(): # double-check it doesn't exist yet
# thishtml = wallet_blank_html.replace("YEAR", str(year))
# thishtml = thishtml.replace("WALLET", str,(wallet))
# with open(index_path, "w") as html_file:
# html_file.write(thishtml )
files = []
dirs = []
@ -374,8 +397,7 @@ def scanupload(request, path=None):
if f.is_dir():
dirs.append(f.name)
if f.is_file():
if f.name != 'contents.json' and f.name != 'walletindex.html':
files.append(f.name)
files.append(f.name)
except FileNotFoundError:
files.append('(no wallet yet. It would be created if you upload a scan)')
else:

View File

@ -18,7 +18,7 @@ from troggle.core.utils import save_carefully, GetListDir
for tunnel and therion files
'''
todo='''
todo='''Rename functions more consistently between tunnel and therion variants
'''
def find_dwg_file(dwgfile, path):
@ -104,7 +104,7 @@ def findwalletimage(therionfile, foundpath):
else:
message = f'! Scanned file {scanfilename} mentioned in "{therionfile.dwgpath}" is not actually found in {wallet.walletname}'
wurl = f'/survey_scans/{wallet.walletname}/'.replace("#",":")
print(message)
# print(message)
DataIssue.objects.create(parser='Therion', message=message, url = wurl)

View File

@ -21,7 +21,7 @@ from troggle.core.views.scans import datewallet
'''
contentsjson = "contents.json"
indexhtml = "walletindex.html"
#indexhtml = "walletindex.html"
git = settings.GIT
# to do: create a 'low priority' field, so that any such wallet does not appear in summary reports
@ -44,22 +44,22 @@ wallet_blank_json = {
"survex not required": False,
"website updated": False}
wallet_blank_html = '''<html><body><H1>Wallet WALLET</H1>
<p>List of trips: <a href="http://expo.survex.com/expedition/YEAR">expedition/YEAR</a>
- troggle-processed .svx files and logbook entries on server</p>
<p>Date: </p><p>People: Unknown,</p>
<p>Cave <a href='http://expo.survex.com/caves/'>Guidebook description</a>
- A description is indicated as being needed, so may need adding into this cave page.
<p>Survex file: not identified yet
<H2>Issues</H2>
<p>The description needs writing</p>
<p>The QMs needs writing</p><p>The website is marked as needing updating (using the guidebook description)</p>
<p>Tunnel / Therion drawing files need drawing</p>
<H2>Files</H2>
<UL>
</UL>
</body></html>
'''
# wallet_blank_html = '''<html><body><H1>Wallet WALLET</H1>
# <p>List of trips: <a href="http://expo.survex.com/expedition/YEAR">expedition/YEAR</a>
# - troggle-processed .svx files and logbook entries on server</p>
# <p>Date: </p><p>People: Unknown,</p>
# <p>Cave <a href='http://expo.survex.com/caves/'>Guidebook description</a>
# - A description is indicated as being needed, so may need adding into this cave page.
# <p>Survex file: not identified yet
# <H2>Issues</H2>
# <p>The description needs writing</p>
# <p>The QMs needs writing</p><p>The website is marked as needing updating (using the guidebook description)</p>
# <p>Tunnel / Therion drawing files need drawing</p>
# <H2>Files</H2>
# <UL>
# </UL>
# </body></html>
# '''
def CheckEmptyDate(wallet):
'''If date is not set, get it from a linked survex file.

View File

@ -1528,6 +1528,12 @@ def LoadSurvexBlocks():
survexblockroot = SurvexBlock(name=ROOTBLOCK, survexpath="", cave=None, survexfile=survexfileroot,
legsall=0, legslength=0.0)
# crashes here sometimes on MariaDB complaining that cave_id should not be null. But it should be.
#django.db.utils.IntegrityError: (1048, "Column 'cave_id' cannot be null")
# fix by restarting db on server
# sudo service mariadb stop
# sudo service mariadb start
survexblockroot.save()
print(' - Loading Survex Blocks...')

View File

@ -10,6 +10,18 @@
<h2>Wallet {{wallet}}</h2>
{% endif %}
<form method ='post' style="text-align: center">
{% csrf_token %}
<button class="fancybutton" style="padding: 0.5em 25px; font-size: 80%;" type = "submit" value = "Go to" >
Go directly to this wallet: &rarr;
</button>
<input
label = "WalletGoto" name = "walletgoto" size="7"
title="Wallet name to go to directly"
placeholder="2022#11" />
</form>
<p style="font-family: monospace; font-weight: bold; font-size: 130%; text-align: center">
<a style="font-weight: normal;" href="/scanupload/{{prevy}}:01">{{prevy}}</a>
&nbsp;...&nbsp;
@ -18,8 +30,9 @@
<a href="/scanupload/{{year}}:{{next}}">{{year}}:{{next}}</a>
&nbsp;...&nbsp;
<a style="font-weight: normal;" href="/scanupload/{{nexty}}:01">{{nexty}}</a>
</p>
</p>
<div style = "max-width:35%; margin-left:20%; text-align: center; " >
<form method ='post' enctype ="multipart/form-data">
{% csrf_token %}
@ -53,9 +66,10 @@
{% if create %}
This online wallet does not yet exist.
{% if user.username %}
<br>It will be created and initialised automatically when you upload a file.
<br>It will be created and initialised automatically when you upload a file, and then edit the date in the form below and save it.
{% else %}
<br>It will be created and initialised automatically when you upload a file, but you need to log on first.
<br>It will be created and initialised automatically when you upload a file, and then edit the date in the form below and save it.
<br>But you need to log in first <a href=/accounts/login/">Log In </a>
{% endif %}
{% endif %}