{ "info": { "author": "Gary Peck", "author_email": "gary@realify.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Intended Audience :: System Administrators", "License :: OSI Approved :: BSD License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Topic :: Communications :: Email :: Filters", "Topic :: Software Development :: Interpreters", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Python implementation of the Sieve email filtering language (RFC 5228).\n\nhttps://github.com/garyp/sifter\n\n\nFEATURES\n========\n\n- Supports all of the base Sieve spec from RFC 5228, except for features still\n listed under TODO below\n- Extensions supported:\n\n - regex (draft-ietf-sieve-regex-01)\n\n\nEXAMPLE\n=======\n\n::\n\n import email\n import sifter.parser\n rules = sifter.parser.parse_file(open('my_rules.sieve'))\n msg = email.message_from_file(open('an_email_to_me.eml'))\n msg_actions = rules.evaluate(msg)\n\nIn the above example, ``msg_actions`` is a list of actions to apply to the\nemail message. Each action is a tuple consisting of the action name and\naction-specific arguments. It is up to the caller to manipulate the message and\nmessage store based on the actions returned.\n\n\nWARNINGS\n========\n\n- No thought has been given yet to hardening against malicious user input. The\n current implementation is aimed at users that are running their own sieve\n scripts.\n- The current implementation is not optimized for performance, though hopefully\n it's not too slow for normal inputs.\n\n\nTODO\n====\n\nIn rough order of importance:\n\n- An example adaptor that provides Unix LDA behavior using sieve for filtering\n- Base spec features not yet implemented:\n\n - encoded characters (section 2.4.2.4)\n - multi-line strings (section 2.4.2)\n - bracketed comments (section 2.3)\n - message uniqueness (section 2.10.3)\n - envelope test (section 5.4)\n - handle message loops (section 10)\n - limit abuse of redirect action (section 10)\n - address test should limit allowed headers to those that contain addresses\n (section 5.1)\n\n- Make sure character sets are actually handled according to the spec\n- Make string parsing comply with the grammar in section 8.1 and the features\n described in section 2.4.2\n- Check that python's ``email.message`` implements header comparisons the same\n way as the sieve spec\n- Make sure regular expressions are actually handled according to the extension\n spec\n- Add support for various extensions:\n\n - variables (RFC 5229)\n - externally stored lists (draft-melnikov-sieve-external-lists)\n - body (RFC 5173)\n - relational (RFC 5231)\n - subaddress (RFC 5233)\n - copy (RFC 3894)\n - environment (RFC 5183)\n - date and index (RFC 5260)\n - editheader (RFC 5293)\n - ihave (RFC 5463)\n - mailbox metadata (RFC 5490)\n - notifications (RFC 5435), mailto notifications (RFC 5436), xmpp\n notifications (RFC 5437)", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/garyp/sifter", "keywords": null, "license": "BSD", "maintainer": null, "maintainer_email": null, "name": "sifter", "package_url": "https://pypi.org/project/sifter/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/sifter/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/garyp/sifter" }, "release_url": "https://pypi.org/project/sifter/0.1/", "requires_dist": null, "requires_python": null, "summary": "Parser/evaluator for the Sieve filtering language (RFC 5228)", "version": "0.1" }, "last_serial": 799529, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "d30e928068d665f4d1a801f70d6c2db1", "sha256": "100fc4dc99d50d6f229780114715e38e43b89e4ed6868d17ca725c555a3b5b14" }, "downloads": -1, "filename": "sifter-0.1.tar.gz", "has_sig": true, "md5_digest": "d30e928068d665f4d1a801f70d6c2db1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16638, "upload_time": "2011-09-28T01:56:27", "url": "https://files.pythonhosted.org/packages/cf/fd/0d623cbbccdb1a09568ab1515e71987424c73afc949af62a3de5c4a9e583/sifter-0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d30e928068d665f4d1a801f70d6c2db1", "sha256": "100fc4dc99d50d6f229780114715e38e43b89e4ed6868d17ca725c555a3b5b14" }, "downloads": -1, "filename": "sifter-0.1.tar.gz", "has_sig": true, "md5_digest": "d30e928068d665f4d1a801f70d6c2db1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 16638, "upload_time": "2011-09-28T01:56:27", "url": "https://files.pythonhosted.org/packages/cf/fd/0d623cbbccdb1a09568ab1515e71987424c73afc949af62a3de5c4a9e583/sifter-0.1.tar.gz" } ] }