Source code for digikamdb.settings

"""
Provides access to Digikam settings.
"""

from typing import Generator, Iterable, Tuple               # noqa: F401

from sqlalchemy import Column, String

from .table import DigikamTable


def _settings_class(dk: 'Digikam') -> type:                    # noqa: F821
    """Defines the Settings class."""
    
    class Setting(dk.base):
        """
        Digikam Settings
        
        This table should be accessed via
        Class :class:`~digikamdb.settings.Settings`.
        """

        __tablename__ = 'Settings'
        
        keyword = Column(String, primary_key = True)
    
    return Setting


[docs] class Settings(DigikamTable): """ Digikam settings class The Digikam settings can be accessed like a dict: .. code-block:: python dk = digikamdb.Digikam() if 'DBVersion' in dk.settings: db_version = dk.settings['DBVersion'] # Get DB version dk.settings['databaseUserImageFormats'] = '-xcf' # Exclude GIMP files for k in dk.settings: # Iterate over settings print(k, '=', dk.settings[k]) for k, v in dk.settings.items(): # Iterate over settings print(k, '=', v) Args: digikam: Digikam object """ _class_function = _settings_class _id_column = '_keyword' def __init__(self, digikam: 'Digikam'): # noqa: F821 super().__init__(digikam) def __iter__(self) -> Iterable: for s in super().__iter__(): yield s._keyword def __getitem__(self, key: str) -> str: return super().__getitem__(key)._value def __setitem__(self, key: str, value: str): row = self._select(keyword = key).one_or_none() if row: row._value = value else: self._insert(_keyword = key, _value = value)
[docs] def items(self) -> Iterable[Tuple[str, str]]: """ Returns an iterable with (key, value) pairs. Yields: The settings (key, value) pairs. """ for row in self._select(): yield row._keyword, row._value