- Network Map tab — responsive height: The embedded map card on Site and Region detail pages
now resizes dynamically with the browser window instead of using a fixed 600 px height. A
resizeevent listener recalculates available viewport height and calls Leaflet'sinvalidateSize()to keep the map in sync. Ashown.bs.tablistener handles the case where the map tab is not active on page load (Leaflet would otherwise initialise with zero dimensions). - Network Map tab — initial fit-to-bounds: The map now opens zoomed to the bounding box of its objects rather than a fixed zoom level. For Site tabs the bounds are computed from the site's own connected segments only (not the full network), so a single-site view opens at the correct local zoom. For Region tabs the existing region-filtered queryset already provided correct bounds.
- Network Map tab — fitBounds after resize:
fitBoundsis re-applied after everyinvalidateSizecall so the zoom level remains correct for the final container dimensions, fixing a subtle issue where the earlyfitBoundscould be calculated against the pre-resize container size.
| cesnet_service_path_plugin | NetBox |
|---|---|
| 6.2.x | 4.5.4 – 4.6.x |
| 6.1.x | 4.5.4+ |
| 6.0.x | 4.5.0 – 4.5.3 |
- GIS —
MultiLineStringmissing SRID:gdf_to_multilinestring()returned aMultiLineStringwithoutsrid=4326, causing.sridto beNoneon the resulting geometry object. Fixed by passingsrid=4326explicitly to the constructor.
- Dependency — replaced
fionawithpyogrio:fionahas been removed as an explicit dependency. KML layer enumeration (fiona.listlayers) is now handled bypyogrio.list_layers, which is already a declared dependency ofgeopandasand ships as a self-contained manylinux wheel. No behaviour change for users. - Dependency cleanup — removed unused explicit dependencies:
pyprojandrtreewere declared inplugin_requirements.txtbut never imported directly by the plugin. Both are transitively provided bygeopandaswhen needed. Removed to reduce installation noise. - Docker — reduced required system packages: The custom NetBox Docker image now only needs
libgdalas a system package.libgeos-c1t64andlibproj25are no longer required at the OS level becauseshapelyandpyprojbundle their own native libraries inside their manylinux wheels.
- Tests — GIS utilities: Added two test modules covering
utils_gis.py:test_utils_gis_unit— no-database tests for format detection, KMZ extraction, KML layer reading, and 3D→2D coordinate stripping (django.test.SimpleTestCase).test_utils_gis_integration— full PostGIS round-trip tests forgdf_to_multilinestring,validate_path_geometry,process_path_file(GeoJSON / KML / KMZ), andexport_segment_paths_as_geojson(django.test.TestCase).- Synthetic fixture files (
sample.geojson,sample.kml,sample.kmz) with no real network data.
| cesnet_service_path_plugin | NetBox |
|---|---|
| 6.2.x | 4.5.4 – 4.6.x |
| 6.1.x | 4.5.4+ |
| 6.0.x | 4.5.0 – 4.5.3 |
- Compatibility — NetBox 4.6 support: Raised
max_versionto4.6.99after successful testing against NetBox 4.6.x. Plugin version 6.2.x is now supported on both NetBox 4.5.4+ and NetBox 4.6.x.
| cesnet_service_path_plugin | NetBox |
|---|---|
| 6.2.x | 4.5.4 – 4.6.x |
| 6.1.x | 4.5.4+ |
| 6.0.x | 4.5.0 – 4.5.3 |
- Segment Map — Interactive path editor: Authorised users can now draw and edit a segment's
geographic path directly on the single-segment map view without uploading a file.
- Click-to-draw: Click on the map to place vertices one by one, building up a LineString path.
- Drag to move: Drag any existing vertex to reposition it; the polyline rubber-bands in real time.
- Click line to insert: Click anywhere on the drawn polyline to insert a new vertex at that exact position. The new vertex immediately enters drag mode for precise placement.
- Right-click to delete: Right-click any vertex to remove it from the path.
- Last vertex highlight: The most recently placed vertex is rendered with a distinct solid fill so the path end is always obvious.
- Undo: Step back through the edit history one action at a time.
- Clear: Remove all vertices and start fresh without leaving edit mode.
- Delete Path: Delete the stored geometry for the segment entirely (with confirmation).
- Proximity warnings: If the path start or end is more than 100 m from the respective site marker, a confirmation dialog is shown before saving.
- Multi-segment auto-join: Existing paths stored as MultiLineString (e.g. from file upload) are automatically joined into a single editable LineString when gaps between segments are ≤ 10 m. Paths with larger gaps are flagged as "too complex to edit here".
- Read-only layer hide: The static GeoJSON path layer is hidden while the editor is active and restored on cancel, preventing visual overlap during editing.
- Permission-gated: Edit controls are only shown to users with
change_segmentpermission.
- Segment Map — Context-sensitive map button: The button on the segment detail page now adapts to four states based on path data availability and user permissions (View / View+Edit / Draw / hidden). View-only users with no stored path data but positioned sites still get a "View on Map" link to see the fallback straight line.
- Segment list — Path length column: The
path_length_kmvalue is now shown as a sortable column in the segment list table. - Segment filter — Has Editable Path: New filter
has_editable_pathlimits results to segments whose path geometry is a single LineString (i.e. directly editable in the map editor). Segments with disconnected multi-segment paths are excluded. - Segment API — Direct geometry write:
PATCH /api/.../segments/{id}/now accepts apath_geometryJSON field ({"type": "LineString", "coordinates": [...]}) to save a path from the map editor without a file upload.path_source_formatis set to"manual"automatically.POST(create) also supportspath_geometrywith the same behaviour.
- Segment serializer —
create()missing manual geometry handling: Creating a segment viaPOSTwith apath_geometryfield did not setpath_source_format = "manual". Fixed to match theupdate()behaviour.
| cesnet_service_path_plugin | NetBox |
|---|---|
| 6.2.x | 4.5.4+ |
| 6.1.x | 4.5.4+ |
| 6.0.x | 4.5.0 – 4.5.3 |
- Network Map — Edit mode: A new "Edit Map" toggle lets authorised users modify the map
directly from the Network Map view without leaving the page.
- Place unpositioned sites: Drag sites that have no coordinates onto the map to assign their latitude/longitude via the NetBox API.
- Create sites: Click an empty map location to open a form and create a new site with coordinates pre-filled.
- Create segments: Select two sites and fill in the inline form to create a new segment (name, type, provider, ownership, status).
- Create circuits: Select two sites and fill in the inline form to create a new circuit (CID, provider, type). Terminations A/Z are created automatically; the circuit is rolled back (deleted) if termination creation fails.
- Edit segment/circuit endpoints: Click an existing segment or circuit, then click a different site to move one endpoint. A confirmation dialog shows the old and new site before saving.
- Confirmation dialog: All endpoint replacement operations require explicit confirmation before the API call is made; pressing Escape or "Cancel" returns to the connection edit panel without changes.
- View links: After creating a site, segment, or circuit, the success panel includes a direct link to the new object's detail page.
- Network Map — Viewport-fixed layout: The map now fills the available browser viewport height and no longer scrolls off-screen. The right panel (filter sidebar, object list, edit mode panel) becomes independently scrollable within the same fixed height.
- Network Map — Sites always on top: Sites render in a dedicated Leaflet pane above segments and circuits so they remain clickable even when overlapping connections.
- Network Map — Object highlight cleared on click: Clicking a segment or circuit
immediately cleared the orange highlight because the background
map.clickdeselect handler fired after every object click. Fixed by stopping event propagation in all object click handlers. - Network Map — Objects not clickable after edit mode exit: Re-wiring click handlers
for read mode was missing
stopPropagation, causing the deselect handler to swallow clicks. Fixed in both site and connection handlers. - Network Map — Orphaned circuit on partial failure: If creating circuit terminations failed after the circuit was created, the orphaned circuit record was left in the database. The API layer now issues a best-effort DELETE rollback before propagating the error.
| cesnet_service_path_plugin | NetBox |
|---|---|
| 6.2.x | 4.5.4+ |
| 6.1.x | 4.5.4+ |
| 6.0.x | 4.5.0 – 4.5.3 |
- Network Map — Tag filters: Tag filter dropdowns added for Sites, Segments, and Circuits. Filtering uses AND logic — an object must carry all selected tags to match.
- Network Map — Object selection highlight: Clicking a segment, circuit, or site now highlights the selected object on the map in orange. Highlight is restored when another object is selected or the info card is closed.
- Network Map — Tag colors in info card: Tag badges in the detail info card now use the tag's configured color (with automatic light/dark contrast text).
- Network Map — Object list panel: A second "List" tab in the right panel provides a searchable, scrollable list of all visible objects with type toggles and click-to-locate.
- Network Map — Filter sidebar: Permanent right-side filter column replaces the offcanvas sidebar. Includes two "Clear Filters" buttons (top and bottom of the column).
- Network Map — Circuit termination details: Info card shows cable connection, cross-connect ID, port speed, and a "Connect" dropdown button for unconnected terminations.
- Network Map — Status/type filter buttons: Reverted from
<select multiple>dropdowns back to btn-check pill buttons following user testing feedback. Button sizing reduced (0.65 rem, 20 px height) using flexbox to eliminate Bootstrap padding asymmetry. - Network Map — Map popup links: Plain text links in segment, circuit, and site popups
replaced with
btn-outlinebuttons (View / Map) for better discoverability. - Network Map — Overlap popup: Added
<hr>separators between entries and View/Map buttons per segment. Segment names styled as blue links with hover underline and a "Click a name to show details" subtitle. - Network Map — Object list sync: List type buttons (Sites / Segs / Circs) now mirror the state of the main toolbar visibility toggles. List count and rows update immediately when toolbar toggles change. Circuits list button starts unchecked to match default hidden state.
- Network Map — Map height: Increased to 1000 px for better usability on larger screens.
- Network Map — Color palette: Segment and circuit colors updated to avoid green tones that blend with OSM map background.
- Network Map — Object list initial count: List now populates via
applyFilters()on first load so counts reflect server-side pre-filters (e.g. region in URL) immediately. - Network Map — List visibility respect: Object list respects layer visibility flags; hidden layers are excluded from the list count and rows.
- Network Map — Segment popup midpoint: When selecting a segment from the list, the popup now anchors to the middle vertex of the actual rendered GeoJSON polyline instead of the midpoint between the two endpoint sites.
- Network Map — Clear Filters Tom Select: Region and other dynamic fields (Tom Select
widgets) are now correctly cleared via
sel.tomselect.clear()/clearOptions(). - Network Map — Nav-tabs dark theme: Switched from
nav-tabstonav-pillsfor the Filters / List tab switcher so tab labels are visible in NetBox dark mode. - Network Map — Toggle button padding: Fixed uneven top/bottom padding on btn-check
filter pill buttons caused by Bootstrap
--bs-btn-padding-yoverride.
| cesnet_service_path_plugin | NetBox |
|---|---|
| 6.2.x | 4.5.4+ |
| 6.1.x | 4.5.4+ |
| 6.0.x | 4.5.0 – 4.5.3 |
- Added
referrerPolicy: 'strict-origin-when-cross-origin'to all Leaflet tile layer configurations (OpenStreetMap, Humanitarian OSM, CartoDB Positron, CartoDB Dark Matter, OpenTopoMap) to prevent map tile loading issues in environments with strict referrer policies.
| cesnet_service_path_plugin | NetBox |
|---|---|
| 6.1.x | 4.5.4+ |
| 6.0.x | 4.5.0 – 4.5.3 |
⚠️ Requires NetBox >= 4.5.4. NetBox 4.5.0–4.5.3 is not supported by this release — use v6.0.x for those versions.
-
Minimum NetBox version raised to 4.5.4. This release uses
StrFilterLookupfrom strawberry-graphql-django >= 0.79.0, which ships with NetBox 4.5.4. Starting the plugin on NetBox 4.5.0–4.5.3 will raise anImportError. -
GraphQL CharField filter types changed. All string filter fields migrated from
FilterLookup[str]→StrFilterLookup[str]to eliminateDuplicatedTypeNameschema errors introduced in strawberry-graphql-django 0.79.0. GraphQL clients relying on type introspection may need updating.
- GraphQL
@fieldresolver methods now correctly declareInfotype annotations, resolving startup errors on NetBox 4.5.4+ with stricter strawberry-django introspection.
| cesnet_service_path_plugin | NetBox |
|---|---|
| 6.1.0+ | 4.5.4+ |
| 6.0.x | 4.5.0 – 4.5.3 |
- New features and improvements.
- Enhancements to existing functionalities.
- Bugs addressed in this release.
- Features that will be removed in future releases.
- Obsolete features from the previous versions.
- Security improvements implemented.