Source code for pymap.backend.maildir.subscriptions


from __future__ import annotations

import os.path
from collections.abc import Sequence
from typing import IO, Self

from .io import FileWriteable

__all__ = ['Subscriptions']


[docs] class Subscriptions(FileWriteable): """Maintains the set of folders currently subscribed to. Args: path: The directory of the file. """ def __init__(self, path: str) -> None: super().__init__(path) self._subscribed: dict[str, None] = {} @property def empty(self) -> bool: return not self._subscribed @property def subscribed(self) -> Sequence[str]: """The folders currently subscribed to.""" return list(self._subscribed.keys())
[docs] def add(self, folder: str) -> None: """Add a new folder to the subscriptions.""" self._subscribed[folder] = None self.touch()
[docs] def remove(self, folder: str) -> None: """Remove a folder from the subscriptions.""" self._subscribed.pop(folder, None) self.touch()
[docs] def set(self, folder: str, subscribed: bool) -> None: """Set the subscribed status of a folder.""" if subscribed: self.add(folder) else: self.remove(folder)
@classmethod def get_file(cls, path: str) -> str: return os.path.join(path, 'subscriptions') @classmethod def get_lock(cls, path: str) -> str | None: return os.path.join(path, 'subscriptions.lock') @classmethod def get_default(cls, path: str) -> Self: return cls(path) @classmethod def open(cls, path: str, fp: IO[str]) -> Self: return cls(path) def read(self, fp: IO[str]) -> None: for line in fp: self.add(line.rstrip()) def write(self, fp: IO[str]) -> None: for sub in self._subscribed: fp.write(sub + '\r\n')