Source code for photoprysm.models.photos

# import io
import json
from .base import ModelBase
from dataclasses import dataclass, field, fields, InitVar
from typing import Any, Optional, Self
from datetime import datetime

[docs] @dataclass class PhotoFile(ModelBase, required = ['uid', 'photo_uid']): '''Dataclass for holding data about a file. :param uid: :param photo_uid: :param str name: (optional) :param str root: (optional) :param str hash: (optional) :param int size: (optional) :param bool primary: (optional) :param int time_index: (optional) :param str media_id: (optional) :param int media_utc: (optional) :param str instance_id: (optional) :param str codec: (optional) :param str file_type: (optional) :param str media_type: (optional) :param str mime: (optional) :param int width: (optional) :param int height: (optional) :param int orientation: (optional) :param str orientation_src: (optional) :param float aspect_ratio: (optional) :param str color_profile: (optional) :param str main_color: (optional) :param str colors: (optional) :param str luminance: (optional) :param int diff: (optional) :param int chroma: (optional) :param str software: (optional) :param int mod_time: (optional) :param datetime created_at: (optional) :param datetime created_in: (optional) :param datetime updated_at: (optional) :param list markers: (optional) ''' uid: str photo_uid: str name: Optional[str] = None root: Optional[str] = None hash: Optional[str] = None size: Optional[int] = None primary: Optional[bool] = None time_index: Optional[int] = None media_id: Optional[str] = None media_utc: Optional[int] = None instance_id: Optional[str] = None codec: Optional[str] = None file_type: Optional[str] = None media_type: Optional[str] = None mime: Optional[str] = None width: Optional[int] = None height: Optional[int] = None orientation: Optional[int] = None orientation_src: Optional[str] = None aspect_ratio: Optional[float] = None color_profile: Optional[str] = None main_color: Optional[str] = None colors: Optional[str] = None luminance: Optional[str] = None diff: Optional[int] = None chroma: Optional[int] = None software: Optional[str] = None mod_time: Optional[int] = None created_at: Optional[datetime] = None created_in: Optional[datetime] = None updated_at: Optional[datetime] = None markers: Optional[list] = None
# stream: Optional[InitVar[bytes]] = None # def __post_init__(self, stream): # self.stream = stream # @property # def stream() -> io.BytesIO: # return self._stream # @stream.setter # def _ (value: bytes) -> None: # self._stream = io.BytesIO(value)
[docs] @dataclass class Photo(ModelBase, required = ['uid']): '''Dataclass for holding data about a photo. :param uid: :param str path: (optional) :param str name: (optional) :param str title: (optional) :param str description: (optional) :param int width: (optional) :param int height: (optional) :param files: (optional) :type files: list[PhotoFile] ''' uid: str path: Optional[str] = None name: Optional[str] = None title: Optional[str] = None description: Optional[str] = None width: Optional[int] = None height: Optional[int] = None files: Optional[list[PhotoFile]] = None @property def json(self): d = json.loads(super().json) # Construct it as a dict, since that's how it comes in d['files'] = {} for i,f in enumerate(self.files): d['files'][i] = f return json.dumps(d) @classmethod def fromjson(cls: Self, djson: dict[str,Any]): # Just make sure it's a list if 'files' in djson: if isinstance(djson['files'], dict): djson['files'] = list(djson['files'].values()) inst = super().fromjson(djson) return inst
[docs] @dataclass class PhotoDetails(ModelBase): '''Details from the PhotoProperties :param str artist: (optional) :param str artist_src: (optional) :param str copyright: (optional) :param str copyright_src: (optional) :param str keywords: (optional) :param str keywords_src: (optional) :param str license: (optional) :param str license_src: (optional) :param str notes: (optional) :param str notes_src: (optional) :param int photo_id: (optional) :param str subject: (optional) :param str subject_src: (optional) ''' artist: Optional[str] = None, artist_src: Optional[str] = None, copyright: Optional[str] = None, copyright_src: Optional[str] = None, keywords: Optional[str] = None, keywords_src: Optional[str] = None, license: Optional[str] = None, license_src: Optional[str] = None, notes: Optional[str] = None, notes_src: Optional[str] = None, photo_id: Optional[int] = None, subject: Optional[str] = None, subject_src: Optional[str] = None
[docs] @dataclass class PhotoProperties(ModelBase): '''Properties of the Photo object :param int altitude: (optional) :param int camera_id: (optional) :param str camera_src: (optional) :param int cell_accuracy: (optional) :param str cell_id: (optional) :param str country: (optional) :param int day: (optional) :param str description: (optional) :param str description_src: (optional) :param PhotoDetails details: (optional) :param str exposure: (optional) :param int f_number: (optional) :param bool favorite: (optional) :param int focal_length: (optional) :param int iso: (optional) :param int lat: (optional) :param int lens_id: (optional) :param int lng: (optional) :param int month: (optional) :param str original_name: (optional) :param bool panorama: (optional) :param str place_id: (optional) :param str place_src: (optional) :param bool private: (optional) :param bool scan: (optional) :param int stack: (optional) :param str taken_at: (optional) :param str taken_at_local: (optional) :param str taken_src: (optional) :param str time_zone: (optional) :param str title: (optional) :param str title_src: (optional) :param str type: (optional) :param str type_src: (optional) :param int year: (optional) ''' altitude: Optional[int] = None, camera_id: Optional[int] = None, camera_src: Optional[str] = None, cell_accuracy: Optional[int] = None, cell_id: Optional[str] = None, country: Optional[str] = None, day: Optional[int] = None, description: Optional[str] = None, description_src: Optional[str] = None, details: Optional[PhotoDetails] = None, exposure: Optional[str] = None, f_number: Optional[int] = None, favorite: Optional[bool] = None, focal_length: Optional[int] = None, iso: Optional[int] = None, lat: Optional[int] = None, lens_id: Optional[int] = None, lng: Optional[int] = None, month: Optional[int] = None, original_name: Optional[str] = None, panorama: Optional[bool] = None, place_id: Optional[str] = None, place_src: Optional[str] = None, private: Optional[bool] = None, scan: Optional[bool] = None, stack: Optional[int] = None, taken_at: Optional[str] = None, taken_at_local: Optional[str] = None, taken_src: Optional[str] = None, time_zone: Optional[str] = None, title: Optional[str] = None, title_src: Optional[str] = None, type: Optional[str] = None, type_src: Optional[str] = None, year: Optional[int] = None