Added support for color_hex alpha channel
This commit is contained in:
@@ -2,6 +2,6 @@
|
||||
|
||||
Creating a new version:
|
||||
```bash
|
||||
python -m spoolman.main
|
||||
pdm run python -m spoolman.main
|
||||
pdm run alembic revision -m "some title" --autogenerate
|
||||
```
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
"""color_hex alpha.
|
||||
|
||||
Revision ID: 92793c8a937c
|
||||
Revises: 92186a5f7b0f
|
||||
Create Date: 2023-08-12 21:21:08.536216
|
||||
"""
|
||||
import sqlalchemy as sa
|
||||
from alembic import op
|
||||
|
||||
# revision identifiers, used by Alembic.
|
||||
revision = "92793c8a937c"
|
||||
down_revision = "92186a5f7b0f"
|
||||
branch_labels = None
|
||||
depends_on = None
|
||||
|
||||
|
||||
def upgrade() -> None:
|
||||
"""Perform the upgrade."""
|
||||
op.alter_column("filament", "color_hex", type_=sa.String(length=8), existing_nullable=True)
|
||||
|
||||
|
||||
def downgrade() -> None:
|
||||
"""Perform the downgrade."""
|
||||
op.alter_column("filament", "color_hex", type_=sa.String(length=6), existing_nullable=True)
|
||||
@@ -6,7 +6,7 @@ from typing import Annotated, Optional
|
||||
from fastapi import APIRouter, Depends, Query
|
||||
from fastapi.exceptions import RequestValidationError
|
||||
from fastapi.responses import JSONResponse
|
||||
from pydantic import BaseModel, Field
|
||||
from pydantic import BaseModel, Field, validator
|
||||
from pydantic.error_wrappers import ErrorWrapper
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
@@ -74,12 +74,29 @@ class FilamentParameters(BaseModel):
|
||||
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 #)",
|
||||
description="Hexadecimal color code of the filament, e.g. FF0000 for red. Supports alpha channel at the end.",
|
||||
example="FF0000",
|
||||
)
|
||||
|
||||
@validator("color_hex")
|
||||
@classmethod
|
||||
def color_hex_validator(cls, v: Optional[str]) -> Optional[str]: # noqa: ANN102
|
||||
"""Validate the color_hex field."""
|
||||
if not v:
|
||||
return None
|
||||
if v.startswith("#"):
|
||||
v = v[1:]
|
||||
v = v.upper()
|
||||
|
||||
for c in v:
|
||||
if c not in "0123456789ABCDEF":
|
||||
raise ValueError("Invalid character in color code.")
|
||||
|
||||
if len(v) not in (6, 8):
|
||||
raise ValueError("Color code must be 6 or 8 characters long.")
|
||||
|
||||
return v
|
||||
|
||||
|
||||
class FilamentUpdateParameters(FilamentParameters):
|
||||
density: Optional[float] = Field(gt=0, description="The density of this filament in g/cm3.", example=1.24)
|
||||
|
||||
@@ -82,8 +82,8 @@ class Filament(BaseModel):
|
||||
)
|
||||
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 #)",
|
||||
max_length=8,
|
||||
description="Hexadecimal color code of the filament, e.g. FF0000 for red. Supports alpha channel at the end.",
|
||||
example="FF0000",
|
||||
)
|
||||
|
||||
|
||||
@@ -41,7 +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))
|
||||
color_hex: Mapped[Optional[str]] = mapped_column(String(8))
|
||||
|
||||
|
||||
class Spool(Base):
|
||||
|
||||
@@ -438,3 +438,23 @@ def test_update_filament_not_found():
|
||||
assert "filament" in message
|
||||
assert "id" in message
|
||||
assert "123456789" in message
|
||||
|
||||
|
||||
def test_add_filament_color_hex_alpha():
|
||||
"""Test adding a filament with an alpha channel in the color hex."""
|
||||
color_hex = "FF000088"
|
||||
|
||||
# Execute
|
||||
result = httpx.post(
|
||||
f"{URL}/api/v1/filament",
|
||||
json={
|
||||
"density": 1.25,
|
||||
"diameter": 1.75,
|
||||
"color_hex": color_hex,
|
||||
},
|
||||
)
|
||||
result.raise_for_status()
|
||||
|
||||
# Verify
|
||||
filament = result.json()
|
||||
assert filament["color_hex"] == color_hex
|
||||
|
||||
Reference in New Issue
Block a user