38 lines
1.9 KiB
Python
38 lines
1.9 KiB
Python
from md5 import md5
|
|
|
|
from django.conf import settings
|
|
from django.core.cache import cache
|
|
from django.core.urlresolvers import reverse
|
|
|
|
from appmedia.BeautifulSoup import BeautifulSoup, Tag
|
|
|
|
boundary = '*#*'
|
|
|
|
class ReplaceAssets(object):
|
|
def process_response(self, request, response):
|
|
if response['Content-Type'].startswith('text/html') and settings.CACHE_BACKEND not in ['', None, 'dummy:///']:
|
|
soup = BeautifulSoup(response.content)
|
|
head = soup.head
|
|
|
|
#[script.extract() for script in head.findAll(lambda x: x.name == 'script' and 'src' in dict(x.attrs) and x['src'].startswith(settings.MEDIA_URL) )]
|
|
#[css.extract() for css in head.findAll(lambda x: x.name == 'link' and 'href' in dict(x.attrs) and x['href'].startswith(settings.MEDIA_URL) )]
|
|
|
|
scripts = head.findAll(lambda x: x.name == 'script' and 'src' in dict(x.attrs) and x['src'].startswith(settings.MEDIA_URL) )
|
|
css = head.findAll(lambda x: x.name == 'link' and 'href' in dict(x.attrs) and x['href'].startswith(settings.MEDIA_URL) )
|
|
|
|
script_sources = [x['src'] for x in scripts]
|
|
new_script = md5(boundary.join(script_sources)).hexdigest()
|
|
cache.set(new_script, script_sources)
|
|
[x.extract() for x in scripts]
|
|
|
|
css_sources = [x['href'] for x in css]
|
|
new_css = md5(boundary.join(css_sources)).hexdigest()
|
|
cache.set(new_css, css_sources)
|
|
[x.extract() for x in css]
|
|
|
|
tag = Tag(soup, "script", [("type", "text/javascript"), ("src", reverse('cached_asset', kwargs={'asset':new_script+".js"}) )])
|
|
head.insert(0, tag)
|
|
tag = Tag(soup, "link", [("type", "text/css"), ("href", reverse('cached_asset', kwargs={'asset':new_css+".css"})), ('rel', 'stylesheet')])
|
|
head.insert(0, tag)
|
|
response.content = soup.prettify()
|
|
return response |