Compare commits

...

20 Commits

Author SHA1 Message Date
Idris Foughali
02b23fb75b Merge cf16a29ad3 into ad29402b87 2025-12-15 00:09:07 +01:00
github-actions
ad29402b87 Update source translation strings
Some checks failed
CodeQL / Analyze (${{ matrix.language }}) (none, actions) (push) Has been cancelled
CodeQL / Analyze (${{ matrix.language }}) (none, javascript-typescript) (push) Has been cancelled
CodeQL / Analyze (${{ matrix.language }}) (none, python) (push) Has been cancelled
Lock threads / lock (push) Has been cancelled
Close stale issues/PRs / stale (push) Has been cancelled
Close incomplete issues / stale (push) Has been cancelled
Update translation strings / makemessages (push) Has been cancelled
2025-12-13 05:02:00 +00:00
ifoughali
cf16a29ad3 Style: removed comment 2025-12-05 15:24:35 +01:00
ifoughali
544c97d923 XMerge branch 'closes-20817-Fix-datasource-sync-broken-when-cron-is-set' of https://github.com/ifoughal/netbox into closes-20817-Fix-datasource-sync-broken-when-cron-is-set 2025-12-05 15:23:43 +01:00
ifoughali
77ee6baa23 refactor: moved status update logic from clean() to save() method 2025-12-05 15:23:38 +01:00
Idris Foughali
09d1049267 Merge branch 'netbox-community:main' into closes-20817-Fix-datasource-sync-broken-when-cron-is-set 2025-12-05 14:51:56 +01:00
Idris Foughali
93e5f919ba Merge branch 'netbox-community:main' into closes-20817-Fix-datasource-sync-broken-when-cron-is-set 2025-12-01 10:07:15 +01:00
ifoughali
929d024003 Merge branch 'closes-20817-Fix-datasource-sync-broken-when-cron-is-set' of https://github.com/ifoughal/netbox into closes-20817-Fix-datasource-sync-broken-when-cron-is-set 2025-11-26 09:00:22 +01:00
ifoughali
e4b614038e revert: re-added queued status set for datasource object 2025-11-26 09:00:17 +01:00
Idris Foughali
3016b1d90b Merge branch 'netbox-community:main' into closes-20817-Fix-datasource-sync-broken-when-cron-is-set 2025-11-26 08:55:12 +01:00
ifoughali
57b47dc1ea style: use != instead of not in for single SYNCING check 2025-11-26 08:05:20 +01:00
ifoughali
da4c669312 Feat: reworked status update logic 2025-11-20 11:27:39 +01:00
ifoughali
71f707b7ac Feat: removed SCHEDULED choice due to redundency with sync interval 2025-11-20 11:26:43 +01:00
ifoughali
e11508dd6c Fix: removed status update from the enqueue method 2025-11-20 10:50:35 +01:00
ifoughali
5b5b5c8909 Revert "Feat: set status as editable field"
This reverts commit b4160ad59b.
2025-11-19 20:18:59 +01:00
Idris Foughali
a49869af42 Feat: removed QUEUED from ready for sync condition 2025-11-19 19:01:01 +00:00
Idris Foughali
2e0ff04f84 Feat: added 2 states for DataSourceStatusChoices 2025-11-19 18:52:27 +00:00
Idris Foughali
bfeba36514 Feat: added status update during save method of DataSourceForm 2025-11-19 18:51:25 +00:00
Idris Foughali
111aca115b Feat: added clean method to set data-source state to Ready or scheduled 2025-11-19 18:51:01 +00:00
Idris Foughali
b4160ad59b Feat: set status as editable field 2025-11-19 18:49:47 +00:00
4 changed files with 62 additions and 48 deletions

View File

@@ -13,6 +13,7 @@ class DataSourceStatusChoices(ChoiceSet):
SYNCING = 'syncing'
COMPLETED = 'completed'
FAILED = 'failed'
READY = 'ready'
CHOICES = (
(NEW, _('New'), 'blue'),
@@ -20,6 +21,7 @@ class DataSourceStatusChoices(ChoiceSet):
(SYNCING, _('Syncing'), 'cyan'),
(COMPLETED, _('Completed'), 'green'),
(FAILED, _('Failed'), 'red'),
(READY, _('Ready'), 'green'),
)

View File

@@ -16,6 +16,7 @@ from utilities.forms import get_field_value
from utilities.forms.fields import CommentField, JSONField
from utilities.forms.rendering import FieldSet
from utilities.forms.widgets import HTMXSelect
from core.choices import DataSourceStatusChoices
__all__ = (
'ConfigRevisionForm',
@@ -79,14 +80,28 @@ class DataSourceForm(NetBoxModelForm):
if self.instance and self.instance.parameters:
self.fields[field_name].initial = self.instance.parameters.get(name)
def save(self, *args, **kwargs):
def save(self, *args, **kwargs):
parameters = {}
for name in self.fields:
if name.startswith('backend_'):
parameters[name[8:]] = self.cleaned_data[name]
self.instance.parameters = parameters
# Determine initial status based on new/existing instance
if not self.instance.pk:
# New instance
object_status = DataSourceStatusChoices.NEW
else:
# Existing instance
if not self.cleaned_data.get("sync_interval"):
object_status = DataSourceStatusChoices.READY
else:
object_status = self.instance.status
# # Final override only if the user explicitly provided a status
self.instance.status = object_status
return super().save(*args, **kwargs)

View File

@@ -111,10 +111,7 @@ class DataSource(JobsMixin, PrimaryModel):
@property
def ready_for_sync(self):
return self.enabled and self.status not in (
DataSourceStatusChoices.QUEUED,
DataSourceStatusChoices.SYNCING
)
return self.enabled and self.status != DataSourceStatusChoices.SYNCING
def clean(self):
super().clean()

View File

@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2025-12-12 05:02+0000\n"
"POT-Creation-Date: 2025-12-13 05:01+0000\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1441,7 +1441,7 @@ msgstr ""
#: netbox/dcim/models/device_components.py:517
#: netbox/dcim/models/device_components.py:1063
#: netbox/dcim/models/device_components.py:1134
#: netbox/dcim/models/device_components.py:1280
#: netbox/dcim/models/device_components.py:1282
#: netbox/dcim/models/devices.py:382 netbox/dcim/models/racks.py:227
#: netbox/extras/models/tags.py:29
msgid "color"
@@ -1469,8 +1469,8 @@ msgstr ""
#: netbox/circuits/models/virtual_circuits.py:59 netbox/core/models/data.py:52
#: netbox/core/models/jobs.py:95 netbox/dcim/models/cables.py:51
#: netbox/dcim/models/device_components.py:488
#: netbox/dcim/models/device_components.py:1319
#: netbox/dcim/models/devices.py:580 netbox/dcim/models/devices.py:1202
#: netbox/dcim/models/device_components.py:1321
#: netbox/dcim/models/devices.py:580 netbox/dcim/models/devices.py:1207
#: netbox/dcim/models/modules.py:209 netbox/dcim/models/power.py:94
#: netbox/dcim/models/racks.py:294 netbox/dcim/models/racks.py:677
#: netbox/dcim/models/sites.py:157 netbox/dcim/models/sites.py:281
@@ -1604,7 +1604,7 @@ msgstr ""
#: netbox/core/models/jobs.py:56
#: netbox/dcim/models/device_component_templates.py:44
#: netbox/dcim/models/device_components.py:53 netbox/dcim/models/devices.py:524
#: netbox/dcim/models/devices.py:1128 netbox/dcim/models/devices.py:1197
#: netbox/dcim/models/devices.py:1133 netbox/dcim/models/devices.py:1202
#: netbox/dcim/models/modules.py:31 netbox/dcim/models/power.py:38
#: netbox/dcim/models/power.py:89 netbox/dcim/models/racks.py:263
#: netbox/dcim/models/sites.py:145 netbox/extras/models/configs.py:36
@@ -3817,8 +3817,8 @@ msgstr ""
#: netbox/dcim/filtersets.py:1197 netbox/dcim/forms/filtersets.py:855
#: netbox/dcim/forms/filtersets.py:1483 netbox/dcim/forms/filtersets.py:1699
#: netbox/dcim/forms/model_forms.py:1900 netbox/dcim/models/devices.py:1298
#: netbox/dcim/models/devices.py:1318 netbox/virtualization/filtersets.py:201
#: netbox/dcim/forms/model_forms.py:1900 netbox/dcim/models/devices.py:1303
#: netbox/dcim/models/devices.py:1323 netbox/virtualization/filtersets.py:201
#: netbox/virtualization/filtersets.py:273
#: netbox/virtualization/forms/filtersets.py:178
#: netbox/virtualization/forms/filtersets.py:231
@@ -6277,12 +6277,12 @@ msgid ""
msgstr ""
#: netbox/dcim/models/device_component_templates.py:777
#: netbox/dcim/models/device_components.py:1340
#: netbox/dcim/models/device_components.py:1342
msgid "part ID"
msgstr ""
#: netbox/dcim/models/device_component_templates.py:779
#: netbox/dcim/models/device_components.py:1342
#: netbox/dcim/models/device_components.py:1344
msgid "Manufacturer-assigned part identifier"
msgstr ""
@@ -6631,83 +6631,83 @@ msgstr ""
msgid "A module bay cannot belong to a module installed within it."
msgstr ""
#: netbox/dcim/models/device_components.py:1243
#: netbox/dcim/models/device_components.py:1245
msgid "device bay"
msgstr ""
#: netbox/dcim/models/device_components.py:1244
#: netbox/dcim/models/device_components.py:1246
msgid "device bays"
msgstr ""
#: netbox/dcim/models/device_components.py:1251
#: netbox/dcim/models/device_components.py:1253
#, python-brace-format
msgid "This type of device ({device_type}) does not support device bays."
msgstr ""
#: netbox/dcim/models/device_components.py:1257
#: netbox/dcim/models/device_components.py:1259
msgid "Cannot install a device into itself."
msgstr ""
#: netbox/dcim/models/device_components.py:1265
#: netbox/dcim/models/device_components.py:1267
#, python-brace-format
msgid ""
"Cannot install the specified device; device is already installed in {bay}."
msgstr ""
#: netbox/dcim/models/device_components.py:1286
#: netbox/dcim/models/device_components.py:1288
msgid "inventory item role"
msgstr ""
#: netbox/dcim/models/device_components.py:1287
#: netbox/dcim/models/device_components.py:1289
msgid "inventory item roles"
msgstr ""
#: netbox/dcim/models/device_components.py:1346
#: netbox/dcim/models/device_components.py:1348
#: netbox/dcim/models/devices.py:533 netbox/dcim/models/modules.py:217
#: netbox/dcim/models/racks.py:310
#: netbox/virtualization/models/virtualmachines.py:125
msgid "serial number"
msgstr ""
#: netbox/dcim/models/device_components.py:1354
#: netbox/dcim/models/device_components.py:1356
#: netbox/dcim/models/devices.py:541 netbox/dcim/models/modules.py:224
#: netbox/dcim/models/racks.py:317
msgid "asset tag"
msgstr ""
#: netbox/dcim/models/device_components.py:1355
#: netbox/dcim/models/device_components.py:1357
msgid "A unique tag used to identify this item"
msgstr ""
#: netbox/dcim/models/device_components.py:1358
#: netbox/dcim/models/device_components.py:1360
msgid "discovered"
msgstr ""
#: netbox/dcim/models/device_components.py:1360
#: netbox/dcim/models/device_components.py:1362
msgid "This item was automatically discovered"
msgstr ""
#: netbox/dcim/models/device_components.py:1378
#: netbox/dcim/models/device_components.py:1380
msgid "inventory item"
msgstr ""
#: netbox/dcim/models/device_components.py:1379
#: netbox/dcim/models/device_components.py:1381
msgid "inventory items"
msgstr ""
#: netbox/dcim/models/device_components.py:1387
#: netbox/dcim/models/device_components.py:1389
msgid "Cannot assign self as parent."
msgstr ""
#: netbox/dcim/models/device_components.py:1395
#: netbox/dcim/models/device_components.py:1397
msgid "Parent inventory item does not belong to the same device."
msgstr ""
#: netbox/dcim/models/device_components.py:1401
#: netbox/dcim/models/device_components.py:1403
msgid "Cannot move an inventory item with dependent children"
msgstr ""
#: netbox/dcim/models/device_components.py:1409
#: netbox/dcim/models/device_components.py:1411
msgid "Cannot assign inventory item to component on another device"
msgstr ""
@@ -6867,12 +6867,12 @@ msgstr ""
msgid "rack face"
msgstr ""
#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1218
#: netbox/dcim/models/devices.py:598 netbox/dcim/models/devices.py:1223
#: netbox/virtualization/models/virtualmachines.py:94
msgid "primary IPv4"
msgstr ""
#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1226
#: netbox/dcim/models/devices.py:606 netbox/dcim/models/devices.py:1231
#: netbox/virtualization/models/virtualmachines.py:102
msgid "primary IPv6"
msgstr ""
@@ -7020,68 +7020,68 @@ msgid ""
"is currently designated as its master."
msgstr ""
#: netbox/dcim/models/devices.py:1133
#: netbox/dcim/models/devices.py:1138
msgid "domain"
msgstr ""
#: netbox/dcim/models/devices.py:1146 netbox/dcim/models/devices.py:1147
#: netbox/dcim/models/devices.py:1151 netbox/dcim/models/devices.py:1152
msgid "virtual chassis"
msgstr ""
#: netbox/dcim/models/devices.py:1159
#: netbox/dcim/models/devices.py:1164
#, python-brace-format
msgid "The selected master ({master}) is not assigned to this virtual chassis."
msgstr ""
#: netbox/dcim/models/devices.py:1174
#: netbox/dcim/models/devices.py:1179
#, python-brace-format
msgid ""
"Unable to delete virtual chassis {self}. There are member interfaces which "
"form a cross-chassis LAG interfaces."
msgstr ""
#: netbox/dcim/models/devices.py:1207 netbox/vpn/models/l2vpn.py:42
#: netbox/dcim/models/devices.py:1212 netbox/vpn/models/l2vpn.py:42
msgid "identifier"
msgstr ""
#: netbox/dcim/models/devices.py:1208
#: netbox/dcim/models/devices.py:1213
msgid "Numeric identifier unique to the parent device"
msgstr ""
#: netbox/dcim/models/devices.py:1236 netbox/extras/models/customfields.py:231
#: netbox/dcim/models/devices.py:1241 netbox/extras/models/customfields.py:231
#: netbox/extras/models/models.py:111 netbox/extras/models/models.py:800
#: netbox/netbox/models/__init__.py:120 netbox/netbox/models/__init__.py:155
msgid "comments"
msgstr ""
#: netbox/dcim/models/devices.py:1252
#: netbox/dcim/models/devices.py:1257
msgid "virtual device context"
msgstr ""
#: netbox/dcim/models/devices.py:1253
#: netbox/dcim/models/devices.py:1258
msgid "virtual device contexts"
msgstr ""
#: netbox/dcim/models/devices.py:1282
#: netbox/dcim/models/devices.py:1287
#, python-brace-format
msgid "{ip} is not an IPv{family} address."
msgstr ""
#: netbox/dcim/models/devices.py:1288
#: netbox/dcim/models/devices.py:1293
msgid "Primary IP address must belong to an interface on the assigned device."
msgstr ""
#: netbox/dcim/models/devices.py:1319
#: netbox/dcim/models/devices.py:1324
msgid "MAC addresses"
msgstr ""
#: netbox/dcim/models/devices.py:1351
#: netbox/dcim/models/devices.py:1356
msgid ""
"Cannot unassign MAC Address while it is designated as the primary MAC for an "
"object"
msgstr ""
#: netbox/dcim/models/devices.py:1355
#: netbox/dcim/models/devices.py:1360
msgid ""
"Cannot reassign MAC Address while it is designated as the primary MAC for an "
"object"