Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
168 commits
Select commit Hold shift + click to select a range
a69c6b2
initial add config app with Plugin model
MyPyDavid Sep 30, 2025
6fd509e
core: add rdmo.config to settings
MyPyDavid Sep 30, 2025
0bee499
config: add plugin_settings JSONField
MyPyDavid Oct 15, 2025
92d2743
config(admin): update fields and re-use ElementAdminForm
MyPyDavid Oct 15, 2025
58a2493
config(tests): initial add tests for plugins
MyPyDavid Oct 16, 2025
e3f305c
config(migrations): add 0001_initial again
MyPyDavid Oct 16, 2025
24aa4b2
config(viewsets): add v1-config to api and plugins viewset
MyPyDavid Oct 20, 2025
eda7b76
config(plugin): add managers and plugin_type property
MyPyDavid Oct 20, 2025
20a7dfa
config(commands): add check_plugins
MyPyDavid Oct 20, 2025
ad8e81f
config(tests): add model, admin, validator, viewset tests
MyPyDavid Oct 20, 2025
f2af2f6
questions(migrations): fix 0032_meta by adding dependency to domain.0038
MyPyDavid Oct 21, 2025
31b3e77
testing: add mock plugins and config fixtures
MyPyDavid Oct 27, 2025
0cbcf39
config(tests): update and fix tests
MyPyDavid Oct 27, 2025
70b0226
config(plugin): add initialize_class method
MyPyDavid Oct 27, 2025
941e90e
rules: add config.plugin model and object perms
MyPyDavid Oct 27, 2025
d678d8c
style: add eof newline
MyPyDavid Oct 27, 2025
6686870
style: add newline
MyPyDavid Oct 27, 2025
d571089
config(apps): call it Config
MyPyDavid Oct 27, 2025
4054ab7
core(settings): add PLUGINS setting with default list
MyPyDavid Nov 4, 2025
7194446
config(commands): add setup_plugins
MyPyDavid Nov 6, 2025
5f604af
testing: add config fixture and mock plugins
MyPyDavid Nov 6, 2025
1b2fd4a
config(checks): add plugin settings check
MyPyDavid Nov 6, 2025
53b79e1
config(plugins): refactor from core and update utils
MyPyDavid Nov 6, 2025
6dcbb1a
core(settings): remove deprecated plugin settings
MyPyDavid Nov 6, 2025
c874605
core(plugins): revert refactor to config
MyPyDavid Nov 6, 2025
860dcfc
Move mock SimpleProviders to testing
MyPyDavid Nov 6, 2025
6a78c1c
options(viewsets): handle missing provider setting
MyPyDavid Nov 6, 2025
41749a0
management(rules): fix plugin toggle site pred
MyPyDavid Nov 7, 2025
590c93b
config(plugins): add support for xml import
MyPyDavid Nov 7, 2025
34df5bb
core(managers): add filter-for-... mixins and refactor
MyPyDavid Nov 11, 2025
ac52f8d
core(constants): add config.plugin to PERMISSIONS
MyPyDavid Nov 11, 2025
ae46ee4
config(plugin): add PluginManager to model
MyPyDavid Nov 11, 2025
abfd661
Add python_path and plugin_type to PluginSerializer
MyPyDavid Nov 11, 2025
621f0b8
Fix mocked plugin in test
MyPyDavid Nov 11, 2025
52e30c1
testing: add rdmo internal classes to plugin setting and fixtures
MyPyDavid Nov 11, 2025
c066eeb
Add url_name field to Plugin model
MyPyDavid Nov 12, 2025
6740d9f
Add default to url_name field
MyPyDavid Nov 12, 2025
c72b5e0
Update and refactor checks and commands
MyPyDavid Nov 12, 2025
47b70c8
testing: update plugin settings and fixtures
MyPyDavid Nov 12, 2025
d88ad7e
Add url_name and plugin_settings to PluginSerializer
MyPyDavid Nov 12, 2025
a260962
Update and refactor config utils and methods
MyPyDavid Nov 12, 2025
23a4043
Use new plugins in projects
MyPyDavid Nov 12, 2025
6141ea2
config: refactor plugin related parts
MyPyDavid Nov 14, 2025
1e47aa7
config(commands): fix get or initialize in setup_plugins
MyPyDavid Nov 14, 2025
857a750
config(plugin): add for_context to PluginManager
MyPyDavid Nov 14, 2025
77b4a81
Add plugin_type field to Plugin
MyPyDavid Nov 14, 2025
78ec30f
config(tests): update tests
MyPyDavid Nov 14, 2025
b0483d3
Add plugins m2m field to OptionSet
MyPyDavid Nov 14, 2025
3a7f7fb
Remove args from core.plugins.Plugin and add plugin_type to inheritin…
MyPyDavid Nov 14, 2025
f79f7ea
Update initialize_class method on Plugin
MyPyDavid Nov 14, 2025
bea22ba
Add support for new Plugin objects in projects
MyPyDavid Nov 14, 2025
6f3c52d
testing: remove legacy plugin settings from base.py settings
MyPyDavid Nov 14, 2025
22cf914
config(checks): update output and add tests
MyPyDavid Nov 19, 2025
9a3dc4d
config(tests): add fixture to enable legacy settings
MyPyDavid Nov 19, 2025
6af98c1
update Plugin model, use string import for Catalog
MyPyDavid Nov 19, 2025
f8581ab
add url_name to Plugin import
MyPyDavid Nov 19, 2025
dc3d468
update detect plugin type
MyPyDavid Nov 19, 2025
97a67dd
move legacy Plugin base class from core to config
MyPyDavid Nov 19, 2025
1e45a87
use plugins instead of OptionSet.provider
MyPyDavid Nov 19, 2025
74f785e
testing(config): fix fixtures and add plugin_type
MyPyDavid Nov 24, 2025
5711939
testing(config): add URLImport plugin
MyPyDavid Nov 24, 2025
7eb3f23
testing(settings): add URLImport plugin
MyPyDavid Nov 24, 2025
60c018b
testing(fixtures): add simple plugin to optionset
MyPyDavid Nov 24, 2025
50e329e
Add filters for format and settings to Plugin manager
MyPyDavid Nov 24, 2025
a6141b8
Add PluginPythonPathValidator
MyPyDavid Nov 24, 2025
2ee8dfb
style: rename unused var
MyPyDavid Nov 24, 2025
e122d12
Update project imports test
MyPyDavid Nov 24, 2025
46d90e4
Use Plugin queryset for project imports action
MyPyDavid Nov 24, 2025
322b06e
Use Plugin filter query for export view
MyPyDavid Nov 24, 2025
67b7668
Use Plugin filter query for snapshot export
MyPyDavid Nov 24, 2025
c6995e3
Use Plugin filter for integration issue provider
MyPyDavid Nov 24, 2025
37b9fe1
testing(fixtures): add simple issue provider to config
MyPyDavid Nov 24, 2025
b3e8696
Use only ForSiteQuerySet mixin in PluginQuerySet
MyPyDavid Dec 8, 2025
d8863f2
Clean up in config app
MyPyDavid Dec 8, 2025
468be24
Update Plugin manager
MyPyDavid Dec 8, 2025
647e04c
Use for_context filter for Plugin in projects
MyPyDavid Dec 8, 2025
a636688
tests: add catalog 1 to plugin fixtures
MyPyDavid Dec 8, 2025
1a4cb29
Update get export plugin in project and snaphsot export view
MyPyDavid Dec 8, 2025
44d4a06
tests: add catalog 1 to all plugin fixtures
MyPyDavid Dec 8, 2025
afd63eb
tests: fix assert in prune projects test
MyPyDavid Dec 8, 2025
6b18836
Use Plugin filter in integration form
MyPyDavid Dec 8, 2025
8a926ca
Use Plugin filter in export projects command
MyPyDavid Dec 8, 2025
e849e0c
Use Plugin filter in oauth callbck view
MyPyDavid Dec 8, 2025
419a958
Clean up legacy get_plugin
MyPyDavid Dec 8, 2025
2197c3c
Add Plugin to management UI
MyPyDavid Dec 8, 2025
2ad605f
Fix typo in config managers
MyPyDavid Dec 9, 2025
11497d6
Fix mocked plugin in test
MyPyDavid Dec 9, 2025
1f769b2
Fix timestamps in config fixtures
MyPyDavid Dec 9, 2025
37531d0
Add get_plugin_python_paths util func
MyPyDavid Dec 10, 2025
f91b401
Use get_plugin_python_paths as validation in admin and api
MyPyDavid Dec 10, 2025
f3d6c74
Use Select for python_path field in EditPlugin
MyPyDavid Dec 10, 2025
55c8ee3
Use enum constant for internal plugin types
MyPyDavid Dec 19, 2025
07a1dc9
Clean up use of plugin types
MyPyDavid Dec 22, 2025
1e51b20
Update setup plugins script
MyPyDavid Dec 22, 2025
64e5fd4
Rename function
MyPyDavid Dec 22, 2025
185124e
Use variables directly from options kwargs
MyPyDavid Dec 22, 2025
152bb71
Clean up comment
MyPyDavid Dec 22, 2025
b031229
Clean up newline
MyPyDavid Dec 22, 2025
e2f897a
Add newline
MyPyDavid Dec 22, 2025
210e2e9
Clean up and refactor config app
MyPyDavid Dec 23, 2025
0a8fea6
Clean up and refactor plugins in projects
MyPyDavid Dec 23, 2025
ba79555
Remove queryset that uses OPTIONSET_PROVIDERS
MyPyDavid Dec 23, 2025
56a0169
Clean up and refactor plugins in services
MyPyDavid Dec 23, 2025
81e1020
Add queryset from plugins to ProviderViewSet and add test
MyPyDavid Dec 23, 2025
fd05d60
Clean up in config.legacy
MyPyDavid Dec 23, 2025
e688fbf
Add support for default uri prefix to plugins
MyPyDavid Dec 23, 2025
cc06857
Use meta model name instead
MyPyDavid Dec 23, 2025
b436ad4
Remove CSV and JSON exports from PLUGINS
MyPyDavid Dec 23, 2025
cc36b65
Clean up config.helpers and imported annotations
MyPyDavid Dec 23, 2025
4fd128f
Do not raise from Exception in config
MyPyDavid Dec 23, 2025
823d847
Make str return just uri for Plugin
MyPyDavid Dec 23, 2025
a424622
Improve error handling for setup plugins
MyPyDavid Dec 23, 2025
c96df3c
Use try except DoesNotExist for IntegrationCreateView
MyPyDavid Jan 8, 2026
a1e1009
Add jsonfield_contains helper and use it in config.managers
MyPyDavid Jan 8, 2026
ea499c1
Add plugin help and fix settings in front-end
MyPyDavid Jan 8, 2026
ecc8600
Refactor to get plugin type from Plugin class
MyPyDavid Jan 8, 2026
c619e2b
Remove OptionSet.provider_key and replace with plugins
MyPyDavid Jan 9, 2026
2fc286a
Add renderers and export for Plugins
MyPyDavid Jan 9, 2026
c675927
Add read-only plugin_meta field to Plugin
MyPyDavid Jan 12, 2026
15a9432
tests: add plugin_meta to config fixtures
MyPyDavid Jan 12, 2026
4090c1c
Refactor and clean up use of plugins
MyPyDavid Jan 12, 2026
d26a24d
Add admin case to upload accept test
MyPyDavid Jan 12, 2026
d03b421
Use plugin_meta for search and refresh
MyPyDavid Jan 12, 2026
80c4011
Rename qs to queryset
MyPyDavid Jan 12, 2026
de7075c
Remove --from-settings arg from setup plugins
MyPyDavid Jan 12, 2026
a67984c
Add setting PLUGIN_META_ATTRIBUTES and add support for plugin dist ve…
MyPyDavid Jan 15, 2026
18e2594
Fix and update setup_plugins command
MyPyDavid Jan 15, 2026
2125da7
Fix fix filter_for_project in Plugin manager
jochenklar Mar 30, 2026
fa329b2
Add export/import plugins to project view
jochenklar Mar 30, 2026
e7d27d1
Add RDMOSnapshotXMLExport to default export plugins
jochenklar Mar 30, 2026
0d3c92b
Refactor project import mixins
jochenklar Mar 30, 2026
d661133
Add SimpleURLImportPlugin to testing plugins
jochenklar Mar 30, 2026
1281d14
Use has_provider in project OptionSetSerializer
jochenklar Mar 30, 2026
b5d4b91
Fix format
jochenklar Mar 30, 2026
8a8e4d7
Fix ValueConflictValidator
jochenklar Mar 30, 2026
0342408
Add project export action and share export plugin resolution
MyPyDavid Apr 29, 2026
3db1fd1
Do not filter plugins for available and fix export plugin tests
MyPyDavid Apr 29, 2026
fbde463
Refactor and simplify Plugin.save method
MyPyDavid Apr 30, 2026
6f739a5
Remove available and plugin_settings from PluginExportSerializer
MyPyDavid Apr 30, 2026
249d143
Refactor get plugin python paths to config
MyPyDavid Apr 30, 2026
bb00a60
Refactor and simplify legacy plugin func
MyPyDavid Apr 30, 2026
28cf9f8
Do not filter for format on Plugins, use url_name and add filter for …
MyPyDavid Apr 30, 2026
8d7c8a9
Add choices to Plugin.plugin_type migration
MyPyDavid Apr 30, 2026
bec4327
Fix get model field meta for plugin python_path
MyPyDavid Apr 30, 2026
c2d5201
Update Plugin js components
MyPyDavid Apr 30, 2026
09edc32
Fix and refactor Plugin validators
MyPyDavid Apr 30, 2026
efd57b8
Call self.get_object in the Plugin detail export action
MyPyDavid Apr 30, 2026
7fc7b0d
Clean up Legacy Plugin settings and move meta attributes to config.co…
MyPyDavid Apr 30, 2026
8ec7af4
Update and improve Plugin js UI components
MyPyDavid Apr 30, 2026
71e802c
Refactor setup_plugins and add legacy_setup_plugins command
MyPyDavid May 26, 2026
407aa25
Rename queryset method for_context to filter_plugins_for_project and …
MyPyDavid May 26, 2026
392f29c
Replace Integration.provider_key with FK to plugin
MyPyDavid May 26, 2026
f22b3ac
Use url_name for project integration plugins
MyPyDavid May 27, 2026
7180649
Resolve integration plugins in the viewset
MyPyDavid May 27, 2026
cd22e31
Fix undefined name 'request', missing self
MyPyDavid Jul 9, 2026
774335f
Bump version in plugin deprecation message
MyPyDavid Jul 9, 2026
1f0667e
Rename plugin for testing to SimpleOptionSetProvider
MyPyDavid Jul 9, 2026
dbd61c1
Use RDMOSnapshotXMLExport for testing plugin
MyPyDavid Jul 9, 2026
bd9effb
Return cleaned_data and call super() in PluginAdminForm
MyPyDavid Jul 9, 2026
6101e5d
Keep migrations simple for RemoveField of provider_key
MyPyDavid Jul 10, 2026
fe5831f
Add command to dump a mapping of provider_key with legacy plugin sett…
MyPyDavid Jul 10, 2026
ce2fe0c
Refactor config.constants
MyPyDavid Jul 10, 2026
9ba7e7f
Implement Plugin for Integration providers and add project providers …
MyPyDavid Jul 10, 2026
778a094
Add support for configurable Plugin settings
MyPyDavid Jul 10, 2026
377461a
Add plugins and plugin_uris to OptionSetNestedSerializer
MyPyDavid Jul 10, 2026
301579c
Add plugins and optionset_plugins to prefetch lookups
MyPyDavid Jul 10, 2026
caf088f
Add support for import from JSONfield
MyPyDavid Jul 10, 2026
3910514
Refactor and fix snapshot(and project) export/import via plugins
MyPyDavid Jul 10, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 57 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,62 @@
# Changelog 📔

## Unreleased

### Important ⚠️

* Optionset and integration provider settings are moved to plugins. The
migrations remove the legacy `OptionSet.provider_key` and
`Integration.provider_key` fields, but do not automatically assign plugins to
existing optionsets or integrations. Before upgrading, administrators should
back up the affected objects, for example with:

```shell
python manage.py dumpdata options.OptionSet -o dumps/optionsets.json --indent 2
python manage.py dumpdata projects.Integration -o dumps/project_integrations.json --indent 2
python manage.py dump_legacy_plugin_assignments -o dumps/legacy_plugin_assignments.json
```

After the upgrade, run `legacy_setup_plugins` or `setup_plugins` as needed
and assign the corresponding plugins manually to the affected option sets and
project integrations.

* Plugins can now declare a `settings_namespace` and optionally a
`settings_form_class`. Plugin runtime settings are resolved from
`Plugin.plugin_settings` first, then from explicitly namespaced Django
settings in `local.py`, and finally from plugin defaults or form initial
values. Secrets such as client secrets or signing keys should stay in
deployment settings, while non-secret plugin settings can be managed in the
database when desired.

A plugin can define its settings contract like this:

```python
from django import forms

class MyImportPlugin(Import):
settings_namespace = 'MY_IMPORT_PLUGIN'
settings_defaults = {
'TIMEOUT': 10,
}

class SettingsForm(forms.Form):
API_URL = forms.URLField(required=True)
CLIENT_SECRET = forms.CharField(required=True)
TIMEOUT = forms.IntegerField(required=False, initial=10)

settings_form_class = SettingsForm
```

The corresponding deployment settings can stay in `local.py`, especially for
secrets:

```python
MY_IMPORT_PLUGIN = {
'API_URL': 'https://example.org/api',
'CLIENT_SECRET': 'change-me',
}
```

## [RDMO 2.5.1](https://github.com/rdmorganiser/rdmo/releases/tag/2.5.1) (July 3, 2026)

### Bug fixes 🐛
Expand Down
3 changes: 2 additions & 1 deletion conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ def fixtures():
'sites',
'tasks',
'users',
'views'
'views',
'config'
}
fixtures = []
for fixture_dir in settings.FIXTURE_DIRS:
Expand Down
Loading
Loading