{ "info": { "author": "Will Kahn-Greene", "author_email": "willg@bluesock.org", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "License :: OSI Approved :: GNU General Public License (GPL)", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Topic :: Communications :: Email" ], "description": "======\n phil\n======\n\n:source code: https://github.com/willkg/phil\n:issue tracker: https://github.com/willkg/phil/issues\n:license: GPLv3\n\n\nStatus - February 9th, 2013\n===========================\n\nThis project is not under active development. If you have changes,\nplease submit a pull request (preferably with tests) and I'll merge\nit in.\n\n\nSummary\n=======\n\nphil is a command line utility that sends reminder emails about meetings\nas defined in an `iCalendar`_ file.\n\nIt solves this use case:\n\n Will works on a project that has meetings every saturday. Will wants\n an automated way to send a reminder email to everyone about the meeting\n with the details of when the meeting is, how to attend, and where\n the notes for the meeting will be.\n\n Will installs and configures phil to send emails to the project list \n before the saturday meetings. Will sets up a cron job to kick phil off\n every morning to check for reminders it needs to send and send them.\n\n.. _iCalendar: http://tools.ietf.org/html/rfc5545\n\n\nFeatures\n========\n\n* has a configuration file in config.ini format\n* parses iCalendar files, calculates the next valid meeting date, and sends\n reminder email x days before the meeting\n* tries not to remind you about the same meeting twice!\n* has a ``--debug`` mode allowing you to test things without actually sending\n email\n* has a ``--quiet`` mode that will only print errors\n* correctly prints errors to stderr and output to stdout; also returns error\n code 1 if it failed\n* show the next 6 dates for an event with the ``next6`` command\n\n\nHistory\n=======\n\nI work on a bunch of projects some of which have regular meetings. One day\nI realized that it would help a lot if I had some automated way to send out\nmeeting reminders to everyone with some text that specified when the meeting\nwas, how to attend the meeting, and where to look for details on what the\nmeeting will cover.\n\nI work on a bunch of projects and have a hell of a time coming up with\ngood names for them all. I don't really remember the names of libraries\nand things I use, so I figure arbitrary names are fine so long as there is\nsufficient documentation that allows search engines to find the project\ngiven search criteria. Given that, I decided to name all my projects going\nforward with names like phil.\n\nThus phil was born.\n\n\nLicense, etc\n============\n\nphil Copyright(C) 2011, 2012, 2013 Will Kahn-Greene\n\nThis program comes with ABSOLUTELY NO WARRANTY. This is free software,\nand you are welcome to redistribute it under certain conditions. See\nthe Terms and Conditions section of `LICENSE`_ for details.\n\n.. _LICENSE: http://www.gnu.org/licenses/gpl-3.0.html\n\n\nInstall\n=======\n\nIf you want a released version of phil, do this::\n\n $ pip install phil\n\n\nIf you want a bleeding edge version of phil, do this::\n\n $ git clone git://github.com/willkg/phil.git\n $ cd phil\n $ python setup.py install\n\n\nConfigure\n=========\n\nphil requires a configuration file. To generate a sample configuration file\nrun phil this way::\n\n phil-cmd createfile \n\nThe config file is self-documenting. Go through it to configure phil.\n\n.. Note::\n\n If you want to keep a pristine example config file with the documentation,\n run ``phil-cmd createfile config_pristine.ini``.\n\n\nRun\n===\n\nFor list of subcommands, arguments and other help, do this::\n\n phil-cmd --help\n\n\nTo email reminders for meetings, do this::\n\n phil-cmd run \n\nThis runs phil with the given config file.\n\nphil has a quiet mode which only prints errors::\n\n phil-cmd --quiet ...\n\n\nphil has a debug mode which does everything **except** actually send email::\n\n phil-cmd --debug ...\n\n\nphil keeps track of the last meeting date/time that it reminded you about.\nIf you run phil twice, it'll only remind you about a meeting once.\n\n\nTest\n====\n\nphil comes with unit tests. Unit tests are executed using `nose`_ and\nuse `fudge`_ as a mocking framework. If you don't already have nose\nand fudge installed, then install them with::\n\n pip install nose fudge\n\nI like to use `nose-progressive`_, too, because it's awesome. To\ninstall that::\n\n pip install nose-progressive\n\nTo run the unit tests from a git clone or the source tarball, do this\nfrom the project directory::\n\n nosetests\n\nWith nose-progressive and fail-fast::\n\n nosetests -x --with-progressive\n\n\n.. _nose-progressive: http://pypi.python.org/pypi/nose-progressive/\n.. _nose: http://code.google.com/p/python-nose/\n.. _fudge: http://farmdev.com/projects/fudge/\n\n\nResources I found helpful\n=========================\n\n* http://tools.ietf.org/html/rfc5545#section-3.8.5.3\n* http://labix.org/python-dateutil\n* http://pypi.python.org/pypi/icalendar/3.0", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "http://github.com/willkg/phil", "keywords": "phil icalendar rrule email", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "phil", "package_url": "https://pypi.org/project/phil/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/phil/", "project_urls": { "Download": "UNKNOWN", "Homepage": "http://github.com/willkg/phil" }, "release_url": "https://pypi.org/project/phil/1.3/", "requires_dist": null, "requires_python": null, "summary": "Sends email reminders for events in an iCalendar file", "version": "1.3" }, "last_serial": 796206, "releases": { "1.0": [ { "comment_text": "", "digests": { "md5": "016b5a9c2880e44d7f481b8299d00538", "sha256": "39a5b5f36a69adc5e4c761f84129905c3c9a52e100ec54f59f9d295f30bdd452" }, "downloads": -1, "filename": "phil-1.0.tar.gz", "has_sig": false, "md5_digest": "016b5a9c2880e44d7f481b8299d00538", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8716, "upload_time": "2011-12-03T23:03:50", "url": "https://files.pythonhosted.org/packages/07/1e/be4055e6b3b55df18003b4a27fe4cc2723715bba138cf03fe4045d9444b2/phil-1.0.tar.gz" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "3daedff4962f0d14246617d1d7e7184d", "sha256": "def6e4adbbbf276bcff0389604ce809381b89b5284f597c7d73130e1cb41a556" }, "downloads": -1, "filename": "phil-1.0.1.tar.gz", "has_sig": false, "md5_digest": "3daedff4962f0d14246617d1d7e7184d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24542, "upload_time": "2011-12-12T20:58:19", "url": "https://files.pythonhosted.org/packages/10/e4/8826f09f4aed9e34615d5a58c79eeaea4a8233d47ee4683868aadef2f6f3/phil-1.0.1.tar.gz" } ], "1.1": [ { "comment_text": "", "digests": { "md5": "28945351ca76a035b01378e915a97f05", "sha256": "b69b681af470cdad9270dbdbd05eb5f99d600f83a1cc2b5faf1b56419d49f397" }, "downloads": -1, "filename": "phil-1.1.tar.gz", "has_sig": false, "md5_digest": "28945351ca76a035b01378e915a97f05", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 25607, "upload_time": "2011-12-31T01:40:46", "url": "https://files.pythonhosted.org/packages/1b/75/d28f2522368963e699d53e0df78c740c54c96e2bc5f03c080f507064f298/phil-1.1.tar.gz" } ], "1.2": [ { "comment_text": "", "digests": { "md5": "7d71f0829125196fc883bfe43085daa7", "sha256": "20524f4a01aa390263ae3270e9c1542a9d1e57d7ba877d892d7d4846f8bc6d18" }, "downloads": -1, "filename": "phil-1.2.tar.gz", "has_sig": false, "md5_digest": "7d71f0829125196fc883bfe43085daa7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24699, "upload_time": "2013-01-21T02:15:48", "url": "https://files.pythonhosted.org/packages/8e/29/d431442ef94d51dc5642d56fe5dda9da49e36f7e67fc44360707828cffb9/phil-1.2.tar.gz" } ], "1.3": [ { "comment_text": "", "digests": { "md5": "f59273e31c7fca6ca186f13ba1148852", "sha256": "0bccb28fc41661aef4293d6aa2ce32149ebbb999a20de4de7ddf9bdf2c501328" }, "downloads": -1, "filename": "phil-1.3.tar.gz", "has_sig": false, "md5_digest": "f59273e31c7fca6ca186f13ba1148852", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24875, "upload_time": "2013-05-30T18:21:24", "url": "https://files.pythonhosted.org/packages/ff/17/9b73563bd4b4c3a4b585a7dbf4a7338f84352cf2f6e495edc1b72993e03f/phil-1.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f59273e31c7fca6ca186f13ba1148852", "sha256": "0bccb28fc41661aef4293d6aa2ce32149ebbb999a20de4de7ddf9bdf2c501328" }, "downloads": -1, "filename": "phil-1.3.tar.gz", "has_sig": false, "md5_digest": "f59273e31c7fca6ca186f13ba1148852", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24875, "upload_time": "2013-05-30T18:21:24", "url": "https://files.pythonhosted.org/packages/ff/17/9b73563bd4b4c3a4b585a7dbf4a7338f84352cf2f6e495edc1b72993e03f/phil-1.3.tar.gz" } ] }