-
Notifications
You must be signed in to change notification settings - Fork 54
Draft: add rdmo.config app for Plugin model (plugin management)
#1436
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: 2.5.0/release
Are you sure you want to change the base?
Conversation
jochenklar
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great! Lets discuss in the meeting.
rdmo/config/models.py
Outdated
| help_text=_('Designates whether this plugin is generally available for projects.') | ||
| ) | ||
|
|
||
| class PluginType(models.TextChoices): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think we can do without this, the Plugin(-class) should know this.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I have now something like this as a utils.py function, to detect the plugin type from the class inheritance.
PLUGIN_BASES = {
'optionset_provider': OptionsetProvider,
'export': Export,
'import': Import,
'issue_provider': IssueProvider,
}
def detect_plugin_type(plugin_class):
if not issubclass(plugin_class, Plugin):
return "not_an_rdmo_plugin"
for type_name, base_cls in PLUGIN_BASES.items():
if issubclass(plugin_class, base_cls):
return type_name
return 'rdmo_plugin_unknown_type'I kept it as a property in the Plugin model:
@property
def plugin_type(self) -> str:
try:
plugin_class = self.get_class()
except Exception as e:
return e.__class__.__qualname__.lower()
return detect_plugin_type(plugin_class)| verbose_name=_("Python path"), | ||
| ) | ||
| plugin_type = models.CharField(max_length=32, choices=PluginType.choices) | ||
|
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
But what we need to add is plugin_settings which is used to set the settings for this plugin.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the plugin_settings field is there now:
plugin_settings = models.JSONField(
blank=True, default=dict,
verbose_name=_("Plugin settings"),
help_text=_("Contains the settings for this plugin in JSON format."),
)rdmo.config app for Plugin model
|
I'm getting some strange DB errors for mysql in ci(and sqlite in local testing). django.db.utils.OperationalError: foreign key mismatch - "questions_question" referencing "domain_attribute"From the ci logs: # at
query = b'ALTER TABLE `domain_attribute` DROP COLUMN `attributeentity_ptr_id`' django.db.utils.OperationalError:
(1829, "Cannot drop column 'attributeentity_ptr_id':
needed in a foreign key constraint 'questions_questionse_attribute_id_30ee3ea9_fk_domain_at' of table 'questions_questionset'")The problem can be resolved by removing the app |
Think that I found the bug with help of GPT and could fix it by adding a single dependency to the GPT:
|
rdmo.config app for Plugin modelrdmo.config app for Plugin model
|
Ok got it! Good explanation by ChatGPT. This is why you don't do multi-table inheritance and why past-Jochen dismantled it. |
107f379 to
f5eae22
Compare
|
7031a4b to
6875f9a
Compare
6875f9a to
9791229
Compare
dceca19 to
ae887db
Compare
| return self.filter(Q(groups=None) | Q(groups__in=groups)) | ||
|
|
||
|
|
||
| class ForSiteQuerySetMixin: |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Could implement this already in #1488, see #1488 (comment)
27516be to
4026f9a
Compare
rdmo.config app for Plugin modelrdmo.config app for Plugin model (plugin managament)
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
| def __str__(self): | ||
| return self.uri | ||
|
|
||
| def save(self, *args, **kwargs): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Maybe create instance of plugin here an read plugin_type from the class. Handle raw.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
are you sure that the raw case needs to be handled? I could not find any other model that does it on the save method, only the signal handlers are using it so far..
Otherwise it could be simply
if raw:
return super().save(*args, **kwargs)right?
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
rdmo.config app for Plugin model (plugin managament)rdmo.config app for Plugin model (plugin management)
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
…rsion Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Signed-off-by: David Wallace <david.wallace@tu-darmstadt.de>
Description
rdmo.configappPluginmodelPluginbehaves similar to any other element (Catalog, Taks, View)PLUGINS = [ .. ]which replaces the legacy settings (e.g.PROJECT_IMPORT).Deprecations and legacy
rdmo.core.pluginsrdmo.config.pluginsand renamed toPluginBaseRelated issue: #1413