Skip to content

Instantly share code, notes, and snippets.

Last active Apr 6, 2016
What would you like to do?
The open TODO list for imapfw

The open TODO list for imapfw, with no particular order.

  • [ ]


This Todo list is deprecated. Check out the wiki instead.


  • The framework: introduce the 3 ways to get things done (dict-based actions, rascal-based actions with imapfw.api and as a master-library) [assigned @nicolas33].
  • Design of syncAccounts. [assigned @nicolas33].
  • The controllers. [assigned: @nicolas33].

Source code


  • Use ZCA? No: imapfw.interface
  • Use typing.
  • Controllers, drivers: improve getOwnerName() method name.
  • Put types into imapfw.annotation.
  • Rename runners of engines to
  • Complete interfaces.
    • Signature checking.
    • __getattr__: declare interfaces in docstring.
    • Make all modules use imapfw.interface.
    • Unit tests for imapfw.interface.
    • Bind interfaces documentation to providers.

General improvements

  • Sometimes, exceptions are delayed in logs: print reason ASAP and raise.
  • Remove passwords from logs.


  • Support asyncio.
  • Quick sync.


  • Unit tests for object imported from rascal actions.testrascal.
    • Accounts.
    • Repositories.
    • Controllers.
    • Drivers.
  • More unit tests!
  • Tests with Fake driver.
  • Tests against a story-based IMAP server (rely on Comedy.


  • A library/CLI based on triggers for story-based testing.
    • [ ]
    • [ ]
    • [ ]


  • Implement drivers.maildir
  • Implement drivers.imap
  • Support Gmail. Might be better as a controller!
  • Have version number, maintainer, contact, etc. Force redefinition in any child.


  • Support imaplib3. (WIP @nicolas33)
  • Write a new "home-made" imapc library.
  • Support other imap libraries?


  • Intermediate DSL to easily create apps and actions in the rascal?


  • Store exceptions in a cache.
    • Add context to errors (like previous requests to drivers).
    • Embedd the rascal.
    • Support per-session errors.
    • Diff of the cache.
    • Diff of the repositories.


  • Introduce decorator to debug classes.
  • SyncArchitect: honor rascal on exception.


  • New actions.testrascal to unit tests the rascal objects.
  • Improve actions.examine.
    • Output in whatever format like Markdown.
  • actions.convert convert a repository into another: a one pass-sync without cache.
  • actions.errors to read/delete/send stored errors.

Crazy ideas of actions

  • actions.offlineimap to run with OfflineIMAP's configuration file.

    • Parse configuration file.
    • Support SQLite cache.
  • for interactive sessions.

    • let play with both sides of account.
    • let play with a repository.
    • introduce to put a shell as engine.
    • Provide DSL for easy use?
  • actions.user to run an action defined in the rascal.

    • Provide DSL for easy use?


  • Introduce a generic cache sub-system.
    • Support namespaces.
  • Complete actions.syncAccounts.


  • Have version number, maintainer, contact, etc. Force redefinition in any child.

Required controllers

  • Transcode: handle UTF-7 right.
  • ReadOnly: turn a repository in read-only mode.
  • NameTrans: well-known feature. :-)
  • Fake: static fake of end-drivers. Amazingly usefull while developing! WIP: @nicolas33
  • PartialFake: same as Fake but won't fake everything.

Crazy ideas of controllers

  • Debug: support "-d drivers" to debug drivers.
    • automagically add the Debug controller when "-d drivers" is enabled.
  • Adventure: story-based fake end-drivers: rely on Comedy.
  • Duplicate: dups either side to another repository. Sounds like "chaining" repositories.
  • Sieve: a Sieve updater.
  • Eveis (palindrome of Sieve): dynamically filter new mails on client side with Sieve language.
  • Partials: partial fetches for large bodies.
    • Optionally discard large attachements.
  • Prefetch: allow pre-fetching some data. (Really usefull?)


  • Allow tuning the UI.

    • Introduce --logfile.
    • CLI options for logging loggers.
    • Make use of logging filters disable debug messages.
    • Better intregation with logging formatters.
  • Colorized output.


  • Global review.
  • Generate documentation (sphinx) for the website (like in offlineimap).


  • Make a new website (Jekyll based for Github).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment