netbox/netbox/circuits
Brian Tiemann fde10cbf22 Merge branch 'feature' into 22896-merge-main-into-feature
Resolves all conflicts between main and feature for #22896. Notable
resolutions:

- dcim/signals.py, dcim/tests/test_signals.py: main's cache_presave_scope_fields
  / sync_cached_scope_fields addition is fully superseded by feature's
  PostgreSQL-trigger-based denormalization (confirmed via feature's own
  migration docstrings); dropped in favor of feature's existing approach.
  Both files now match feature's originals exactly.

- netbox/tables/columns.py: combined main's generic get_ordering_annotation()
  protocol with feature's nulls_first-aware order() override. These two
  mechanisms cannot both apply to the same column (django-tables2 negates an
  entire order_by tuple uniformly on direction toggle, so a fixed nulls_first
  placement and multi-column sort composition are mutually exclusive for one
  column) -- preserved nulls_first (existing, wired through forms/API/GraphQL)
  and removed main's two composition-only tests for CustomFieldColumn. See the
  comment on CustomFieldColumn.order() for full reasoning.

- extras/customfields.py, extras/graphql/mixins.py: combined main's
  request-cache optimization and has_key-scoped batch updates with feature's
  resolve_selection_value() (shared select-field label resolution between
  REST and GraphQL).

- extras/events.py, extras/event_rules.py: main's "Honor Script defaults when
  triggered by Event Rules" (#22852) fix was written against the old inline
  action-type dispatch, which feature had already replaced with a pluggable
  action-provider registry (#22770). Re-applied the same two-line fix
  (notifications/job_timeout) inside ScriptAction.enqueue() in event_rules.py
  instead.

- utilities/jinja2.py: fixed a config-attribute name mismatch the raw merge
  would have introduced (main's JINJA2_FILTERS vs feature's renamed
  JINJA_FILTERS) by updating the shared _jinja2_filters() helper.

- ipam/migrations/: renumbered main's 0094_ipaddress_host_index to 0096 and
  added a merge migration, since main and feature had each independently
  added a migration numbered 0094.

- dcim/tests/query_counts.json: regenerated via UPDATE_QUERY_COUNTS=1 against
  the merged codebase rather than hand-merging counts.

Verified: manage.py check clean, full migration graph applies cleanly from
scratch, ruff clean, and full test suites pass for dcim, ipam, netbox, extras,
circuits, vpn, wireless, tenancy, virtualization, core, users, and account
(fresh databases, no state carried over between runs).
2026-08-10 16:13:01 -04:00
..
api chore(ruff): Sort `__all__` definitions across modules 2026-02-20 15:36:01 +01:00
forms Closes #21712: Support description annotations for static choice form fields 2026-07-02 13:46:43 -04:00
graphql Merge branch 'feature' into 22896-merge-main-into-feature 2026-08-10 16:13:01 -04:00
migrations Merge branch 'main' into feature 2026-07-28 14:24:24 -04:00
models fix(circuits): Require termination object for selected type 2026-05-20 12:27:09 -04:00
tables Closes #22190: Add tenancy columns to CircuitGroup table (#22221) 2026-05-18 12:28:01 -05:00
tests Merge branch 'feature' into 22896-merge-main-into-feature 2026-08-10 16:13:01 -04:00
ui Closes #19821: Consolidate GFK form handling with GenericObjectChoiceField (#22537) 2026-06-29 16:44:33 -04:00
__init__.py
…
apps.py #21355 - Handle updates to denormalized data via PostgreSQL triggers 2026-06-15 09:18:17 -07:00
choices.py Closes #21712: Support description annotations for static choice form fields 2026-07-02 13:46:43 -04:00
constants.py Fixes #21407: Enable I (isort) and stabilize import ordering (#21458) 2026-02-18 10:41:51 -06:00
filtersets.py fix(circuits): Add member_type_id filter to CircuitGroupAssignment 2026-07-29 15:07:42 +02:00
search.py Fixes #21407: Enable I (isort) and stabilize import ordering (#21458) 2026-02-18 10:41:51 -06:00
signals.py fix(circuits): Clear Circuit Termination cache on change 2026-03-17 13:16:22 -04:00
urls.py Fixes #21407: Enable I (isort) and stabilize import ordering (#21458) 2026-02-18 10:41:51 -06:00
views.py Closes #22446: Add breadcrumbs support for Layouts (#22546) 2026-07-02 10:46:01 -05:00