Core Plugin System with djp/pluggy

Status: COMPLETE

Goal

Implement the foundational plugin system using djp (Django plugin system built on pluggy) for extensibility.

Acceptance Criteria

  • Plugin discovery from INSTALLED_APPS via djadmin_hooks.py
  • 15 hook specifications defined in djadmin/plugins/__init__.py
  • Hook manager integration with pluggy
  • Plugin registration and loading
  • Feature advertising system
  • Plugin validation at startup

Hook Specifications

Features:

  • djadmin_provides_features - Advertise plugin capabilities
  • djadmin_get_form_features - Form-level feature detection

Actions:

  • djadmin_get_default_{general,bulk,record}_actions - Default actions
  • djadmin_register_actions - Custom action registration

View Customization:

  • djadmin_get_action_view_mixins - Inject mixins into views
  • djadmin_get_action_view_base_class - Override base classes
  • djadmin_get_action_view_assets - Add CSS/JS assets
  • djadmin_get_action_view_attributes - Set view attributes
  • djadmin_get_action_view_attribute_bindings - Bind to model_admin

UI Extensions:

  • djadmin_get_sidebar_widgets - Dashboard sidebar
  • djadmin_get_column_header_icons - ListView headers

Data:

  • djadmin_modify_queryset - Filter/annotate queries
  • djadmin_add_context_data - Template context

Testing:

  • djadmin_get_test_methods - Plugin-based test methods

Dependencies:

  • djadmin_get_required_apps - INSTALLED_APPS management

Reference

  • djadmin/plugins/__init__.py
  • wiki/archive/Milestone-1-Implementation-Plan.md
Edited by Emma