Skip to content

FolderAccess

email_profile.clients.imap.folders.FolderAccess

Resolve common folder properties (inbox/sent/spam/...) for a session.

Source code in email_profile/clients/imap/folders.py
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
class FolderAccess:
    """Resolve common folder properties (inbox/sent/spam/...) for a session."""

    def __init__(self, session: ImapClient) -> None:
        self._session = session

    def mailboxes(self) -> list[str]:
        self._session.require()
        return list(self._session.mailboxes)

    def mailbox(self, name: str) -> MailBox:
        self._session.require()
        if name not in self._session.mailboxes:
            raise KeyError(
                f"Unknown mailbox: {name!r}. Available: {self.mailboxes()}"
            )
        return self._session.mailboxes[name]

    def _find(self, hints: tuple[str, ...]) -> MailBox:
        self._session.require()
        mb = find_mailbox(self._session.mailboxes, hints)
        if mb is None:
            raise KeyError(
                f"Could not find a mailbox matching {hints!r}. "
                f"Available: {self.mailboxes()}"
            )
        return mb

    @property
    def inbox(self) -> MailBox:
        return self._find(INBOX_HINTS)

    @property
    def sent(self) -> MailBox:
        return self._find(SENT_HINTS)

    @property
    def spam(self) -> MailBox:
        return self._find(SPAM_HINTS)

    @property
    def trash(self) -> MailBox:
        return self._find(TRASH_HINTS)

    @property
    def drafts(self) -> MailBox:
        return self._find(DRAFTS_HINTS)

    @property
    def archive(self) -> MailBox:
        return self._find(ARCHIVE_HINTS)

archive property

drafts property

inbox property

sent property

spam property

trash property

__init__(session)

Source code in email_profile/clients/imap/folders.py
91
92
def __init__(self, session: ImapClient) -> None:
    self._session = session

mailbox(name)

Source code in email_profile/clients/imap/folders.py
 98
 99
100
101
102
103
104
def mailbox(self, name: str) -> MailBox:
    self._session.require()
    if name not in self._session.mailboxes:
        raise KeyError(
            f"Unknown mailbox: {name!r}. Available: {self.mailboxes()}"
        )
    return self._session.mailboxes[name]

mailboxes()

Source code in email_profile/clients/imap/folders.py
94
95
96
def mailboxes(self) -> list[str]:
    self._session.require()
    return list(self._session.mailboxes)