Skip to content

Commit 2d7d2d2

Browse files
authored
Update for Netbox 4.5.0 (#134)
2 parents 787cb36 + a1dd594 commit 2d7d2d2

File tree

10 files changed

+117
-25
lines changed

10 files changed

+117
-25
lines changed

.github/workflows/build-test.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,10 @@ jobs:
1010
steps:
1111
- name: Checkout repo
1212
uses: actions/checkout@v4
13-
- name: Set up Python 3.12
13+
- name: Set up Python 3.14
1414
uses: actions/setup-python@v5
1515
with:
16-
python-version: 3.12
16+
python-version: 3.14
1717
- name: Install dependencies
1818
run: |
1919
python -m pip install --upgrade pip

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ jobs:
2424
NETBOX_CONFIGURATION: netbox.configuration_lifecycle
2525
strategy:
2626
matrix:
27-
python-version: ['3.10', '3.11', '3.12']
27+
python-version: ['3.12', '3.13', '3.14']
2828
services:
2929
redis:
3030
image: redis

.github/workflows/pypi.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@ jobs:
1212
steps:
1313
- name: Checkout repo
1414
uses: actions/checkout@v4
15-
- name: Set up Python 3.12
15+
- name: Set up Python 3.14
1616
uses: actions/setup-python@v5
1717
with:
18-
python-version: 3.12
18+
python-version: 3.14
1919
- name: Install dependencies
2020
run: |
2121
python -m pip install --upgrade pip

contrib/configuration_lifecycle.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@
3939

4040
SECRET_KEY = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
4141

42+
API_TOKEN_PEPPERS = {
43+
1: 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789',
44+
}
45+
4246
DEFAULT_PERMISSIONS = {}
4347

4448
LOGGING = {

netbox_lifecycle/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class NetBoxLifeCycle(PluginConfig):
1313
author = metadata.get('Author')
1414
author_email = metadata.get('Author-email')
1515
base_url = 'lifecycle'
16-
min_version = '4.3.0'
16+
min_version = '4.5.0'
1717
required_settings = []
1818
default_settings = {
1919
'lifecycle_card_position': 'right_page',

netbox_lifecycle/graphql/filters.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import strawberry
44
import strawberry_django
55

6-
from core.graphql.filter_mixins import BaseObjectTypeFilterMixin
6+
from netbox.graphql.filters import PrimaryModelFilter
77
from netbox_lifecycle import models
88

99

@@ -19,28 +19,28 @@
1919

2020

2121
@strawberry_django.filter(models.Vendor, lookups=True)
22-
class VendorFilter(BaseObjectTypeFilterMixin):
22+
class VendorFilter(PrimaryModelFilter):
2323
pass
2424

2525

2626
@strawberry_django.filter(models.SupportSKU, lookups=True)
27-
class SupportSKUFilter(BaseObjectTypeFilterMixin):
27+
class SupportSKUFilter(PrimaryModelFilter):
2828
manufacturer: (
2929
Annotated['ManufacturerFilter', strawberry.lazy('dcim.graphql.filters')] | None
3030
) = strawberry_django.filter_field()
3131
manufacturer_id: strawberry.ID | None = strawberry_django.filter_field()
3232

3333

3434
@strawberry_django.filter(models.SupportContract, lookups=True)
35-
class SupportContractFilter(BaseObjectTypeFilterMixin):
35+
class SupportContractFilter(PrimaryModelFilter):
3636
vendor: (
3737
Annotated['ManufacturerFilter', strawberry.lazy('dcim.graphql.filters')] | None
3838
) = strawberry_django.filter_field()
3939
vendor_id: strawberry.ID | None = strawberry_django.filter_field()
4040

4141

4242
@strawberry_django.filter(models.SupportContractAssignment, lookups=True)
43-
class SupportContractAssignmentFilter(BaseObjectTypeFilterMixin):
43+
class SupportContractAssignmentFilter(PrimaryModelFilter):
4444
contract: (
4545
Annotated[
4646
'SupportContractFilter', strawberry.lazy('netbox_lifecycle.graphql.filters')
@@ -74,15 +74,15 @@ class SupportContractAssignmentFilter(BaseObjectTypeFilterMixin):
7474

7575

7676
@strawberry_django.filter(models.License, lookups=True)
77-
class LicenseFilter(BaseObjectTypeFilterMixin):
77+
class LicenseFilter(PrimaryModelFilter):
7878
manufacturer: (
7979
Annotated['ManufacturerFilter', strawberry.lazy('dcim.graphql.filters')] | None
8080
) = strawberry_django.filter_field()
8181
manufacturer_id: strawberry.ID | None = strawberry_django.filter_field()
8282

8383

8484
@strawberry_django.filter(models.LicenseAssignment, lookups=True)
85-
class LicenseAssignmentFilter(BaseObjectTypeFilterMixin):
85+
class LicenseAssignmentFilter(PrimaryModelFilter):
8686
vendor: (
8787
Annotated['VendorFilter', strawberry.lazy('netbox_lifecycle.graphql.filters')]
8888
| None
@@ -107,7 +107,7 @@ class LicenseAssignmentFilter(BaseObjectTypeFilterMixin):
107107

108108

109109
@strawberry_django.filter(models.HardwareLifecycle, lookups=True)
110-
class HardwareLifecycleFilter(BaseObjectTypeFilterMixin):
110+
class HardwareLifecycleFilter(PrimaryModelFilter):
111111
device_type: (
112112
Annotated['DeviceTypeFilter', strawberry.lazy('dcim.graphql.filters')] | None
113113
) = strawberry_django.filter_field()

netbox_lifecycle/graphql/types.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
ModuleType,
1212
)
1313
from virtualization.graphql.types import VirtualMachineType
14-
from netbox.graphql.types import NetBoxObjectType
14+
from netbox.graphql.types import PrimaryObjectType
1515
from .filters import *
1616

1717
from netbox_lifecycle import models
@@ -28,12 +28,12 @@
2828

2929

3030
@strawberry_django.type(models.Vendor, fields='__all__', filters=VendorFilter)
31-
class VendorType(NetBoxObjectType):
31+
class VendorType(PrimaryObjectType):
3232
name: str
3333

3434

3535
@strawberry_django.type(models.SupportSKU, fields='__all__', filters=SupportSKUFilter)
36-
class SupportSKUType(NetBoxObjectType):
36+
class SupportSKUType(PrimaryObjectType):
3737

3838
sku: str
3939
manufacturer: ManufacturerType
@@ -42,7 +42,7 @@ class SupportSKUType(NetBoxObjectType):
4242
@strawberry_django.type(
4343
models.SupportContract, fields='__all__', filters=SupportContractFilter
4444
)
45-
class SupportContractType(NetBoxObjectType):
45+
class SupportContractType(PrimaryObjectType):
4646

4747
vendor: VendorType
4848
contract_id: str
@@ -52,7 +52,7 @@ class SupportContractType(NetBoxObjectType):
5252

5353

5454
@strawberry_django.type(models.License, fields='__all__', filters=LicenseFilter)
55-
class LicenseType(NetBoxObjectType):
55+
class LicenseType(PrimaryObjectType):
5656

5757
manufacturer: ManufacturerType
5858
name: str
@@ -63,7 +63,7 @@ class LicenseType(NetBoxObjectType):
6363
fields='__all__',
6464
filters=SupportContractAssignmentFilter,
6565
)
66-
class SupportContractAssignmentType(NetBoxObjectType):
66+
class SupportContractAssignmentType(PrimaryObjectType):
6767
contract: SupportContractType
6868
sku: SupportSKUType | None
6969
device: DeviceType | None
@@ -76,7 +76,7 @@ class SupportContractAssignmentType(NetBoxObjectType):
7676
@strawberry_django.type(
7777
models.LicenseAssignment, fields='__all__', filters=LicenseAssignmentFilter
7878
)
79-
class LicenseAssignmentType(NetBoxObjectType):
79+
class LicenseAssignmentType(PrimaryObjectType):
8080
license: LicenseType
8181
vendor: VendorType
8282
device: DeviceType | None
@@ -87,7 +87,7 @@ class LicenseAssignmentType(NetBoxObjectType):
8787
@strawberry_django.type(
8888
models.HardwareLifecycle, fields='__all__', filters=HardwareLifecycleFilter
8989
)
90-
class HardwareLifecycleType(NetBoxObjectType):
90+
class HardwareLifecycleType(PrimaryObjectType):
9191
assigned_object_type: (
9292
Annotated["ContentTypeType", strawberry.lazy('netbox.graphql.types')] | None
9393
)
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
# Generated by Django 5.2.5 on 2026-01-07 04:52
2+
3+
import django.db.models.deletion
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("netbox_lifecycle", "0017_optional_lifecycle_dates"),
11+
("users", "0015_owner"),
12+
]
13+
14+
operations = [
15+
migrations.AddField(
16+
model_name="hardwarelifecycle",
17+
name="owner",
18+
field=models.ForeignKey(
19+
blank=True,
20+
null=True,
21+
on_delete=django.db.models.deletion.PROTECT,
22+
to="users.owner",
23+
),
24+
),
25+
migrations.AddField(
26+
model_name="license",
27+
name="owner",
28+
field=models.ForeignKey(
29+
blank=True,
30+
null=True,
31+
on_delete=django.db.models.deletion.PROTECT,
32+
to="users.owner",
33+
),
34+
),
35+
migrations.AddField(
36+
model_name="licenseassignment",
37+
name="owner",
38+
field=models.ForeignKey(
39+
blank=True,
40+
null=True,
41+
on_delete=django.db.models.deletion.PROTECT,
42+
to="users.owner",
43+
),
44+
),
45+
migrations.AddField(
46+
model_name="supportcontract",
47+
name="owner",
48+
field=models.ForeignKey(
49+
blank=True,
50+
null=True,
51+
on_delete=django.db.models.deletion.PROTECT,
52+
to="users.owner",
53+
),
54+
),
55+
migrations.AddField(
56+
model_name="supportcontractassignment",
57+
name="owner",
58+
field=models.ForeignKey(
59+
blank=True,
60+
null=True,
61+
on_delete=django.db.models.deletion.PROTECT,
62+
to="users.owner",
63+
),
64+
),
65+
migrations.AddField(
66+
model_name="supportsku",
67+
name="owner",
68+
field=models.ForeignKey(
69+
blank=True,
70+
null=True,
71+
on_delete=django.db.models.deletion.PROTECT,
72+
to="users.owner",
73+
),
74+
),
75+
migrations.AddField(
76+
model_name="vendor",
77+
name="owner",
78+
field=models.ForeignKey(
79+
blank=True,
80+
null=True,
81+
on_delete=django.db.models.deletion.PROTECT,
82+
to="users.owner",
83+
),
84+
),
85+
]

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,9 @@ maintainers = [
1515
]
1616
description = "NetBox Support Contract and EOL/EOS management"
1717
readme = "README.md"
18-
requires-python = ">=3.10"
18+
requires-python = ">=3.12"
1919
keywords = ["netbox-plugin", ]
20-
version = "1.1.6"
20+
version = "1.1.7"
2121
license = {file = "LICENSE"}
2222
classifiers = [
2323
"Programming Language :: Python :: 3",

ruff.toml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1-
exclude = []
1+
exclude = [
2+
'.github',
3+
'contrib',
4+
]
25
line-length = 120
36
target-version = "py310"
47
output-format = "github"

0 commit comments

Comments
 (0)