diff --git a/client/src/pages/filaments/create.tsx b/client/src/pages/filaments/create.tsx index 1a9667b..f55ace5 100644 --- a/client/src/pages/filaments/create.tsx +++ b/client/src/pages/filaments/create.tsx @@ -109,6 +109,30 @@ export const FilamentCreate: React.FC = () => { > + + + + + + = () => { > + + + + + + = () => { maximumFractionDigits: 1, }} /> + Overridden Extruder Temperature + { + !record?.settings_extruder_temp ? ( + + ) : ( + + ) + } + Overridden Bed Temperature + { + !record?.settings_bed_temp ? ( + + ) : ( + + ) + } Article Number Comment diff --git a/migrations/script.py.mako b/migrations/script.py.mako index a01d007..6293ed7 100644 --- a/migrations/script.py.mako +++ b/migrations/script.py.mako @@ -1,4 +1,4 @@ -"""${message}- +"""${message}. Revision ID: ${up_revision} Revises: ${down_revision | comma,n} @@ -7,7 +7,6 @@ Create Date: ${create_date} import sqlalchemy as sa from alembic import op ${imports if imports else ""} - # revision identifiers, used by Alembic. revision = ${repr(up_revision)} down_revision = ${repr(down_revision)} diff --git a/migrations/versions/2023_05_28_2136-b47376d60c6d_add_extruder_and_bed_temperature_.py b/migrations/versions/2023_05_28_2136-b47376d60c6d_add_extruder_and_bed_temperature_.py new file mode 100644 index 0000000..f6bd5cb --- /dev/null +++ b/migrations/versions/2023_05_28_2136-b47376d60c6d_add_extruder_and_bed_temperature_.py @@ -0,0 +1,32 @@ +"""add extruder and bed temperature override. + +Revision ID: b47376d60c6d +Revises: 684d32cf7e4d +Create Date: 2023-05-28 21:36:53.452067 +""" +import sqlalchemy as sa +from alembic import op + +# revision identifiers, used by Alembic. +revision = "b47376d60c6d" +down_revision = "684d32cf7e4d" +branch_labels = None +depends_on = None + + +def upgrade() -> None: + """Perform the upgrade.""" + op.add_column( + "filament", + sa.Column("settings_extruder_temp", sa.Integer(), nullable=True, comment="Overridden extruder temperature."), + ) + op.add_column( + "filament", + sa.Column("settings_bed_temp", sa.Integer(), nullable=True, comment="Overridden bed temperature."), + ) + + +def downgrade() -> None: + """Perform the downgrade.""" + op.drop_column("filament", "settings_bed_temp") + op.drop_column("filament", "settings_extruder_temp") diff --git a/spoolman/api/v1/filament.py b/spoolman/api/v1/filament.py index 71b6fc3..97ad0a7 100644 --- a/spoolman/api/v1/filament.py +++ b/spoolman/api/v1/filament.py @@ -63,6 +63,16 @@ class FilamentParameters(BaseModel): description="Free text comment about this filament type.", example="", ) + settings_extruder_temp: Optional[int] = Field( + ge=0, + description="Overridden extruder temperature, in °C.", + example=210, + ) + settings_bed_temp: Optional[int] = Field( + ge=0, + description="Overridden bed temperature, in °C.", + example=60, + ) class FilamentUpdateParameters(FilamentParameters): @@ -152,6 +162,8 @@ async def create( spool_weight=body.spool_weight, article_number=body.article_number, comment=body.comment, + settings_extruder_temp=body.settings_extruder_temp, + settings_bed_temp=body.settings_bed_temp, ) return Filament.from_db(db_item) diff --git a/spoolman/api/v1/models.py b/spoolman/api/v1/models.py index 4c7797e..2689637 100644 --- a/spoolman/api/v1/models.py +++ b/spoolman/api/v1/models.py @@ -69,6 +69,16 @@ class Filament(BaseModel): description="Free text comment about this filament type.", example="", ) + settings_extruder_temp: Optional[int] = Field( + ge=0, + description="Overridden extruder temperature, in °C.", + example=210, + ) + settings_bed_temp: Optional[int] = Field( + ge=0, + description="Overridden bed temperature, in °C.", + example=60, + ) @staticmethod def from_db(item: models.Filament) -> "Filament": @@ -86,6 +96,8 @@ class Filament(BaseModel): spool_weight=item.spool_weight, article_number=item.article_number, comment=item.comment, + settings_extruder_temp=item.settings_extruder_temp, + settings_bed_temp=item.settings_bed_temp, ) diff --git a/spoolman/database/filament.py b/spoolman/database/filament.py index fb9068e..e622c08 100644 --- a/spoolman/database/filament.py +++ b/spoolman/database/filament.py @@ -24,6 +24,8 @@ async def create( spool_weight: Optional[float] = None, article_number: Optional[str] = None, comment: Optional[str] = None, + settings_extruder_temp: Optional[int] = None, + settings_bed_temp: Optional[int] = None, ) -> models.Filament: """Add a new filament to the database.""" vendor_item: Optional[models.Vendor] = None @@ -41,6 +43,8 @@ async def create( spool_weight=spool_weight, article_number=article_number, comment=comment, + settings_extruder_temp=settings_extruder_temp, + settings_bed_temp=settings_bed_temp, ) db.add(db_item) await db.flush() diff --git a/spoolman/database/models.py b/spoolman/database/models.py index 7cda6ce..c8343ca 100644 --- a/spoolman/database/models.py +++ b/spoolman/database/models.py @@ -39,7 +39,8 @@ class Filament(Base): spool_weight: Mapped[Optional[float]] = mapped_column(comment="The weight of an empty spool.") article_number: Mapped[Optional[str]] = mapped_column(String(64)) comment: Mapped[Optional[str]] = mapped_column(String(1024)) - # TODO: Print settings + settings_extruder_temp: Mapped[Optional[int]] = mapped_column(comment="Overridden extruder temperature.") + settings_bed_temp: Mapped[Optional[int]] = mapped_column(comment="Overridden bed temperature.") # TODO: Color? diff --git a/tests_integration/tests/test_filament.py b/tests_integration/tests/test_filament.py index 9488d84..fa440dd 100644 --- a/tests_integration/tests/test_filament.py +++ b/tests_integration/tests/test_filament.py @@ -19,6 +19,8 @@ def test_add_filament(random_vendor: dict[str, Any]): spool_weight = 250 article_number = "123456789" comment = "abcdefghåäö" + settings_extruder_temp = 200 + settings_bed_temp = 60 result = httpx.post( f"{URL}/api/v1/filament", json={ @@ -32,6 +34,8 @@ def test_add_filament(random_vendor: dict[str, Any]): "spool_weight": spool_weight, "article_number": article_number, "comment": comment, + "settings_extruder_temp": settings_extruder_temp, + "settings_bed_temp": settings_bed_temp, }, ) result.raise_for_status() @@ -51,6 +55,8 @@ def test_add_filament(random_vendor: dict[str, Any]): "spool_weight": spool_weight, "article_number": article_number, "comment": comment, + "settings_extruder_temp": settings_extruder_temp, + "settings_bed_temp": settings_bed_temp, } # Clean up @@ -96,6 +102,8 @@ def test_get_filament(random_vendor: dict[str, Any]): spool_weight = 250 article_number = "123456789" comment = "abcdefghåäö" + settings_extruder_temp = 200 + settings_bed_temp = 60 result = httpx.post( f"{URL}/api/v1/filament", json={ @@ -109,6 +117,8 @@ def test_get_filament(random_vendor: dict[str, Any]): "spool_weight": spool_weight, "article_number": article_number, "comment": comment, + "settings_extruder_temp": settings_extruder_temp, + "settings_bed_temp": settings_bed_temp, }, ) result.raise_for_status() @@ -122,18 +132,22 @@ def test_get_filament(random_vendor: dict[str, Any]): # Verify filament = result.json() - assert filament["name"] == name - assert filament["vendor"] == random_vendor - assert filament["material"] == material - assert filament["price"] == price - assert filament["density"] == density - assert filament["diameter"] == diameter - assert filament["weight"] == weight - assert filament["spool_weight"] == spool_weight - assert filament["article_number"] == article_number - assert filament["comment"] == comment - assert filament["id"] == added_filament["id"] - assert filament["registered"] == added_filament["registered"] + assert filament == { + "id": added_filament["id"], + "registered": added_filament["registered"], + "name": name, + "vendor": random_vendor, + "material": material, + "price": price, + "density": density, + "diameter": diameter, + "weight": weight, + "spool_weight": spool_weight, + "article_number": article_number, + "comment": comment, + "settings_extruder_temp": settings_extruder_temp, + "settings_bed_temp": settings_bed_temp, + } # Clean up httpx.delete(f"{URL}/api/v1/filament/{filament['id']}").raise_for_status() @@ -331,6 +345,8 @@ def test_update_filament(random_vendor: dict[str, Any]): "spool_weight": 250, "article_number": "123456789", "comment": "abcdefghåäö", + "settings_extruder_temp": 200, + "settings_bed_temp": 60, }, ) result.raise_for_status() @@ -346,6 +362,8 @@ def test_update_filament(random_vendor: dict[str, Any]): new_spool_weight = 123 new_article_number = "987654321" new_comment = "test" + new_settings_extruder_temp = 210 + new_settings_bed_temp = 70 result = httpx.patch( f"{URL}/api/v1/filament/{added_filament['id']}", json={ @@ -359,24 +377,30 @@ def test_update_filament(random_vendor: dict[str, Any]): "spool_weight": new_spool_weight, "article_number": new_article_number, "comment": new_comment, + "settings_extruder_temp": new_settings_extruder_temp, + "settings_bed_temp": new_settings_bed_temp, }, ) result.raise_for_status() # Verify filament = result.json() - assert filament["name"] == new_name - assert filament["vendor"] == random_vendor - assert filament["material"] == new_material - assert filament["price"] == new_price - assert filament["density"] == new_density - assert filament["diameter"] == new_diameter - assert filament["weight"] == new_weight - assert filament["spool_weight"] == new_spool_weight - assert filament["article_number"] == new_article_number - assert filament["comment"] == new_comment - assert filament["id"] == added_filament["id"] - assert filament["registered"] == added_filament["registered"] + assert filament == { + "id": added_filament["id"], + "registered": added_filament["registered"], + "name": new_name, + "vendor": random_vendor, + "material": new_material, + "price": new_price, + "density": new_density, + "diameter": new_diameter, + "weight": new_weight, + "spool_weight": new_spool_weight, + "article_number": new_article_number, + "comment": new_comment, + "settings_extruder_temp": new_settings_extruder_temp, + "settings_bed_temp": new_settings_bed_temp, + } # Clean up httpx.delete(f"{URL}/api/v1/filament/{filament['id']}").raise_for_status()