From 4e409f6bb6b5872d3a611c5c26239922817a1f33 Mon Sep 17 00:00:00 2001 From: Donkie Date: Thu, 1 Jun 2023 19:56:24 +0200 Subject: [PATCH] Added filament color code field --- migrations/README | 1 - migrations/README.md | 6 +++++ ...53-db385b808a20_add_filament_color_code.py | 24 +++++++++++++++++++ spoolman/api/v1/filament.py | 7 ++++++ spoolman/api/v1/models.py | 7 ++++++ spoolman/database/filament.py | 2 ++ spoolman/database/models.py | 1 + tests_integration/tests/test_filament.py | 10 ++++++++ 8 files changed, 57 insertions(+), 1 deletion(-) delete mode 100644 migrations/README create mode 100644 migrations/README.md create mode 100644 migrations/versions/2023_06_01_1953-db385b808a20_add_filament_color_code.py diff --git a/migrations/README b/migrations/README deleted file mode 100644 index a23d4fb..0000000 --- a/migrations/README +++ /dev/null @@ -1 +0,0 @@ -Generic single-database configuration with an async dbapi. diff --git a/migrations/README.md b/migrations/README.md new file mode 100644 index 0000000..c29cffe --- /dev/null +++ b/migrations/README.md @@ -0,0 +1,6 @@ +# Migrations + +Creating a new version: +```bash +alembic revision -m "some title" --autogenerate +``` diff --git a/migrations/versions/2023_06_01_1953-db385b808a20_add_filament_color_code.py b/migrations/versions/2023_06_01_1953-db385b808a20_add_filament_color_code.py new file mode 100644 index 0000000..0e825b0 --- /dev/null +++ b/migrations/versions/2023_06_01_1953-db385b808a20_add_filament_color_code.py @@ -0,0 +1,24 @@ +"""add filament color code. + +Revision ID: db385b808a20 +Revises: b47376d60c6d +Create Date: 2023-06-01 19:53:44.440616 +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = "db385b808a20" +down_revision = "b47376d60c6d" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + """Perform the upgrade.""" + op.add_column("filament", sa.Column("color_hex", sa.String(length=6), nullable=True)) + + +def downgrade() -> None: + """Perform the downgrade.""" + op.drop_column("filament", "color_hex") diff --git a/spoolman/api/v1/filament.py b/spoolman/api/v1/filament.py index 97ad0a7..c026b06 100644 --- a/spoolman/api/v1/filament.py +++ b/spoolman/api/v1/filament.py @@ -73,6 +73,12 @@ class FilamentParameters(BaseModel): description="Overridden bed temperature, in °C.", example=60, ) + color_hex: Optional[str] = Field( + min_length=6, + max_length=6, + description="Hexadecimal color code of the filament, e.g. FF0000 for red. (no leading #)", + example="FF0000", + ) class FilamentUpdateParameters(FilamentParameters): @@ -164,6 +170,7 @@ async def create( comment=body.comment, settings_extruder_temp=body.settings_extruder_temp, settings_bed_temp=body.settings_bed_temp, + color_hex=body.color_hex, ) return Filament.from_db(db_item) diff --git a/spoolman/api/v1/models.py b/spoolman/api/v1/models.py index 16a58a1..884f601 100644 --- a/spoolman/api/v1/models.py +++ b/spoolman/api/v1/models.py @@ -79,6 +79,12 @@ class Filament(BaseModel): description="Overridden bed temperature, in °C.", example=60, ) + color_hex: Optional[str] = Field( + min_length=6, + max_length=6, + description="Hexadecimal color code of the filament, e.g. FF0000 for red. (no leading #)", + example="FF0000", + ) @staticmethod def from_db(item: models.Filament) -> "Filament": @@ -98,6 +104,7 @@ class Filament(BaseModel): comment=item.comment, settings_extruder_temp=item.settings_extruder_temp, settings_bed_temp=item.settings_bed_temp, + color_hex=item.color_hex, ) diff --git a/spoolman/database/filament.py b/spoolman/database/filament.py index a921e78..ee2b172 100644 --- a/spoolman/database/filament.py +++ b/spoolman/database/filament.py @@ -26,6 +26,7 @@ async def create( comment: Optional[str] = None, settings_extruder_temp: Optional[int] = None, settings_bed_temp: Optional[int] = None, + color_hex: Optional[str] = None, ) -> models.Filament: """Add a new filament to the database.""" vendor_item: models.Vendor | None = None @@ -45,6 +46,7 @@ async def create( comment=comment, settings_extruder_temp=settings_extruder_temp, settings_bed_temp=settings_bed_temp, + color_hex=color_hex, ) db.add(db_item) await db.flush() diff --git a/spoolman/database/models.py b/spoolman/database/models.py index 24e21d8..cac8340 100644 --- a/spoolman/database/models.py +++ b/spoolman/database/models.py @@ -41,6 +41,7 @@ class Filament(Base): comment: Mapped[Optional[str]] = mapped_column(String(1024)) settings_extruder_temp: Mapped[Optional[int]] = mapped_column(comment="Overridden extruder temperature.") settings_bed_temp: Mapped[Optional[int]] = mapped_column(comment="Overridden bed temperature.") + color_hex: Mapped[Optional[str]] = mapped_column(String(6)) class Spool(Base): diff --git a/tests_integration/tests/test_filament.py b/tests_integration/tests/test_filament.py index fa440dd..607fcbc 100644 --- a/tests_integration/tests/test_filament.py +++ b/tests_integration/tests/test_filament.py @@ -21,6 +21,7 @@ def test_add_filament(random_vendor: dict[str, Any]): comment = "abcdefghåäö" settings_extruder_temp = 200 settings_bed_temp = 60 + color_hex = "FF0000" result = httpx.post( f"{URL}/api/v1/filament", json={ @@ -36,6 +37,7 @@ def test_add_filament(random_vendor: dict[str, Any]): "comment": comment, "settings_extruder_temp": settings_extruder_temp, "settings_bed_temp": settings_bed_temp, + "color_hex": color_hex, }, ) result.raise_for_status() @@ -57,6 +59,7 @@ def test_add_filament(random_vendor: dict[str, Any]): "comment": comment, "settings_extruder_temp": settings_extruder_temp, "settings_bed_temp": settings_bed_temp, + "color_hex": color_hex, } # Clean up @@ -104,6 +107,7 @@ def test_get_filament(random_vendor: dict[str, Any]): comment = "abcdefghåäö" settings_extruder_temp = 200 settings_bed_temp = 60 + color_hex = "FF0000" result = httpx.post( f"{URL}/api/v1/filament", json={ @@ -119,6 +123,7 @@ def test_get_filament(random_vendor: dict[str, Any]): "comment": comment, "settings_extruder_temp": settings_extruder_temp, "settings_bed_temp": settings_bed_temp, + "color_hex": color_hex, }, ) result.raise_for_status() @@ -147,6 +152,7 @@ def test_get_filament(random_vendor: dict[str, Any]): "comment": comment, "settings_extruder_temp": settings_extruder_temp, "settings_bed_temp": settings_bed_temp, + "color_hex": color_hex, } # Clean up @@ -347,6 +353,7 @@ def test_update_filament(random_vendor: dict[str, Any]): "comment": "abcdefghåäö", "settings_extruder_temp": 200, "settings_bed_temp": 60, + "color_hex": "FF0000", }, ) result.raise_for_status() @@ -364,6 +371,7 @@ def test_update_filament(random_vendor: dict[str, Any]): new_comment = "test" new_settings_extruder_temp = 210 new_settings_bed_temp = 70 + new_color_hex = "00FF00" result = httpx.patch( f"{URL}/api/v1/filament/{added_filament['id']}", json={ @@ -379,6 +387,7 @@ def test_update_filament(random_vendor: dict[str, Any]): "comment": new_comment, "settings_extruder_temp": new_settings_extruder_temp, "settings_bed_temp": new_settings_bed_temp, + "color_hex": new_color_hex, }, ) result.raise_for_status() @@ -400,6 +409,7 @@ def test_update_filament(random_vendor: dict[str, Any]): "comment": new_comment, "settings_extruder_temp": new_settings_extruder_temp, "settings_bed_temp": new_settings_bed_temp, + "color_hex": new_color_hex, } # Clean up