]> Untitled Git - web-gallery.git/blob - navigator/app/app.py
Updated navigator to version 1.2.0
[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 get_num_regex = re.compile(r'\d+')
8
9 @app.route('/')
10 def render_gallery():
11     gallery_names = []
12     with os.scandir(gallery_root) as galleries:
13         for gallery in galleries:
14             if not gallery.is_file():
15                 gallery_names.append(gallery.name)
16     gallery_names.sort()
17     return render_template( 'gallery.html', galleries=gallery_names )
18
19 def get_page_number_from_name(name):
20     try:
21         return int(get_num_regex.findall(name)[-1]) 
22     except IndexError:
23         print ("Index error on name " + name, flush=True)
24         return -1
25
26 @app.route('/<gallery>')
27 def render_pages(gallery=None):
28     template_pages = []
29     with os.scandir(gallery_root + "/" + gallery) as pages:
30         for page in pages:
31             if page.is_file() and page.name.endswith('.png') or page.name.endswith('.jpg'):
32                 template_pages.append({
33                     'name': page.name, 
34                     'number': get_page_number_from_name(page.name)
35                     })
36     template_pages = sorted(template_pages, key=lambda page: page['number'])
37     return render_template( 'pages.html', gallery=gallery, pages=template_pages )
38
39 @app.route('/<gallery>/<int:page_num>')
40 def render_page(gallery=None, page_num=None):
41
42     # find a page that I think corrosponds to this page number
43     page_name = None
44     with os.scandir(gallery_root + "/" + gallery) as pages:
45         for page in pages:
46             if page.is_file():
47                 num = get_page_number_from_name(page.name)
48                 if int(page_num) == int(num):
49                     page_name = page.name
50                     break
51
52     # if found, create src link to that page
53     if page_name:
54         src = '/images/{}/{}'.format( gallery, page_name )
55         prev_page_url = "/{}/{}".format( gallery, page_num - 1)
56         next_page_url = "/{}/{}".format( gallery, page_num + 1)
57
58         return render_template( 'page.html',
59             gallery=gallery, page_num=page_num,
60             title=page_name, src=src, alt=page_name,
61             prev_page_url=prev_page_url,
62             next_page_url=next_page_url )
63     else:
64         return 'No page found'