46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
from django.contrib.contenttypes.models import ContentType
|
|
from django.core.exceptions import ObjectDoesNotExist
|
|
from extras.models import CustomField
|
|
|
|
|
|
def set_custom_fields_values(entity, custom_field_data):
|
|
if not custom_field_data:
|
|
return
|
|
|
|
missing_cfs = []
|
|
save = False
|
|
for key, value in custom_field_data.items():
|
|
try:
|
|
cf = CustomField.objects.get(name=key)
|
|
except ObjectDoesNotExist:
|
|
missing_cfs.append(key)
|
|
else:
|
|
ct = ContentType.objects.get_for_model(entity)
|
|
if ct not in cf.content_types.all():
|
|
print(
|
|
f"⚠️ Custom field {key} is not enabled for {entity}'s model!"
|
|
"Please check the 'on_objects' for that custom field in custom_fields.yml"
|
|
)
|
|
elif key not in entity.custom_field_data:
|
|
entity.custom_field_data[key] = value
|
|
save = True
|
|
|
|
if missing_cfs:
|
|
raise Exception(
|
|
f"⚠️ Custom field(s) '{missing_cfs}' requested for {entity} but not found in Netbox!"
|
|
"Please chceck the custom_fields.yml"
|
|
)
|
|
|
|
if save:
|
|
entity.save()
|
|
|
|
|
|
def pop_custom_fields(params):
|
|
if "custom_field_data" in params:
|
|
return params.pop("custom_field_data")
|
|
elif "custom_fields" in params:
|
|
print("⚠️ Please rename 'custom_fields' to 'custom_field_data'!")
|
|
return params.pop("custom_fields")
|
|
|
|
return None
|