diff --git a/netbox/core/choices.py b/netbox/core/choices.py index 6603a7d4f..34d146017 100644 --- a/netbox/core/choices.py +++ b/netbox/core/choices.py @@ -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'), ) diff --git a/netbox/core/forms/model_forms.py b/netbox/core/forms/model_forms.py index 52c68fd79..0ee966a21 100644 --- a/netbox/core/forms/model_forms.py +++ b/netbox/core/forms/model_forms.py @@ -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) diff --git a/netbox/core/models/data.py b/netbox/core/models/data.py index 52a11c58e..60e1fe061 100644 --- a/netbox/core/models/data.py +++ b/netbox/core/models/data.py @@ -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()