Added external ID fields to filaments and vendors
This commit is contained in:
@@ -0,0 +1,31 @@
|
|||||||
|
"""Added external ID.
|
||||||
|
|
||||||
|
Revision ID: 395d560284b3
|
||||||
|
Revises: 5f069e51bd89
|
||||||
|
Create Date: 2024-05-12 19:30:17.261396
|
||||||
|
"""
|
||||||
|
|
||||||
|
import sqlalchemy as sa
|
||||||
|
from alembic import op
|
||||||
|
|
||||||
|
# revision identifiers, used by Alembic.
|
||||||
|
revision = "395d560284b3"
|
||||||
|
down_revision = "5f069e51bd89"
|
||||||
|
branch_labels = None
|
||||||
|
depends_on = None
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade() -> None:
|
||||||
|
"""Perform the upgrade."""
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.add_column("filament", sa.Column("external_id", sa.String(length=256), nullable=True))
|
||||||
|
op.add_column("vendor", sa.Column("external_id", sa.String(length=256), nullable=True))
|
||||||
|
# ### end Alembic commands ###
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade() -> None:
|
||||||
|
"""Perform the downgrade."""
|
||||||
|
# ### commands auto generated by Alembic - please adjust! ###
|
||||||
|
op.drop_column("vendor", "external_id")
|
||||||
|
op.drop_column("filament", "external_id")
|
||||||
|
# ### end Alembic commands ###
|
||||||
@@ -82,6 +82,13 @@ class FilamentParameters(BaseModel):
|
|||||||
description="Hexadecimal color code of the filament, e.g. FF0000 for red. Supports alpha channel at the end.",
|
description="Hexadecimal color code of the filament, e.g. FF0000 for red. Supports alpha channel at the end.",
|
||||||
example="FF0000",
|
example="FF0000",
|
||||||
)
|
)
|
||||||
|
external_id: Optional[str] = Field(
|
||||||
|
max_length=256,
|
||||||
|
description=(
|
||||||
|
"Set if this filament comes from an external database. This contains the ID in the external database."
|
||||||
|
),
|
||||||
|
example="polymaker_pla_polysonicblack_1000_175",
|
||||||
|
)
|
||||||
extra: Optional[dict[str, str]] = Field(
|
extra: Optional[dict[str, str]] = Field(
|
||||||
None,
|
None,
|
||||||
description="Extra fields for this filament.",
|
description="Extra fields for this filament.",
|
||||||
@@ -357,6 +364,7 @@ async def create( # noqa: ANN201
|
|||||||
settings_extruder_temp=body.settings_extruder_temp,
|
settings_extruder_temp=body.settings_extruder_temp,
|
||||||
settings_bed_temp=body.settings_bed_temp,
|
settings_bed_temp=body.settings_bed_temp,
|
||||||
color_hex=body.color_hex,
|
color_hex=body.color_hex,
|
||||||
|
external_id=body.external_id,
|
||||||
extra=body.extra,
|
extra=body.extra,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -61,6 +61,13 @@ class Vendor(BaseModel):
|
|||||||
name: str = Field(max_length=64, description="Vendor name.", example="Polymaker")
|
name: str = Field(max_length=64, description="Vendor name.", example="Polymaker")
|
||||||
comment: Optional[str] = Field(max_length=1024, description="Free text comment about this vendor.", example="")
|
comment: Optional[str] = Field(max_length=1024, description="Free text comment about this vendor.", example="")
|
||||||
empty_spool_weight: Optional[float] = Field(gt=0, description="The empty spool weight, in grams.", example=140)
|
empty_spool_weight: Optional[float] = Field(gt=0, description="The empty spool weight, in grams.", example=140)
|
||||||
|
external_id: Optional[str] = Field(
|
||||||
|
max_length=256,
|
||||||
|
description=(
|
||||||
|
"Set if this vendor comes from an external database. This contains the ID in the external database."
|
||||||
|
),
|
||||||
|
example="eSun",
|
||||||
|
)
|
||||||
extra: dict[str, str] = Field(
|
extra: dict[str, str] = Field(
|
||||||
description=(
|
description=(
|
||||||
"Extra fields for this vendor. All values are JSON-encoded data. "
|
"Extra fields for this vendor. All values are JSON-encoded data. "
|
||||||
@@ -77,6 +84,7 @@ class Vendor(BaseModel):
|
|||||||
name=item.name,
|
name=item.name,
|
||||||
comment=item.comment,
|
comment=item.comment,
|
||||||
empty_spool_weight=item.empty_spool_weight,
|
empty_spool_weight=item.empty_spool_weight,
|
||||||
|
external_id=item.external_id,
|
||||||
extra={field.key: field.value for field in item.extra},
|
extra={field.key: field.value for field in item.extra},
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -137,6 +145,13 @@ class Filament(BaseModel):
|
|||||||
description="Hexadecimal color code of the filament, e.g. FF0000 for red. Supports alpha channel at the end.",
|
description="Hexadecimal color code of the filament, e.g. FF0000 for red. Supports alpha channel at the end.",
|
||||||
example="FF0000",
|
example="FF0000",
|
||||||
)
|
)
|
||||||
|
external_id: Optional[str] = Field(
|
||||||
|
max_length=256,
|
||||||
|
description=(
|
||||||
|
"Set if this filament comes from an external database. This contains the ID in the external database."
|
||||||
|
),
|
||||||
|
example="polymaker_pla_polysonicblack_1000_175",
|
||||||
|
)
|
||||||
extra: dict[str, str] = Field(
|
extra: dict[str, str] = Field(
|
||||||
description=(
|
description=(
|
||||||
"Extra fields for this filament. All values are JSON-encoded data. "
|
"Extra fields for this filament. All values are JSON-encoded data. "
|
||||||
@@ -163,6 +178,7 @@ class Filament(BaseModel):
|
|||||||
settings_extruder_temp=item.settings_extruder_temp,
|
settings_extruder_temp=item.settings_extruder_temp,
|
||||||
settings_bed_temp=item.settings_bed_temp,
|
settings_bed_temp=item.settings_bed_temp,
|
||||||
color_hex=item.color_hex,
|
color_hex=item.color_hex,
|
||||||
|
external_id=item.external_id,
|
||||||
extra={field.key: field.value for field in item.extra},
|
extra={field.key: field.value for field in item.extra},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -38,6 +38,13 @@ class VendorParameters(BaseModel):
|
|||||||
description="The weight of an empty spool, in grams.",
|
description="The weight of an empty spool, in grams.",
|
||||||
example=200,
|
example=200,
|
||||||
)
|
)
|
||||||
|
external_id: Optional[str] = Field(
|
||||||
|
max_length=256,
|
||||||
|
description=(
|
||||||
|
"Set if this vendor comes from an external database. This contains the ID in the external database."
|
||||||
|
),
|
||||||
|
example="eSun",
|
||||||
|
)
|
||||||
extra: Optional[dict[str, str]] = Field(
|
extra: Optional[dict[str, str]] = Field(
|
||||||
None,
|
None,
|
||||||
description="Extra fields for this vendor.",
|
description="Extra fields for this vendor.",
|
||||||
@@ -191,6 +198,7 @@ async def create( # noqa: ANN201
|
|||||||
name=body.name,
|
name=body.name,
|
||||||
comment=body.comment,
|
comment=body.comment,
|
||||||
empty_spool_weight=body.empty_spool_weight,
|
empty_spool_weight=body.empty_spool_weight,
|
||||||
|
external_id=body.external_id,
|
||||||
extra=body.extra,
|
extra=body.extra,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ async def create(
|
|||||||
settings_extruder_temp: Optional[int] = None,
|
settings_extruder_temp: Optional[int] = None,
|
||||||
settings_bed_temp: Optional[int] = None,
|
settings_bed_temp: Optional[int] = None,
|
||||||
color_hex: Optional[str] = None,
|
color_hex: Optional[str] = None,
|
||||||
|
external_id: Optional[str] = None,
|
||||||
extra: Optional[dict[str, str]] = None,
|
extra: Optional[dict[str, str]] = None,
|
||||||
) -> models.Filament:
|
) -> models.Filament:
|
||||||
"""Add a new filament to the database."""
|
"""Add a new filament to the database."""
|
||||||
@@ -67,6 +68,7 @@ async def create(
|
|||||||
settings_extruder_temp=settings_extruder_temp,
|
settings_extruder_temp=settings_extruder_temp,
|
||||||
settings_bed_temp=settings_bed_temp,
|
settings_bed_temp=settings_bed_temp,
|
||||||
color_hex=color_hex,
|
color_hex=color_hex,
|
||||||
|
external_id=external_id,
|
||||||
extra=[models.FilamentField(key=k, value=v) for k, v in (extra or {}).items()],
|
extra=[models.FilamentField(key=k, value=v) for k, v in (extra or {}).items()],
|
||||||
)
|
)
|
||||||
db.add(filament)
|
db.add(filament)
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ class Vendor(Base):
|
|||||||
empty_spool_weight: Mapped[Optional[float]] = mapped_column(comment="The weight of an empty spool.")
|
empty_spool_weight: Mapped[Optional[float]] = mapped_column(comment="The weight of an empty spool.")
|
||||||
comment: Mapped[Optional[str]] = mapped_column(String(1024))
|
comment: Mapped[Optional[str]] = mapped_column(String(1024))
|
||||||
filaments: Mapped[list["Filament"]] = relationship(back_populates="vendor")
|
filaments: Mapped[list["Filament"]] = relationship(back_populates="vendor")
|
||||||
|
external_id: Mapped[Optional[str]] = mapped_column(String(256))
|
||||||
extra: Mapped[list["VendorField"]] = relationship(
|
extra: Mapped[list["VendorField"]] = relationship(
|
||||||
back_populates="vendor",
|
back_populates="vendor",
|
||||||
cascade="save-update, merge, delete, delete-orphan",
|
cascade="save-update, merge, delete, delete-orphan",
|
||||||
@@ -48,6 +49,7 @@ class Filament(Base):
|
|||||||
settings_extruder_temp: Mapped[Optional[int]] = mapped_column(comment="Overridden extruder temperature.")
|
settings_extruder_temp: Mapped[Optional[int]] = mapped_column(comment="Overridden extruder temperature.")
|
||||||
settings_bed_temp: Mapped[Optional[int]] = mapped_column(comment="Overridden bed temperature.")
|
settings_bed_temp: Mapped[Optional[int]] = mapped_column(comment="Overridden bed temperature.")
|
||||||
color_hex: Mapped[Optional[str]] = mapped_column(String(8))
|
color_hex: Mapped[Optional[str]] = mapped_column(String(8))
|
||||||
|
external_id: Mapped[Optional[str]] = mapped_column(String(256))
|
||||||
extra: Mapped[list["FilamentField"]] = relationship(
|
extra: Mapped[list["FilamentField"]] = relationship(
|
||||||
back_populates="filament",
|
back_populates="filament",
|
||||||
cascade="save-update, merge, delete, delete-orphan",
|
cascade="save-update, merge, delete, delete-orphan",
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ async def create(
|
|||||||
name: Optional[str] = None,
|
name: Optional[str] = None,
|
||||||
comment: Optional[str] = None,
|
comment: Optional[str] = None,
|
||||||
empty_spool_weight: Optional[float] = None,
|
empty_spool_weight: Optional[float] = None,
|
||||||
|
external_id: Optional[str] = None,
|
||||||
extra: Optional[dict[str, str]] = None,
|
extra: Optional[dict[str, str]] = None,
|
||||||
) -> models.Vendor:
|
) -> models.Vendor:
|
||||||
"""Add a new vendor to the database."""
|
"""Add a new vendor to the database."""
|
||||||
@@ -28,6 +29,7 @@ async def create(
|
|||||||
registered=datetime.utcnow().replace(microsecond=0),
|
registered=datetime.utcnow().replace(microsecond=0),
|
||||||
comment=comment,
|
comment=comment,
|
||||||
empty_spool_weight=empty_spool_weight,
|
empty_spool_weight=empty_spool_weight,
|
||||||
|
external_id=external_id,
|
||||||
extra=[models.VendorField(key=k, value=v) for k, v in (extra or {}).items()],
|
extra=[models.VendorField(key=k, value=v) for k, v in (extra or {}).items()],
|
||||||
)
|
)
|
||||||
db.add(vendor)
|
db.add(vendor)
|
||||||
|
|||||||
Reference in New Issue
Block a user