81 lines
3.3 KiB
Python
81 lines
3.3 KiB
Python
import os, os.path as osp
|
|
|
|
from django.conf import settings
|
|
from django.views.static import serve as django_serve
|
|
from django.views.decorators.cache import cache_page
|
|
from django.db.models import get_apps
|
|
from django.core.cache import cache
|
|
from django.http import Http404, HttpResponse
|
|
|
|
def serve(request, app, path, show_indexes=True):
|
|
if request.method == 'GET':
|
|
apps = get_apps()
|
|
for x in apps:
|
|
app_dir = osp.dirname(x.__file__)
|
|
module = x.__name__
|
|
if app == module.split('.')[-2]: #we get the models module here
|
|
if app_dir.endswith("models"):
|
|
# this can happen only in case when models are an directory
|
|
app_dir = osp.split(app_dir)[0]
|
|
media_dir = osp.join(app_dir, "media", app)
|
|
if not osp.isdir(media_dir):
|
|
media_dir = osp.join(app_dir, "media")
|
|
asset = osp.join(media_dir, path)
|
|
if osp.exists(asset):
|
|
return django_serve(request, path, document_root=media_dir, show_indexes=show_indexes)
|
|
#continue
|
|
return django_serve(request, app+"/"+path, document_root=settings.MEDIA_ROOT, show_indexes=show_indexes)
|
|
elif request.method == 'POST':
|
|
data = request.POST.get("data", "")
|
|
apps = get_apps()
|
|
for x in apps:
|
|
app_dir = osp.dirname(x.__file__)
|
|
module = x.__name__
|
|
if app == module.split('.')[-2]: #we get the models module here
|
|
media_dir = osp.join(app_dir, "media")
|
|
asset = osp.join(media_dir, path)
|
|
if osp.exists(asset):
|
|
f = file(asset, 'w')
|
|
for line in data.split('\n'):
|
|
line.strip()
|
|
line = line[:-1]
|
|
if line:
|
|
selector, datap = line.split('{')
|
|
print >>f, selector, '{'
|
|
datap.strip()
|
|
lines = datap.split(';')
|
|
if lines:
|
|
print >>f, " "+";\n ".join(lines)
|
|
print >>f, '}\n'
|
|
f.close()
|
|
|
|
return django_serve(request, path, document_root=media_dir, show_indexes=show_indexes)
|
|
continue
|
|
|
|
|
|
def get_file(path):
|
|
app = path.split('/')[2]
|
|
path = "/".join(path.split('/')[3:])
|
|
apps = get_apps()
|
|
for x in apps:
|
|
app_dir = osp.dirname(x.__file__)
|
|
module = x.__name__
|
|
if app == module.split('.')[-2]: #we get the models module here
|
|
media_dir = osp.join(app_dir, "media")
|
|
asset = osp.join(media_dir, path)
|
|
if osp.exists(asset):
|
|
print osp.join(media_dir, path)
|
|
return osp.join(media_dir, path)
|
|
return osp.join(settings.MEDIA_ROOT, app+"/"+path)
|
|
|
|
@cache_page(24*60*60)
|
|
def serve_cached_asset(request, asset):
|
|
name, ext = asset.split('.')
|
|
files = cache.get(name)
|
|
if ext == 'js':
|
|
response = HttpResponse("\n".join([file(get_file(path)).read() for path in files]), mimetype="text/javascript")
|
|
return response
|
|
elif ext == 'css':
|
|
response = HttpResponse("\n".join([file(get_file(path)).read() for path in files]), mimetype="text/css")
|
|
return response
|
|
raise Http404() |