#!/usr/bin/env python # coding=utf-8 ''' A script that creates an index for a folder. ''' import os,sys,time import urllib VERSION="20160116" IMAGE_EXTENSIONS=['png','gif','jpg','jpeg','tif','tiff'] def setup(): ''' Setup the command line options ''' from argparse import ArgumentParser parser=ArgumentParser() parser.add_argument("-f",action="store_true",dest="overwrite",default=False, help="Overwrite existing index file.") parser.add_argument("-H",action="store_true",dest="hidden",default=False, help="Show hidden files") parser.add_argument("-t",type=str,dest="title",default=None, help="Name for the title (Default: Folder name)") parser.add_argument("-o",type=str,dest="filename",default="index.html", help="Output filename (Default: index.html)") parser.add_argument("-p",action="store_false",dest="parent",default=True, help="Do no print .. link for parent folder.") parser.add_argument("--images",action="store_true",dest="images",default=False, help="Show images with tags") parser.add_argument("--version",action='version', version=VERSION) parser.add_argument("path",type=str,action="store",default=os.path.abspath('.'),nargs='?', help="Root path of the index") options=parser.parse_args() options.path=os.path.abspath(options.path) if options.title==None: options.title=os.path.basename(options.path) return options def setup2HTML(opts): return ''%";".join([ 'hidden=%s'%opts.hidden, 'parent=%s'%opts.parent, 'title=%s'%urllib.quote(opts.title), 'images=%s'%opts.images ]) def HTML2setup(opts): f=open(os.path.join(opts.path,opts.filename), 'rt') try: for l in f.readlines(): if l.find('name="SimpleWebPageSetup"')>-1: content=l[l.find('name="SimpleWebPageSetup"'):] for s in content.split('"')[3].split(";"): (k,v)=s.split('=',1) if k=='hidden': opts.hidden=v=="True" if k=='parent': opts.parent=v=="True" if k=='title': opts.title=urllib.unquote(v) if k=='images': opts.images=v=="True" print("Reading options from existing "+opts.filename) break except: pass return opts def generate_index(opts): for path,dirs,files in os.walk(opts.path): if opts.filename in files: if not opts.overwrite: print(opts.filename+" exists") sys.exit(1) opts=HTML2setup(opts) files = [ f for f in files if f != opts.filename] if not opts.hidden: files = [ f for f in files if not f.startswith(".")] dirs = [ d for d in dirs if not d.startswith(".")] f=open(os.path.join(path,opts.filename),'wt') dirs.sort() files.sort() f.write(get_header(opts)) if opts.parent: f.write(get_pathlink(path,'..')) for di in dirs: f.write(get_pathlink(path,di)) for fi in files: f.write(get_filelink(path,fi,opts.images)) f.write(get_footer()) f.close() return def get_filelink(path,fname,images=False): if os.path.islink(os.path.join(path,fname)): (fsize,fsstr,fsstrb,fdstr)=(0,"NA","NA","NA") else: fsize=os.path.getsize(os.path.join(path,fname)) fsstr=sizeof(fsize) fsstrb=str(fsize) fdate=time.localtime(os.path.getmtime(os.path.join(path,fname))) fdstr=time.strftime("%Y/%m/%d %H:%M:%S",fdate) if images and is_imagefile(fname): fname_str=get_imagestr(fname) else: fname_str=fname return ''+fname_str+''+fsstr+''+fsstrb+''+fdstr+'\n' def get_imagestr(fname): return '' def get_pathlink(path,dname): fdate=time.localtime(os.path.getmtime(os.path.join(path,dname))) fdstr=time.strftime("%Y/%m/%d %H:%M:%S",fdate) return ''+dname+'[DIR]0'+fdstr+'\n' def get_header(opts): header=''' '''+setup2HTML(opts)+''' Index of '''+opts.title+'''

Index of '''+opts.title+'''

''' return header def get_footer(): footer='''
NameSizeSize BModified
''' return footer def is_imagefile(fname): for ext in IMAGE_EXTENSIONS: if fname.lower().endswith(ext): return True return False def sizeof(num): for x in [' B','KB','MB','GB','TB']: if num < 1024.0: if x==' B': return "%d %s" % (num, x) return "%3.1f %s" % (num, x) num /= 1024.0 opts=setup() generate_index(opts)