Nautobot v2.3¶
This document describes all new features and changes in Nautobot 2.3.
Upgrade Actions¶
Administrators¶
Administrators should plan to take these actions during or immediately after upgrade from a previous version. New installations should also take note of these actions where appropriate.
- Python 3.12 is now the default recommended version of Python.
Python 3.12
Because Nautobot prior to 2.3.0 did not declare support for Python 3.12, most Apps similarly needed to previously declare an upper bound of Python 3.11 for their own compatibility. Therefore, older versions of most Apps will not be installable under Python 3.12. Before migrating your Nautobot environment to Python 3.12, it is your responsibility to confirm that all relevant Apps in your environment are also compatible and installable.
There is a minor "chicken-and-egg" problem here in that Apps generally cannot declare support for a new Python version before Nautobot itself publishes a release that does so; therefore, as of the 2.3.0 Nautobot release day, most Apps have not yet been updated to declare support for Python 3.12. We'll be working in the following days to promptly update our supported Apps as needed, so stay tuned.
Docker images
As has been Nautobot's policy since version 1.6.1, our published Docker images that are not tagged with a specific Python version implicitly always include the latest supported version of Python. This means that as of the release of Nautobot 2.3.0, the tags latest, stable, 2.3, and 2.3.0 will all indicate Docker images that include Python 3.12, whereas previously these indicated Python 3.11 images. As noted above and below, updating to Python 3.12 may not be immediately desirable (or even possible, depending on the status of your Apps) as a "day one" action.
If you need to stay with a given Python version for the time being, you must make sure that you're relying on an appropriately specific image tag, such as 2.3-py3.11, stable-py3.10, etc.
- As noted below, a new system job is provided for automated Dynamic Group cache updates. Administrators should schedule this system job to run on a recurring basis within the Jobs UI, after the upgrade, or on new install. Configuration referencing the
DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUTsetting can be safely removed, as it is no longer used. If this setting was being used previously, it is recommended to set the new scheduled job's interval to the same value. - As noted below, change logging retention cleanup is now handled via a system job. Administrators should schedule this job to run on a recurring basis to meet their needs. The
CHANGELOG_RETENTIONsetting is still used to define the retention period, but the scheduled system job will perform the actual cleanup, if any needed.
Job Authors & App Developers¶
Job Authors and App Developers should take these actions to ensure compatibility with their Jobs and Apps.
- Job Authors and App Developers should carefully consider the updates to the DynamicGroup API and decide if their use cases dictate changing their group membership access patterns to use
DynamicGroup.update_cached_members()to find the correct balance between Dynamic Group performance and membership updates. - Job Authors and App Developers should carefully consider the updates to the TreeManager default behavior and make necessary changes to their access of Tree based models.
- Django 4.2 is now required by Nautobot, replacing the previous Django 3.2 dependency. Job Authors and App Developers should carefully consider the updates and changes in the Django release-notes (4.0, 4.1, 4.2), especially the relevant "Backwards incompatible changes" sections, to proactively identify any impact to their Apps.
Django 4
Django 4 includes a small number of breaking changes compared to Django 3. In our experience, most Apps have required few (or zero) updates to be Django 4 compatible, but your mileage may vary.
- Python 3.12 is now supported by Nautobot and is now the default recommended version of Python. Apps will likely need to update their packaging in order to explicitly declare support for Python 3.12.
Release Overview¶
Added¶
Cloud Models (#5716, #5719, #5721, #5872)¶
Added the new models CloudAccount, CloudResourceType, CloudNetwork, and CloudService to support recording of cloud provider accounts (AWS, Azure, GCP, DigitalOcean, etc.), cloud resource types (AWS EC2, Azure Virtual Machine Service, Google App Engine, etc.), cloud services (specific instances of services described by cloud resource types) and cloud network objects (such as VPCs) in Nautobot.
Device Modules (#2101)¶
Added new models for ModuleBay, Module, ModuleType, and ModuleBayTemplate to support modeling line cards and other modular components of a device. These models allow you to define a hierarchy of module bays and modules within a device, and to assign components (such as interfaces, power ports, etc.) to specific modules.
Dynamic Group Enhancements (#5472, #5786)¶
Dynamic Groups now have a group_type field, which specifies whether this group is defined by an object filter, defined by aggregating other groups via set operations, or defined via static assignment of objects as group members (this third type is new in Nautobot 2.3). Additionally, you can now assign a tenant and/or tags to each Dynamic Group, and many more models now can be included in Dynamic Groups.
A new model, StaticGroupAssociation, and associated REST API, have been added in support of the new "static" group type. See also "Dynamic Group Cache Changes" below.
For more details, refer to the Dynamic Group documentation.
Interface and VMInterface Roles (#4406)¶
Added an optional role field to Interface and VMInterface models to track common interface configurations. Now the users can create Role instances that can be assigned to interfaces and vminterfaces.
Object Metadata Models (#5663)¶
Added a set of functionality for defining and managing object metadata, that is to say, data about the network data managed in Nautobot, such as data provenance, data ownership, and data classification. For more details, refer to the linked documentation.
Python 3.12 Support (#5429)¶
Nautobot now supports Python 3.12, and Python 3.12 is now the default Python version included in the nautobot Docker images.
Saved Views (#1758)¶
Added the ability for users to save multiple configurations of list views (table columns, filtering, pagination and sorting) for ease of later use and reuse. Refer to the Saved View documentation for more details and on how to use saved views.
Worker Status Page (#5873)¶
User accounts with the is_staff flag set can access a new worker status page at /worker-status/ to view the status of the Celery worker(s) and the configured queues. The link to this page appears in the "User" dropdown at the bottom of the navigation menu, under the link to the "Profile" page. Use this page with caution as it runs a live query against the Celery worker(s) and may impact performance of your web service.
Changed¶
Changed TreeManager Default Behavior (#5786)¶
The TreeManager class (used for tree-models such as Location, RackGroup, and TenantGroup) default behavior has changed from with_tree_fields to without_tree_fields. This should improve performance in many cases but may impact Apps or Jobs that were relying on the old default; such code should be updated to explicitly call .with_tree_fields() where appropriate.
Dynamic Group Cache Changes (#5473)¶
To improve performance of the Dynamic Groups feature, a number of changes have been made:
- Dynamic Groups now always use
StaticGroupAssociationrecords as a database cache of their member objects, rather than optionally caching their members in Redis for a limited time period. For Dynamic Groups of types other than the new "static" group type, theseStaticGroupAssociationrecords are hidden by default from the UI and REST API. - The
DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUTsetting variable is deprecated, as it no longer influences Dynamic Group cache behavior. - The APIs
DynamicGroup.members,DynamicGroup.count,DynamicGroup.has_member(), andobject.dynamic_groupsnow always use the database cache rather than being recalculated on the fly. - The APIs
DynamicGroup.members_cached,DynamicGroup.members_cache_key,object.dynamic_groups_cached,object.dynamic_groups_list, andobject.dynamic_groups_list_cachedare now deprecated. - Editing a Dynamic Group definition refreshes its cached members and those of any "parent" groups that use it.
- Viewing a Dynamic Group detail view in the UI refreshes its cached members (only).
- A new System Job,
Refresh Dynamic Group Caches, can be run or scheduled as appropriate to refresh Dynamic Group member caches on demand. - The existing API
DynamicGroup.update_cached_members()can be called by Apps or Jobs needing to ensure that the cache is up-to-date for any given Dynamic Group.
Log Cleanup as System Job (#3749)¶
Cleanup of the change log (deletion of ObjectChange records older than a given cutoff) is now handled by the new LogsCleanup system Job, rather than occurring at random as a side effect of new change log records being created. Admins desiring automatic cleanup are encouraged to schedule this job to run at an appropriate interval suitable to your deployment's needs.
Info
Setting CHANGELOG_RETENTION in your Nautobot configuration by itself no longer directly results in periodic cleanup of ObjectChange records. You must run (or schedule to periodically run) the LogsCleanup Job for this to occur.
As an additional enhancement, the LogsCleanup Job can also be used to cleanup JobResult records if desired as well.
UI Button Consolidation (#5869, #5870, #5871)¶
Various button groups in the "object list" and "object detail" views have been consolidated following a common UI pattern of a single button for the most common action plus a popup menu for less common actions.
Dependencies¶
Updated to Django 4.2 (#3581)¶
As Django 3.2 has reached end-of-life, Nautobot 2.3 requires Django 4.2, the next long-term-support (LTS) version of Django. There are a number of changes in Django itself as a result of this upgrade; Nautobot App maintainers are urged to review the Django release-notes (4.0, 4.1, 4.2), especially the relevant "Backwards incompatible changes" sections, to proactively identify any impact to their Apps.
v2.3.0 (2024-08-08)¶
Security¶
- #6073 - Updated
Djangoto~4.2.15due toCVE-2024-41989,CVE-2024-41990,CVE-2024-41991, andCVE-2024-42005.
Added¶
- #5996 - Added missing
commentsfield to DeviceType bulk edit. - #5996 - Added
commentsfield to ModuleType. - #6039 - Added
Cloud Networkscolumn toPrefixTable. - #6039 - Added
prefixesfilter toCloudNetworkFilterSet. - #6039 - Added
parent__nameandparent__descriptiontoCloudNetworkFilterSetqfilter. - #6039 - Added support for querying
GenericRelationrelationships (reverse ofGenericForeignKey) in GraphQL. - #6039 - Added support for filtering an object's
associated_contactsin GraphQL.
Changed¶
- #6003 - Changed rendering of
scoped_fieldscolumn inObjectMetadataTable. - #6003 - Changed default ordering of
ObjectMetadatalist views. - #6039 - Renamed
associated_object_metadatasGenericRelation toassociated_object_metadata. - #6039 - Renamed
object_metadatasreverse-relations toobject_metadata. - #6039 - Changed
CloudNetwork.parentforeign-keyon_deletebehavior toPROTECT. - #6070 - Marked the
Notemodel asis_metadata_associable_model = False.
Removed¶
- #6005 - Removed "delete" and "bulk-delete" functionalities from the ObjectMetadata views.
- #6039 - Removed unneeded
CloudNetworkPrefixAssignmentTable.
Fixed¶
- #5967 - Fixed a regression in the display of custom fields in object-edit forms.
- #5996 - Fixed URL typo in module and module type list views.
- #6003 - Added missing
blank=TruetoObjectMetadata.scoped_fields. - #6019 - Marked the
JobLogEntrymodel as invalid for association ofObjectMetadata. - #6039 - Added missing
Config Schemadisplay to detail view ofCloudResourceType. - #6039 - Added missing
Descriptiondisplay to detail view ofCloudService. - #6045 - Fixed interfaces of Virtual Chassis Master missing other member's interfaces.
- #6051 - Fixed improper escaping of saved-view name in success message.
- #6051 - Fixed incorrect ordering of items in Tenant detail view.
- #6051 - Fixed query parameters for
CloudNetwork.parentform field. - #6056 - Fixed the order of object deletion by constructing delete success message before the object is deleted.
- #6064 - Reverted an undesired change to
IPAddressFilterSet.devicefilter. - #6064 - Reverted an undesired change to
ServiceForm.ip_addressesvalid addresses.
Documentation¶
- #5920 - Updated documentation for installation under Ubuntu 24.04 LTS, Fedora 40, AlmaLinux 9, and similar distros.
- #6019 - Updated the installation documentation to recommend a more secure set of filesystem permissions.
- #6050 - Updated model development docs with information about object metadata and dynamic groups features.
- #6050 - Added some crosslinks within the DCIM model documentation.
- #6062 - Updated Configuration Context docs with additional examples for dictionary of dictionaries.
Housekeeping¶
- #5962 - Updated development dependency
ruffto~0.5.6. - #5962 - Updated documentation dependencies:
mkdocs-materialto~9.5.31,mkdocstringsto~0.25.2, andmkdocstrings-pythonto~1.10.7. - #6003 - Updated
ObjectMetadataFactoryto produce more realisticscoped_fieldsvalues. - #6014 - Fixed intermittent
ObjectMetadatafactory failures. - #6047 - Made sure that there is a sufficient amount of
ContactandTeaminstances exist in the database when testingcontactsandteamsfilters of an object's filterset. - #6055 - Added migrations check to upstream testing workflow.
- #6071 - Fixed incorrect generic-test logic in
FilterTestCase.test_q_filter_validforqfilters containingiexactlookups.
v2.3.0-beta.1 (2024-07-25)¶
Security¶
- #5889 - Updated
Djangoto~4.2.14due toCVE-2024-38875,CVE-2024-39329,CVE-2024-39330, andCVE-2024-39614.
Added¶
- #1758 - Implemented SavedView model.
- #2101 - Added ModuleBay, Module, ModuleType and ModuleBayTemplate models to support modeling line cards and other modular components of a device.
- #3749 - Added "Logs Cleanup" system Job, which can be run to delete ObjectChange and/or JobResult records older than a given cutoff.
- #4406 - Added
rolefield toInterfaceandVMInterfacemodels. - #5212 - Added
contactsandteamsfilters to appropriate FilterSets and filter forms. - #5348 - Enhanced UI to include arrow indicators for sorted table columns.
- #5429 - Added Python 3.12 support.
- #5442 - Added
JobResultFactory,JobLogEntryFactory, andObjectChangeFactoryclasses and added creation of fakeJobResult,JobLogEntry, andObjectChangerecords to thenautobot-server generate_test_datacommand. - #5471 - Added the ability to set Global and User default saved view.
- #5471 - Added the ability to set public and private saved view.
- #5472 - Added
StaticGroupandStaticGroupAssociationdata models, used for statically defining groups of Nautobot objects. - #5472 - Added
featurefilter to/api/extras/content-types/. - #5472 - Added
static_groupsfilter to all applicable models via theBaseFilterSetclass. - #5472 - Added
static_groupsfield to applicable model create/edit forms via theStaticGroupModelFormMixinclass (included inNautobotModelFormclass automatically). - #5472 - Added
Static Groupscolumn to applicable model tables. - #5472 - Added
static_groupsandassociated_contactsto applicable GraphQL types. - #5472 - Enhanced
BaseTableclass to automatically apply appropriatecount_relatedannotations for anyLinkedCountColumn. - #5473 - Added support for objects to "opt out" of change logging by returning
Nonefrom theirto_objectchange()method. - #5473 - Added
descriptionstrings to all system Jobs. - #5473 - Added
Refresh Dynamic Group Cachessystem Job. - #5631 - Added
ContactMixinandStaticGroupMixinabstract model mixin classes. Models that inherit fromOrganizationalModelorPrimaryModelwill automatically include these mixins. - #5663 - Added
MetadataTypeandMetadataChoicedata models, REST API, and UI. - #5664 - Added
ObjectMetadatadata models, UI and REST API. - #5687 - Added
setup_structlog_logging()to allow using structlog fromnautobot_config.pyfile. - #5716 - Added CloudNetwork model, UI, GraphQL and REST API.
- #5716 - Added CloudNetwork to CircuitTermination model, UI, and REST API.
- #5716 - Added CloudNetwork to Prefix View.
- #5719 - Added CloudAccount Model, UI, GraphQL and REST API.
- #5721 - Added
CloudTypeCloudResourceTypeModel, UI, GraphQL and REST API. - #5730 - Added a feature that replaces
{module},{module.parent},{module.parent.parent}, etc. with the selected module'sparent_module_baypositionwhen creating a component in a module. - #5732 - Added indices on
StaticGroupAssociationtable for common lookup patterns. - #5786 - Added
DynamicGroup.group_typefield with optionsdynamic-filter,dynamic-set, andstatic. Existing DynamicGroups will automatically be set to eitherdynamic-filterordynamic-setas befits their definitions. - #5786 - Added
DynamicGroup.tenantandDynamicGroup.tagsfields. - #5786 - Added Dynamic Group support to many more Nautobot models.
- #5791 - Added support for specifying a Device's Primary IP from an interface on a child Module.
- #5792 - Added display of components from installed modules to the Device Component tabs.
- #5817 - Added Celery Worker details to the Job Result Advanced Tab.
- #5817 - Added
advanced_content_left_pageblock to the Advanced Tab. - #5872 - Added CloudService Model, UI, GraphQL and REST API.
- #5873 - Added worker status page for staff users.
- #5890 - Add CSS class to pagination dropdown to resolve issue with color-scheme.
- #5923 - Added
prefers_idkeyword argument to NaturalKeyOrPKMultipleChoiceFilter initialization to use the object ID instead of theto_field_namewhen automatically generating a form field for the filter. - #5933 - Added tables of related
CloudServiceand/orCloudNetworkinstances to theCloudResourceTypedetail view. - #5933 - Added
descriptionfield toCloudServicemodel.
Changed¶
- #2101 - Updated device interfaces filter to support filtering by interface name as well as by ID.
- #3749 - Changed behavior of the
CHANGELOG_RETENTIONsetting; it no longer applies automatically to force cleanup of ObjectChange records over a certain age cutoff, but instead serves as the default cutoff age whenever running the new "Logs Cleanup" system Job. - #5429 - Changed default Docker image Python version to 3.12.
- #5473 - Changed object "detail" views to only show
Dynamic Groupstab if the object belongs to at least one such group. - #5473 - Replaced Redis implementation of Dynamic Group membership caches with a database cache implementation using the StaticGroupAssociation model.
- #5473 - Changed
DynamicGroup.members,DynamicGroup.has_member(), andDynamicGroupMixin.dynamic_groupsAPIs to always use the database cache. - #5631 - Changed behavior of models that inherit directly from
BaseModel(notOrganizationalModelorPrimaryModel) to default tois_contact_associable_model = False. - #5786 - Changed
TreeManagerclass (used for tree-models such as Location, RackGroup, and TenantGroup) default behavior fromwith_tree_fieldstowithout_tree_fields. This should improve performance in many cases but may impact Apps or Jobs that were relying on the old default; such code should be updated to explicitly call.with_tree_fields()where appropriate. - #5786 - Merged the
StaticGroupmodel added in #5472 into the existingDynamicGroupmodel as a special type of group. - #5786 - Replaced
static_groupsfilter added in #5472 with adynamic_groupsfilter. - #5786 - Replaced
static_groupsmodel form field added in #5472 with adynamic_groupsfield. - #5786 - Replaced
Static Groupsobject table column added in #5472 with aDynamic Groupscolumn. - #5786 - Replaced
static_groupsGraphQL field added in #5472 with adynamic_groupsfield. - #5786 - Replaced
StaticGroupMixinmodel mixin class added in #5631 with aDynamicGroupsModelMixinclass. Still included by default inOrganizationalModelandPrimaryModel. - #5790 - Updated Cable table to display the parent Device of Cables connected to Modules in a Device.
- #5790 - Updated device and
device_idfilters for Cables, Interfaces, and other modular device components to recognize components that are nested in Modules in a Device. - #5790 - Updated Cable connect form to allow connecting to Console Ports, Console Server Ports, Interfaces, Power Ports, Power Outlets, Front Ports, and Rear Ports that are nested in Modules in a Device.
- #5790 - Updated Interface
devicefilter to allow filtering on Devicenameorid. - #5790 - Updated
Cable._termination_a_deviceandCable._termination_b_deviceto cache the Device when cables are connected to an Interface or Port of a Module in a Device. - #5817 - Removed Additional Data tab on Job Result view and collapsed the data into Advanced Tab.
- #5826 - Moved
SavedViewmodel fromusersapp toextrasapp. - #5841 - Added role field as a default column for Device Interface tab and VirtualMachine VMInterface table.
- #5869 - Combined bulk-edit/bulk-delete/bulk-group-update buttons into a single button with a pop-up menu when appropriate.
- #5870 - Consolidated List View Action buttons into a single button with a dropdown menu.
- #5871 - Consolidated Detail View Action buttons into a single button with a dropdown menu.
- #5873 - Updated the job run form to use more of the horizontal whitespace on the page.
- #5933 - Renamed
CloudTypemodel toCloudResourceTypefor improved clarity. - #5977 - Changed the provider field help text of CloudAccount and CloudResourceType model classes and forms.
- #5978 - Changed CloudService
cloud_networkfield from a ForeignKey to a ManyToMany calledcloud_networks.
Deprecated¶
- #5473 - Deprecated the properties
DynamicGroup.members_cached,DynamicGroup.members_cache_key,DynamicGroupMixin.dynamic_groups_cached,DynamicGroupMixin.dynamic_groups_list, andDynamicGroupMixin.dynamic_groups_list_cached. - #5786 - Deprecated the
DynamicGroupMixinmodel mixin class. Models supporting Dynamic Groups should useDynamicGroupsModelMixininstead. - #5870 - Deprecated the blocks
block export_buttonandblock import_buttoningeneric/object_list.html. Apps and templates should migrate to usingblock export_list_elementandblock import_list_elementrespectively.
Removed¶
- #3749 - Removed automatic random cleanup of ObjectChange records when processing requests and signals.
- #5473 - Removed
DYNAMIC_GROUPS_MEMBER_CACHE_TIMEOUTsetting as it is no longer relevant after refactoring the Dynamic Group membership caching implementation. - #5786 - Removed the
StaticGroupmodel added in #5472, replacing it with a subtype of theDynamicGroupmodel.
Fixed¶
- #2352 - Fixed random deadlocks in long-running Jobs resulting from the ObjectChange automatic cleanup signal.
- #5123 - Fixed an unhandled
ValueErrorwhen filtering onvlansby their UUID rather than their VLAN ID. - #5442 - Replaced overly broad
invalidate_models_cachesignal handler with two more narrowly scoped handlers, preventing the signal handler from being invoked for operations on irrelevant models. - #5442 - Fixed incorrect linkification of JobLogEntry table rows when a record had a
log_objectbut noabsolute_url. - #5473 - Significantly improved performance of Dynamic Group UI views.
- #5774 - Fixed the bug that required users and administrators to manage additional permission to be able to use saved views.
- #5814 - Fixed style issues with Saved Views and other language code blocks.
- #5818 - Fixed broken table configure buttons in device and module component tabs.
- #5842 - Fixed missing classes when importing
*from nautobot.ipam.models. - #5877 - Resolved issue with tags not saving on Dynamic Groups.
- #5880 - Fixed overflowing device component tables in device and module component tabs.
- #5880 - Fixed an exception when trying to edit an IPAddress that had a NAT Inside IPAddress that was related to a component attached to a module.
- #5880 - Fixed incorrect sort order of interfaces in the device and module interface tabs.
- #5898 - Replaced
object-metadatasin UI and REST API urls withobject-metadata. - #5932 - Fixed visual bug in consolidated action button for list views.
- #5933 - Fixed missing
cloud.cloudservicecontent-type option onCloudResourceTypemodel. - #5933 - Fixed incorrect submenu heading in
Cloudnavigation menu. - #5933 - Fixed incorrect rendering of
Tagscolumn in Cloud object tables. - #5939 - Fixed the usage of incorrect model in Cloud Service list view action buttons.
- #5951 - Removed unused consolidated action button on job list view.
- #5952 - Changed generic "Bulk Actions" dropup button styling to match generic "Actions" dropdown button.
Dependencies¶
- #1758 - Updated
materialdesigniconsto version 7.4.47. - #4616 - Updated
django-taggitto~5.0.0. - #4616 - Updated
netaddrto~1.3.0. - #5160 - Updated
Djangoto version~4.2.13. - #5160 - Updated
django-db-file-storageto version~0.5.6.1. - #5160 - Updated
django-timezone-fieldto version~6.1.0. - #5429 - Updated Docker build and CI to use
poetry1.8.2. - #5429 - Removed development dependency on
mkdocs-include-markdown-pluginas it's no longer used in Nautobot's documentation. - #5518 - Updated
drf-spectacularto version0.27.2. - #5687 - Added django-structlog dependency.
- #5734 - Updated
django-auth-ldapdependency to~4.8. - #5734 - Updated
django-tree-queriesdependency to~0.19. - #5734 - Updated
Markdowndependency to~3.6. - #5735 - Updated
django-constancedependency to~3.1.0 - #5735 - Updated
emojidependency to~2.12.1. - #5735 - Widened
napalmdependency to permit version 5.x. - #5865 - Updated
celeryto~5.3.6. - #5865 - Updated
django-cors-headersto~4.4.0. - #5865 - Updated
django-health-checkto~3.18.3. - #5865 - Updated
django-structlogto^8.1.0. - #5865 - Updated
djangorestframeworkto~3.15.2. - #5889 - Updated
django-filterto version~24.2. - #5889 - Updated
django-timezone-fieldto version~7.0.
Documentation¶
- #5699 - Fixed a number of broken links within the documentation.
- #5895 - Added missing model documentation for
CloudNetwork,CloudNetworkPrefixAssignment,CloudServiceandCloudTypeCloudResourceType. - #5934 - Add Cloud Model Example and Entity Diagram.
Housekeeping¶
- #5160 - Replaced references to
pytzwithzoneinfoin keeping with Django 4. - #5212 - Enhanced
nautobot.core.testing.filters.FilterTestCases.BaseFilterTestCase.test_filters_generic()test case to test for the presence and proper functioning of thecontactsandteamsfilters on any appropriate model FilterSet. - #5429 - Added Python 3.12 to CI.
- #5429 - Updated CI to use
poetry1.8.2 and use actionnetworktocode/gh-action-setup-poetry-environment@v6. - #5429 - Removed CI workaround for old Poetry versions.
- #5473 - Added
assertApproximateNumQueriestest-case helper method. - #5524 - Deleted unnecessary special case handling for
test_view_with_content_types. - #5663 - Added support for
django_get_or_createproperty inBaseModelFactory. - #5699 - Updated to
mkdocs~1.6.0andmkdocs-material~9.5.23. - #5725 - Updated development dependencies
pylintto3.2.0,ruffto0.4.0, andseleniumto4.21. - #5735 - Updated
mkdocstringsto~0.25.1andmkdocstrings-pythonto~1.10.2. - #5786 - Substantially reduced the setup overhead (time/memory) of
OpenAPISchemaTestCasestests. - #5842 - Fixed missing mysqldump client when trying to run tests with --parallel on mysql.
- #5865 - Updated
django-debug-toolbardevelopment dependency to~4.4.0. - #5865 - Updated
mkdocs-include-markdown-plugindocumentation dependency to6.2.1. - #5865 - Updated
mkdocs-materialdocumentation dependency to9.5.27. - #5865 - Updated
mkdocs-section-indexdocumentation dependency to0.3.9. - #5865 - Updated
mkdocstrings-pythondocumentation dependency to1.10.5. - #5865 - Updated
pylintdevelopment dependency to~3.2.5. - #5865 - Updated
ruffdevelopment dependency to~0.5.0. - #5865 - Updated
seleniumdevelopment dependency to~4.22.0. - #5986 - Fixed multiple intermittent failures in unit tests.