mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Move default caching_config to PluginConfig class
This commit is contained in:
@ -360,17 +360,28 @@ template_extensions = [AddSiteAnimal, AddRackAnimal]
|
||||
|
||||
## Caching Configuration
|
||||
|
||||
By default, all query operations within a plugin are cached. To change this, define a caching configuration under the PluginConfig class' `caching_config` attribute. An example configuration is below:
|
||||
By default, all query operations within a plugin are cached. To change this, define a caching configuration under the PluginConfig class' `caching_config` attribute. All configuration keys will be applied within the context of the plugin; there is no need to include the plugin name. An example configuration is below:
|
||||
|
||||
```python
|
||||
class MyPluginConfig(PluginConfig):
|
||||
...
|
||||
caching_config = {
|
||||
'my_plugin.foo': {
|
||||
'foo': {
|
||||
'ops': 'get',
|
||||
'timeout': 60 * 15,
|
||||
},
|
||||
'*': {
|
||||
'ops': 'all',
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
To disable caching for your plugin entirely, set:
|
||||
|
||||
```python
|
||||
caching_config = {
|
||||
'*': None
|
||||
}
|
||||
```
|
||||
|
||||
See the [django-cacheops](https://github.com/Suor/django-cacheops) documentation for more detail on configuring caching.
|
||||
|
@ -44,8 +44,10 @@ class PluginConfig(AppConfig):
|
||||
# Middleware classes provided by the plugin
|
||||
middleware = []
|
||||
|
||||
# Caching configuration
|
||||
caching_config = {}
|
||||
# Cacheops configuration. Cache all operations by default.
|
||||
caching_config = {
|
||||
'*': {'ops': 'all'},
|
||||
}
|
||||
|
||||
# Default integration paths. Plugin authors can override these to customize the paths to
|
||||
# integrated components.
|
||||
|
@ -689,16 +689,8 @@ for plugin_name in PLUGINS:
|
||||
PLUGINS_CONFIG[plugin_name][setting] = value
|
||||
|
||||
# Apply cacheops config
|
||||
plugin_cacheops = plugin_config.caching_config
|
||||
if plugin_cacheops:
|
||||
if type(plugin_cacheops) is not dict:
|
||||
raise ImproperlyConfigured(f"Plugin {plugin_name} caching_config must be a dictionary.")
|
||||
for key in plugin_cacheops.keys():
|
||||
# Validate config is only being set for the given plugin
|
||||
app = key.split('.')[0]
|
||||
if app != plugin_name:
|
||||
raise ImproperlyConfigured(f"Plugin {plugin_name} may not modify caching config for another app: {app}")
|
||||
else:
|
||||
# Apply the default config like all other core apps
|
||||
plugin_cacheops = {f"{plugin_name}.*": {'ops': 'all'}}
|
||||
CACHEOPS.update(plugin_cacheops)
|
||||
if type(plugin_config.caching_config) is not dict:
|
||||
raise ImproperlyConfigured(f"Plugin {plugin_name} caching_config must be a dictionary.")
|
||||
CACHEOPS.update({
|
||||
f"{plugin_name}.{key}": value for key, value in plugin_config.caching_config.items()
|
||||
})
|
||||
|
Reference in New Issue
Block a user