Skip to content
Snippets Groups Projects
Select Git revision
  • 3e148b92bfa81dd36c3516f5b47185c55d47c795
  • main default protected
  • staging
3 results

main.py

Blame
  • create-index.py 2.96 KiB
    #!/usr/bin/env python3
    import jinja2
    import os
    import sys
    from datetime import datetime
    
    def timestamp_to_datetime(timestamp):
    	return datetime.fromtimestamp(timestamp)
    
    def main(inputfolder, outputfolder, ignore_files):
    	jinjaenv = jinja2.Environment(autoescape=jinja2.select_autoescape())
    	jinjaenv.filters["timestamp_to_datetime"] = timestamp_to_datetime
    	template = jinjaenv.from_string("""<!DOCTYPE html>
    		<html>
    			<head>
    				<meta http-equiv="content-type" content="text/html; charset=utf-8">
    				<meta name="viewport" content="width=device-width">
    				<style type="text/css">
    					body,html {
    						background: #fff;
    						font-family: "Bitstream Vera Sans","Lucida Grande","Lucida Sans Unicode",Lucidux,Verdana,Lucida,sans-serif;
    					}
    					tr:nth-child(even) {
    						background:#f4f4f4;
    					}
    					th,td {
    						padding:0.1em 0.5em;
    					}
    					th {
    						text-align:left;
    						font-weight:bold;
    						background:#eee;
    						border-bottom:1px solid #aaa;
    					}
    					#list {
    						border:1px solid #aaa;
    						width:100%;
    					}
    					a {
    						color:#a33;
    					}
    					a:hover {
    						color:#e33;
    					}
    				</style>
    			</head>
    			<body>
    				<h1>Index of /{{ path }}</h1>
    				<table id="list">
    					<thead>
    						<tr>
    							<th style="width:55%">
    								File Name
    							</th>
    							<th style="width:20%">
    								File Size</th>
    							<th style="width:25%">
    								Date
    							</th>
    						</tr>
    					</thead>
    					<tbody>
    						<tr>
    							<td class="link">
    								<a href="../">Parent directory/</a>
    							</td>
    							<td class="size">-</td>
    							<td class="date">-</td>
    						</tr>
    						{% for entry, stat, is_dir in entries %}
    						<tr>
    							<td class="link">
    								<a href="{{ entry + ('/' if is_dir else '') }}" title="{{ entry }}">{{ entry  + ('/' if is_dir else '') }}</a>
    							</td>
    							<td class="size">{{ '-' if is_dir else stat.st_size|filesizeformat }}</td>
    							<td class="date">{{ (stat.st_mtime|timestamp_to_datetime).isoformat(timespec='seconds') }}</td>
    						</tr>
    						{% endfor  %}
    					</tbody>
    				</table>
    				<p><a href="https://legal.cccv.de">Impressum - Datenschutzerklärung</a></p>
    			</body>
    		</html>
    	""")
    	for path, dirs, files in os.walk(inputfolder):
    		dirs.sort()
    		files.sort()
    		relativ_path_to_input = os.path.relpath(path, inputfolder)
    		entries = [(i, os.stat(os.path.join(path, i)), i in dirs) for i in dirs+files if not i in ignore_files]
    		html_index = template.render(path=relativ_path_to_input, entries=entries)
    		html_index_folder = os.path.join(outputfolder, relativ_path_to_input)
    		html_index_path = os.path.join(html_index_folder, 'index.html')
    		os.makedirs(html_index_folder, exist_ok=True)
    		outputfile = open(html_index_path, "w")
    		outputfile.write(html_index)
    		outputfile.close()
    
    if __name__ == '__main__':
    	if len(sys.argv) != 3:
    		print(f'Usage: {sys.argv[0]} <directory tree to create index from> <output path for index tree>')
    		sys.exit(1)
    	main(inputfolder=sys.argv[1], outputfolder=sys.argv[2], ignore_files=['index.html'])