Skip to content

Instantly share code, notes, and snippets.

Last active April 6, 2016 17:27
Show Gist options
  • Save nicolas33/003f1b7184c7dfb26192 to your computer and use it in GitHub Desktop.
Save nicolas33/003f1b7184c7dfb26192 to your computer and use it in GitHub Desktop.
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