From: Clifton Palmer Date: Sat, 28 Oct 2023 13:37:20 +0000 (-0500) Subject: Serves nested pages in a gallery X-Git-Tag: 1.0.0~1 X-Git-Url: http://git.purplebirdman.com/web-gallery.git/commitdiff_plain/f999f3b361af28c204af7fc0713634835c01011f?hp=d731a2bad30aaec2e1f1d63e2bb57062e1ccd503 Serves nested pages in a gallery --- 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

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 @@ + + + + {{ title }} + + +
+
+ + {{ alt }} + +
+

Home | {{ gallery }} | Prev, Next

+
+ + diff --git a/app/templates/pages.html b/app/templates/pages.html new file mode 100644 index 0000000..fe4e751 --- /dev/null +++ b/app/templates/pages.html @@ -0,0 +1,15 @@ + + + + Pages + + +

Pages

+ + + + diff --git a/docker-compose.yml b/docker-compose.yml index 8a86772..88d1329 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -8,6 +8,15 @@ services: ports: - 5432:5432 web: + image: nginx:1.17 + volumes: + - ./nginx.conf:/etc/nginx/nginx.conf + - gallery_data:/data/images + ports: + - 80:80 + depends_on: + - gallery + gallery: build: . image: cjpalmer/gallery:0.1.0 volumes: @@ -15,8 +24,8 @@ services: - ./app:/app environment: FLASK_DEBUG: 1 - ports: - - 80:5000 + depends_on: + - db volumes: gallery_data: driver: local diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..cff3e3b --- /dev/null +++ b/nginx.conf @@ -0,0 +1,17 @@ +worker_processes auto; + +events { + worker_connections 1024; +} + +http { + server { + location / { + proxy_pass http://gallery:5000; + } + + location /images { + root /data; + } + } +}