Rename "photo" to "image."

This commit is contained in:
Yaro Kasear 2025-07-11 13:01:08 -05:00
parent 84db8592cb
commit 7d96839af8
11 changed files with 78 additions and 72 deletions

View file

@ -11,8 +11,8 @@ from .users import User
from .work_log import WorkLog
from .rooms import Room
from .work_note import WorkNote
from .photo import Photo
from .photo_links import worklog_photos
from .image import Image
from .image_links import worklog_images
__all__ = [
"db",
@ -25,6 +25,6 @@ __all__ = [
"WorkLog",
"Room",
"WorkNote",
"Photo",
"worklog_photos"
"Image",
"worklog_images"
]

View file

@ -10,27 +10,27 @@ from sqlalchemy import Integer, Unicode, DateTime, func
from sqlalchemy.orm import Mapped, mapped_column, relationship
from . import db
from .photo_links import worklog_photos
from .image_links import worklog_images
class Photo(db.Model):
__tablename__ = 'photos'
class Image(db.Model):
__tablename__ = 'images'
id: Mapped[int] = mapped_column(Integer, primary_key=True)
filename: Mapped[str] = mapped_column(Unicode(512))
caption: Mapped[str] = mapped_column(Unicode(255), default="")
timestamp: Mapped[datetime.datetime] = mapped_column(DateTime, default=datetime.datetime.now(), server_default=func.now())
inventory: Mapped[Optional['Inventory']] = relationship('Inventory', back_populates='photo')
user: Mapped[Optional['User']] = relationship('User', back_populates='photo')
worklogs: Mapped[List['WorkLog']] = relationship('WorkLog', secondary=worklog_photos, back_populates='photos')
inventory: Mapped[Optional['Inventory']] = relationship('Inventory', back_populates='image')
user: Mapped[Optional['User']] = relationship('User', back_populates='image')
worklogs: Mapped[List['WorkLog']] = relationship('WorkLog', secondary=worklog_images, back_populates='images')
def __init__(self, filename: str, caption: Optional[str] = None):
self.filename = filename
self.caption = caption or ""
def __repr__(self):
return f"<Photo(id={self.id}, filename={self.filename})>"
return f"<Image(id={self.id}, filename={self.filename})>"
class PhotoAttachable:
def attach_photo(self, photo: 'Photo') -> None:
raise NotImplementedError("This model doesn't know how to attach photos.")
class ImageAttachable:
def attach_image(self, image: 'Image') -> None:
raise NotImplementedError("This model doesn't know how to attach images.")

View file

@ -1,7 +1,7 @@
from .. import db
worklog_photos = db.Table(
'worklog_photos',
worklog_images = db.Table(
'worklog_images',
db.Column('worklog_id', db.Integer, db.ForeignKey('work_log.id'), primary_key=True),
db.Column('photo_id', db.Integer, db.ForeignKey('photos.id'), primary_key=True),
db.Column('image_id', db.Integer, db.ForeignKey('images.id'), primary_key=True),
)

View file

@ -1,21 +1,21 @@
from typing import Any, List, Optional, TYPE_CHECKING
from inventory.models.photo import Photo
from inventory.models.image import Image
if TYPE_CHECKING:
from .brands import Brand
from .items import Item
from .work_log import WorkLog
from .rooms import Room
from .photo import Photo
from .image import Image
from sqlalchemy import Boolean, ForeignKey, Identity, Index, Integer, Unicode, DateTime, text
from sqlalchemy.orm import Mapped, mapped_column, relationship
import datetime
from . import db
from .photo import PhotoAttachable
from .image import ImageAttachable
class Inventory(db.Model, PhotoAttachable):
class Inventory(db.Model, ImageAttachable):
__tablename__ = 'inventory'
__table_args__ = (
Index('Inventory$Barcode', 'barcode'),
@ -34,14 +34,14 @@ class Inventory(db.Model, PhotoAttachable):
location_id: Mapped[Optional[str]] = mapped_column(ForeignKey("rooms.id"))
barcode: Mapped[Optional[str]] = mapped_column(Unicode(255))
shared: Mapped[Optional[bool]] = mapped_column(Boolean, server_default=text('((0))'))
photo_id: Mapped[Optional[int]] = mapped_column(ForeignKey('photos.id'), nullable=True)
image_id: Mapped[Optional[int]] = mapped_column(ForeignKey('images.id'), nullable=True)
location: Mapped[Optional['Room']] = relationship('Room', back_populates='inventory')
owner = relationship('User', back_populates='inventory')
brand: Mapped[Optional['Brand']] = relationship('Brand', back_populates='inventory')
item: Mapped['Item'] = relationship('Item', back_populates='inventory')
work_logs: Mapped[List['WorkLog']] = relationship('WorkLog', back_populates='work_item')
photo: Mapped[Optional['Photo']] = relationship('Photo', back_populates='inventory')
image: Mapped[Optional['Image']] = relationship('Image', back_populates='inventory')
def __init__(self, timestamp: datetime.datetime, condition: str, type_id: Optional[int] = None,
name: Optional[str] = None, serial: Optional[str] = None,
@ -128,5 +128,5 @@ class Inventory(db.Model, PhotoAttachable):
shared=bool(data.get("shared", False))
)
def attach_photo(self, photo: Photo) -> None:
self.photo = photo
def attach_image(self, image: Image) -> None:
self.image = image

View file

@ -3,15 +3,15 @@ if TYPE_CHECKING:
from .inventory import Inventory
from .rooms import Room
from .work_log import WorkLog
from .photo import Photo
from .image import Image
from sqlalchemy import Boolean, ForeignKey, Identity, Integer, Unicode, text
from sqlalchemy.orm import Mapped, mapped_column, relationship
from . import db
from .photo import PhotoAttachable
from .image import ImageAttachable
class User(db.Model, PhotoAttachable):
class User(db.Model, ImageAttachable):
__tablename__ = 'users'
id: Mapped[int] = mapped_column(Integer, Identity(start=1, increment=1), primary_key=True)
@ -21,14 +21,14 @@ class User(db.Model, PhotoAttachable):
first_name: Mapped[Optional[str]] = mapped_column(Unicode(255), nullable=True)
location_id: Mapped[Optional[int]] = mapped_column(ForeignKey("rooms.id"), nullable=True)
supervisor_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("users.id"))
photo_id: Mapped[Optional[int]] = mapped_column(ForeignKey('photos.id'), nullable=True)
image_id: Mapped[Optional[int]] = mapped_column(ForeignKey('images.id'), nullable=True)
supervisor: Mapped[Optional['User']] = relationship('User', remote_side='User.id', back_populates='subordinates')
subordinates: Mapped[List['User']] = relationship('User', back_populates='supervisor')
work_logs: Mapped[List['WorkLog']] = relationship('WorkLog', back_populates='contact')
location: Mapped[Optional['Room']] = relationship('Room', back_populates='users')
inventory: Mapped[List['Inventory']] = relationship('Inventory', back_populates='owner')
photo: Mapped[Optional['Photo']] = relationship('Photo', back_populates='user')
image: Mapped[Optional['Image']] = relationship('Image', back_populates='user')
@property
def full_name(self) -> str:

View file

@ -1,7 +1,7 @@
from typing import Optional, Any, List, TYPE_CHECKING
if TYPE_CHECKING:
from .inventory import Inventory
from .photo import Photo
from .image import Image
from .users import User
from .work_note import WorkNote
@ -10,11 +10,11 @@ from sqlalchemy.orm import Mapped, mapped_column, relationship
import datetime
from . import db
from .photo import PhotoAttachable
from .photo_links import worklog_photos
from .image import ImageAttachable
from .image_links import worklog_images
from .work_note import WorkNote
class WorkLog(db.Model, PhotoAttachable):
class WorkLog(db.Model, ImageAttachable):
__tablename__ = 'work_log'
id: Mapped[int] = mapped_column(Integer, Identity(start=1, increment=1), primary_key=True)
@ -35,7 +35,7 @@ class WorkLog(db.Model, PhotoAttachable):
cascade='all, delete-orphan',
order_by='WorkNote.timestamp'
)
photos: Mapped[List['Photo']] = relationship('Photo', secondary=worklog_photos, back_populates='worklogs')
images: Mapped[List['Image']] = relationship('Image', secondary=worklog_images, back_populates='worklogs')
def __init__(
self,