diff options
author | Philip Sargent <philip.sargent@klebos.com> | 2022-03-13 01:01:00 +0000 |
---|---|---|
committer | Philip Sargent <philip.sargent@klebos.com> | 2022-03-13 01:01:00 +0000 |
commit | b65639df05d34221e546140b692f329b7f28404e (patch) | |
tree | 35fdb254bbad5623a89d84f3a7bcbde6f3966df6 /core | |
parent | f99ebf84e9da3a6f65a586977a43af992d6157a6 (diff) | |
download | troggle-b65639df05d34221e546140b692f329b7f28404e.tar.gz troggle-b65639df05d34221e546140b692f329b7f28404e.tar.bz2 troggle-b65639df05d34221e546140b692f329b7f28404e.zip |
Upload form for Photos
Diffstat (limited to 'core')
-rw-r--r-- | core/TESTS/tests.py | 3 | ||||
-rw-r--r-- | core/views/uploads.py | 83 |
2 files changed, 83 insertions, 3 deletions
diff --git a/core/TESTS/tests.py b/core/TESTS/tests.py index 3bcebc4..98c85f4 100644 --- a/core/TESTS/tests.py +++ b/core/TESTS/tests.py @@ -153,7 +153,7 @@ class PageTests(TestCase): def test_expoweb_via_areaid(self): # the dispatcher takes a detour via the cave renering procedure for this - response = self.client.get('/1623/others/t/via201.jpg') + response = self.client.get('/guidebook/t/via201.jpg') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.content), 6057) @@ -175,7 +175,6 @@ class PageTests(TestCase): phmatch = re.search(ph, content) self.assertIsNotNone(phmatch, "Failed to find expected text: '" + ph +"'") - def test_page_admin(self): # see the login page response = self.client.get('/admin/login/') diff --git a/core/views/uploads.py b/core/views/uploads.py index a052835..d227bda 100644 --- a/core/views/uploads.py +++ b/core/views/uploads.py @@ -12,6 +12,7 @@ from django.shortcuts import render from django.template import Context, loader from django.core.files.storage import FileSystemStorage, default_storage +#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 databaseReset import reinit_db # don't do this. databaseRest runs code *at import time* @@ -19,6 +20,7 @@ from troggle.core.models.troggle import Expedition, Person, PersonExpedition from troggle.core.models.caves import LogbookEntry, QM, Cave, PersonTrip from troggle.core.models.survex import DrawingFile from .auth import login_required_if_public +#from django.views.decorators.csrf import ensure_csrf_cookie, csrf_exempt '''File upload 'views' ''' @@ -42,6 +44,9 @@ todo = ''' class FilesForm(forms.Form): # not a model-form, just a form-form uploadfiles = forms.FileField() +class TextForm(forms.Form): # not a model-form, just a form-form + photographer = forms.CharField(strip=True) + @login_required_if_public def scanupload(request, wallet=None): '''Upload scanned image files into a wallet on /expofiles @@ -77,9 +82,11 @@ def scanupload(request, wallet=None): dirpath = Path(settings.SURVEY_SCANS, year, wallet) form = FilesForm() - + if request.method == 'POST': form = FilesForm(request.POST,request.FILES) + print(f'! - FilesForm POSTED') + if form.is_valid(): f = request.FILES["uploadfiles"] multiple = request.FILES.getlist('uploadfiles') @@ -116,6 +123,80 @@ def scanupload(request, wallet=None): {'form': form, 'wallet': wallet, **context, 'files': files, 'dirs': dirs, 'filesaved': filesaved, 'actual_saved': actual_saved}) @login_required_if_public +def photoupload(request, folder=None): + '''Upload photo image files into /expofiles/photos/<year>/<photographer>/ + 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. + ''' + year = settings.PHOTOS_YEAR + filesaved = False + actual_saved = [] + + context = {'year': year, 'placeholder': "AnathemaDevice"} + + yearpath = Path(settings.PHOTOS_ROOT, year) + + if folder == str(year) or folder == str(year) +"/": + folder = None + + if folder is None: + folder = "" # improve this later + dirpath = Path(settings.PHOTOS_ROOT, year) + urlfile = f'/expofiles/photos/{year}' + urldir = f'/photoupload/{year}' + else: # it will contain the year as well as the photographer + dirpath = Path(settings.PHOTOS_ROOT, folder) + if dirpath.is_dir(): + urlfile = f'/expofiles/photos/{folder}' + urldir = Path('/photoupload') / folder + else: + folder = "" # improve this later + dirpath = Path(settings.PHOTOS_ROOT, year) + urlfile = f'/expofiles/photos/{year}' + urldir = f'/photoupload/{year}' + + + form = FilesForm() + formd = TextForm() + + if request.method == 'POST': + if "photographer" in request.POST: + formd = TextForm(request.POST) + if formd.is_valid(): + newphotographer = request.POST["photographer"] + (yearpath / newphotographer).mkdir(exist_ok=True) + else: + form = FilesForm(request.POST,request.FILES) + if form.is_valid(): + f = request.FILES["uploadfiles"] + multiple = request.FILES.getlist('uploadfiles') + fs = FileSystemStorage(dirpath) + + actual_saved = [] + if multiple: + for f in multiple: + actual_saved.append( fs.save(f.name, content=f) ) + filesaved = True + files = [] + dirs = [] + try: + for f in dirpath.iterdir(): + if f.is_dir(): + dirs.append(f.name) + if f.is_file(): + files.append(f.name) + except FileNotFoundError: + files.append('(no folder yet - would be created)') + if len(files) >0 : + files = sorted(files) + + if dirs: + dirs = sorted(dirs) + + return render(request, 'photouploadform.html', + {'form': form, **context, 'urlfile': urlfile, 'urldir': urldir,'folder': folder, 'files': files, 'dirs': dirs, 'filesaved': filesaved, 'actual_saved': actual_saved}) + +@login_required_if_public def dwgupload(request, folder=None, gitdisable='no'): '''Upload DRAWING files (tunnel or therion) into the upload folder in :drawings AND registers it into the :drawings: git repo. |