The used filament weight is now kept track of instead of remaining weight. This adds robustness to measurement errors which could accumulate and then the filament usage wouldn't get tracked anymore once the weight hit 0. Now it will just keep going.
57 lines
2.3 KiB
Python
57 lines
2.3 KiB
Python
"""SQLAlchemy data models."""
|
|
|
|
from datetime import datetime
|
|
from typing import Optional
|
|
|
|
from sqlalchemy import ForeignKey, Integer, String
|
|
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, relationship
|
|
from sqlalchemy.sql import func
|
|
|
|
|
|
class Base(DeclarativeBase):
|
|
pass
|
|
|
|
|
|
class Vendor(Base):
|
|
__tablename__ = "vendor"
|
|
|
|
id: Mapped[int] = mapped_column(Integer, primary_key=True, index=True)
|
|
name: Mapped[str] = mapped_column(String(64))
|
|
comment: Mapped[Optional[str]] = mapped_column(String(1024))
|
|
filaments: Mapped[list["Filament"]] = relationship(back_populates="vendor")
|
|
|
|
|
|
class Filament(Base):
|
|
__tablename__ = "filament"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, index=True)
|
|
name: Mapped[Optional[str]] = mapped_column(String(64))
|
|
vendor_id: Mapped[Optional[int]] = mapped_column(ForeignKey("vendor.id"))
|
|
vendor: Mapped[Optional["Vendor"]] = relationship(back_populates="filaments")
|
|
spools: Mapped[list["Spool"]] = relationship(back_populates="filament")
|
|
material: Mapped[Optional[str]] = mapped_column(String(64))
|
|
price: Mapped[Optional[float]] = mapped_column()
|
|
density: Mapped[float] = mapped_column()
|
|
diameter: Mapped[float] = mapped_column()
|
|
weight: Mapped[Optional[float]] = mapped_column(comment="The filament weight of a full spool (net weight).")
|
|
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
|
|
# TODO: Color?
|
|
|
|
|
|
class Spool(Base):
|
|
__tablename__ = "spool"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, index=True)
|
|
registered: Mapped[datetime] = mapped_column(default=func.now())
|
|
first_used: Mapped[Optional[datetime]] = mapped_column()
|
|
last_used: Mapped[Optional[datetime]] = mapped_column()
|
|
filament_id: Mapped[int] = mapped_column(ForeignKey("filament.id"))
|
|
filament: Mapped["Filament"] = relationship(back_populates="spools")
|
|
used_weight: Mapped[float] = mapped_column()
|
|
location: Mapped[Optional[str]] = mapped_column(String(64))
|
|
lot_nr: Mapped[Optional[str]] = mapped_column(String(64))
|
|
comment: Mapped[Optional[str]] = mapped_column(String(1024))
|