class PipelineManifest(Manifest): def __init__(self): self.packager = Packager() self.packages = self.collect_packages() self.finder = DefaultStorageFinder() def collect_packages(self): packages = [] for package_name in self.packager.packages["css"]: package = self.packager.package_for("css", package_name) if package.manifest: packages.append(package) for package_name in self.packager.packages["js"]: package = self.packager.package_for("js", package_name) if package.manifest: packages.append(package) return packages def cache(self): if settings.PIPELINE: for package in self.packages: yield str(self.packager.individual_url(package.output_filename)) else: for package in self.packages: for path in self.packager.compile(package.paths): yield str(self.packager.individual_url(path)) for path in self.finder.list(): yield str(self.packager.individual_url(path))
class PipelineManifest(Manifest): def __init__(self): self.packager = Packager() self.packages = self.collect_packages() self.finder = DefaultStorageFinder() def collect_packages(self): packages = [] for package_name in self.packager.packages['css']: package = self.packager.package_for('css', package_name) if package.manifest: packages.append(package) for package_name in self.packager.packages['js']: package = self.packager.package_for('js', package_name) if package.manifest: packages.append(package) return packages def cache(self): ignore_patterns = getattr(settings, "STATICFILES_IGNORE_PATTERNS", None) if settings.PIPELINE: for package in self.packages: yield str(self.packager.individual_url( package.output_filename)) else: for package in self.packages: for path in self.packager.compile(package.paths): yield str(self.packager.individual_url(path)) for path, _ in self.finder.list(ignore_patterns): yield str(self.packager.individual_url(path))
class PipelineManifest(Manifest): def __init__(self): self.packager = Packager() self.packages = self.collect_packages() self.finder = DefaultStorageFinder() def collect_packages(self): packages = [] for package_name in self.packager.packages['css']: package = self.packager.package_for('css', package_name) if package.manifest: packages.append(package) for package_name in self.packager.packages['js']: package = self.packager.package_for('js', package_name) if package.manifest: packages.append(package) return packages def cache(self): ignore_patterns = getattr(settings, "STATICFILES_IGNORE_PATTERNS", None) if settings.PIPELINE: for package in self.packages: yield str(self.packager.individual_url(package.output_filename)) else: for package in self.packages: for path in self.packager.compile(package.paths): yield str(self.packager.individual_url(path)) for path in self.finder.list(ignore_patterns): yield str(self.packager.individual_url(path))
class PipelineManifest(Manifest): def __init__(self): self.packager = Packager() self.packages = self.collect_packages() self.finders = get_finders() self.package_files = self.get_package_files() def get_package_files(self): files = list() for package in self.packages: files.append(package.output_filename) for path in self.packager.compile(package.paths): files.append(path) return files def collect_packages(self): packages = [] for package_name in self.packager.packages['css']: package = self.packager.package_for('css', package_name) if package.manifest: packages.append(package) for package_name in self.packager.packages['js']: package = self.packager.package_for('js', package_name) if package.manifest: packages.append(package) return packages def cache(self): ignore_patterns = getattr(settings, "STATICFILES_IGNORE_PATTERNS", None) if PIPELINE: for package in self.packages: yield str(self.packager.individual_url(package.output_filename)) else: for package in self.packages: for path in self.packager.compile(package.paths): yield str(self.packager.individual_url(path)) for finder in self.finders: for path, storage in finder.list(ignore_patterns): # Prefix the relative path if the source storage contains it if getattr(storage, 'prefix', None): prefixed_path = os.path.join(storage.prefix, path) else: prefixed_path = path # Dont add any doubles if prefixed_path not in self.package_files: yield str(self.packager.individual_url(prefixed_path))
class CompressedCSSNode(template.Node): def __init__(self, name): self.name = name def render(self, context): package_name = template.Variable(self.name).resolve(context) package = settings.PIPELINE_CSS.get(package_name, {}) if package: package = {package_name: package} self.packager = Packager(css_packages=package, js_packages={}) try: package = self.packager.package_for('css', package_name) except PackageNotFound: return '' # fail silently, do not return anything if an invalid group is specified if settings.PIPELINE: compressed_path = self.packager.pack_stylesheets(package) return self.render_css(package, compressed_path) else: package['paths'] = self.packager.compile(package['paths']) return self.render_individual(package) def render_css(self, package, path): context = {} if not 'template' in package: package['template'] = "pipeline/css.html" if 'context' in package: context = package['context'] context.update({'url': self.packager.individual_url(path)}) return render_to_string(package['template'], context) def render_individual(self, package): tags = [self.render_css(package, path) for path in package['paths']] return '\n'.join(tags)
def test_individual_url(self): """Check that individual URL is correctly generated""" packager = Packager() filename = os.path.join(settings.PIPELINE_ROOT, u'js/application.js') individual_url = packager.individual_url(filename) self.assertEqual(individual_url, "http://localhost/static/js/application.js")
class CompressedCSSNode(template.Node): def __init__(self, name): self.name = name self.packager = Packager() def render(self, context): package_name = template.Variable(self.name).resolve(context) try: package = self.packager.package_for('css', package_name) except PackageNotFound: return '' # fail silently, do not return anything if an invalid group is specified if settings.PIPELINE: compressed_path = self.packager.pack_stylesheets(package) return self.render_css(package, compressed_path) else: package['paths'] = self.packager.compile(package['paths']) return self.render_individual(package) def render_css(self, package, path): context = {} if not 'template' in package: package['template'] = "pipeline/css.html" if not 'context' in package: context = package['context'] context.update({ 'url': self.packager.individual_url(path) }) return render_to_string(package['template'], context) def render_individual(self, package): tags = [self.render_css(package, path) for path in package['paths']] return '\n'.join(tags)
def test_individual_url(self): """Check that individual URL is correctly generated""" packager = Packager() filename = os.path.join(settings.PIPELINE_ROOT, u'js/application.js') individual_url = packager.individual_url(filename) self.assertEqual(individual_url, "http://localhost/static/js/application.js")
class CompressedJSNode(template.Node): def __init__(self, name): self.name = name def render(self, context): package_name = template.Variable(self.name).resolve(context) package = settings.PIPELINE_JS.get(package_name, {}) if package: package = {package_name: package} self.packager = Packager(css_packages={}, js_packages=package) try: package = self.packager.package_for('js', package_name) except PackageNotFound: return '' # fail silently, do not return anything if an invalid group is specified if 'externals' in package: return '\n'.join([self.render_external(package, url) for url in package['externals']]) if settings.PIPELINE: compressed_path = self.packager.pack_javascripts(package) return self.render_js(package, compressed_path) else: package['paths'] = self.packager.compile(package['paths']) templates = self.packager.pack_templates(package) return self.render_individual(package, templates) def render_js(self, package, path): context = {} if not 'template' in package: package['template'] = "pipeline/js.html" if 'context' in package: context = package['context'] context.update({ 'url': self.packager.individual_url(path) }) return render_to_string(package['template'], context) def render_external(self, package, url): if not 'template' in package: package['template'] = "pipeline/js.html" return render_to_string(package['template'], { 'url': url }) def render_inline(self, package, js): context = {} if 'context' in package: context = package['context'] context.update({ 'source': js }) return render_to_string("pipeline/inline_js.html", context) def render_individual(self, package, templates=None): tags = [self.render_js(package, js) for js in package['paths']] if templates: tags.append(self.render_inline(package, templates)) return '\n'.join(tags)
class CompressedJSNode(template.Node): def __init__(self, name): self.name = name def render(self, context): package_name = template.Variable(self.name).resolve(context) package = settings.PIPELINE_JS.get(package_name, {}) if package: package = {package_name: package} self.packager = Packager(css_packages={}, js_packages=package) try: package = self.packager.package_for('js', package_name) except PackageNotFound: return '' # fail silently, do not return anything if an invalid group is specified if 'externals' in package: return '\n'.join([self.render_external(package, url) for url in package['externals']]) if settings.PIPELINE: compressed_path = self.packager.pack_javascripts(package) return self.render_js(package, compressed_path) else: package['paths'] = self.packager.compile(package['paths']) templates = self.packager.pack_templates(package) return self.render_individual(package, templates) def render_js(self, package, path): context = {} if 'template' not in package: package['template'] = "pipeline/js.html" if 'context' in package: context = package['context'] context.update({ 'url': self.packager.individual_url(path) }) return render_to_string(package['template'], context) def render_external(self, package, url): if 'template' not in package: package['template'] = "pipeline/js.html" return render_to_string(package['template'], { 'url': url }) def render_inline(self, package, js): context = {} if 'context' in package: context = package['context'] context.update({ 'source': js }) return render_to_string("pipeline/inline_js.html", context) def render_individual(self, package, templates=None): tags = [self.render_js(package, js) for js in package['paths']] if templates: tags.append(self.render_inline(package, templates)) return '\n'.join(tags)
class PipelineManifest(Manifest): def __init__(self): self.packager = Packager() self.packages = self.collect_packages() self.finders = get_finders() self.package_files = [] def collect_packages(self): packages = [] for package_name in self.packager.packages['css']: package = self.packager.package_for('css', package_name) if package.manifest: packages.append(package) for package_name in self.packager.packages['js']: package = self.packager.package_for('js', package_name) if package.manifest: packages.append(package) return packages def cache(self): ignore_patterns = getattr(settings, "STATICFILES_IGNORE_PATTERNS", None) if not settings.DEBUG: for package in self.packages: self.package_files.append(package.output_filename) yield str(self.packager.individual_url( package.output_filename)) else: for package in self.packages: for path in self.packager.compile(package.paths): self.package_files.append(path) yield str(self.packager.individual_url(path)) for finder in self.finders: for path, storage in finder.list(ignore_patterns): # Prefix the relative path if the source storage contains it if getattr(storage, 'prefix', None): prefixed_path = os.path.join(storage.prefix, path) else: prefixed_path = path # Dont add any doubles if prefixed_path not in self.package_files: self.package_files.append(prefixed_path) yield str(self.packager.individual_url(prefixed_path))
class PipelineManifest(Manifest): def __init__(self): self.packager = Packager() self.packages = self.collect_packages() def collect_packages(self): packages = [] for package_name in self.packager.packages['css']: package = self.packager.package_for('css', package_name) if package['manifest']: packages.append(package) for package_name in self.packager.packages['js']: package = self.packager.package_for('js', package_name) if package['manifest']: packages.append(package) return packages def cache(self): if settings.PIPELINE: for package in self.packages: filename_base, filename = os.path.split(package['output']) version = self.packager.versioning.version_from_file( filename_base, filename) output_filename = self.packager.versioning.output_filename( package['output'], version) yield str(self.packager.individual_url(output_filename)) else: for package in self.packages: for path in self.packager.compile(package['paths']): yield str(self.packager.individual_url(path)) def revision(self): versions = [] if settings.PIPELINE: for package in self.packages: filename_base, filename = os.path.split(package['output']) version = self.packager.versioning.version_from_file( filename_base, filename) versions.append(str(version)) else: for package in self.packages: version = self.packager.versioning.version(package['paths']) versions.append(str(version)) versions.sort() return versions[-1]
def test_periods_safe_individual_url(self): """Check that the periods in file names do not get replaced by individual_url when PIPELINE_ROOT/STATIC_ROOT is not set, such as in development """ settings.PIPELINE_ROOT = settings.STATIC_ROOT = settings.MEDIA_ROOT = "" packager = Packager() filename = os.path.join(settings.PIPELINE_ROOT, u"js/application.js") individual_url = packager.individual_url(filename) self.assertEqual(individual_url, "http://localhost/static/js/application.js")
def test_periods_safe_individual_url(self): """Check that the periods in file names do not get replaced by individual_url when PIPELINE_ROOT/STATIC_ROOT is not set, such as in development """ settings.PIPELINE_ROOT = settings.STATIC_ROOT = settings.MEDIA_ROOT = "" packager = Packager() filename = os.path.join(settings.PIPELINE_ROOT, u'js/application.js') individual_url = packager.individual_url(filename) self.assertEqual(individual_url, "http://localhost/static/js/application.js")
class PipelineManifest(Manifest): def __init__(self): self.packager = Packager() self.packages = self.collect_packages() def collect_packages(self): packages = [] for package_name in self.packager.packages['css']: package = self.packager.package_for('css', package_name) if package['manifest']: packages.append(package) for package_name in self.packager.packages['js']: package = self.packager.package_for('js', package_name) if package['manifest']: packages.append(package) return packages def cache(self): if settings.PIPELINE: for package in self.packages: filename_base, filename = os.path.split(package['output']) version = self.packager.versioning.version_from_file(filename_base, filename) output_filename = self.packager.versioning.output_filename(package['output'], version) yield str(self.packager.individual_url(output_filename)) else: for package in self.packages: for path in self.packager.compile(package['paths']): yield str(self.packager.individual_url(path)) def revision(self): versions = [] if settings.PIPELINE: for package in self.packages: filename_base, filename = os.path.split(package['output']) version = self.packager.versioning.version_from_file(filename_base, filename) versions.append(str(version)) else: for package in self.packages: version = self.packager.versioning.version(package['paths']) versions.append(str(version)) versions.sort() return versions[-1]