Allowing manufacturer urls to be null
This commit is contained in:
1 parent
16ba09f073
commit
90cae15551
5 files changed
+60
-5
No files matched your search
@@ -26,7 +26,7 @@ async def create(
|
||||
db: AsyncSession,
|
||||
*,
|
||||
name: str,
|
||||
url: str,
|
||||
url: str | None = None,
|
||||
logo_url: str | None = None,
|
||||
) -> Manufacturer:
|
||||
m = Manufacturer(name=name, url=url, logo_url=logo_url)
|
||||
|
||||
@@ -8,5 +8,5 @@ class Manufacturer(Base):
|
||||
|
||||
id: Mapped[int] = mapped_column(primary_key=True)
|
||||
name: Mapped[str] = mapped_column(nullable=False)
|
||||
url: Mapped[str] = mapped_column(nullable=True)
|
||||
url: Mapped[str | None] = mapped_column(nullable=True)
|
||||
logo_url: Mapped[str | None] = mapped_column(nullable=True, default=None)
|
||||
@@ -1,4 +1,10 @@
|
||||
from pydantic import BaseModel, ConfigDict, HttpUrl
|
||||
from pydantic import BaseModel, ConfigDict, HttpUrl, field_validator
|
||||
|
||||
|
||||
def _blank_to_none(value: str | None) -> str | None:
|
||||
if isinstance(value, str) and not value.strip():
|
||||
return None
|
||||
return value
|
||||
|
||||
|
||||
class ManufacturerBase(BaseModel):
|
||||
@@ -6,6 +12,10 @@ class ManufacturerBase(BaseModel):
|
||||
url: HttpUrl | None = None
|
||||
logo_url: HttpUrl | None = None
|
||||
|
||||
_normalize_url = field_validator("url", "logo_url", mode="before")(
|
||||
_blank_to_none
|
||||
)
|
||||
|
||||
|
||||
class ManufacturerCreate(ManufacturerBase):
|
||||
pass
|
||||
@@ -16,6 +26,10 @@ class ManufacturerUpdate(BaseModel):
|
||||
url: HttpUrl | None = None
|
||||
logo_url: HttpUrl | None = None
|
||||
|
||||
_normalize_url = field_validator("url", "logo_url", mode="before")(
|
||||
_blank_to_none
|
||||
)
|
||||
|
||||
|
||||
class ManufacturerRead(ManufacturerBase):
|
||||
model_config = ConfigDict(from_attributes=True)
|
||||
|
||||
+6
-2
@@ -728,7 +728,7 @@ async def create_manufacturer(
|
||||
created = await manufacturer_crud.create(
|
||||
db,
|
||||
name=name,
|
||||
url=url,
|
||||
url=url.strip() or None,
|
||||
logo_url=logo_url.strip() or None,
|
||||
)
|
||||
await audit_crud.log(
|
||||
@@ -789,7 +789,11 @@ async def update_manufacturer(
|
||||
m = await manufacturer_crud.get(db, manufacturer_id)
|
||||
if m is None:
|
||||
raise HTTPException(status_code=404, detail="Manufacturer not found")
|
||||
changes = {"name": name, "url": url, "logo_url": logo_url.strip() or None}
|
||||
changes = {
|
||||
"name": name,
|
||||
"url": url.strip() or None,
|
||||
"logo_url": logo_url.strip() or None,
|
||||
}
|
||||
await manufacturer_crud.update(db, m, changes)
|
||||
await audit_crud.log(
|
||||
db,
|
||||
|
||||
Reference in new issue
Block a user