# Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file # for details. All rights reserved. Use of this source code is governed by a # BSD-style license that can be found in the LICENSE file. #!/usr/bin/env python3 # """ Usage: gen_manifest.py DIRECTORY EXTENSIONS CACHE-FILE HTML-FILES... Outputs an app cache manifest file including (recursively) all files with the provided in the directory with the given extensions. Each html files is then processed and a corresponding -cache.html file is created, pointing at the appropriate cache manifest file, which is saved as -cache.manifest. Example: gen_manifest.py war *.css,*.html,*.js,*.png cache.manifest foo.html bar.html Produces: foo-cache.html, bar-cache.html, and cache.manifest """ import fnmatch import os import random import sys import datetime cacheDir = sys.argv[1] extensions = sys.argv[2].split(',') manifestName = sys.argv[3] htmlFiles = sys.argv[4:] os.chdir(cacheDir) print("Generating manifest from root path: " + cacheDir) patterns = extensions + htmlFiles def matches(file): for pattern in patterns: if fnmatch.fnmatch(file, pattern): return True return False def findFiles(rootDir): for root, dirs, files in os.walk(rootDir): for f in files: # yields this file relative to the given directory yield os.path.join(root, f)[(len(rootDir) + 1):] manifest = [] manifest.append("CACHE MANIFEST") # print out a random number to force the browser to update the cache manifest manifest.append("# %s" % datetime.datetime.now().isoformat()) # print out each file to be included in the cache manifest manifest.append("CACHE:") manifest += (f for f in findFiles('.') if matches(f)) # force the browser to request any other files over the network, # even when offline (better failure mode) manifest.append("NETWORK:") manifest.append("*") with open(manifestName, 'w') as f: f.writelines(m + '\n' for m in manifest) print("Created manifest file: " + manifestName) for htmlFile in htmlFiles: cachedHtmlFile = htmlFile.replace('.html', '-cache.html') text = open(htmlFile, 'r').read() text = text.replace('', '' % manifestName, 1) with open(cachedHtmlFile, 'w') as output: output.write(text) print("Processed html file: %s -> %s" % (htmlFile, cachedHtmlFile)) print("Successfully generated manifest and html files")