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

rename scansfolder to wallet

This commit is contained in:
Philip Sargent 2021-04-26 19:50:03 +01:00
parent 7f64670f36
commit 49b9225b6e
14 changed files with 64 additions and 52 deletions

View File

@ -114,7 +114,7 @@ class SurvexBlock(models.Model):
survexfile = models.ForeignKey("SurvexFile", blank=True, null=True,on_delete=models.SET_NULL) survexfile = models.ForeignKey("SurvexFile", blank=True, null=True,on_delete=models.SET_NULL)
survexpath = models.CharField(max_length=200) # the path for the survex stations survexpath = models.CharField(max_length=200) # the path for the survex stations
scansfolder = models.ForeignKey("Wallet", null=True,on_delete=models.SET_NULL) scanswallet = models.ForeignKey("Wallet", null=True,on_delete=models.SET_NULL)
legsall = models.IntegerField(null=True) # summary data for this block legsall = models.IntegerField(null=True) # summary data for this block
legslength = models.FloatField(null=True) legslength = models.FloatField(null=True)
@ -180,24 +180,24 @@ class Wallet(models.Model):
ordering = ('walletname',) ordering = ('walletname',)
def get_absolute_url(self): def get_absolute_url(self):
return urljoin(settings.URL_ROOT, reverse('scanswallet', kwargs={"path":re.sub("#", "%23", self.walletname)})) return urljoin(settings.URL_ROOT, reverse('singlewallet', kwargs={"path":re.sub("#", "%23", self.walletname)}))
def __str__(self): def __str__(self):
return str(self.walletname) + " (Survey Scans Folder)" return str(self.walletname) + " (Survey Scans Folder)"
class SingleScan(models.Model): class SingleScan(models.Model):
ffile = models.CharField(max_length=200) ffile = models.CharField(max_length=200)
name = models.CharField(max_length=200) name = models.CharField(max_length=200)
scansfolder = models.ForeignKey("Wallet", null=True,on_delete=models.SET_NULL) wallet = models.ForeignKey("Wallet", null=True,on_delete=models.SET_NULL)
class Meta: class Meta:
ordering = ('name',) ordering = ('name',)
def get_absolute_url(self): def get_absolute_url(self):
return urljoin(settings.URL_ROOT, reverse('scansingle', kwargs={"path":re.sub("#", "%23", self.scansfolder.walletname), "file":self.name})) return urljoin(settings.URL_ROOT, reverse('scansingle', kwargs={"path":re.sub("#", "%23", self.wallet.walletname), "file":self.name}))
def __str__(self): def __str__(self):
return "Survey Scan Image: " + str(self.name) + " in " + str(self.scansfolder) return "Survey Scan Image: " + str(self.name) + " in " + str(self.wallet)
class DrawingFile(models.Model): class DrawingFile(models.Model):
dwgpath = models.CharField(max_length=200) dwgpath = models.CharField(max_length=200)

View File

@ -20,11 +20,11 @@ need to check if inavlid query string is invalid, or produces multiple replies
and render a user-friendly error page. and render a user-friendly error page.
''' '''
def scanswallet(request, path): def singlewallet(request, path):
#print [ s.walletname for s in Wallet.objects.all() ] #print [ s.walletname for s in Wallet.objects.all() ]
try: try:
scansfolder = Wallet.objects.get(walletname=urlunquote(path)) wallet = Wallet.objects.get(walletname=urlunquote(path))
return render(request, 'scansfolder.html', { 'scansfolder':scansfolder, 'settings': settings }) return render(request, 'wallet.html', { 'wallet':wallet, 'settings': settings })
except: except:
message = f'Scan folder error or not found \'{path}\' .' message = f'Scan folder error or not found \'{path}\' .'
return render(request, 'errors/generic.html', {'message': message}) return render(request, 'errors/generic.html', {'message': message})
@ -33,8 +33,8 @@ def scansingle(request, path, file):
'''sends a single binary file to the user for display - browser decides how using mimetype '''sends a single binary file to the user for display - browser decides how using mimetype
''' '''
try: try:
scansfolder = Wallet.objects.get(walletname=urlunquote(path)) wallet = Wallet.objects.get(walletname=urlunquote(path))
singlescan = SingleScan.objects.get(scansfolder=scansfolder, name=file) singlescan = SingleScan.objects.get(wallet=wallet, name=file)
# print(" - scansingle {}:{}:{}:".format(path, file, getmimetype(file))) # print(" - scansingle {}:{}:{}:".format(path, file, getmimetype(file)))
return HttpResponse(content=open(singlescan.ffile,"rb"), content_type=getmimetype(file)) # any type of image return HttpResponse(content=open(singlescan.ffile,"rb"), content_type=getmimetype(file)) # any type of image
except: except:
@ -42,7 +42,7 @@ def scansingle(request, path, file):
return render(request, 'errors/generic.html', {'message': message}) return render(request, 'errors/generic.html', {'message': message})
def scanswallets(request): def allwallets(request):
manywallets = Wallet.objects.all() manywallets = Wallet.objects.all()
return render(request, 'manywallets.html', { 'manywallets':manywallets, 'settings': settings }) return render(request, 'manywallets.html', { 'manywallets':manywallets, 'settings': settings })

View File

@ -86,7 +86,7 @@ class LoadingSurvex():
"""A 'survex block' is a *begin...*end set of cave data. """A 'survex block' is a *begin...*end set of cave data.
A survex file can contain many begin-end blocks, which can be nested, and which can *include A survex file can contain many begin-end blocks, which can be nested, and which can *include
other survex files. other survex files.
A 'scansfolder' is what we today call a "survey scans folder" or a "wallet". A 'scanswallet' is what we today call a "survey scans folder" or a "wallet".
""" """
rx_begin = re.compile(r'(?i)begin') rx_begin = re.compile(r'(?i)begin')
rx_end = re.compile(r'(?i)end$') rx_end = re.compile(r'(?i)end$')
@ -475,7 +475,7 @@ class LoadingSurvex():
DataIssue.objects.create(parser='survex', message=message) DataIssue.objects.create(parser='survex', message=message)
manywallets = Wallet.objects.filter(walletname=refscan) manywallets = Wallet.objects.filter(walletname=refscan)
if manywallets: if manywallets:
survexblock.scansfolder = manywallets[0] # this is a ForeignKey field survexblock.scanswallet = manywallets[0] # this is a ForeignKey field
print(manywallets[0]) print(manywallets[0])
survexblock.save() survexblock.save()
if len(manywallets) > 1: if len(manywallets) > 1:

View File

@ -58,10 +58,10 @@ def GetListDir(sdir):
return res return res
def LoadListScansFile(scansfolder): def LoadListScansFile(wallet):
gld = [ ] gld = [ ]
# flatten out any directories in these wallet folders - should not be any # flatten out any directories in these wallet folders - should not be any
for (fyf, ffyf, fisdiryf) in GetListDir(scansfolder.fpath): for (fyf, ffyf, fisdiryf) in GetListDir(wallet.fpath):
if fisdiryf: if fisdiryf:
gld.extend(GetListDir(ffyf)) gld.extend(GetListDir(ffyf))
else: else:
@ -70,7 +70,7 @@ def LoadListScansFile(scansfolder):
c=0 c=0
for (fyf, ffyf, fisdiryf) in gld: for (fyf, ffyf, fisdiryf) in gld:
if re.search(r"\.(?:png|jpg|jpeg|pdf|svg|gif)(?i)$", fyf): if re.search(r"\.(?:png|jpg|jpeg|pdf|svg|gif)(?i)$", fyf):
singlescan = SingleScan(ffile=ffyf, name=fyf, scansfolder=scansfolder) singlescan = SingleScan(ffile=ffyf, name=fyf, wallet=wallet)
singlescan.save() singlescan.save()
c+=1 c+=1
if c>=10: if c>=10:
@ -107,35 +107,35 @@ def LoadListScans():
print("%s" % f, end=' ') print("%s" % f, end=' ')
for fy, ffy, fisdiry in GetListDir(ff): for fy, ffy, fisdiry in GetListDir(ff):
if fisdiry: if fisdiry:
scansfolder = Wallet(fpath=ffy, walletname=fy) wallet = Wallet(fpath=ffy, walletname=fy)
scansfolder.save() wallet.save()
LoadListScansFile(scansfolder) LoadListScansFile(wallet)
# do the # do the
elif f != "thumbs": elif f != "thumbs":
scansfolder = Wallet(fpath=ff, walletname=f) wallet = Wallet(fpath=ff, walletname=f)
scansfolder.save() wallet.save()
LoadListScansFile(scansfolder) LoadListScansFile(wallet)
def find_tunnel_scan(dwgfile, path): def find_tunnel_scan(dwgfile, path):
'''Is given a line of text 'path' which may or may not contain a recognisable name of a scanned file '''Is given a line of text 'path' which may or may not contain a recognisable name of a scanned file
which we have already seen when we imported all the files we could find in the surveyscans direstories which we have already seen when we imported all the files we could find in the surveyscans direstories
''' '''
scansfolder, scansfile = None, None wallet, scansfile = None, None
mscansdir = re.search(r"(\d\d\d\d#X?\d+\w?|1995-96kh|92-94Surveybookkh|1991surveybook|smkhs)/(.*?(?:png|jpg|pdf|jpeg))$", path) mscansdir = re.search(r"(\d\d\d\d#X?\d+\w?|1995-96kh|92-94Surveybookkh|1991surveybook|smkhs)/(.*?(?:png|jpg|pdf|jpeg))$", path)
if mscansdir: if mscansdir:
scansfolderl = Wallet.objects.filter(walletname=mscansdir.group(1)) scanswalletl = Wallet.objects.filter(walletname=mscansdir.group(1))
# This should properly detect if a list of folders is returned and do something sensible, not just pick the first. # This should properly detect if a list of folders is returned and do something sensible, not just pick the first.
if len(scansfolderl): if len(scanswalletl):
scansfolder = scansfolderl[0] wallet = scanswalletl[0]
if len(scansfolderl) > 1: if len(scanswalletl) > 1:
message = "! More than one scan FOLDER matches filter query. [{}]: {} {} {} {}".format(scansfilel[0], mscansdir.group(1), mscansdir.group(2), dwgfile.dwgpath, path) message = "! More than one scan FOLDER matches filter query. [{}]: {} {} {} {}".format(scansfilel[0], mscansdir.group(1), mscansdir.group(2), dwgfile.dwgpath, path)
print(message) print(message)
DataIssue.objects.create(parser='Tunnel', message=message) DataIssue.objects.create(parser='Tunnel', message=message)
if scansfolder: if wallet:
scansfilel = scansfolder.singlescan_set.filter(name=mscansdir.group(2)) scansfilel = wallet.singlescan_set.filter(name=mscansdir.group(2))
if len(scansfilel): if len(scansfilel):
if len(scansfilel) > 1: if len(scansfilel) > 1:
message = "! More than one image FILENAME matches filter query. [{}]: {} {} {} {}".format(scansfilel[0], mscansdir.group(1), mscansdir.group(2), dwgfile.dwgpath, path) message = "! More than one image FILENAME matches filter query. [{}]: {} {} {} {}".format(scansfilel[0], mscansdir.group(1), mscansdir.group(2), dwgfile.dwgpath, path)
@ -143,8 +143,8 @@ def find_tunnel_scan(dwgfile, path):
DataIssue.objects.create(parser='Tunnel', message=message) DataIssue.objects.create(parser='Tunnel', message=message)
scansfile = scansfilel[0] scansfile = scansfilel[0]
if scansfolder: if wallet:
dwgfile.manywallets.add(scansfolder) dwgfile.manywallets.add(wallet)
if scansfile: if scansfile:
dwgfile.scans.add(scansfile) dwgfile.scans.add(scansfile)

View File

@ -1,8 +1,10 @@
asgiref==3.3.4
confusable-homoglyphs==3.2.0 confusable-homoglyphs==3.2.0
Django==2.2.19 Django==2.2.20
docutils==0.14 docutils==0.14
gunicorn==20.1.0 gunicorn==20.1.0
Pillow==5.4.1 Pillow==5.4.1
pytz==2019.1 pytz==2019.1
sqlparse==0.2.4 sqlparse==0.2.4
typing-extensions==3.7.4.3
Unidecode==1.0.23 Unidecode==1.0.23

10
requirements3.2.txt Normal file
View File

@ -0,0 +1,10 @@
asgiref==3.3.4
confusable-homoglyphs==3.2.0
Django==3.2
docutils==0.14
gunicorn==20.1.0
Pillow==5.4.1
pytz==2019.1
sqlparse==0.2.4
typing-extensions==3.7.4.3
Unidecode==1.0.23

View File

@ -31,7 +31,7 @@
<a href="{% url "survexcavessingle" "204" %}">Survex-204</a> | <a href="{% url "survexcavessingle" "204" %}">Survex-204</a> |
<a href="/survexfile/">Survex</a> | <a href="/survexfile/">Survex</a> |
<a href="{% url "survexcaveslist" %}">All Survex</a> | <a href="{% url "survexcaveslist" %}">All Survex</a> |
<a href="{% url "scanswallets" %}">Scans</a> | <a href="{% url "allwallets" %}">Scans</a> |
<a href="{% url "dwgdata" %}">Drawings</a> | <a href="{% url "dwgdata" %}">Drawings</a> |
<a href="/1623/290/290.html">290 (FGH)</a> | <a href="/1623/290/290.html">290 (FGH)</a> |
<a href="/1623/291/291">291 (GSH)</a> | <a href="/1623/291/291">291 (GSH)</a> |

View File

@ -17,8 +17,8 @@
<td align="right" style="padding:2px">{{dwgfile.npaths}}</td> <td align="right" style="padding:2px">{{dwgfile.npaths}}</td>
<td style="padding:2px"> <td style="padding:2px">
{% for scansfolder in dwgfile.manywallets.all %} {% for scanswallet in dwgfile.manywallets.all %}
<a href="{{scansfolder.get_absolute_url}}">{{scansfolder.walletname}}</a> <a href="{{scanswallet.get_absolute_url}}">{{scanswallet.walletname}}</a>
{% endfor %} {% endfor %}
</td> </td>

View File

@ -17,7 +17,7 @@
{% if cavepage %} {% if cavepage %}
<ul> <ul>
<li><a href="{% url "survexcaveslist" %}">All Survex</a></li> <li><a href="{% url "survexcaveslist" %}">All Survex</a></li>
<li><a href="{% url "scanswallets" %}">Scans</a></li> <li><a href="{% url "allwallets" %}">Scans</a></li>
<li><a href="{% url "dwgdata" %}">Drawings</a></li> <li><a href="{% url "dwgdata" %}">Drawings</a></li>
<li><a href="{% url "survexcavessingle" "caves-1623/290/290.svx" %}">290</a></li> <li><a href="{% url "survexcavessingle" "caves-1623/290/290.svx" %}">290</a></li>
<li><a href="{% url "survexcavessingle" "caves-1623/291/291.svx" %}">291</a></li> <li><a href="{% url "survexcavessingle" "caves-1623/291/291.svx" %}">291</a></li>

View File

@ -13,12 +13,12 @@ hand-drawn passage sections are drawn. These hand-drawn passages will eventually
traced to produce Tunnel or Therion drawings and eventually the final complete cave survey. traced to produce Tunnel or Therion drawings and eventually the final complete cave survey.
<table width=95%> <table width=95%>
<tr><th>Scans folder</th><th>Files</th><th>Survex blocks</th></tr> <tr><th>Scans folder</th><th>Files</th><th>Survex blocks</th></tr>
{% for scansfolder in manywallets %} {% for scanswallet in manywallets %}
<tr> <tr>
<td style="padding:2px"><a href="{{scansfolder.get_absolute_url}}">{{scansfolder.walletname}}</a></td> <td style="padding:2px"><a href="{{scanswallet.get_absolute_url}}">{{scanswallet.walletname}}</a></td>
<td align="right" style="padding:2px">{{scansfolder.singlescan_set.all|length}}</td> <td align="right" style="padding:2px">{{scanswallet.singlescan_set.all|length}}</td>
<td style="padding:2px"> <td style="padding:2px">
{% for survexblock in scansfolder.survexblock_set.all %} {% for survexblock in scanswallet.survexblock_set.all %}
<a href="{% url "svx" survexblock.survexfile.path %}">{{survexblock}}</a> <a href="{% url "svx" survexblock.survexfile.path %}">{{survexblock}}</a>
{% endfor %} {% endfor %}
</td> </td>

View File

@ -89,8 +89,8 @@
</td> </td>
<!-- Scans --> <!-- Scans -->
<td> <td>
{% if survexblock.scansfolder %} {% if survexblock.scanswallet %}
<b><a href="{{survexblock.scansfolder.get_absolute_url}}">{{survexblock.scansfolder.walletname}}</a></b> <b><a href="{{survexblock.scanswallet.get_absolute_url}}">{{survexblock.scanswallet.walletname}}</a></b>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>

View File

@ -89,8 +89,8 @@ to go to a form to correct the online data.
</td> </td>
<!-- Scans --> <!-- Scans -->
<td> <td>
{% if survexblock.scansfolder %} {% if survexblock.scanswallet %}
<b><a href="{{survexblock.scansfolder.get_absolute_url}}">{{survexblock.scansfolder.walletname}}</a></b> <b><a href="{{survexblock.scanswallet.get_absolute_url}}">{{survexblock.scanswallet.walletname}}</a></b>
{% endif %} {% endif %}
</td> </td>
</tr> </tr>

View File

@ -6,9 +6,9 @@
{% block content %} {% block content %}
<h3>Survey Scans in: {{scansfolder.walletname}}</h3> <h3>Survey Scans in: {{wallet.walletname}}</h3>
<table> <table>
{% for singlescan in scansfolder.singlescan_set.all %} {% for singlescan in wallet.singlescan_set.all %}
<tr> <tr>
<td class="singlescan"><a href="{{singlescan.get_absolute_url}}">{{singlescan.name}}</a></td> <td class="singlescan"><a href="{{singlescan.get_absolute_url}}">{{singlescan.name}}</a></td>
<td> <td>
@ -23,7 +23,7 @@
<h3>Survex surveys referring to this wallet</h3> <h3>Survex surveys referring to this wallet</h3>
<table> <table>
{% for survexblock in scansfolder.survexblock_set.all %} {% for survexblock in wallet.survexblock_set.all %}
<tr> <tr>
<td><a href="{% url "svx" survexblock.survexfile.path %}">{{survexblock}}</a></td> <td><a href="{% url "svx" survexblock.survexfile.path %}">{{survexblock}}</a></td>
</tr> </tr>

View File

@ -9,7 +9,7 @@ from django.contrib import auth
from django.urls import reverse, resolve from django.urls import reverse, resolve
from troggle.core.views import caves, statistics, survex from troggle.core.views import caves, statistics, survex
from troggle.core.views.surveys import scansingle, scanswallet, scanswallets, dwgdata, dwgfilesingle, dwgfileupload from troggle.core.views.surveys import scansingle, singlewallet, allwallets, dwgdata, dwgfilesingle, dwgfileupload
from troggle.core.views.other import troggle404, frontpage, todos, controlpanel, frontpage, scanupload from troggle.core.views.other import troggle404, frontpage, todos, controlpanel, frontpage, scanupload
from troggle.core.views.other import downloadlogbook, ajax_QM_number, downloadQMs from troggle.core.views.other import downloadlogbook, ajax_QM_number, downloadQMs
from troggle.core.views.caves import ent, cavepage from troggle.core.views.caves import ent, cavepage
@ -141,8 +141,8 @@ trogglepatterns = [
re_path(r'^survexfile/caves$', survex.survexcaveslist, name="survexcaveslist"), # auto slash not working re_path(r'^survexfile/caves$', survex.survexcaveslist, name="survexcaveslist"), # auto slash not working
re_path(r'^survexfile/(?P<survex_cave>.*)$', survex.survexcavesingle, name="survexcavessingle"), re_path(r'^survexfile/(?P<survex_cave>.*)$', survex.survexcavesingle, name="survexcavessingle"),
re_path(r'^survey_scans/$', scanswallets, name="scanswallets"), re_path(r'^survey_scans/$', allwallets, name="allwallets"),
re_path(r'^survey_scans/(?P<path>[^/]+)/$', scanswallet, name="scanswallet"), re_path(r'^survey_scans/(?P<path>[^/]+)/$', singlewallet, name="singlewallet"),
re_path(r'^survey_scans/(?P<path>[^/]+)/(?P<file>[^/]+)$', re_path(r'^survey_scans/(?P<path>[^/]+)/(?P<file>[^/]+)$',
scansingle, name="scansingle"), scansingle, name="scansingle"),