mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Closed
opened 2025-12-29 23:20:59 +01:00 by adam
·
0 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
No Label
pull-request
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#13818
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
📋 Pull Request Information
Original PR: https://github.com/netbox-community/netbox/pull/11626
Author: @arthanson
Created: 1/31/2023
Status: ✅ Merged
Merged: 3/30/2023
Merged by: @jeremystretch
Base:
feature← Head:9608-drf-spectacular2📝 Commits (10+)
3a9e431Closes #10923: Remove unused NetBoxModelCSVForm class4d221f4Closes #10604: Remove unused extra_tabs block from object.html generic templated997fe9Merge branch 'develop' into feature1890286Closes #11489: Refactor & combine core middleware4faa3b4Remove old feature version noticesff4eb41Closes #11254: Introduce the X-Request-ID HTTP header to annotate the unique ID of each request for change logging943dca7Closes #8184: Enable HTMX for embedded tables (#11518)dceffcaMerge branch 'develop' into feature024df81Add theenabledfiled to InterfaceTemplatebab1ce7Changelog for Add "Clustered Network Device" type to represent redundant network devices (#11440)📊 Changes
35 files changed (+513 additions, -339 deletions)
View changed files
📝
base_requirements.txt(+3 -3)📝
netbox/circuits/api/nested_serializers.py(+8 -0)📝
netbox/circuits/api/serializers.py(+4 -4)➕
netbox/core/api/schema.py(+224 -0)📝
netbox/core/apps.py(+1 -0)📝
netbox/dcim/api/nested_serializers.py(+38 -1)📝
netbox/dcim/api/serializers.py(+57 -43)📝
netbox/dcim/api/views.py(+10 -17)📝
netbox/dcim/tests/test_api.py(+1 -1)📝
netbox/extras/api/customfields.py(+3 -0)📝
netbox/extras/api/serializers.py(+7 -5)📝
netbox/extras/api/views.py(+2 -2)📝
netbox/extras/plugins/views.py(+5 -4)📝
netbox/ipam/api/nested_serializers.py(+13 -0)📝
netbox/ipam/api/serializers.py(+11 -9)📝
netbox/ipam/api/views.py(+33 -21)📝
netbox/ipam/filtersets.py(+0 -2)📝
netbox/netbox/api/fields.py(+4 -0)📝
netbox/netbox/api/serializers/base.py(+3 -0)📝
netbox/netbox/api/serializers/generic.py(+2 -2)...and 15 more files
📄 Description
Fixes: #9608
Removes drf-yasg and replaces it with drf-spectacular which allows us to go from Swagger 2 to OpenAPI 3.
The documentation will also need to be updated for this change.
There are still a few warnings around IPAddressField but it defaults to string which is correct. You can generate the file and see any warnings via:
Implemenation Notes:
had to add allow_null=True to many serializers. This should be correct as for example provider_network if you look at the class it is a nullable field.
code for NetBoxAutoSchema is to fix the bulk operations.
The 3 generated spec specify all(?) readonly fields as required. e.g. Prefix which list as required: [ "_depth", "children", "created" "display", "family", "id", "last_updated", "prefix", "url"]. This is different then the 2 spec where the readonly fields are not required. The 3 spec is more correct as the field are marked as readonly, however it is possible some client generators may have difficult with this, this can be controlled via a settings for SPECTACULAR_SETTINGS:
Had to add some get_serializer_class to some ViewSets - these views had different serializers for get/post but didn't define a base serializer which caused issues with drf-spectacular. First put a base serializer in with serializer_class =, however this caused side-issues of it being a class within NetBoxAutoSchema so used the get_serializer_class.
There is difference in the paths in the schema old (api is prefixed): "/circuits/circuit-terminations/" new: "/api/circuits/circuit-terminations/" not sure if this would have any effects on clients.
The Writable classes have "Request" post-pended to the name via spectacular, again don't think this will have any major effect on clients: "$ref: '#/definitions/WritableCircuitTermination'" -> "$ref: '#/components/schemas/WritableCircuitTerminationRequest'"
Descriptions for the classes in the schema are not good, usually defaulting to a base item, however the descriptions are not present in the 2.0 schema file, so not something broken just has never been added. Better descriptions to the serializers can be added in the future. For example the WritableCircuitRequest has the description "description: Adds support for custom fields and tags."
Merging Info
Warnings
Currently has the following warnings - these default to string, or auto resolve, can look at going through and cleaning these up so no warnings later.
Not sure why IPAddressField is causing warnings - tried to override it in several places to prevent the warning without success, again defaults to string which is correct.
/Users/ahanson/dev/work/netbox/netbox/ipam/api/nested_serializers.py: Warning [DeviceViewSet > DeviceWithConfigContextSerializer > NestedIPAddressSerializer]: model field "IPAddressField" has no mapping in ModelSerializer. It may be a deprecated field. Defaulting to "string"
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [DeviceViewSet > WritableDeviceWithConfigContextSerializer]: unable to resolve type hint for function "primary_ip". Consider using a type hint or @extend_schema_field. Defaulting to string.
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [InterfaceViewSet > WritableInterfaceSerializer]: unable to resolve type hint for function "l2vpn_termination". Consider using a type hint or @extend_schema_field. Defaulting to string.
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [VirtualDeviceContextViewSet > WritableVirtualDeviceContextSerializer]: unable to resolve type hint for function "primary_ip". Consider using a type hint or @extend_schema_field. Defaulting to string.
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [AggregateViewSet > WritableAggregateSerializer]: unable to resolve type hint for function "family". Consider using a type hint or @extend_schema_field. Defaulting to string.
/Users/ahanson/dev/work/netbox/netbox/ipam/api/serializers.py: Warning [IPAddressViewSet > IPAddressSerializer]: model field "IPAddressField" has no mapping in ModelSerializer. It may be a deprecated field. Defaulting to "string"
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [IPAddressViewSet > WritableIPAddressSerializer]: unable to resolve type hint for function "family". Consider using a type hint or @extend_schema_field. Defaulting to string.
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [IPAddressViewSet > WritableIPAddressSerializer]: model field "IPAddressField" has no mapping in ModelSerializer. It may be a deprecated field. Defaulting to "string"
/Users/ahanson/dev/work/netbox/netbox/ipam/api/serializers.py: Warning [IPRangeViewSet > IPRangeSerializer]: model field "IPAddressField" has no mapping in ModelSerializer. It may be a deprecated field. Defaulting to "string"
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [IPRangeViewSet > WritableIPRangeSerializer]: unable to resolve type hint for function "family". Consider using a type hint or @extend_schema_field. Defaulting to string.
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [IPRangeViewSet > WritableIPRangeSerializer]: model field "IPAddressField" has no mapping in ModelSerializer. It may be a deprecated field. Defaulting to "string"
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [PrefixViewSet > WritablePrefixSerializer]: unable to resolve type hint for function "family". Consider using a type hint or @extend_schema_field. Defaulting to string.
/Users/ahanson/dev/work/netbox/netbox/ipam/filtersets.py: Warning [ServiceViewSet > ServiceFilterSet]: model field "IPAddressField" has no mapping in ModelSerializer. It may be a deprecated field. Defaulting to "string"
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [AvailableVLANsView > WritableVLANSerializer]: unable to resolve type hint for function "l2vpn_termination". Consider using a type hint or @extend_schema_field. Defaulting to string.
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [VLANViewSet > WritableVLANSerializer]: unable to resolve type hint for function "l2vpn_termination". Consider using a type hint or @extend_schema_field. Defaulting to string.
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [VMInterfaceViewSet > WritableVMInterfaceSerializer]: unable to resolve type hint for function "l2vpn_termination". Consider using a type hint or @extend_schema_field. Defaulting to string.
/Users/ahanson/dev/work/netbox/venv/lib/python3.10/site-packages/rest_framework/serializers.py: Warning [VirtualMachineViewSet > WritableVirtualMachineWithConfigContextSerializer]: unable to resolve type hint for function "primary_ip". Consider using a type hint or @extend_schema_field. Defaulting to string.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "type". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "TypeDdfEnum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "type". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Type261Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "type". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Type666Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "type". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Type6e5Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "type". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Type2fcEnum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "type". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Type209Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "type". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Type653Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "protocol". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Protocol766Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "protocol". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "ProtocolFe4Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "auth_type". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "AuthTypeF47Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "status". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Status565Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "status". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Status6a0Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "status". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Status62cEnum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "status". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "Status71fEnum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
Warning: enum naming encountered a non-optimally resolvable collision for fields named "status". The same name has been used for multiple choice sets in multiple components. The collision was resolved with "StatusB66Enum". add an entry to ENUM_NAME_OVERRIDES to fix the naming.
🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.