From d2acc4d9ab09bbd07f948fdceb636606f342967e Mon Sep 17 00:00:00 2001 From: "Asterix\\Oliver" Date: Wed, 19 Feb 2025 09:31:28 +0000 Subject: [PATCH 1/2] Add support for 'validation' mixin --- plugin_creator/mixins.py | 2 +- plugin_creator/template/cookiecutter.json | 3 +- .../{{ cookiecutter.package_name }}/core.py | 48 +++++++++++++++++++ 3 files changed, 51 insertions(+), 2 deletions(-) diff --git a/plugin_creator/mixins.py b/plugin_creator/mixins.py index e216e91..e6fe8c2 100644 --- a/plugin_creator/mixins.py +++ b/plugin_creator/mixins.py @@ -26,7 +26,7 @@ def available_mixins() -> list: # 'SupplierBarcodeMixin', # 'UrlsMixin', 'UserInterfaceMixin', - # 'ValidationMixin', + 'ValidationMixin', ] diff --git a/plugin_creator/template/cookiecutter.json b/plugin_creator/template/cookiecutter.json index 0bfa38e..8cc7ef8 100644 --- a/plugin_creator/template/cookiecutter.json +++ b/plugin_creator/template/cookiecutter.json @@ -11,7 +11,8 @@ "ReportMixin", "ScheduleMixin", "SettingsMixin", - "UserInterfaceMixin" + "UserInterfaceMixin", + "ValidationMixin" ] }, "plugin_description": "A short description of the project", diff --git a/plugin_creator/template/{{ cookiecutter.plugin_name }}/{{ cookiecutter.package_name }}/core.py b/plugin_creator/template/{{ cookiecutter.plugin_name }}/{{ cookiecutter.package_name }}/core.py index 43c296f..9520829 100644 --- a/plugin_creator/template/{{ cookiecutter.plugin_name }}/{{ cookiecutter.package_name }}/core.py +++ b/plugin_creator/template/{{ cookiecutter.plugin_name }}/{{ cookiecutter.package_name }}/core.py @@ -158,3 +158,51 @@ def get_ui_dashboard_items(self, request, context: dict, **kwargs): {%- endif -%} {%- endif -%} {%- endif %} + {%- if "ValidationMixin" in cookiecutter.plugin_mixins.mixin_list %} + + # Custom data validation (from ValidationMixin) + # Ref: https://docs.inventree.org/en/stable/extend/plugins/validation/ + def validate_model_deletion(self, instance, **kwargs): + """Run custom validation when a model instance is being deleted.""" + ... + + def validate_model_instance(self, instance, deltas=None, **kwargs): + """Run custom validation on a database model instance.""" + ... + + def validate_part_name(self, name, part, **kwargs): + """Perform validation on a proposed Part name.""" + ... + + def validate_part_ipn(self, ipn, part, **kwargs): + """Perform validation on a proposed Part IPN.""" + ... + + def validate_part_parameter(self, parameter, data, **kwargs): + """Perform validation on a proposed Part parameter.""" + ... + + def validate_batch_code(self, batch_code, stock_item, **kwargs): + """Perform validation on a proposed StockItem batch code.""" + ... + + def generate_batch_code(self, **kwargs): + """Generate a new StockItem batch code.""" + ... + + def validate_serial_number(self, serial, part, stock_item, **kwargs): + """Perform validation on a proposed StockItem serial number.""" + ... + + def convert_serial_to_int(self, serial, **kwargs) -> int: + """Convert a serial number to an integer value.""" + return None + + def get_latest_serial_number(self, part, **kwargs): + """Return the latest serial number for a given part.""" + return None + + def increment_serial_number(self, serial, part = None, **kwargs): + """Increment a serial number.""" + return None + {%- endif %} From b1db8b6221c80e182d031eb3db3db53422465cc4 Mon Sep 17 00:00:00 2001 From: "Asterix\\Oliver" Date: Wed, 19 Feb 2025 09:33:36 +0000 Subject: [PATCH 2/2] PEP fixes --- .../{{ cookiecutter.package_name }}/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugin_creator/template/{{ cookiecutter.plugin_name }}/{{ cookiecutter.package_name }}/core.py b/plugin_creator/template/{{ cookiecutter.plugin_name }}/{{ cookiecutter.package_name }}/core.py index 9520829..8aaee5a 100644 --- a/plugin_creator/template/{{ cookiecutter.plugin_name }}/{{ cookiecutter.package_name }}/core.py +++ b/plugin_creator/template/{{ cookiecutter.plugin_name }}/{{ cookiecutter.package_name }}/core.py @@ -202,7 +202,7 @@ def get_latest_serial_number(self, part, **kwargs): """Return the latest serial number for a given part.""" return None - def increment_serial_number(self, serial, part = None, **kwargs): + def increment_serial_number(self, serial, part=None, **kwargs): """Increment a serial number.""" return None {%- endif %}