#!/usr/bin/python3 import logging import os from os import listdir from os.path import isdir, isfile, join import re from string import Template import sys import traceback #import Image from configparser import ConfigParser from optparse import OptionParser __all__ = [] __version__ = 0.1 __date__ = '2021-12-27' __updated__ = '2021-12-27' DEBUG = 1 TESTRUN = 0 PROFILE = 0 html = Template("""
$dirlist
Zum Filtern bitte einen Suchbegriff in das Suchfeld eingeben.
Es gibt noch keine Filter-Ergebnisse
""") def maketitle(x): x = str(x) x = re.sub('^\d\d\d_', '', x) x = re.sub('_', ' ', x) return x def remove_prefix(text, prefix): return text[text.startswith(prefix) and len(prefix):] def getthumb(gallerydir, webrootdir): thumb = '' try: for f in listdir(join(gallerydir, '_thumbnails')): # print(f) thumbfile = join(gallerydir, '_thumbnails', f) if isfile(thumbfile): if str(f).lower().endswith('jpg'): thumb = remove_prefix(join(gallerydir, '_thumbnails', f), webrootdir) break except: pass return(thumb) def get_headerimage(gallerydir, webrootdir): print(gallerydir) return(remove_prefix(join(gallerydir, 'header/header.jpg'), webrootdir)) def get_directories_in_gallerydir(gallerydir): onlydirs = [] for f in listdir(gallerydir): if isdir(join(gallerydir, f)): if str(f) != '_thumbnails': onlydirs.append(f) onlydirs.sort() return(onlydirs) def read_config(opts): try: config_object = ConfigParser() config_object.read( "." + os.path.splitext(os.path.basename(__file__))[0] ) ini = dict(config_object.items('default')) for key in ini: if not opts.__dict__[key]: opts.__dict__[key] = ini[key] except: pass def write_config(opts): ini = {} for key in opts.__dict__: value = opts.__dict__[key] if value is None: pass elif key == 'verbose': pass else: ini[key] = str(value) config_object = ConfigParser() config_object.read_dict({'default' : ini}) with open("." + os.path.splitext(os.path.basename(__file__))[0], 'w') as conf: config_object.write(conf) def create_index_html(gallerydir, opts): read_config(opts) logging.info(f"Creating index in {gallerydir}") dirs = get_directories_in_gallerydir(gallerydir) logging.info(dirs) dirlist = '' headerimages = '' for d in dirs: headerimages = headerimages + '","' + get_headerimage(join(gallerydir,d), opts.webrootdir) thumb = getthumb(join(gallerydir,d), opts.webrootdir) print(thumb) # dirlist = dirlist + f"
 " + maketitle(d) + "
\n" dirlist = dirlist + f"
" + maketitle(d) + "
\n" #print(dirlist) headerimages = re.sub('^",', '', headerimages) with open(join(gallerydir, 'headerimages.js'), 'w') as e: e.write('var myPix = new Array(' + headerimages + '");') title = opts.title or os.path.basename(os.path.normpath(os.getcwd())) with open(join(gallerydir, 'index.html'), 'w') as f: dirlist2 = dirlist f.write(html.substitute( dirlist=dirlist2, title=title )) write_config(opts) def main(argv=None): '''Command line options.''' program_name = os.path.basename(sys.argv[0]) program_version = "v0.1" program_build_date = "%s" % __updated__ program_version_string = '%%prog %s (%s)' % (program_version, program_build_date) #program_usage = '''usage: spam two eggs''' # optional - will be autogenerated by optparse program_longdesc = '''create index for directory of lightgallery galleries''' # optional - give further explanation about what the program does program_license = "Copyright 2021 Markus Spring (markus-spring.info). \ Licensed under the Apache License 2.0\nhttp://www.apache.org/licenses/LICENSE-2.0" if argv is None: argv = sys.argv[1:] try: # setup option parser parser = OptionParser(version=program_version_string, epilog=program_longdesc, description=program_license) # parser.add_option("-i", "--in", dest="infile", help="set input path [default: %default]", metavar="FILE") # parser.add_option("-o", "--out", dest="outfile", help="set output path [default: %default]", metavar="FILE") parser.add_option("-v", "--verbose", dest="verbose", action="count", help="set verbosity level [default: %default]") parser.add_option("-t", "--title", action="store", dest="title", help="set index title [default: %default]") parser.add_option("-w", "--webrootdir", action="store", dest="webrootdir", help="webserver root dir [default: %default]") parser.set_defaults( verbose=0) (opts, args) = parser.parse_args(argv) if opts.verbose > 0: print(("verbosity level = %d" % opts.verbose)) if opts.title: print(("title = %s" % opts.title)) if len(args) < 1: parser.error("directory argument missing") # MAIN BODY # logging.basicConfig(filename=os.path.basename(sys.argv[0]) + '.log', level=logging.INFO) create_index_html(args[0], opts) except BaseException as ex: ex_type, ex_value, ex_traceback = sys.exc_info() # Get current system exception trace_back = traceback.extract_tb(ex_traceback) # Extract unformatter stack traces as tuples stack_trace = list() # Format stacktrace for trace in trace_back: stack_trace.append("File : %s , Line : %d, Func.Name : %s, Message : %s" % (trace[0], trace[1], trace[2], trace[3])) print("Exception type : %s " % ex_type.__name__) print("Exception message : %s" %ex_value) print("Stack trace : %s" %stack_trace) if __name__ == "__main__": if DEBUG: sys.argv.append("-v") if TESTRUN: import doctest doctest.testmod() if PROFILE: import cProfile import pstats profile_filename = 'config_reader.config_reader_profile.txt' cProfile.run('main()', profile_filename) statsfile = open("profile_stats.txt", "wb") p = pstats.Stats(profile_filename, stream=statsfile) stats = p.strip_dirs().sort_stats('cumulative') stats.print_stats() statsfile.close() sys.exit(0) sys.exit(main()) #Local Variables: #compile-command: "./create_gallery_index.py -t 'Dias Ed Spring 1958-1998' /media/thinc_webserver_data/vaters_dias/" #End: