def get_dev_output(self, name): config = OFFLINE_MANIFEST[name] if isinstance(config, (tuple, list)): config = {'cache': config} elif isinstance(config, basestring): config = {'cache': (config, )} cache_pattern = prepare_patterns(get_tuple(config, 'cache', '.*'), 'OFFLINE_MANIFEST[%s]' % name) exclude = prepare_patterns(get_tuple(config, 'exclude'), "OFFLINE_MANIFEST[%s]['exclude']" % name) cache = set() for item in get_media_mapping().keys(): if cache_pattern.match(item) and not exclude.match(item): cache.add(item) cache -= set(OFFLINE_MANIFEST.keys()) # include raw url entries in cache section cache_urls = config.get('cache_urls', []) network = get_tuple(config, 'network', ('*', )) fallback = get_tuple(config, 'fallback') template = get_tuple( config, 'template') + ('mediagenerator/manifest/' + name, 'mediagenerator/manifest/base.manifest') content = render_to_string( template, { 'cache': cache, 'cache_urls': cache_urls, 'network': network, 'fallback': fallback, }) return content, 'text/cache-manifest'
def get_dev_output(self, name): config = OFFLINE_MANIFEST[name] if isinstance(config, (tuple, list)): config = {'cache': config} elif isinstance(config, basestring): config = {'cache': (config,)} cache_pattern = prepare_patterns(get_tuple(config, 'cache', '.*'), 'OFFLINE_MANIFEST[%s]' % name) exclude = prepare_patterns(get_tuple(config, 'exclude'), "OFFLINE_MANIFEST[%s]['exclude']" % name) cache = set() for item in get_media_mapping().keys(): if cache_pattern.match(item) and not exclude.match(item): cache.add(item) cache -= set(OFFLINE_MANIFEST.keys()) # include raw url entries in cache section cache_urls = config.get('cache_urls', []) network = get_tuple(config, 'network', ('*',)) fallback = get_tuple(config, 'fallback') template = get_tuple(config, 'template') + ( 'mediagenerator/manifest/' + name, 'mediagenerator/manifest/base.manifest' ) content = render_to_string(template, { 'cache': cache, 'cache_urls': cache_urls, 'network': network, 'fallback': fallback, }) return content, 'text/cache-manifest'
def get_dev_output(self, name): config = OFFLINE_MANIFEST[name] if isinstance(config, (tuple, list)): config = {"cache": config} elif isinstance(config, basestring): config = {"cache": (config,)} cache_pattern = prepare_patterns(get_tuple(config, "cache", ".*"), "OFFLINE_MANIFEST[%s]" % name) exclude = prepare_patterns(get_tuple(config, "exclude"), "OFFLINE_MANIFEST[%s]['exclude']" % name) cache = set() for item in get_media_mapping().keys(): if cache_pattern.match(item) and not exclude.match(item): cache.add(item) cache -= set(OFFLINE_MANIFEST.keys()) network = get_tuple(config, "network", ("*",)) fallback = get_tuple(config, "fallback") template = get_tuple(config, "template") + ( "mediagenerator/manifest/" + name, "mediagenerator/manifest/base.manifest", ) content = render_to_string(template, {"cache": cache, "network": network, "fallback": fallback}) return content, "text/cache-manifest"
from django.conf import settings from hashlib import sha1 from mediagenerator.base import Generator from mediagenerator.utils import get_media_dirs, find_file, prepare_patterns from mimetypes import guess_type import os import sys COPY_MEDIA_FILETYPES = getattr( settings, 'COPY_MEDIA_FILETYPES', ('gif', 'jpg', 'jpeg', 'png', 'svg', 'svgz', 'ico', 'swf', 'ttf', 'otf', 'eot', 'woff', 'json', 'eqcss')) IGNORE_PATTERN = prepare_patterns( getattr(settings, 'IGNORE_MEDIA_COPY_PATTERNS', ()), 'IGNORE_MEDIA_COPY_PATTERNS') class CopyFiles(Generator): def get_dev_output(self, name): path = find_file(name) fp = open(path, 'rb') content = fp.read() fp.close() mimetype = guess_type(path)[0] return content, mimetype def get_dev_output_names(self): media_files = {} for root in get_media_dirs(): self.collect_copyable_files(media_files, root)
import posixpath from hashlib import sha1 from django.conf import settings from mimetypes import guess_type from base64 import b64encode from mediagenerator import settings as appsettings from mediagenerator.generators.bundles.base import FileFilter from mediagenerator.utils import prepare_patterns, find_file from mediagenerator.utils import media_urls JS_URL_PREFIX = getattr(settings, "MEDIA_JS_URL_FILTER_PREFIX", r"OTA\.") GENERATE_DATA_URIS = getattr(settings, "GENERATE_DATA_URIS", False) MAX_DATA_URI_FILE_SIZE = getattr(settings, "MAX_DATA_URI_FILE_SIZE", 12 * 1024) IGNORE_PATTERN = prepare_patterns( getattr(settings, "IGNORE_DATA_URI_PATTERNS", (r".*\.htc",)), "IGNORE_DATA_URI_PATTERNS" ) class UrlFixFilter(FileFilter): def get_dev_output(self, name, variation, content=None): if not content: content = super(UrlFixFilter, self).get_dev_output(name, variation) if name.startswith("admin-media"): return content rewriter = UrlRerwiter(name) return rewriter.rewrite(content)
import posixpath import re url_re = re.compile(r'url\s*\(["\']?([\w\.][^:]*?)["\']?\)', re.UNICODE) # Whether to rewrite CSS URLs, at all REWRITE_CSS_URLS = getattr(settings, 'REWRITE_CSS_URLS', True) # Whether to rewrite CSS URLs relative to the respective source file # or whether to use "absolute" URL rewriting (i.e., relative URLs are # considered absolute with regards to STATICFILES_URL) REWRITE_CSS_URLS_RELATIVE_TO_SOURCE = getattr(settings, 'REWRITE_CSS_URLS_RELATIVE_TO_SOURCE', True) GENERATE_DATA_URIS = getattr(settings, 'GENERATE_DATA_URIS', False) MAX_DATA_URI_FILE_SIZE = getattr(settings, 'MAX_DATA_URI_FILE_SIZE', 12 * 1024) IGNORE_PATTERN = prepare_patterns(getattr(settings, 'IGNORE_DATA_URI_PATTERNS', (r'.*\.htc',)), 'IGNORE_DATA_URI_PATTERNS') class URLRewriter(object): def __init__(self, base_path='./'): if not base_path: base_path = './' self.base_path = base_path def rewrite_urls(self, content): if not REWRITE_CSS_URLS: return content return url_re.sub(self.fixurls, content) def fixurls(self, match): url = match.group(1)
url_re = re.compile(r'url\s*\(["\']?([\w\.][^:]*?)["\']?\)', re.UNICODE) # logger = logging.getLogger(__name__) # Whether to rewrite CSS URLs, at all REWRITE_CSS_URLS = getattr(settings, 'REWRITE_CSS_URLS', True) # Whether to rewrite CSS URLs relative to the respective source file # or whether to use "absolute" URL rewriting (i.e., relative URLs are # considered absolute with regards to STATICFILES_URL) REWRITE_CSS_URLS_RELATIVE_TO_SOURCE = getattr( settings, 'REWRITE_CSS_URLS_RELATIVE_TO_SOURCE', True) GENERATE_DATA_URIS = getattr(settings, 'GENERATE_DATA_URIS', False) MAX_DATA_URI_FILE_SIZE = getattr(settings, 'MAX_DATA_URI_FILE_SIZE', 12 * 1024) IGNORE_PATTERN = prepare_patterns( getattr(settings, 'IGNORE_DATA_URI_PATTERNS', (r'.*\.htc', )), 'IGNORE_DATA_URI_PATTERNS') class URLRewriter: def __init__(self, base_path='./'): self.base_path = base_path or './' def rewrite_urls(self, content): return url_re.sub(self.fixurls, content) if REWRITE_CSS_URLS else content def fixurls(self, match): url = original_url = match.group(1) hashid = ''
from django.conf import settings from hashlib import sha1 from mediagenerator.base import Generator from mediagenerator.utils import get_media_dirs, find_file, prepare_patterns from mimetypes import guess_type import os import sys COPY_MEDIA_FILETYPES = getattr(settings, 'COPY_MEDIA_FILETYPES', ('gif', 'jpg', 'jpeg', 'png', 'svg', 'svgz', 'ico', 'swf', 'ttf', 'otf', 'eot', 'woff')) IGNORE_PATTERN = prepare_patterns(getattr(settings, 'IGNORE_MEDIA_COPY_PATTERNS', ()), 'IGNORE_MEDIA_COPY_PATTERNS') class CopyFiles(Generator): def get_dev_output(self, name): path = find_file(name) fp = open(path, 'rb') content = fp.read() fp.close() mimetype = guess_type(path)[0] return content, mimetype def get_dev_output_names(self): media_files = {} for root in get_media_dirs(): self.collect_copyable_files(media_files, root) for name, source in media_files.items():