Create a gist now

Instantly share code, notes, and snippets.

@nicolas33 /TODO.md
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.

  • [ ]

WARNING

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

Screencasts

  • 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

Refactoring

  • Use ZCA? No: imapfw.interface
  • Use typing.
  • Controllers, drivers: improve getOwnerName() method name.
  • Put types into imapfw.annotation.
  • Rename runners of engines to Engine.run.
  • 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

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

Features

  • Support asyncio.
  • Quick sync.

Testing

  • 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.

Comedy

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

Drivers

  • 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.

Imap

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

Rascal

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

Errors

  • 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.

Architects

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

Actions

  • 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.
  • actions.shell for interactive sessions.

    • let play with both sides of account.
    • let play with a repository.
    • introduce engines.shell 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?

Cache

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

Controllers

  • 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?)

UI

  • 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.

Documentation

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

Website

  • 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