ToDo List

ToDo

Feature ideas

  • extensive database statistics

  • mechanism to remove all correspondents without emails

  • download for main logfiles

  • progressbar for actions

  • notes field for models

  • tagging system with taggit

  • autotagging

  • show pwd button

  • refine fetchererrors into errors for auth, connection, etc.

  • add gmail client support

  • create mailaccount from file import

  • manually adding mailboxes

To refactor

  • safeimap and pop classes

  • rework test:

    • tests more implementation agnostic

    • use more of the unittest api

    • streamline serializer and form tests

  • emailcorrespondent creation for better integration of mailinglist

  • split up long functions that are marked as too complex by ruff

  • make all filepaths pathlib.Paths, enable ruff PTH

  • use enums for typing and to reduce properties on mailbox

To test

  • storagebackend for colliding file/dir

  • test failing single message fetch (imap, pop, jmap)

  • add test email with references

  • js stuff

To implement

  • migration to django6.0

  • squashmigrations

  • further optimize queryset lookups

  • general share api endpoint

Work in progress

  • tests

  • documentation

  • type annotations

To fix

  • filteroptions for existing db entries leak other user data

  • ci:

    • djlint has no files to lint

Inline TODOs

Todo

Validation and parsing of queryparams can probably be done more concisely with a serializer.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/api/v1/views/EmailViewSet.py:docstring of api.v1.views.EmailViewSet.EmailViewSet.download_batch, line 3.)

Todo

Validation and parsing of queryparams can probably be done more concisely with a serializer.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/api/v1/views/MailboxViewSet.py:docstring of api.v1.views.MailboxViewSet.MailboxViewSet.download_batch, line 3.)

Todo

Validation and parsing of queryparams can probably be done more concisely with a serializer.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/api/v1/views/EmailViewSet.py:docstring of api.v1.views.EmailViewSet.EmailViewSet.download_batch, line 3.)

Todo

Validation and parsing of queryparams can probably be done more concisely with a serializer.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/api/v1/views/MailboxViewSet.py:docstring of api.v1.views.MailboxViewSet.MailboxViewSet.download_batch, line 3.)

Todo

Rewrite this into a generator.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/core/utils/fetchers/ExchangeFetcher.py:docstring of core.utils.fetchers.ExchangeFetcher.ExchangeFetcher.fetch_emails, line 3.)

Todo

Rewrite this into a generator.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/core/utils/fetchers/ExchangeFetcher.py:docstring of core.utils.fetchers.ExchangeFetcher.ExchangeFetcher.fetch_mailboxes, line 3.)

Todo

Rewrite this into a generator.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/core/utils/fetchers/IMAP4Fetcher.py:docstring of core.utils.fetchers.IMAP4Fetcher.IMAP4Fetcher.fetch_mailboxes, line 3.)

Todo

Rewrite this into a generator.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/core/utils/fetchers/ExchangeFetcher.py:docstring of core.utils.fetchers.ExchangeFetcher.ExchangeFetcher.fetch_emails, line 3.)

Todo

Rewrite this into a generator.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/core/utils/fetchers/ExchangeFetcher.py:docstring of core.utils.fetchers.ExchangeFetcher.ExchangeFetcher.fetch_mailboxes, line 3.)

Todo

Rewrite this into a generator.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/core/utils/fetchers/IMAP4Fetcher.py:docstring of core.utils.fetchers.IMAP4Fetcher.IMAP4Fetcher.fetch_mailboxes, line 3.)

Todo

Safely! extract error message from response for logging and exception.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/core/utils/fetchers/SafeIMAPMixin.py:docstring of core.utils.fetchers.SafeIMAPMixin.SafeIMAPMixin.check_response, line 5.)

Todo

Find a better way to disable the exception and getting rid of the typing mess.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/core/utils/fetchers/SafeIMAPMixin.py:docstring of core.utils.fetchers.SafeIMAPMixin.SafeIMAPMixin.safe, line 9.)

Todo

Safely! extract error message from response for logging and exception.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/core/utils/fetchers/SafePOPMixin.py:docstring of core.utils.fetchers.SafePOPMixin.SafePOPMixin.check_response, line 5.)

Todo

Find a better way to disable the exception and getting rid of the typing mess.

(The original entry is located in /home/docs/checkouts/readthedocs.org/user_builds/eonvelope/checkouts/latest/src/core/utils/fetchers/SafePOPMixin.py:docstring of core.utils.fetchers.SafePOPMixin.SafePOPMixin.safe, line 9.)