Start of ability to have plugins provide static resources!
Note I have not tested any of this yet ;) But we're already on our way: - We've got docs - The hook is there Lots to do still though. But, progress! :) This commit sponsored by Laura Arjona Reina. Thanks larjona!
This commit is contained in:
parent
8ca51d32b6
commit
d6d2c771bd
@ -125,3 +125,22 @@ context... it is added to the actual context of each individual
|
|||||||
template render right before it is run! Because of this you also can
|
template render right before it is run! Because of this you also can
|
||||||
do some powerful and crazy things, such as checking the request object
|
do some powerful and crazy things, such as checking the request object
|
||||||
or other parts of the context before passing them on.
|
or other parts of the context before passing them on.
|
||||||
|
|
||||||
|
|
||||||
|
Adding static resources
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
It's possible to add static resources for your plugin. Say your
|
||||||
|
plugin needs some special javascript and images... how to provide
|
||||||
|
them? Then how to access them? MediaGoblin has a way!
|
||||||
|
|
||||||
|
|
||||||
|
Attaching to the hook
|
||||||
|
+++++++++++++++++++++
|
||||||
|
|
||||||
|
First, you need to register your plugin's resources with the hook.
|
||||||
|
This is pretty easy actually: you just need to provide a function that
|
||||||
|
passes back a PluginStatic object.
|
||||||
|
|
||||||
|
.. automodule:: mediagoblin.tools.staticdirect
|
||||||
|
:members: PluginStatic
|
||||||
|
@ -24,6 +24,7 @@ from mediagoblin import mg_globals
|
|||||||
from mediagoblin.mg_globals import setup_globals
|
from mediagoblin.mg_globals import setup_globals
|
||||||
from mediagoblin.db.open import setup_connection_and_db_from_config, \
|
from mediagoblin.db.open import setup_connection_and_db_from_config, \
|
||||||
check_db_migrations_current, load_models
|
check_db_migrations_current, load_models
|
||||||
|
from mediagoblin.pluginapi import hook_runall
|
||||||
from mediagoblin.tools.workbench import WorkbenchManager
|
from mediagoblin.tools.workbench import WorkbenchManager
|
||||||
from mediagoblin.storage import storage_system_from_config
|
from mediagoblin.storage import storage_system_from_config
|
||||||
|
|
||||||
@ -116,6 +117,12 @@ def get_staticdirector(app_config):
|
|||||||
direct_domains = {None: app_config['direct_remote_path'].strip()}
|
direct_domains = {None: app_config['direct_remote_path'].strip()}
|
||||||
direct_domains['theme'] = app_config['theme_web_path'].strip()
|
direct_domains['theme'] = app_config['theme_web_path'].strip()
|
||||||
|
|
||||||
|
# Let plugins load additional paths
|
||||||
|
for plugin_static in hook_runall("static_setup"):
|
||||||
|
direct_domains[plugin_static['name']] = "%s/%s" % (
|
||||||
|
app_config['plugin_web_path'].rstrip('/'),
|
||||||
|
plugin_static['name'])
|
||||||
|
|
||||||
return staticdirect.StaticDirect(
|
return staticdirect.StaticDirect(
|
||||||
direct_domains)
|
direct_domains)
|
||||||
|
|
||||||
|
@ -61,3 +61,41 @@ class StaticDirect(object):
|
|||||||
def get(self, filepath, domain=None):
|
def get(self, filepath, domain=None):
|
||||||
return '%s/%s' % (
|
return '%s/%s' % (
|
||||||
self.domains[domain], filepath.lstrip('/'))
|
self.domains[domain], filepath.lstrip('/'))
|
||||||
|
|
||||||
|
|
||||||
|
class PluginStatic(object):
|
||||||
|
"""Pass this into the ``'static_setup'`` hook to register your
|
||||||
|
plugin's static directory.
|
||||||
|
|
||||||
|
This has two mandatory attributes that you must pass in on class
|
||||||
|
init:
|
||||||
|
- name: this name will be both used for lookup in "urlgen" for
|
||||||
|
your plugin's static resources and for the subdirectory that
|
||||||
|
it'll be "mounted" to for serving via your web browser. It
|
||||||
|
*MUST* be unique. If writing a plugin bundled with MediaGoblin
|
||||||
|
please use the pattern 'coreplugin__foo' where 'foo' is your
|
||||||
|
plugin name. All external plugins should use their modulename,
|
||||||
|
so if your plugin is 'mg_bettertags' you should also call this
|
||||||
|
name 'mg_bettertags'.
|
||||||
|
- file_path: the directory your plugin's static resources are
|
||||||
|
located in. It's recommended that you use
|
||||||
|
pkg_resources.resource_filename() for this.
|
||||||
|
|
||||||
|
An example of using this::
|
||||||
|
|
||||||
|
from pkg_resources import resource_filename
|
||||||
|
from mediagoblin.tools.staticdirect import PluginStatic
|
||||||
|
|
||||||
|
hooks = {
|
||||||
|
'static_setup': lambda: PluginStatic(
|
||||||
|
'mg_bettertags',
|
||||||
|
resource_filename('mg_bettertags', 'static'))
|
||||||
|
}
|
||||||
|
|
||||||
|
"""
|
||||||
|
def __init__(self, name, file_path):
|
||||||
|
self.name = name
|
||||||
|
self.file_path = file_path
|
||||||
|
|
||||||
|
def __call__(self):
|
||||||
|
return self
|
||||||
|
Loading…
x
Reference in New Issue
Block a user