]> Untitled Git - web-gallery.git/blob - navigator/app/app.py
526d9b5e65b9ad96aa382b0278c49579e56e1b66
[web-gallery.git] / navigator / app / app.py
1 from flask import Flask, render_template
2 import os
3 import re
4
5 app = Flask(__name__)
6 gallery_root = "/app/gallery"
7 gallery_desc_filename = "description.html"
8 get_num_regex = re.compile(r'\d+')
9
10 @app.route('/')
11 def render_gallery():
12     gallery_names = []
13     with os.scandir(gallery_root) as galleries:
14         for gallery in galleries:
15             if not gallery.is_file():
16                 gallery_names.append(gallery.name)
17     gallery_names.sort()
18     return render_template( 'gallery.html', galleries=gallery_names )
19
20 def get_page_number_from_name(name):
21     try:
22         return int(get_num_regex.findall(name)[-1]) 
23     except IndexError:
24         print ("Index error on name " + name, flush=True)
25         return -1
26
27 @app.route('/<gallery>')
28 def render_pages(gallery=None):
29     gallery_dir = gallery_root + "/" + gallery
30
31     # get list of available pages in gallery
32     template_pages = []
33     with os.scandir(gallery_dir) as pages:
34         for page in pages:
35             if page.is_file() and page.name.endswith('.png') or page.name.endswith('.jpg'):
36                 template_pages.append({
37                     'name': page.name, 
38                     'number': get_page_number_from_name(page.name)
39                     })
40     template_pages = sorted(template_pages, key=lambda page: page['number'])
41
42     # get description for gallery (if available)
43     desc_filename = gallery_dir + "/" + gallery_desc_filename
44     description = None
45     try:
46         with open(desc_filename, 'r') as file:
47             description = file.read()
48     except:
49         print("Description file not found at " + desc_filename)
50
51     # render!
52     return render_template( 'pages.html',
53         gallery=gallery,
54         description=description,
55         pages=template_pages
56         )
57
58 @app.route('/<gallery>/<int:page_num>')
59 def render_page(gallery=None, page_num=None):
60
61     # find a page that I think corrosponds to this page number
62     page_name = None
63     with os.scandir(gallery_root + "/" + gallery) as pages:
64         for page in pages:
65             if page.is_file():
66                 num = get_page_number_from_name(page.name)
67                 if int(page_num) == int(num):
68                     page_name = page.name
69                     break
70
71     # if found, create src link to that page
72     if page_name:
73         src = '/images/{}/{}'.format( gallery, page_name )
74         prev_page_url = "/{}/{}".format( gallery, page_num - 1)
75         next_page_url = "/{}/{}".format( gallery, page_num + 1)
76
77         return render_template( 'page.html',
78             gallery=gallery, page_num=page_num,
79             title=page_name, src=src, alt=page_name,
80             prev_page_url=prev_page_url,
81             next_page_url=next_page_url )
82     else:
83         return 'No page found'