1
0
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:
Jeremy Stretch
2020-04-01 12:10:19 -04:00
parent b2f4ef06c7
commit 0432b1a6f9
3 changed files with 22 additions and 17 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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()
})