Source code for gphotos_sync.DatabaseMedia

#!/usr/bin/env python3
# coding: utf8
from datetime import datetime
from pathlib import Path
from typing import Optional, TypeVar

from gphotos_sync import Utils
from gphotos_sync.BaseMedia import BaseMedia
from gphotos_sync.Checks import get_check

# this allows self reference to this class in its factory methods
D = TypeVar("D", bound="DatabaseMedia")


# noinspection PyUnresolvedReferences
# pylint: disable=no-member
[docs] class DatabaseMedia(BaseMedia): """A Class for reading and writing BaseMedia objects to and from database tables The standard BaseMedia attributes are represented here. This dumb class is used for representing any MediaBase derived class that has been read out of the Database. Attributes: _id: remote identifier from Google Photos _url: the 'product URL' which takes you to the Web view for this file _relative_folder: root relative path to file _filename: local filename _orig_name: as above minus any duplicate number suffix _duplicate_number: which instance if > 1 file has same orig_name _size: files size on disk _mime_type: string representation of file type _date: modification date _create_date: creation date _description: _downloaded: true if previously downloaded to disk """ def __init__( self, _id: str = "", _uid: str = "", _url: str = "", _relative_folder: Path = Path(), _filename: str = "", _orig_name: str = "", _duplicate_number: int = 0, _size: int = 0, _mime_type: str = "", _description: str = "", _date: datetime = Utils.MINIMUM_DATE, _create_date: datetime = Utils.MINIMUM_DATE, _downloaded: bool = False, _location: str = "", _is_shared_album: bool = False, ): super(DatabaseMedia, self).__init__() self._id = _id self._uid = _uid self._url = _url self._relative_folder = _relative_folder self._filename = _filename self._orig_name = _orig_name self._duplicate_number = _duplicate_number self._size = _size self._mime_type = _mime_type self._description = _description self._date = _date self._create_date = _create_date self._downloaded = _downloaded self._location = _location self._is_shared_album = _is_shared_album # this is used to replace meta data that has been extracted from the # file system and overrides that provided by Google API # noinspection PyAttributeOutsideInit def update_extra_meta(self, uid, create_date, size): self._uid = uid self._create_date = create_date self._size = size @property def location(self) -> Optional[str]: """ image GPS information """ return self._location # ----- BaseMedia base class override Properties below ----- @property def size(self) -> int: return self._size @property def mime_type(self) -> Optional[str]: return self._mime_type @property def id(self) -> str: return self._id @property def uid(self) -> str: return self._uid @property def description(self) -> str: """ The description of the file """ return get_check().valid_file_name(self._description) @property def orig_name(self) -> str: """ Original filename before duplicate name handling """ return get_check().valid_file_name(self._orig_name) @property def filename(self) -> str: """ filename including a suffix to make it unique if duplicates exist """ return get_check().valid_file_name(self._filename) @property def create_date(self) -> datetime: """ Creation date """ return self._create_date @property def modify_date(self) -> datetime: """ Modify Date """ return self._date @property def url(self) -> str: """ Remote url to retrieve this file from the server """ return self._url