diff --git a/netbox_custom_objects/__init__.py b/netbox_custom_objects/__init__.py index 764f551..4bcdcbc 100644 --- a/netbox_custom_objects/__init__.py +++ b/netbox_custom_objects/__init__.py @@ -73,9 +73,9 @@ class CustomObjectsPluginConfig(PluginConfig): name = "netbox_custom_objects" verbose_name = "Custom Objects" description = "A plugin to manage custom objects in NetBox" - version = "0.1.0" + version = "0.2.0" base_url = "custom-objects" - min_version = "4.2.0" + min_version = "4.4.0" default_settings = {} required_settings = [] template_extensions = "template_content.template_extensions" diff --git a/netbox_custom_objects/migrations/0001_initial.py b/netbox_custom_objects/migrations/0001_initial.py index fb6f1e3..9852865 100644 --- a/netbox_custom_objects/migrations/0001_initial.py +++ b/netbox_custom_objects/migrations/0001_initial.py @@ -1,9 +1,10 @@ -import re +# Generated by Django 5.2.5 on 2025-08-18 17:15 import django.core.validators import django.db.models.deletion import django.db.models.functions.text -import netbox_custom_objects.models +import netbox.models.deletion +import re import taggit.managers import utilities.json import utilities.validators @@ -15,8 +16,8 @@ class Migration(migrations.Migration): initial = True dependencies = [ - ('core', '0012_job_object_type_optional'), - ('extras', '0123_journalentry_kind_default'), + ("core", "0018_concrete_objecttype"), + ("extras", "0132_configcontextprofile"), ] operations = [ @@ -28,33 +29,7 @@ class Migration(migrations.Migration): "indexes": [], "constraints": [], }, - bases=("contenttypes.contenttype",), - managers=[ - ( - "objects", - netbox_custom_objects.models.CustomObjectObjectTypeManager(), - ), - ], - ), - migrations.CreateModel( - name="CustomObject", - fields=[ - ( - "id", - models.BigAutoField( - auto_created=True, primary_key=True, serialize=False - ), - ), - ( - "tags", - taggit.managers.TaggableManager( - through="extras.TaggedItem", to="extras.Tag" - ), - ), - ], - options={ - "abstract": False, - }, + bases=("core.objecttype",), ), migrations.CreateModel( name="CustomObjectType", @@ -75,8 +50,9 @@ class Migration(migrations.Migration): encoder=utilities.json.CustomFieldJSONEncoder, ), ), + ("description", models.CharField(blank=True, max_length=200)), + ("comments", models.TextField(blank=True)), ("name", models.CharField(max_length=100, unique=True)), - ("description", models.TextField(blank=True)), ("schema", models.JSONField(blank=True, default=dict)), ("verbose_name_plural", models.CharField(blank=True, max_length=100)), ( @@ -90,6 +66,7 @@ class Migration(migrations.Migration): "verbose_name": "Custom Object Type", "ordering": ("name",), }, + bases=(netbox.models.deletion.DeleteMixin, models.Model), ), migrations.CreateModel( name="CustomObjectTypeField", @@ -117,7 +94,7 @@ class Migration(migrations.Migration): django.core.validators.RegexValidator( flags=re.RegexFlag["IGNORECASE"], inverse_match=True, - message="Double underscores are not permitted in custom field names.", + message="Double underscores are not permitted in custom object field names.", regex="__", ), ], @@ -128,7 +105,7 @@ class Migration(migrations.Migration): ("description", models.CharField(blank=True, max_length=200)), ("required", models.BooleanField(default=False)), ("unique", models.BooleanField(default=False)), - ("search_weight", models.PositiveSmallIntegerField(default=1000)), + ("search_weight", models.PositiveSmallIntegerField(default=500)), ("filter_logic", models.CharField(default="loose", max_length=50)), ("default", models.JSONField(blank=True, null=True)), ("related_object_filter", models.JSONField(blank=True, null=True)), @@ -180,6 +157,7 @@ class Migration(migrations.Migration): "verbose_name_plural": "custom object type fields", "ordering": ["group_name", "weight", "name"], }, + bases=(netbox.models.deletion.DeleteMixin, models.Model), ), migrations.AddConstraint( model_name="customobjecttype", diff --git a/netbox_custom_objects/migrations/0002_customobject_created_customobject_last_updated.py b/netbox_custom_objects/migrations/0002_customobject_created_customobject_last_updated.py deleted file mode 100644 index 0948529..0000000 --- a/netbox_custom_objects/migrations/0002_customobject_created_customobject_last_updated.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 5.2.2 on 2025-07-15 17:59 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("netbox_custom_objects", "0001_initial"), - ] - - operations = [ - migrations.AddField( - model_name="customobject", - name="created", - field=models.DateTimeField(auto_now_add=True, null=True), - ), - migrations.AddField( - model_name="customobject", - name="last_updated", - field=models.DateTimeField(auto_now=True, null=True), - ), - ] diff --git a/netbox_custom_objects/migrations/0003_delete_customobject.py b/netbox_custom_objects/migrations/0003_delete_customobject.py deleted file mode 100644 index 33c6463..0000000 --- a/netbox_custom_objects/migrations/0003_delete_customobject.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 5.2.2 on 2025-07-18 20:24 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ( - "netbox_custom_objects", - "0002_customobject_created_customobject_last_updated", - ), - ] - - operations = [ - migrations.DeleteModel( - name="CustomObject", - ), - ] diff --git a/netbox_custom_objects/migrations/0004_customobjecttype_comments.py b/netbox_custom_objects/migrations/0004_customobjecttype_comments.py deleted file mode 100644 index 1010543..0000000 --- a/netbox_custom_objects/migrations/0004_customobjecttype_comments.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.2 on 2025-07-24 18:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("netbox_custom_objects", "0003_delete_customobject"), - ] - - operations = [ - migrations.AddField( - model_name="customobjecttype", - name="comments", - field=models.TextField(blank=True), - ), - ] diff --git a/netbox_custom_objects/migrations/0005_alter_customobjecttype_description.py b/netbox_custom_objects/migrations/0005_alter_customobjecttype_description.py deleted file mode 100644 index a8ce3cb..0000000 --- a/netbox_custom_objects/migrations/0005_alter_customobjecttype_description.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 5.2.2 on 2025-07-30 16:37 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("netbox_custom_objects", "0004_customobjecttype_comments"), - ] - - operations = [ - migrations.AlterField( - model_name="customobjecttype", - name="description", - field=models.CharField(blank=True, max_length=200), - ), - ] diff --git a/netbox_custom_objects/migrations/0006_alter_customobjecttypefield_name_and_more.py b/netbox_custom_objects/migrations/0006_alter_customobjecttypefield_name_and_more.py deleted file mode 100644 index b697e6e..0000000 --- a/netbox_custom_objects/migrations/0006_alter_customobjecttypefield_name_and_more.py +++ /dev/null @@ -1,40 +0,0 @@ -# Generated by Django 5.2.4 on 2025-08-12 17:38 - -import django.core.validators -import re -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("netbox_custom_objects", "0005_alter_customobjecttype_description"), - ] - - operations = [ - migrations.AlterField( - model_name="customobjecttypefield", - name="name", - field=models.CharField( - max_length=50, - validators=[ - django.core.validators.RegexValidator( - flags=re.RegexFlag["IGNORECASE"], - message="Only alphanumeric characters and underscores are allowed.", - regex="^[a-z0-9_]+$", - ), - django.core.validators.RegexValidator( - flags=re.RegexFlag["IGNORECASE"], - inverse_match=True, - message="Double underscores are not permitted in custom object field names.", - regex="__", - ), - ], - ), - ), - migrations.AlterField( - model_name="customobjecttypefield", - name="search_weight", - field=models.PositiveSmallIntegerField(default=500), - ), - ] diff --git a/netbox_custom_objects/navigation.py b/netbox_custom_objects/navigation.py index 8381540..3a530ea 100644 --- a/netbox_custom_objects/navigation.py +++ b/netbox_custom_objects/navigation.py @@ -52,9 +52,10 @@ def __iter__(self): current_version = version.parse(settings.RELEASE.version) -groups = [(_("Object Types"), (custom_object_type_plugin_menu_item,))] -if current_version >= version.parse("4.3.4"): - groups.append((_("Objects"), CustomObjectTypeMenuItems())) +groups = [ + (_("Object Types"), (custom_object_type_plugin_menu_item,)), + (_("Objects"), CustomObjectTypeMenuItems()), +] menu = PluginMenu( label=_("Custom Objects"),