From f999f3b361af28c204af7fc0713634835c01011f Mon Sep 17 00:00:00 2001
From: Clifton Palmer
Date: Sat, 28 Oct 2023 08:37:20 -0500
Subject: [PATCH 1/1] Serves nested pages in a gallery
---
Dockerfile | 3 ++-
app/app.py | 41 ++++++++++++++++++++++++++++++++++++--
app/templates/gallery.html | 4 ++--
app/templates/page.html | 17 ++++++++++++++++
app/templates/pages.html | 15 ++++++++++++++
docker-compose.yml | 13 ++++++++++--
nginx.conf | 17 ++++++++++++++++
7 files changed, 103 insertions(+), 7 deletions(-)
create mode 100644 app/templates/page.html
create mode 100644 app/templates/pages.html
create mode 100644 nginx.conf
diff --git a/Dockerfile b/Dockerfile
index c3e0f83..1d580e7 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -13,6 +13,7 @@ WORKDIR /app
COPY ./requirements.txt /app
RUN pip install -r requirements.txt
-COPY ./app /app
+COPY ./app/app.py /app
+COPY ./app/templates /app
CMD ["flask", "run"]
diff --git a/app/app.py b/app/app.py
index 86cbf79..e6d723a 100644
--- a/app/app.py
+++ b/app/app.py
@@ -1,8 +1,45 @@
from flask import Flask, render_template
+import os
+import re
app = Flask(__name__)
+gallery_root = "/app/gallery"
+get_num_regex = re.compile(r'\d+')
@app.route('/')
def render_gallery():
- items = ['LittleWilly', 'foo', 'bar']
- return render_template( 'gallery.html', gallery_items=items )
+ gallery_names = []
+ with os.scandir(gallery_root) as galleries:
+ for gallery in galleries:
+ if not gallery.is_file():
+ gallery_names.append(gallery.name)
+ gallery_names.sort()
+ return render_template( 'gallery.html', galleries=gallery_names )
+
+@app.route('/')
+def render_pages(gallery=None):
+ page_names = []
+ with os.scandir(gallery_root + "/" + gallery) as pages:
+ for page in pages:
+ if page.is_file() and page.name.endswith('.png') or page.name.endswith('.jpg'):
+ page_names.append(page.name)
+ page_names.sort()
+ return render_template( 'pages.html', gallery=gallery, pages=page_names )
+
+@app.route('//')
+def render_page(gallery=None, page=None):
+ src = '/images/{}/{}'.format( gallery, page )
+
+ page_num = int(get_num_regex.findall(page)[-1])
+ page_num_str = str(page_num).rjust(3, '0')
+ next_page_num_str = str(page_num + 1).rjust(3, '0')
+ prev_page_num_str = str(page_num - 1).rjust(3, '0')
+
+ prev_page_url = '/{}/{}'.format(gallery, page.replace(page_num_str, prev_page_num_str) )
+ next_page_url = '/{}/{}'.format(gallery, page.replace(page_num_str, next_page_num_str) )
+
+ return render_template( 'page.html',
+ gallery=gallery, page=page, page_num=page_num,
+ title=page, src=src, alt=page,
+ prev_page_url=prev_page_url,
+ next_page_url=next_page_url )
diff --git a/app/templates/gallery.html b/app/templates/gallery.html
index 7f893b1..375ad57 100644
--- a/app/templates/gallery.html
+++ b/app/templates/gallery.html
@@ -7,8 +7,8 @@
Gallery
+
+
+Home | {{ gallery }} | Prev, Next
+
+
diff --git a/app/templates/page.html b/app/templates/page.html
new file mode 100644
index 0000000..fe075ed
--- /dev/null
+++ b/app/templates/page.html
@@ -0,0 +1,17 @@
+
+
+