Warning
This release upgrades the sorl-thumbnail dependency to v13.4.0, which fixes how cached image thumbnails resolve their storage backend. If your STORAGES configuration defines OPTIONS for a BACKEND path which re-exports a class defined elsewhere (for example, storages.backends.s3boto3.S3Boto3Storage, which is an alias of storages.backends.s3.S3Storage), run manage.py thumbnail clear once after upgrading. This purges sorl-thumbnail's record of previously generated thumbnails, which may reference the storage backend without its configured options. No image files are deleted.
Warning
The GraphQL enum for circuit and virtual circuit status is now exposed correctly as CircuitStatusEnum, and its values carry the STATUS_ prefix used by other status enums. Queries which filter on unprefixed values (e.g. {exact: ACTIVE}) must be updated to use the prefixed form (e.g. {exact: STATUS_ACTIVE}). See #23469 for details.
Enhancements
- #23031 - Add 8C1P, 12C1P, and 24C1P trunk cable profiles
- #23238 - Support the
__emptylookup for boolean custom field filters - #23365 - Add a copy-to-clipboard button for site addresses
- #23463 - Include the IDs of the associated change log records (
object_change_ids) in event data and webhook payloads
Performance Improvements
- #23076 - Avoid reloading deferred columns for each object when resolving the
displayfield via GraphQL - #23259 - Coalesce search cache updates rather than enqueuing a background job for each change
- #23286 - Count the IP addresses and FHRP group assignments of device and VM interfaces in REST API responses without loading the related objects
- #23355 - Prefetch the objects referenced by object custom fields when rendering REST API lists
- #23371 - Avoid deep-copying cached config context data when serializing REST and GraphQL API responses
Bug Fixes
- #22359 - Apply the
query_paramsof a custom scriptObjectVarto its object selector - #22714 - Recover the schedules of system jobs (e.g. housekeeping) lost from the task queue, such as after restoring a database backup
- #22883 - Retain existing terminations when editing a cable with multiple devices on one end, and identify the device of each termination
- #23212 - Prevent the removal of a virtual chassis member whose interfaces form a LAG with another member
- #23235 - Restrict the jobs listed under an object's or script's jobs tab to those the user is permitted to view
- #23329 - Prevent a search within the object selector from reloading the parent form
- #23364 - Restrict the most recent job reported by the scripts REST API endpoint to jobs the user is permitted to view
- #23372 - Fix exception when listing bookmarks, journal entries, and other objects assigned to objects which have no REST API serializer
- #23375 - Resolve the deprecated
finalizeenvironment parameter for export and config templates only from the template's saved record - #23422 - Fix exception when assigning a service or service template to an object custom field via the REST API
- #23423 - Represent 64-bit integer fields (such as object IDs) as
BigIntin the GraphQL API - #23424 - Declare object IDs as 64-bit integers in the OpenAPI schema
- #23425 - Fix "integer out of range" error when tagging an object with an ID greater than 2,147,483,647
- #23445 - Prevent concurrent REST API updates to an object from overwriting each other's changes
- #23448 - Fix the GraphQL
config_contextfield when selected within an inline or named fragment - #23464 - Apply data source synchronizations atomically, so that a failed sync leaves the previously synchronized files unchanged
- #23467 - Enforce view permissions on parent devices and virtual machines when creating components in bulk
- #23469 - Expose the GraphQL circuit status enum as
CircuitStatusEnum, with values prefixed bySTATUS_(consistent with other status enums) - #23473 - Enable filtering circuits, circuit terminations, virtual circuits, and virtual circuit terminations by provider network name
- #23484 - Pre-populate the location when adding a non-racked device from a location's view