summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPhilip Sargent <philip.sargent@klebos.com>2021-05-04 20:57:16 +0100
committerPhilip Sargent <philip.sargent@klebos.com>2021-05-04 20:57:16 +0100
commit1638f97d0c785832ad9c6456f109971d5171c5e7 (patch)
tree9f222e86fde21a90374574e2f3258a5c0ae7e6fe
parentb3fcd7765e4b8cc55ec9b4f433d34cd89ae3bce9 (diff)
downloadtroggle-1638f97d0c785832ad9c6456f109971d5171c5e7.tar.gz
troggle-1638f97d0c785832ad9c6456f109971d5171c5e7.tar.bz2
troggle-1638f97d0c785832ad9c6456f109971d5171c5e7.zip
moved functions between files
-rw-r--r--core/utils.py17
-rw-r--r--core/views/drawings.py72
-rw-r--r--parsers/drawings.py94
-rw-r--r--parsers/scans.py20
4 files changed, 60 insertions, 143 deletions
diff --git a/core/utils.py b/core/utils.py
index ff5f35c..fe5bd07 100644
--- a/core/utils.py
+++ b/core/utils.py
@@ -63,6 +63,23 @@ def chaosmonkey(n):
# print("CHAOS strikes !", file=sys.stderr)
return True
+# handles url or file, so we can refer to a set of scans (not drawings) on another server
+def GetListDir(sdir):
+ res = [ ]
+ if sdir[:7] == "http://":
+ # s = urllib.request.urlopen(sdir)
+ message = f"! Requesting loading from http:// NOT IMPLEMENTED. [{sdir}]"
+ print(message)
+ DataIssue.objects.create(parser='Drawings', message=message)
+ sdir[:7] = ""
+
+ for f in os.listdir(sdir):
+ if f[0] != ".":
+ ff = os.path.join(sdir, f)
+ res.append((f, ff, os.path.isdir(ff)))
+ return res
+
+
def save_carefully(objectType, lookupAttribs={}, nonLookupAttribs={}):
"""Looks up instance using lookupAttribs and carries out the following:
diff --git a/core/views/drawings.py b/core/views/drawings.py
index f0b684a..9b08dd5 100644
--- a/core/views/drawings.py
+++ b/core/views/drawings.py
@@ -15,10 +15,16 @@ from troggle.core.views.expo import getmimetype
as does the urls.py dispatcher which sends them here. Here they should actually have the filetype checked
by looking inside the file before being served.
+
+'''
+
+todo='''The git stuff on upload!
+
need to check if invalid query string is invalid, or produces multiple replies
and render a user-friendly error page.
'''
+
def dwgallfiles(request):
'''Report on all the drawing files in the system. These were loaded by parsing the entire directory tree
'''
@@ -50,49 +56,49 @@ def dwgfilesingle(request, path):
return HttpResponse(content="Unable to understand the encoding for this file: not UTF-8 nor iso-8859-1, or some other read error happened.")
-def dwgfileupload(request, path):
- '''Use bits of this to REGISTEr a recently uploaded dwg file which used dwgupload
- '''
- try:
- dwgfile = DrawingFile.objects.get(dwgpath=urlunquote(path)) # need to check if inavlid query string and produce friendly error
- except:
- message = f'Drawing file error or not found \'{path}\' .'
- return render(request, 'errors/generic.html', {'message': message})
- tfile = Path(settings.DRAWINGS_DATA, dwgfile.dwgpath)
+# def dwgfileupload(request, path):
+ # '''Use bits of this to REGISTEr a recently uploaded dwg file which used dwgupload
+ # '''
+ # try:
+ # dwgfile = DrawingFile.objects.get(dwgpath=urlunquote(path)) # need to check if inavlid query string and produce friendly error
+ # except:
+ # message = f'Drawing file error or not found \'{path}\' .'
+ # return render(request, 'errors/generic.html', {'message': message})
+ # tfile = Path(settings.DRAWINGS_DATA, dwgfile.dwgpath)
- project, user, password, tunnelversion = request.POST["tunnelproject"], request.POST["tunneluser"], request.POST["tunnelpassword"], request.POST["tunnelversion"]
- print(project, user, tunnelversion)
+ # project, user, password, tunnelversion = request.POST["tunnelproject"], request.POST["tunneluser"], request.POST["tunnelpassword"], request.POST["tunnelversion"]
+ # print(project, user, tunnelversion)
- if not (len(list(request.FILES.values())) == 1): # "only one file to upload"
- return HttpResponse(content="Error: more than one file selected for upload", content_type="text/plain")
+ # if not (len(list(request.FILES.values())) == 1): # "only one file to upload"
+ # return HttpResponse(content="Error: more than one file selected for upload", content_type="text/plain")
- uploadedfile = list(request.FILES.values())[0]
+ # uploadedfile = list(request.FILES.values())[0]
- if uploadedfile.field_name != "sketch":
- return HttpResponse(content="Error: non-sketch file uploaded", content_type="text/plain")
- if uploadedfile.content_type != "text/plain":
- return HttpResponse(content="Error: non-plain content type", content_type="text/plain")
+ # if uploadedfile.field_name != "sketch":
+ # return HttpResponse(content="Error: non-sketch file uploaded", content_type="text/plain")
+ # if uploadedfile.content_type != "text/plain":
+ # return HttpResponse(content="Error: non-plain content type", content_type="text/plain")
- # could use this to add new files
- if os.path.split(path)[1] != uploadedfile.name:
- return HttpResponse(content="Error: name disagrees", content_type="text/plain")
+ # # could use this to add new files
+ # if os.path.split(path)[1] != uploadedfile.name:
+ # return HttpResponse(content="Error: name disagrees", content_type="text/plain")
- orgsize = dwgfile.filesize # = os.stat(tfile)[stat.ST_SIZE]
+ # orgsize = dwgfile.filesize # = os.stat(tfile)[stat.ST_SIZE]
- ttext = uploadedfile.read()
+ # ttext = uploadedfile.read()
- # could check that the user and projects agree here
+ # # could check that the user and projects agree here
- fout = open(tfile, "w")
- fout.write(ttext)
- fout.close()
+ # fout = open(tfile, "w")
+ # fout.write(ttext)
+ # fout.close()
- # redo its settings of
- parsers.surveys.SetTunnelfileInfo(dwgfile) # commented out
- dwgfile.save()
+ # # redo its settings of
+ # parsers.surveys.SetTunnelfileInfo(dwgfile) # commented out
+ # dwgfile.save()
- uploadedfile.close()
- message = "File size %d overwritten with size %d" % (orgsize, dwgfile.filesize)
- return HttpResponse(content=message, content_type="text/plain")
+ # uploadedfile.close()
+ # message = "File size %d overwritten with size %d" % (orgsize, dwgfile.filesize)
+ # return HttpResponse(content=message, content_type="text/plain")
diff --git a/parsers/drawings.py b/parsers/drawings.py
index a313a83..f3aca47 100644
--- a/parsers/drawings.py
+++ b/parsers/drawings.py
@@ -13,14 +13,14 @@ from functools import reduce
import settings
from troggle.core.models.survex import SingleScan, Wallet, DrawingFile
from troggle.core.models.troggle import DataIssue
-from troggle.core.utils import save_carefully
+from troggle.core.utils import save_carefully, GetListDir
'''Searches through all the :drawings: repository looking
for tunnel and therion files
-
-Searches through all the survey scans directories in expofiles, looking for images to be referenced.
'''
+todo='''
+'''
def get_or_create_placeholder(year):
""" All surveys must be related to a logbookentry. We don't have a way to
@@ -34,94 +34,6 @@ def get_or_create_placeholder(year):
placeholder_logbook_entry, newly_created = save_carefully(LogbookEntry, lookupAttribs, nonLookupAttribs)
return placeholder_logbook_entry
-def listdir(*directories):
- try:
- return os.listdir(os.path.join(settings.SURVEYS, *directories))
- except:
- import urllib.request, urllib.parse, urllib.error
- url = settings.SURVEYS + reduce(lambda x, y: x + "/" + y, ["listdir"] + list(directories))
- folders = urllib.request.urlopen(url.replace("#", "%23")).readlines()
- return [folder.rstrip(r"/") for folder in folders]
-
-
-# handles url or file, so we can refer to a set of scans (not drawings) on another server
-def GetListDir(sdir):
- res = [ ]
- if sdir[:7] == "http://":
- # s = urllib.request.urlopen(sdir)
- message = f"! Requesting loading from http:// NOT IMPLEMENTED. [{sdir}]"
- print(message)
- DataIssue.objects.create(parser='Drawings', message=message)
- sdir[:7] = ""
-
- for f in os.listdir(sdir):
- if f[0] != ".":
- ff = os.path.join(sdir, f)
- res.append((f, ff, os.path.isdir(ff)))
- return res
-
-
-def LoadListScansFile(wallet):
- gld = [ ]
- # flatten out any directories in these wallet folders - should not be any
- for (fyf, ffyf, fisdiryf) in GetListDir(wallet.fpath):
- if fisdiryf:
- gld.extend(GetListDir(ffyf))
- else:
- gld.append((fyf, ffyf, fisdiryf))
-
- c=0
- for (fyf, ffyf, fisdiryf) in gld:
- if re.search(r"\.(?:png|jpg|jpeg|pdf|svg|gif)(?i)$", fyf):
- singlescan = SingleScan(ffile=ffyf, name=fyf, wallet=wallet)
- singlescan.save()
- c+=1
- if c>=10:
- print(".", end='')
- c = 0
-
-
-# this iterates through the scans directories (either here or on the remote server)
-# and builds up the models we can access later
-def load_all_scans():
-
- print(' - Loading Survey Scans')
-
- SingleScan.objects.all().delete()
- Wallet.objects.all().delete()
- print(' - deleting all scansFolder and scansSingle objects')
-
- # first do the smkhs (large kh survey scans) directory
- manywallets_smkhs = Wallet(fpath=os.path.join(settings.SURVEY_SCANS, "../surveys/smkhs"), walletname="smkhs")
- print("smkhs", end=' ')
- if os.path.isdir(manywallets_smkhs.fpath):
- manywallets_smkhs.save()
- LoadListScansFile(manywallets_smkhs)
-
-
- # iterate into the surveyscans directory
- print(' - ', end=' ')
- for f, ff, fisdir in GetListDir(settings.SURVEY_SCANS):
- if not fisdir:
- continue
-
- # do the year folders
- if re.match(r"\d\d\d\d$", f):
- print("%s" % f, end=' ')
- for fy, ffy, fisdiry in GetListDir(ff):
- if fisdiry:
- wallet = Wallet(fpath=ffy, walletname=fy)
- wallet.save()
- LoadListScansFile(wallet)
-
- # do the
- elif f != "thumbs":
- wallet = Wallet(fpath=ff, walletname=f)
- wallet.save()
- LoadListScansFile(wallet)
-
- print("", flush=True)
-
def find_tunnel_file(dwgfile, path):
'''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
diff --git a/parsers/scans.py b/parsers/scans.py
index e43ddc4..9c0d28a 100644
--- a/parsers/scans.py
+++ b/parsers/scans.py
@@ -12,7 +12,7 @@ from functools import reduce
import settings
from troggle.core.models.survex import SingleScan, Wallet, DrawingFile
from troggle.core.models.troggle import DataIssue
-from troggle.core.utils import save_carefully
+from troggle.core.utils import save_carefully, GetListDir
'''Searches through all the survey scans directories (wallets) in expofiles, looking for images to be referenced.
'''
@@ -39,24 +39,6 @@ def listdir(*directories):
folders = urllib.request.urlopen(url.replace("#", "%23")).readlines()
return [folder.rstrip(r"/") for folder in folders]
-
-# handles url or file, so we can refer to a set of scans (not drawings) on another server
-def GetListDir(sdir):
- res = [ ]
- if sdir[:7] == "http://":
- # s = urllib.request.urlopen(sdir)
- message = f"! Requesting loading from http:// NOT IMPLEMENTED. [{sdir}]"
- print(message)
- DataIssue.objects.create(parser='Drawings', message=message)
- sdir[:7] = ""
-
- for f in os.listdir(sdir):
- if f[0] != ".":
- ff = os.path.join(sdir, f)
- res.append((f, ff, os.path.isdir(ff)))
- return res
-
-
def LoadListScansFile(wallet):
gld = [ ]
# flatten out any directories in these wallet folders - should not be any