@@ -109,6 +109,30 @@ export const FilamentCreate: React.FC<IResourceComponentsProps> = () => {
|
|||||||
>
|
>
|
||||||
<InputNumber min={0} addonAfter="g" />
|
<InputNumber min={0} addonAfter="g" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="Override Extruder Temperature"
|
||||||
|
help="Override the extruder temperature for this filament type."
|
||||||
|
name={["settings_extruder_temp"]}
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<InputNumber min={0} addonAfter="°C" />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="Override Bed Temperature"
|
||||||
|
help="Override the bed temperature for this filament type."
|
||||||
|
name={["settings_bed_temp"]}
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<InputNumber min={0} addonAfter="°C" />
|
||||||
|
</Form.Item>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
label="Article Number"
|
label="Article Number"
|
||||||
name={["article_number"]}
|
name={["article_number"]}
|
||||||
|
|||||||
@@ -147,6 +147,30 @@ export const FilamentEdit: React.FC<IResourceComponentsProps> = () => {
|
|||||||
>
|
>
|
||||||
<InputNumber min={0} addonAfter="g" />
|
<InputNumber min={0} addonAfter="g" />
|
||||||
</Form.Item>
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="Override Extruder Temperature"
|
||||||
|
help="Override the extruder temperature for this filament type."
|
||||||
|
name={["settings_extruder_temp"]}
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<InputNumber min={0} addonAfter="°C" />
|
||||||
|
</Form.Item>
|
||||||
|
<Form.Item
|
||||||
|
label="Override Bed Temperature"
|
||||||
|
help="Override the bed temperature for this filament type."
|
||||||
|
name={["settings_bed_temp"]}
|
||||||
|
rules={[
|
||||||
|
{
|
||||||
|
required: false,
|
||||||
|
},
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<InputNumber min={0} addonAfter="°C" />
|
||||||
|
</Form.Item>
|
||||||
<Form.Item
|
<Form.Item
|
||||||
label="Article Number"
|
label="Article Number"
|
||||||
name={["article_number"]}
|
name={["article_number"]}
|
||||||
|
|||||||
@@ -13,4 +13,6 @@ export interface IFilament {
|
|||||||
spool_weight?: number;
|
spool_weight?: number;
|
||||||
article_number?: string;
|
article_number?: string;
|
||||||
comment?: string;
|
comment?: string;
|
||||||
|
settings_extruder_temp?: number;
|
||||||
|
settings_bed_temp?: number;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -66,6 +66,28 @@ export const FilamentShow: React.FC<IResourceComponentsProps> = () => {
|
|||||||
maximumFractionDigits: 1,
|
maximumFractionDigits: 1,
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
|
<Title level={5}>Overridden Extruder Temperature</Title>
|
||||||
|
{
|
||||||
|
!record?.settings_extruder_temp ? (
|
||||||
|
<TextField value="Not Set" />
|
||||||
|
) : (
|
||||||
|
<NumberFieldUnit
|
||||||
|
value={record?.settings_extruder_temp ?? ""}
|
||||||
|
unit="°C"
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
|
<Title level={5}>Overridden Bed Temperature</Title>
|
||||||
|
{
|
||||||
|
!record?.settings_bed_temp ? (
|
||||||
|
<TextField value="Not Set" />
|
||||||
|
) : (
|
||||||
|
<NumberFieldUnit
|
||||||
|
value={record?.settings_bed_temp ?? ""}
|
||||||
|
unit="°C"
|
||||||
|
/>
|
||||||
|
)
|
||||||
|
}
|
||||||
<Title level={5}>Article Number</Title>
|
<Title level={5}>Article Number</Title>
|
||||||
<TextField value={record?.article_number} />
|
<TextField value={record?.article_number} />
|
||||||
<Title level={5}>Comment</Title>
|
<Title level={5}>Comment</Title>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
"""${message}-
|
"""${message}.
|
||||||
|
|
||||||
Revision ID: ${up_revision}
|
Revision ID: ${up_revision}
|
||||||
Revises: ${down_revision | comma,n}
|
Revises: ${down_revision | comma,n}
|
||||||
@@ -7,7 +7,6 @@ Create Date: ${create_date}
|
|||||||
import sqlalchemy as sa
|
import sqlalchemy as sa
|
||||||
from alembic import op
|
from alembic import op
|
||||||
${imports if imports else ""}
|
${imports if imports else ""}
|
||||||
|
|
||||||
# revision identifiers, used by Alembic.
|
# revision identifiers, used by Alembic.
|
||||||
revision = ${repr(up_revision)}
|
revision = ${repr(up_revision)}
|
||||||
down_revision = ${repr(down_revision)}
|
down_revision = ${repr(down_revision)}
|
||||||
|
|||||||
@@ -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")
|
||||||
@@ -63,6 +63,16 @@ class FilamentParameters(BaseModel):
|
|||||||
description="Free text comment about this filament type.",
|
description="Free text comment about this filament type.",
|
||||||
example="",
|
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):
|
class FilamentUpdateParameters(FilamentParameters):
|
||||||
@@ -152,6 +162,8 @@ async def create(
|
|||||||
spool_weight=body.spool_weight,
|
spool_weight=body.spool_weight,
|
||||||
article_number=body.article_number,
|
article_number=body.article_number,
|
||||||
comment=body.comment,
|
comment=body.comment,
|
||||||
|
settings_extruder_temp=body.settings_extruder_temp,
|
||||||
|
settings_bed_temp=body.settings_bed_temp,
|
||||||
)
|
)
|
||||||
|
|
||||||
return Filament.from_db(db_item)
|
return Filament.from_db(db_item)
|
||||||
|
|||||||
@@ -69,6 +69,16 @@ class Filament(BaseModel):
|
|||||||
description="Free text comment about this filament type.",
|
description="Free text comment about this filament type.",
|
||||||
example="",
|
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
|
@staticmethod
|
||||||
def from_db(item: models.Filament) -> "Filament":
|
def from_db(item: models.Filament) -> "Filament":
|
||||||
@@ -86,6 +96,8 @@ class Filament(BaseModel):
|
|||||||
spool_weight=item.spool_weight,
|
spool_weight=item.spool_weight,
|
||||||
article_number=item.article_number,
|
article_number=item.article_number,
|
||||||
comment=item.comment,
|
comment=item.comment,
|
||||||
|
settings_extruder_temp=item.settings_extruder_temp,
|
||||||
|
settings_bed_temp=item.settings_bed_temp,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ async def create(
|
|||||||
spool_weight: Optional[float] = None,
|
spool_weight: Optional[float] = None,
|
||||||
article_number: Optional[str] = None,
|
article_number: Optional[str] = None,
|
||||||
comment: Optional[str] = None,
|
comment: Optional[str] = None,
|
||||||
|
settings_extruder_temp: Optional[int] = None,
|
||||||
|
settings_bed_temp: Optional[int] = None,
|
||||||
) -> models.Filament:
|
) -> models.Filament:
|
||||||
"""Add a new filament to the database."""
|
"""Add a new filament to the database."""
|
||||||
vendor_item: Optional[models.Vendor] = None
|
vendor_item: Optional[models.Vendor] = None
|
||||||
@@ -41,6 +43,8 @@ async def create(
|
|||||||
spool_weight=spool_weight,
|
spool_weight=spool_weight,
|
||||||
article_number=article_number,
|
article_number=article_number,
|
||||||
comment=comment,
|
comment=comment,
|
||||||
|
settings_extruder_temp=settings_extruder_temp,
|
||||||
|
settings_bed_temp=settings_bed_temp,
|
||||||
)
|
)
|
||||||
db.add(db_item)
|
db.add(db_item)
|
||||||
await db.flush()
|
await db.flush()
|
||||||
|
|||||||
@@ -39,7 +39,8 @@ class Filament(Base):
|
|||||||
spool_weight: Mapped[Optional[float]] = mapped_column(comment="The weight of an empty spool.")
|
spool_weight: Mapped[Optional[float]] = mapped_column(comment="The weight of an empty spool.")
|
||||||
article_number: Mapped[Optional[str]] = mapped_column(String(64))
|
article_number: Mapped[Optional[str]] = mapped_column(String(64))
|
||||||
comment: Mapped[Optional[str]] = mapped_column(String(1024))
|
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?
|
# TODO: Color?
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ def test_add_filament(random_vendor: dict[str, Any]):
|
|||||||
spool_weight = 250
|
spool_weight = 250
|
||||||
article_number = "123456789"
|
article_number = "123456789"
|
||||||
comment = "abcdefghåäö"
|
comment = "abcdefghåäö"
|
||||||
|
settings_extruder_temp = 200
|
||||||
|
settings_bed_temp = 60
|
||||||
result = httpx.post(
|
result = httpx.post(
|
||||||
f"{URL}/api/v1/filament",
|
f"{URL}/api/v1/filament",
|
||||||
json={
|
json={
|
||||||
@@ -32,6 +34,8 @@ def test_add_filament(random_vendor: dict[str, Any]):
|
|||||||
"spool_weight": spool_weight,
|
"spool_weight": spool_weight,
|
||||||
"article_number": article_number,
|
"article_number": article_number,
|
||||||
"comment": comment,
|
"comment": comment,
|
||||||
|
"settings_extruder_temp": settings_extruder_temp,
|
||||||
|
"settings_bed_temp": settings_bed_temp,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
result.raise_for_status()
|
result.raise_for_status()
|
||||||
@@ -51,6 +55,8 @@ def test_add_filament(random_vendor: dict[str, Any]):
|
|||||||
"spool_weight": spool_weight,
|
"spool_weight": spool_weight,
|
||||||
"article_number": article_number,
|
"article_number": article_number,
|
||||||
"comment": comment,
|
"comment": comment,
|
||||||
|
"settings_extruder_temp": settings_extruder_temp,
|
||||||
|
"settings_bed_temp": settings_bed_temp,
|
||||||
}
|
}
|
||||||
|
|
||||||
# Clean up
|
# Clean up
|
||||||
@@ -96,6 +102,8 @@ def test_get_filament(random_vendor: dict[str, Any]):
|
|||||||
spool_weight = 250
|
spool_weight = 250
|
||||||
article_number = "123456789"
|
article_number = "123456789"
|
||||||
comment = "abcdefghåäö"
|
comment = "abcdefghåäö"
|
||||||
|
settings_extruder_temp = 200
|
||||||
|
settings_bed_temp = 60
|
||||||
result = httpx.post(
|
result = httpx.post(
|
||||||
f"{URL}/api/v1/filament",
|
f"{URL}/api/v1/filament",
|
||||||
json={
|
json={
|
||||||
@@ -109,6 +117,8 @@ def test_get_filament(random_vendor: dict[str, Any]):
|
|||||||
"spool_weight": spool_weight,
|
"spool_weight": spool_weight,
|
||||||
"article_number": article_number,
|
"article_number": article_number,
|
||||||
"comment": comment,
|
"comment": comment,
|
||||||
|
"settings_extruder_temp": settings_extruder_temp,
|
||||||
|
"settings_bed_temp": settings_bed_temp,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
result.raise_for_status()
|
result.raise_for_status()
|
||||||
@@ -122,18 +132,22 @@ def test_get_filament(random_vendor: dict[str, Any]):
|
|||||||
|
|
||||||
# Verify
|
# Verify
|
||||||
filament = result.json()
|
filament = result.json()
|
||||||
assert filament["name"] == name
|
assert filament == {
|
||||||
assert filament["vendor"] == random_vendor
|
"id": added_filament["id"],
|
||||||
assert filament["material"] == material
|
"registered": added_filament["registered"],
|
||||||
assert filament["price"] == price
|
"name": name,
|
||||||
assert filament["density"] == density
|
"vendor": random_vendor,
|
||||||
assert filament["diameter"] == diameter
|
"material": material,
|
||||||
assert filament["weight"] == weight
|
"price": price,
|
||||||
assert filament["spool_weight"] == spool_weight
|
"density": density,
|
||||||
assert filament["article_number"] == article_number
|
"diameter": diameter,
|
||||||
assert filament["comment"] == comment
|
"weight": weight,
|
||||||
assert filament["id"] == added_filament["id"]
|
"spool_weight": spool_weight,
|
||||||
assert filament["registered"] == added_filament["registered"]
|
"article_number": article_number,
|
||||||
|
"comment": comment,
|
||||||
|
"settings_extruder_temp": settings_extruder_temp,
|
||||||
|
"settings_bed_temp": settings_bed_temp,
|
||||||
|
}
|
||||||
|
|
||||||
# Clean up
|
# Clean up
|
||||||
httpx.delete(f"{URL}/api/v1/filament/{filament['id']}").raise_for_status()
|
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,
|
"spool_weight": 250,
|
||||||
"article_number": "123456789",
|
"article_number": "123456789",
|
||||||
"comment": "abcdefghåäö",
|
"comment": "abcdefghåäö",
|
||||||
|
"settings_extruder_temp": 200,
|
||||||
|
"settings_bed_temp": 60,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
result.raise_for_status()
|
result.raise_for_status()
|
||||||
@@ -346,6 +362,8 @@ def test_update_filament(random_vendor: dict[str, Any]):
|
|||||||
new_spool_weight = 123
|
new_spool_weight = 123
|
||||||
new_article_number = "987654321"
|
new_article_number = "987654321"
|
||||||
new_comment = "test"
|
new_comment = "test"
|
||||||
|
new_settings_extruder_temp = 210
|
||||||
|
new_settings_bed_temp = 70
|
||||||
result = httpx.patch(
|
result = httpx.patch(
|
||||||
f"{URL}/api/v1/filament/{added_filament['id']}",
|
f"{URL}/api/v1/filament/{added_filament['id']}",
|
||||||
json={
|
json={
|
||||||
@@ -359,24 +377,30 @@ def test_update_filament(random_vendor: dict[str, Any]):
|
|||||||
"spool_weight": new_spool_weight,
|
"spool_weight": new_spool_weight,
|
||||||
"article_number": new_article_number,
|
"article_number": new_article_number,
|
||||||
"comment": new_comment,
|
"comment": new_comment,
|
||||||
|
"settings_extruder_temp": new_settings_extruder_temp,
|
||||||
|
"settings_bed_temp": new_settings_bed_temp,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
result.raise_for_status()
|
result.raise_for_status()
|
||||||
|
|
||||||
# Verify
|
# Verify
|
||||||
filament = result.json()
|
filament = result.json()
|
||||||
assert filament["name"] == new_name
|
assert filament == {
|
||||||
assert filament["vendor"] == random_vendor
|
"id": added_filament["id"],
|
||||||
assert filament["material"] == new_material
|
"registered": added_filament["registered"],
|
||||||
assert filament["price"] == new_price
|
"name": new_name,
|
||||||
assert filament["density"] == new_density
|
"vendor": random_vendor,
|
||||||
assert filament["diameter"] == new_diameter
|
"material": new_material,
|
||||||
assert filament["weight"] == new_weight
|
"price": new_price,
|
||||||
assert filament["spool_weight"] == new_spool_weight
|
"density": new_density,
|
||||||
assert filament["article_number"] == new_article_number
|
"diameter": new_diameter,
|
||||||
assert filament["comment"] == new_comment
|
"weight": new_weight,
|
||||||
assert filament["id"] == added_filament["id"]
|
"spool_weight": new_spool_weight,
|
||||||
assert filament["registered"] == added_filament["registered"]
|
"article_number": new_article_number,
|
||||||
|
"comment": new_comment,
|
||||||
|
"settings_extruder_temp": new_settings_extruder_temp,
|
||||||
|
"settings_bed_temp": new_settings_bed_temp,
|
||||||
|
}
|
||||||
|
|
||||||
# Clean up
|
# Clean up
|
||||||
httpx.delete(f"{URL}/api/v1/filament/{filament['id']}").raise_for_status()
|
httpx.delete(f"{URL}/api/v1/filament/{filament['id']}").raise_for_status()
|
||||||
|
|||||||
Reference in New Issue
Block a user