2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-06-17 04:25:42 +00:00

Parameter filtering (#4823)

* adds new field 'parameter type' to PartParameterTemplate model

* Move part parameter settings onto their own page

* Add "choices" and "regex" template types

* Adds validation for PartParameter based on template type

* javascript cleanup

* Fix for serializers.py

* Add unit testing for parameter validation

* Add filters

* Rename "type" field to "param_type"

- Should have seen that one coming

* Coerce 'boolean' value to True/False

* table update

* js linting

* Add requirement for "pint" package

* Add validator for physical unit types

- Revert a previous migration which adds "parameter type" and "validator" fields
- These will get implemented later, too much scope creep for this PR
- Add unit test for validation of "units" field

* Update PartParameter model

- Add data_numeric field (will be used later)
- Add MinLengthValidator to data field

* Run validation for part parameter data

- Ensure it can be converted to internal units

* Update admin interface to display partparameter values inline for a part

* Adds validation of part parameter data value

- Also converts to base units, and stores as "numeric" value
- Display "numeric" value in tables
- Create new file conversion.py for data conversion

* Update unit tests and fix some bugs

* Update docstring

* Add units to parameter columns in parameteric part table

* Allow part list to be ordered by a particular parameter value

- Annotate queryset with new "order_by_parameter" method
- Skeleton method for future work

* Bump API version

* Adds unit testing for sorting parts by parameter value

* Update historical data migrations

- Turns out RunPython.noop is a thing?

* Cache the unit registry

- Creating the unit registry takes a significant amount of time
- Construct when first called, and then cache for subsequent hits
- Massive improvement in performance

* Throw error on empty values when converting between units

* Data migration for converting existing part parameter values

* Handle more error cases

* Show parameteric table on top-level part page too

* Unit test for data migration

* Update credits in docs

* Improved error checking

* WIP docs updates

* Fix parameteric table filtering

* remove zoom property

* Fix for import path

* Update parameter docs

* Run background task to rebuild parameters when template changes

* Make "data_numeric" field nullable

- Defaulting to zero is not appropriate, as the actual value may be zero
- Sorting still seems to work just fine

* Fixes for unit test

* More unit test fixes

* Further fixes for unit tests

---------

Co-authored-by: Matthias Mair <code@mjmair.com>
This commit is contained in:
Oliver
2023-05-19 13:24:55 +10:00
committed by GitHub
parent cb8ae10280
commit 9e77b9fc56
53 changed files with 1148 additions and 367 deletions

View File

@ -11,10 +11,6 @@ def update_tree(apps, schema_editor):
Build.objects.rebuild()
def nupdate_tree(apps, schema_editor): # pragma: no cover
pass
class Migration(migrations.Migration):
atomic = False
@ -53,5 +49,5 @@ class Migration(migrations.Migration):
field=models.PositiveIntegerField(db_index=True, default=0, editable=False),
preserve_default=False,
),
migrations.RunPython(update_tree, reverse_code=nupdate_tree),
migrations.RunPython(update_tree, reverse_code=migrations.RunPython.noop),
]

View File

@ -23,13 +23,6 @@ def add_default_reference(apps, schema_editor):
print(f"\nUpdated build reference for {count} existing BuildOrder objects")
def reverse_default_reference(apps, schema_editor): # pragma: no cover
"""
Do nothing! But we need to have a function here so the whole process is reversible.
"""
pass
class Migration(migrations.Migration):
atomic = False
@ -49,7 +42,7 @@ class Migration(migrations.Migration):
# Auto-populate the new reference field for any existing build order objects
migrations.RunPython(
add_default_reference,
reverse_code=reverse_default_reference
reverse_code=migrations.RunPython.noop
),
# Now that each build has a non-empty, unique reference, update the field requirements!

View File

@ -51,14 +51,6 @@ def assign_bom_items(apps, schema_editor):
logger.info(f"Assigned BomItem for {count_valid}/{count_total} entries")
def unassign_bom_items(apps, schema_editor): # pragma: no cover
"""
Reverse migration does not do anything.
Function here to preserve ability to reverse migration
"""
pass
class Migration(migrations.Migration):
dependencies = [
@ -66,5 +58,5 @@ class Migration(migrations.Migration):
]
operations = [
migrations.RunPython(assign_bom_items, reverse_code=unassign_bom_items),
migrations.RunPython(assign_bom_items, reverse_code=migrations.RunPython.noop),
]

View File

@ -31,12 +31,6 @@ def build_refs(apps, schema_editor):
build.reference_int = ref
build.save()
def unbuild_refs(apps, schema_editor): # pragma: no cover
"""
Provided only for reverse migration compatibility
"""
pass
class Migration(migrations.Migration):
@ -49,6 +43,6 @@ class Migration(migrations.Migration):
operations = [
migrations.RunPython(
build_refs,
reverse_code=unbuild_refs
reverse_code=migrations.RunPython.noop
)
]

View File

@ -50,11 +50,6 @@ def update_build_reference(apps, schema_editor):
print(f"Updated reference field for {n} BuildOrder objects")
def nupdate_build_reference(apps, schema_editor):
"""Reverse migration code. Does nothing."""
pass
class Migration(migrations.Migration):
dependencies = [
@ -64,6 +59,6 @@ class Migration(migrations.Migration):
operations = [
migrations.RunPython(
update_build_reference,
reverse_code=nupdate_build_reference,
reverse_code=migrations.RunPython.noop,
)
]