X-Git-Url: http://git.veekun.com/zzz-spline-frontpage.git/blobdiff_plain/2ff43fe9bb4cb9425c192f336ac30804a11520a2..6d5d8e3f173cfe75a86edc0d663f8f6be3ef4351:/splinext/frontpage/__init__.py diff --git a/splinext/frontpage/__init__.py b/splinext/frontpage/__init__.py index e113e74..9821f9c 100644 --- a/splinext/frontpage/__init__.py +++ b/splinext/frontpage/__init__.py @@ -16,9 +16,12 @@ def add_routes_hook(map, *args, **kwargs): """Hook to inject some of our behavior into the routes configuration.""" map.connect('/', controller='frontpage', action='index') -def load_sources_hook(*args, **kwargs): +def load_sources_hook(config, *args, **kwargs): """Hook to load all the known sources and stuff them in config. Run once, on server startup. + + Frontpage hooks are also passed the `config` hash, as it's not available + during setup. """ # Extract source definitions from config and store as source_name => config update_config = defaultdict(dict) @@ -61,11 +64,17 @@ def load_sources_hook(*args, **kwargs): source_config.setdefault('max_age', global_max_age) # Hooks return a list of sources; combine with running list - sources += run_hooks(hook_name, **source_config) + sources += run_hooks(hook_name, config=config, **source_config) # Save the list of sources, and done config['spline-frontpage.sources'] = sources +def source_cron_hook(*args, **kwargs): + """Hook to pass on cron tics to all sources, should they need it for e.g. + caching. + """ + for source in config['spline-frontpage.sources']: + source.do_cron(*args, **kwargs) class FrontPagePlugin(PluginBase): def controllers(self): @@ -82,6 +91,7 @@ class FrontPagePlugin(PluginBase): return [ ('routes_mapping', Priority.NORMAL, add_routes_hook), ('after_setup', Priority.NORMAL, load_sources_hook), + ('cron', Priority.NORMAL, source_cron_hook), ('frontpage_updates_rss', Priority.NORMAL, FeedSource), ('frontpage_updates_git', Priority.NORMAL, GitSource), ]