@@ -109,6 +109,30 @@ export const FilamentCreate: React.FC<IResourceComponentsProps> = () => {
|
||||
>
|
||||
<InputNumber min={0} addonAfter="g" />
|
||||
</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
|
||||
label="Article Number"
|
||||
name={["article_number"]}
|
||||
|
||||
@@ -147,6 +147,30 @@ export const FilamentEdit: React.FC<IResourceComponentsProps> = () => {
|
||||
>
|
||||
<InputNumber min={0} addonAfter="g" />
|
||||
</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
|
||||
label="Article Number"
|
||||
name={["article_number"]}
|
||||
|
||||
@@ -13,4 +13,6 @@ export interface IFilament {
|
||||
spool_weight?: number;
|
||||
article_number?: string;
|
||||
comment?: string;
|
||||
settings_extruder_temp?: number;
|
||||
settings_bed_temp?: number;
|
||||
}
|
||||
|
||||
@@ -66,6 +66,28 @@ export const FilamentShow: React.FC<IResourceComponentsProps> = () => {
|
||||
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>
|
||||
<TextField value={record?.article_number} />
|
||||
<Title level={5}>Comment</Title>
|
||||
|
||||
@@ -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)}
|
||||
|
||||
@@ -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.",
|
||||
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)
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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?
|
||||
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user