diff --git a/.github/ISSUE_TEMPLATE/01-feature_request.yaml b/.github/ISSUE_TEMPLATE/01-feature_request.yaml index f7cf89ee6..89f550298 100644 --- a/.github/ISSUE_TEMPLATE/01-feature_request.yaml +++ b/.github/ISSUE_TEMPLATE/01-feature_request.yaml @@ -15,7 +15,7 @@ body: attributes: label: NetBox version description: What version of NetBox are you currently running? - placeholder: v4.2.5 + placeholder: v4.2.6 validations: required: true - type: dropdown diff --git a/.github/ISSUE_TEMPLATE/02-bug_report.yaml b/.github/ISSUE_TEMPLATE/02-bug_report.yaml index 7a4910dcc..8b1f56914 100644 --- a/.github/ISSUE_TEMPLATE/02-bug_report.yaml +++ b/.github/ISSUE_TEMPLATE/02-bug_report.yaml @@ -27,7 +27,7 @@ body: attributes: label: NetBox Version description: What version of NetBox are you currently running? - placeholder: v4.2.5 + placeholder: v4.2.6 validations: required: true - type: dropdown diff --git a/base_requirements.txt b/base_requirements.txt index 75ee4bbfd..3490f3874 100644 --- a/base_requirements.txt +++ b/base_requirements.txt @@ -8,7 +8,10 @@ django-cors-headers # Runtime UI tool for debugging Django # https://github.com/jazzband/django-debug-toolbar/blob/main/docs/changes.rst -django-debug-toolbar +# See: https://django-debug-toolbar.readthedocs.io/en/latest/changes.html#id1 +# "Wrap SHOW_TOOLBAR_CALLBACK function with sync_to_async or async_to_sync to allow sync/async +# compatibility." breaks stawberry-graphql-django at version 0.52.0 (current) +django-debug-toolbar==5.0.1 # Library for writing reusable URL query filters # https://github.com/carltongibson/django-filter/blob/main/CHANGES.rst @@ -88,8 +91,7 @@ mkdocs-material # Introspection for embedded code # https://github.com/mkdocstrings/mkdocstrings/blob/main/CHANGELOG.md -# See #18568 -mkdocstrings[python-legacy]==0.27.0 +mkdocstrings[python] # Library for manipulating IP prefixes and addresses # https://github.com/netaddr/netaddr/blob/master/CHANGELOG.rst diff --git a/contrib/generated_schema.json b/contrib/generated_schema.json index 639f0df8d..5a0616ac2 100644 --- a/contrib/generated_schema.json +++ b/contrib/generated_schema.json @@ -500,6 +500,9 @@ "n", "mrj21", "fc", + "fc-pc", + "fc-upc", + "fc-apc", "lc", "lc-pc", "lc-upc", @@ -565,6 +568,9 @@ "n", "mrj21", "fc", + "fc-pc", + "fc-upc", + "fc-apc", "lc", "lc-pc", "lc-upc", diff --git a/docs/release-notes/version-4.2.md b/docs/release-notes/version-4.2.md index 67493806b..c71297b82 100644 --- a/docs/release-notes/version-4.2.md +++ b/docs/release-notes/version-4.2.md @@ -1,5 +1,41 @@ # NetBox v4.2 +## v4.2.6 (2025-03-21) + +### Enhancements + +* [#17503](https://github.com/netbox-community/netbox/issues/17503) - Add rack title above rack on rack detail view +* [#17686](https://github.com/netbox-community/netbox/issues/17686) - Add config option for disk space divisor +* [#18579](https://github.com/netbox-community/netbox/issues/18579) - Update filtersets and filter forms to include contact filters where missing +* [#18744](https://github.com/netbox-community/netbox/issues/18744) - Ensure contact link in tables is hyperlinked +* [#18816](https://github.com/netbox-community/netbox/issues/18816) - Add FC/UPC, FC/APC and FC/PC port types +* [#18880](https://github.com/netbox-community/netbox/issues/18880) - Delay enqueuing background tasks until DB transaction is committed to avoid race condition +* [#18939](https://github.com/netbox-community/netbox/issues/18939) - Support site group search for ASNs + +### Bug Fixes + +* [#18409](https://github.com/netbox-community/netbox/issues/18409) - Eliminate N+1 issue by adding generic prefetch operation to Interface API endpoint +* [#18557](https://github.com/netbox-community/netbox/issues/18557) - Update JSONField to enclose bare string values in quotes +* [#18582](https://github.com/netbox-community/netbox/issues/18582) - Fix prefix bulk import with +* associated VLAN and conflicting VLAN IDs +* [#18742](https://github.com/netbox-community/netbox/issues/18742) - Ensure location list and detail views show related VLAN group information +* [#18782](https://github.com/netbox-community/netbox/issues/18782) - Ensure misconfigured object list widgets on the dashboard now degrade gracefully +* [#18833](https://github.com/netbox-community/netbox/issues/18833) - Fix inventory item bulk to ensure that component name and type are both validated properly +* [#18838](https://github.com/netbox-community/netbox/issues/18838) - Esnure that local context context data correctly rejects false-y value +* [#18845](https://github.com/netbox-community/netbox/issues/18845) - Restore default sort behavior of name column on devices list view +* [#18863](https://github.com/netbox-community/netbox/issues/18863) - Exempt MPTT-based models from ordering fix introduced in #18279 +* [#18869](https://github.com/netbox-community/netbox/issues/18869) - Ensure numeric conversion helper always return a clean decimal value +* [#18872](https://github.com/netbox-community/netbox/issues/18872) - Ensure that `kind` is a required field when making journal entries +* [#18884](https://github.com/netbox-community/netbox/issues/18884) - Ensure tag deserialization is handled correctly +* [#18887](https://github.com/netbox-community/netbox/issues/18887) - Allow VM interface objects to be set on prefix object-type custom field +* [#18926](https://github.com/netbox-community/netbox/issues/18926) - Fix icon displayed for Github authentication on login page +* [#18928](https://github.com/netbox-community/netbox/issues/18928) - Support cascading deletions when cleaning up expired changelog records +* [#18933](https://github.com/netbox-community/netbox/issues/18933) - Allow filtering VLAN groups by associated site groups +* [#18944](https://github.com/netbox-community/netbox/issues/18944) - Ensure clearing widget type field when adding widgets to dashboard does not cause a 500 error +* [#18949](https://github.com/netbox-community/netbox/issues/18949) - Add missing contacts property to GraphQL types where the associated model has a connection to a contact + +--- + ## v4.2.5 (2025-03-06) ### Enhancements diff --git a/netbox/project-static/dist/netbox.js b/netbox/project-static/dist/netbox.js index 6650f0fab..37ee63f0a 100644 --- a/netbox/project-static/dist/netbox.js +++ b/netbox/project-static/dist/netbox.js @@ -1,12 +1,12 @@ -"use strict";(()=>{var Xh=Object.create;var Aa=Object.defineProperty,Jh=Object.defineProperties,Zh=Object.getOwnPropertyDescriptor,ep=Object.getOwnPropertyDescriptors,tp=Object.getOwnPropertyNames,su=Object.getOwnPropertySymbols,ip=Object.getPrototypeOf,au=Object.prototype.hasOwnProperty,np=Object.prototype.propertyIsEnumerable;var $l=(ii,ei,ti)=>ei in ii?Aa(ii,ei,{enumerable:!0,configurable:!0,writable:!0,value:ti}):ii[ei]=ti,Di=(ii,ei)=>{for(var ti in ei||(ei={}))au.call(ei,ti)&&$l(ii,ti,ei[ti]);if(su)for(var ti of su(ei))np.call(ei,ti)&&$l(ii,ti,ei[ti]);return ii},sn=(ii,ei)=>Jh(ii,ep(ei));var lu=(ii,ei)=>()=>(ei||ii((ei={exports:{}}).exports,ei),ei.exports),cu=(ii,ei)=>{for(var ti in ei)Aa(ii,ti,{get:ei[ti],enumerable:!0})},rp=(ii,ei,ti,ni)=>{if(ei&&typeof ei=="object"||typeof ei=="function")for(let ri of tp(ei))!au.call(ii,ri)&&ri!==ti&&Aa(ii,ri,{get:()=>ei[ri],enumerable:!(ni=Zh(ei,ri))||ni.enumerable});return ii};var uu=(ii,ei,ti)=>(ti=ii!=null?Xh(ip(ii)):{},rp(ei||!ii||!ii.__esModule?Aa(ti,"default",{value:ii,enumerable:!0}):ti,ii));var en=(ii,ei,ti)=>$l(ii,typeof ei!="symbol"?ei+"":ei,ti);var co=(ii,ei,ti)=>new Promise((ni,ri)=>{var oi=li=>{try{ai(ti.next(li))}catch(ui){ri(ui)}},si=li=>{try{ai(ti.throw(li))}catch(ui){ri(ui)}},ai=li=>li.done?ni(li.value):Promise.resolve(li.value).then(oi,si);ai((ti=ti.apply(ii,ei)).next())});var Md=lu((exports,module)=>{(function(ii,ei){typeof define=="function"&&define.amd?define([],ei):typeof module=="object"&&module.exports?module.exports=ei():ii.htmx=ii.htmx||ei()})(typeof self!="undefined"?self:exports,function(){return function(){"use strict";var Q={onLoad:F,process:zt,on:de,off:ge,trigger:ce,ajax:Nr,find:C,findAll:f,closest:v,values:function(ii,ei){var ti=dr(ii,ei||"post");return ti.values},remove:_,addClass:z,removeClass:n,toggleClass:$,takeClass:W,defineExtension:Ur,removeExtension:Br,logAll:V,logNone:j,logger:null,config:{historyEnabled:!0,historyCacheSize:10,refreshOnHistoryMiss:!1,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:!0,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:!0,allowScriptTags:!0,inlineScriptNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:!1,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",useTemplateFragments:!1,scrollBehavior:"smooth",defaultFocusScroll:!1,getCacheBusterParam:!1,globalViewTransitions:!1,methodsThatUseUrlParams:["get"],selfRequestsOnly:!1,ignoreTitle:!1,scrollIntoViewOnBoost:!0,triggerSpecsCache:null},parseInterval:d,_:t,createEventSource:function(ii){return new EventSource(ii,{withCredentials:!0})},createWebSocket:function(ii){var ei=new WebSocket(ii,[]);return ei.binaryType=Q.config.wsBinaryType,ei},version:"1.9.12"},r={addTriggerHandler:Lt,bodyContains:se,canAccessLocalStorage:U,findThisElement:xe,filterValues:yr,hasAttribute:o,getAttributeValue:te,getClosestAttributeValue:ne,getClosestMatch:c,getExpressionVars:Hr,getHeaders:xr,getInputValues:dr,getInternalData:ae,getSwapSpecification:wr,getTriggerSpecs:it,getTarget:ye,makeFragment:l,mergeObjects:le,makeSettleInfo:T,oobSwap:Ee,querySelectorExt:ue,selectAndSwap:je,settleImmediately:nr,shouldCancel:ut,triggerEvent:ce,triggerErrorEvent:fe,withExtensions:R},w=["get","post","put","delete","patch"],i=w.map(function(ii){return"[hx-"+ii+"], [data-hx-"+ii+"]"}).join(", "),S=e("head"),q=e("title"),H=e("svg",!0);function e(ii,ei){return new RegExp("<"+ii+"(\\s[^>]*>|>)([\\s\\S]*?)<\\/"+ii+">",ei?"gim":"im")}function d(ii){if(ii==null)return;let ei=NaN;return ii.slice(-2)=="ms"?ei=parseFloat(ii.slice(0,-2)):ii.slice(-1)=="s"?ei=parseFloat(ii.slice(0,-1))*1e3:ii.slice(-1)=="m"?ei=parseFloat(ii.slice(0,-1))*1e3*60:ei=parseFloat(ii),isNaN(ei)?void 0:ei}function ee(ii,ei){return ii.getAttribute&&ii.getAttribute(ei)}function o(ii,ei){return ii.hasAttribute&&(ii.hasAttribute(ei)||ii.hasAttribute("data-"+ei))}function te(ii,ei){return ee(ii,ei)||ee(ii,"data-"+ei)}function u(ii){return ii.parentElement}function re(){return document}function c(ii,ei){for(;ii&&!ei(ii);)ii=u(ii);return ii||null}function L(ii,ei,ti){var ni=te(ei,ti),ri=te(ei,"hx-disinherit");return ii!==ei&&ri&&(ri==="*"||ri.split(" ").indexOf(ti)>=0)?"unset":ni}function ne(ii,ei){var ti=null;if(c(ii,function(ni){return ti=L(ii,ni,ei)}),ti!=="unset")return ti}function h(ii,ei){var ti=ii.matches||ii.matchesSelector||ii.msMatchesSelector||ii.mozMatchesSelector||ii.webkitMatchesSelector||ii.oMatchesSelector;return ti&&ti.call(ii,ei)}function A(ii){var ei=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i,ti=ei.exec(ii);return ti?ti[1].toLowerCase():""}function s(ii,ei){for(var ti=new DOMParser,ni=ti.parseFromString(ii,"text/html"),ri=ni.body;ei>0;)ei--,ri=ri.firstChild;return ri==null&&(ri=re().createDocumentFragment()),ri}function N(ii){return/
"+ni+"",0),oi=ri.querySelector("template").content;return Q.config.allowScriptTags?oe(oi.querySelectorAll("script"),function(si){Q.config.inlineScriptNonce&&(si.nonce=Q.config.inlineScriptNonce),si.htmxExecuted=navigator.userAgent.indexOf("Firefox")===-1}):oe(oi.querySelectorAll("script"),function(si){_(si)}),oi}switch(ti){case"thead":case"tbody":case"tfoot":case"colgroup":case"caption":return s("