Rebuild assetcache on inotify events.
parent
b52edce516
commit
d0d67085e3
|
@ -1,6 +1,8 @@
|
||||||
import os
|
import os
|
||||||
import zlib
|
import zlib
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
import gevent
|
||||||
|
import gevent_inotifyx as inotify
|
||||||
|
|
||||||
ASSET_DIR = 'files/assets'
|
ASSET_DIR = 'files/assets'
|
||||||
ASSET_SUBDIRS = ['/css', '/js']
|
ASSET_SUBDIRS = ['/css', '/js']
|
||||||
|
@ -29,4 +31,19 @@ def assetcache_path(asset_path):
|
||||||
|
|
||||||
return url
|
return url
|
||||||
|
|
||||||
|
def assetcache_watch_directories(asset_dir, subdirs):
|
||||||
|
fd = inotify.init()
|
||||||
|
try:
|
||||||
|
for sd in subdirs:
|
||||||
|
inotify.add_watch(fd, asset_dir + sd, inotify.IN_CLOSE_WRITE)
|
||||||
|
while True:
|
||||||
|
for event in inotify.get_events(fd, 0):
|
||||||
|
print("Rebuilding assetcache: " + event.name, flush=True)
|
||||||
|
assetcache_build(asset_dir, subdirs)
|
||||||
|
break
|
||||||
|
gevent.sleep(0.5)
|
||||||
|
finally:
|
||||||
|
os.close(fd)
|
||||||
|
|
||||||
assetcache_build(ASSET_DIR, ASSET_SUBDIRS)
|
assetcache_build(ASSET_DIR, ASSET_SUBDIRS)
|
||||||
|
gevent.spawn(assetcache_watch_directories, ASSET_DIR, ASSET_SUBDIRS)
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
from files.__main__ import app, cache
|
from files.__main__ import app, cache
|
||||||
|
from jinja2 import pass_context
|
||||||
from .get import *
|
from .get import *
|
||||||
from os import listdir, environ
|
from os import listdir, environ
|
||||||
from .const import *
|
from .const import *
|
||||||
|
@ -18,7 +19,8 @@ def post_embed(id, v):
|
||||||
|
|
||||||
|
|
||||||
@app.template_filter("asset")
|
@app.template_filter("asset")
|
||||||
def template_asset(asset_path):
|
@pass_context
|
||||||
|
def template_asset(ctx, asset_path):
|
||||||
return assetcache_path(asset_path)
|
return assetcache_path(asset_path)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -7,6 +7,7 @@ max_requests = 30000
|
||||||
max_requests_jitter = 30000
|
max_requests_jitter = 30000
|
||||||
|
|
||||||
reload = True
|
reload = True
|
||||||
|
reload_engine = 'poll'
|
||||||
#print_config = True
|
#print_config = True
|
||||||
|
|
||||||
def worker_abort(worker):
|
def worker_abort(worker):
|
||||||
|
@ -27,17 +28,3 @@ def worker_abort(worker):
|
||||||
|
|
||||||
import os
|
import os
|
||||||
os.abort()
|
os.abort()
|
||||||
|
|
||||||
def config_reload_extra_files():
|
|
||||||
import os
|
|
||||||
extra_files = []
|
|
||||||
asset_dirs = ['files/assets/css/', 'files/assets/js/']
|
|
||||||
|
|
||||||
for dir in asset_dirs:
|
|
||||||
fnames = os.listdir(dir)
|
|
||||||
paths = map(lambda x: dir + x, fnames)
|
|
||||||
extra_files.extend(paths)
|
|
||||||
|
|
||||||
return extra_files
|
|
||||||
|
|
||||||
reload_extra_files = config_reload_extra_files()
|
|
||||||
|
|
|
@ -9,9 +9,11 @@ Flask-Mail
|
||||||
Flask-Socketio
|
Flask-Socketio
|
||||||
gevent
|
gevent
|
||||||
gevent-websocket
|
gevent-websocket
|
||||||
|
gevent_inotifyx
|
||||||
greenlet
|
greenlet
|
||||||
gunicorn
|
gunicorn
|
||||||
imagehash
|
imagehash
|
||||||
|
inotify
|
||||||
lxml
|
lxml
|
||||||
mistletoe
|
mistletoe
|
||||||
matplotlib
|
matplotlib
|
||||||
|
@ -30,4 +32,4 @@ pusher_push_notifications
|
||||||
pytest
|
pytest
|
||||||
youtube-dl
|
youtube-dl
|
||||||
yattag
|
yattag
|
||||||
webptools
|
webptools
|
||||||
|
|
Loading…
Reference in New Issue