{ "info": { "author": "Seth M. Morton", "author_email": "drtuba78@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Intended Audience :: Developers", "Intended Audience :: Science/Research", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: OS Independent", "Programming Language :: Python :: 2.6", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Topic :: Scientific/Engineering", "Topic :: Utilities" ], "description": "input_reader\n============\n\nA python module to facilitate reading input files\n-------------------------------------------------\n\n``input_reader`` is used to define and read a general input file for a program.\nThis ``README`` only contains a *brief* synopsis of what ``input_reader`` can\ndo. For a more detailed description of the API, please see the documentation\nat http://packages.python.org/input_reader. The API is inspired by that of the\n``argparse`` module from the python standard library, so hopefully it will be\neasy to learn.\n\nThe Problem\n-----------\n\nLet's say you have to write a program that cooks a meal. You have the\nfollowing requirements:\n\n 1) The user must specify one and only one of breakfast, lunch, or dinner.\n\n a) For breakfast, the user must specify scrambled or poached eggs and\n how many eggs. Also, the user specifies waffles or pancakes, and\n specifies if they want butter and/or syrup. The user may\n optionally request bacon.\n\n b) For lunch, the user must specify if they want a sandwich (BLT,\n ham, or turkey) or soup (vegetable or chili). The user also\n specifies if they want bread.\n\n c) For dinner, the user specifies steak (rare, medium or well),\n salmon, or pasta (red or white sauce). There is a choice of\n soup or salad. The user may also choose to have dessert.\n\n 2) The user must specify a drink, and that drink can be water, milk,\n OJ, beer, soda, or wine.\n\n 3) The user can request an organic meal and/or gluten-free.\n\nHow We Want the Input Files\n---------------------------\n\nLet's say that someone wants a scrambled egg breakfast with syrupy pancakes\nand bacon, and OJ for a drink. Here is how we might define the input::\n\n drink oj\n\n breakfast\n eggs 2 scrambled\n pancakes syrup\n bacon\n end\n\nOr, what if someone with a gluten allergy wants dinner with wine. They want\na medium steak with salad, and they want the dessert. Here is the input::\n\n nogluten\n\n drink wine\n\n dinner\n steak medium\n salad\n dessert\n end\n\nThe ``input_reader`` Code\n-------------------------\n\nTo define the above requirements, we would use the following code:\n\n.. code:: python\n\n import sys\n from input_reader import InputReader, ReaderError\n\n reader = InputReader()\n\n # Gluten free or organic meal? These are simple booleans\n reader.add_boolean_key('nogluten')\n reader.add_boolean_key('organic')\n\n # The drink has an argument, and accepts a specific list of values\n reader.add_line_key('drink', type=('water', 'milk', 'oj', 'beer', 'soda', 'wine'))\n\n # We are allowed to specify breakfast, lunch or dinner, so we use\n # a mutually exclusive group. We need one of these, so we call this\n # required.\n meal = reader.add_mutually_exclusive_group(required=True)\n\n # We define the breakfast block\n bfast = meal.add_block_key('breakfast')\n # Eggs, number of eggs then the style\n bfast.add_line_key('eggs', type=[int, ('scrambled', 'poached')], required=True)\n # Pancakes OR waffles. Syrup and/or butter is optional\n wp = bfast.add_mutually_exclusive_group(required=True)\n wp.add_line_key('waffles', type=None, glob={'len':'*', 'type':('syrup', 'butter')})\n wp.add_line_key('pancakes', type=None, glob={'len':'*', 'type':('syrup', 'butter')})\n # BACON!\n bfast.add_boolean_key('bacon')\n\n # The lunch block\n lunch = meal.add_block_key('lunch')\n # Bread?\n lunch.add_boolean_key('bread')\n # Sandwitch or soup\n ss = lunch.add_mutually_exclusive_group(required=True)\n ss.add_line_key('sandwich', type=('blt', 'ham', 'turkey'))\n ss.add_line_key('soup', type=('vegetable', 'chili'))\n\n # The dinner block\n dinner = meal.add_block_key('dinner')\n # Dessert?\n dinner.add_boolean_key('dessert')\n # Soup or salad?\n ss = dinner.add_mutually_exclusive_group()\n ss.add_boolean_key('soup')\n ss.add_boolean_key('salad')\n # Main course\n mcourse = dinner.add_mutually_exclusive_group(required=True)\n mcourse.add_line_key('steak', type=('rare', 'medium', 'well'))\n mcourse.add_boolean_key('salmon')\n mcourse.add_line_key('pasta', type=('red', 'white'))\n\nYou can read in and analyze the file in a manner given below:\n\n.. code:: python\n\n # Assuming the input file is in argv[1], read in the input file\n try:\n inp = reader.read_input(sys.argv[1])\n except ReaderError as e:\n sys.exit(str(e))\n\n # Is the meal gluten free?\n if inp.nogluten:\n ...\n\n # Is lunch served?\n if inp.lunch:\n # If so, what type of soup?\n if inp.lunch.soup == 'chili':\n ...\n\n # Etc...\n\nAuthor\n------\n\nSeth M. Morton\n\nHistory\n-------\n\n03-01-2014 v. 1.2.2\n'''''''''''''''''''\n\n - Cleaned up import blocks\n - Added spaces between defs/classes (cosmetic)\n\n01-29-2014 v. 1.2.1a\n''''''''''''''''''''\n\n - Fixed bug where strings were compared to unicode instead of basestring in python2.x\n\n01-26-2014 v. 1.2.1\n'''''''''''''''''''\n\n - All calls are completely python2/3 compatible\n - Python2 uses unicode literals\n - Files use unicode encoding\n\n01-16-2014 v. 1.2.0\n'''''''''''''''''''\n\n - Added input_reader.h to provide easy C interface to this python module\n - Added include_path attribute to input_reader module for C compilations\n - Removed distribute_setup.py (cause install problems for some)\n - Unit tests pass for both Python 2.7 and Python 3.x\n - Updated documentation\n\n04-13-2013 v. 1.1.1\n'''''''''''''''''''\n\n - Added the filename attribute to the InputReader class\n\n01-25-2013 v. 1.1.0\n'''''''''''''''''''\n\n - Increased code coverage of tests to ~98%\n - Refactored code to reduce copy/paste and be open for future improvements\n\n01-14-2013 v. 1.0.2\n'''''''''''''''''''\n\n - Added input_file attribute to InputReader class\n - Fixed typo in documentation\n - Updated version updating code\n\n12-22-2012 v. 1.0.1\n'''''''''''''''''''\n\n - Fixed error in MANIFEST.in\n\n12-16-2012 v. 1.0.0\n'''''''''''''''''''\n\n - Fixed bugs in unit tests\n - Finished documentation with doctests\n - Added a post_process method to InputReader that can be subclassed\n - Made improvements to the setup process\n\n12-3-2012 v. 0.9.1\n''''''''''''''''''\n\n - Added unit tests\n - Added extra checks for bad input", "description_content_type": null, "docs_url": "https://pythonhosted.org/input_reader/", "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/SethMMorton/input_reader", "keywords": null, "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "input_reader", "package_url": "https://pypi.org/project/input_reader/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/input_reader/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/SethMMorton/input_reader" }, "release_url": "https://pypi.org/project/input_reader/1.2.2/", "requires_dist": null, "requires_python": null, "summary": "Define and read input files with an API inspired by argparse", "version": "1.2.2" }, "last_serial": 1015924, "releases": { "0.9.1": [ { "comment_text": "", "digests": { "md5": "f0815ab4e37bab9ec6b85c9b9ae1ac56", "sha256": "56c9552bcc5fafee254b45808be39020c84d7f6044b13ffa81cf1160ec3e5249" }, "downloads": -1, "filename": "input_reader-0.9.1.tar.gz", "has_sig": false, "md5_digest": "f0815ab4e37bab9ec6b85c9b9ae1ac56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44741, "upload_time": "2012-12-05T07:10:15", "url": "https://files.pythonhosted.org/packages/b5/3c/2daad48dbdf41a8bbeb5cc1a1c70cf0b926b9f9bbc37a223bce0dd2bfd2b/input_reader-0.9.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "3ac6e026aec220d65bae20a5200a8cbe", "sha256": "a023be978f5802d95a8b8d53a98be4320df91004c287756d9539ecac479db4a1" }, "downloads": -1, "filename": "input_reader-0.9.1.zip", "has_sig": false, "md5_digest": "3ac6e026aec220d65bae20a5200a8cbe", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 59928, "upload_time": "2012-12-05T07:10:15", "url": "https://files.pythonhosted.org/packages/ea/44/b8bdb8a950e8cca09dbb91fd16c3d7fd8f8fa0dd73bc4d099a5c02bc14af/input_reader-0.9.1.zip" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "f0b0add11a85bb1d01d89c7bc50c896e", "sha256": "da075e4d1fc76b8ac39183046af1c5bf96432dd7c2d06d17646e31c2354c3a15" }, "downloads": -1, "filename": "input_reader-1.0.0.tar.gz", "has_sig": false, "md5_digest": "f0b0add11a85bb1d01d89c7bc50c896e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88217, "upload_time": "2012-12-16T23:18:07", "url": "https://files.pythonhosted.org/packages/ca/67/d9d6b1976d28bb1a96312ea592ec36116a9a51aa963fba0973c20a0b6514/input_reader-1.0.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "4dc56ebec3fbae6c35640944d4c8891b", "sha256": "57ac32fb6314a9c31060836334428f4a818629c6d38a549fcbcae519207a5f7e" }, "downloads": -1, "filename": "input_reader-1.0.0.zip", "has_sig": false, "md5_digest": "4dc56ebec3fbae6c35640944d4c8891b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 111472, "upload_time": "2012-12-16T23:18:05", "url": "https://files.pythonhosted.org/packages/fe/0b/ecd47b8a1f969b9a1d205a530c56c0a5ae27f445cf99a3ff243d29d94857/input_reader-1.0.0.zip" } ], "1.0.1": [ { "comment_text": "", "digests": { "md5": "9dc307c79555f13c559f753890b2a2ff", "sha256": "80a031faa0eb95ad7b7a36bce79b41ab86a01cf848956c57518330d29dab6a3e" }, "downloads": -1, "filename": "input_reader-1.0.1.tar.gz", "has_sig": false, "md5_digest": "9dc307c79555f13c559f753890b2a2ff", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 70906, "upload_time": "2012-12-22T19:13:48", "url": "https://files.pythonhosted.org/packages/b5/ce/32772cffd2a94ebcdaecd7b39edb7b7d76d7ad9d10f9fec527b3d8cdab81/input_reader-1.0.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "287fbc6d4d39e7658e2c61e92aea899d", "sha256": "70a87db55de02c0ea03019c05b56eb1392da8fcd89641387621da7f1962dac5c" }, "downloads": -1, "filename": "input_reader-1.0.1.zip", "has_sig": false, "md5_digest": "287fbc6d4d39e7658e2c61e92aea899d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92040, "upload_time": "2012-12-22T19:13:48", "url": "https://files.pythonhosted.org/packages/a6/8c/5310ecbc9a3d66240f0dce58a4b5ca612575b5527897d624062bd33657bd/input_reader-1.0.1.zip" } ], "1.0.2": [ { "comment_text": "", "digests": { "md5": "4c7de9dc74035e9a7d484369c1f432c5", "sha256": "ad302d235ae91dc13b315a33ab352f3b023193ea5deacb3600c99f22b7491517" }, "downloads": -1, "filename": "input_reader-1.0.2.tar.gz", "has_sig": false, "md5_digest": "4c7de9dc74035e9a7d484369c1f432c5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71114, "upload_time": "2013-01-15T06:52:11", "url": "https://files.pythonhosted.org/packages/96/1c/6c5e59e5d21c6e0321c3330a4e8cebd99df0b01202fa19dac7a67550f60e/input_reader-1.0.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "41487807e162aa975f2b2bc3bc1ae0e1", "sha256": "44f133120f6adef09ba6285e24df6e865f14f5830e1a28beda80f1a6b2441aa5" }, "downloads": -1, "filename": "input_reader-1.0.2.zip", "has_sig": false, "md5_digest": "41487807e162aa975f2b2bc3bc1ae0e1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 92475, "upload_time": "2013-01-15T06:52:09", "url": "https://files.pythonhosted.org/packages/96/8d/cf550556048af68365b4fe61653ca53f9d2f5d50f5c55a23fb3341ac07ff/input_reader-1.0.2.zip" } ], "1.1.0": [ { "comment_text": "", "digests": { "md5": "671eba423057c9ba8c1d65de3c3f3a93", "sha256": "378064accfc0e80e49cf5d7a5d6eeba7121f33bd4011c88a53a2109e32f93017" }, "downloads": -1, "filename": "input_reader-1.1.0.tar.gz", "has_sig": false, "md5_digest": "671eba423057c9ba8c1d65de3c3f3a93", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 71162, "upload_time": "2013-01-26T03:04:48", "url": "https://files.pythonhosted.org/packages/89/00/6c675c11a38df1426dad0f648590da61876342ee66e55b4c6be02325c927/input_reader-1.1.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "8db5aaa35332a63aa9ade68353bda97e", "sha256": "8342f4ca0f454acf73e7f25eb686c1b3f9e26d31e0ac8abcd6f93d15ac408981" }, "downloads": -1, "filename": "input_reader-1.1.0.zip", "has_sig": false, "md5_digest": "8db5aaa35332a63aa9ade68353bda97e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 95348, "upload_time": "2013-01-26T03:04:45", "url": "https://files.pythonhosted.org/packages/f9/8f/daef9c070a6cb8f466f104b8e4e00b2cbbdb28ac413a84c62320341cc3e3/input_reader-1.1.0.zip" } ], "1.1.1": [ { "comment_text": "", "digests": { "md5": "12cbcdaa251c02069633f7c06d81909a", "sha256": "b3267bb06c4b999bca921e8c2a05ed0e7d30426d6384d2f3a24a7c821d5253ab" }, "downloads": -1, "filename": "input_reader-1.1.1.tar.gz", "has_sig": false, "md5_digest": "12cbcdaa251c02069633f7c06d81909a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56269, "upload_time": "2013-04-13T18:19:17", "url": "https://files.pythonhosted.org/packages/c9/fc/b0ea4c27708feb312be5176ac81e1bc57ec3aeaab52939c94f1b56ce80d7/input_reader-1.1.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "39fb52dea068be098a83b9bf1aed66ca", "sha256": "17554e618c3ffea42d8febed2e2c15f477f58352ecb88b3d5c4e546d8966dfc9" }, "downloads": -1, "filename": "input_reader-1.1.1.zip", "has_sig": false, "md5_digest": "39fb52dea068be098a83b9bf1aed66ca", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 74619, "upload_time": "2013-04-13T18:19:13", "url": "https://files.pythonhosted.org/packages/e5/a6/9aef303ea2f187db459b431b5e56496304748310fbf74b2b72bf4066a7ef/input_reader-1.1.1.zip" } ], "1.2.0": [ { "comment_text": "", "digests": { "md5": "5b57ee5f7bd218a189d0b91f0c575034", "sha256": "02aceaf0a4e6db9c97845103365c355a6f6cfe51b58f0d99ecdd87c982339144" }, "downloads": -1, "filename": "input_reader-1.2.0.tar.gz", "has_sig": false, "md5_digest": "5b57ee5f7bd218a189d0b91f0c575034", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 81521, "upload_time": "2014-01-17T06:00:22", "url": "https://files.pythonhosted.org/packages/17/41/55832ab13b89bf7a0a143d2628830d58f895edee5e0523879fb567cfbc24/input_reader-1.2.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "1232cb9864518462dee83c84235284a2", "sha256": "12e65dcd66d6ddc283588245581cb3dd6ce1989f163128990cfc82579bfda072" }, "downloads": -1, "filename": "input_reader-1.2.0.zip", "has_sig": false, "md5_digest": "1232cb9864518462dee83c84235284a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 100699, "upload_time": "2014-01-17T06:00:20", "url": "https://files.pythonhosted.org/packages/d0/7d/de60d3d503b15effcda54759ff30fc7b69b60a91c82a993b76496f536c99/input_reader-1.2.0.zip" } ], "1.2.1": [ { "comment_text": "", "digests": { "md5": "04855bdc65b4da50d8beb8faf3417a89", "sha256": "416eee45401e6201ee8e77a62636d1121a60c244740359a2633efe116a542bb7" }, "downloads": -1, "filename": "input_reader-1.2.1.tar.gz", "has_sig": false, "md5_digest": "04855bdc65b4da50d8beb8faf3417a89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 99058, "upload_time": "2014-01-27T06:24:00", "url": "https://files.pythonhosted.org/packages/1f/bf/b5f2092890e05afac69870d121cf37796b1f6823083e3c9b0d6dcc14e39c/input_reader-1.2.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "48ae5d8e9443e99d8fa4ba1c91a84780", "sha256": "8e24ed7447c6d9b8479b591819588f73af45ed45d57a2615de3d532042795d9a" }, "downloads": -1, "filename": "input_reader-1.2.1.zip", "has_sig": false, "md5_digest": "48ae5d8e9443e99d8fa4ba1c91a84780", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 124882, "upload_time": "2014-01-27T06:23:56", "url": "https://files.pythonhosted.org/packages/7a/d9/7c2ae3f204422d44991c57afe24ee06bd730345f57af9504285eeae76ce6/input_reader-1.2.1.zip" } ], "1.2.1a": [ { "comment_text": "", "digests": { "md5": "ea0d140522c3d0a2f43f5b49569aa551", "sha256": "478b7a286dd5983188168c6a53d9260b2de6a3062080ad9f167eeab28f12ca66" }, "downloads": -1, "filename": "input_reader-1.2.1a.tar.gz", "has_sig": false, "md5_digest": "ea0d140522c3d0a2f43f5b49569aa551", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 83072, "upload_time": "2014-01-30T03:13:44", "url": "https://files.pythonhosted.org/packages/25/de/199028c617a0ea99d281dbc09f2f4d6954886a9a563ad8f2298a7e21bb90/input_reader-1.2.1a.tar.gz" }, { "comment_text": "", "digests": { "md5": "4b31ab67497bbedd0da88a46485210d3", "sha256": "aced14d36f2840a130d261e2d2c9d9ee072a1a5323df6ed0d58360cfd03bd3fb" }, "downloads": -1, "filename": "input_reader-1.2.1a.zip", "has_sig": false, "md5_digest": "4b31ab67497bbedd0da88a46485210d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 103182, "upload_time": "2014-01-30T03:13:38", "url": "https://files.pythonhosted.org/packages/d0/d7/d591b86429c8500125f4076693b860e441661ce598117d09a5118bbb00f1/input_reader-1.2.1a.zip" } ], "1.2.2": [ { "comment_text": "", "digests": { "md5": "8e4ec0e5756941566f37fa4f5059b18c", "sha256": "592f5c085c73613c224e65567c7d0910d2e4e821dfab28c09738baf178e60fca" }, "downloads": -1, "filename": "input_reader-1.2.2.tar.gz", "has_sig": false, "md5_digest": "8e4ec0e5756941566f37fa4f5059b18c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 99835, "upload_time": "2014-03-01T19:22:50", "url": "https://files.pythonhosted.org/packages/5e/c9/f02db78bdf9d73be52f6a28d79b3a4fcd9610649a725159781850e37973d/input_reader-1.2.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "7afb8ab4e412fcd278b0f4f466e4f811", "sha256": "ac639611955078b5c493fd9c33cdc502542675cfca66757a59cef1f93badc578" }, "downloads": -1, "filename": "input_reader-1.2.2.zip", "has_sig": false, "md5_digest": "7afb8ab4e412fcd278b0f4f466e4f811", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 125747, "upload_time": "2014-03-01T19:22:48", "url": "https://files.pythonhosted.org/packages/da/fe/1439035ceb8bdf5c79440a6cc834740e1989d93e8267061bcb83c25c9bbe/input_reader-1.2.2.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "8e4ec0e5756941566f37fa4f5059b18c", "sha256": "592f5c085c73613c224e65567c7d0910d2e4e821dfab28c09738baf178e60fca" }, "downloads": -1, "filename": "input_reader-1.2.2.tar.gz", "has_sig": false, "md5_digest": "8e4ec0e5756941566f37fa4f5059b18c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 99835, "upload_time": "2014-03-01T19:22:50", "url": "https://files.pythonhosted.org/packages/5e/c9/f02db78bdf9d73be52f6a28d79b3a4fcd9610649a725159781850e37973d/input_reader-1.2.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "7afb8ab4e412fcd278b0f4f466e4f811", "sha256": "ac639611955078b5c493fd9c33cdc502542675cfca66757a59cef1f93badc578" }, "downloads": -1, "filename": "input_reader-1.2.2.zip", "has_sig": false, "md5_digest": "7afb8ab4e412fcd278b0f4f466e4f811", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 125747, "upload_time": "2014-03-01T19:22:48", "url": "https://files.pythonhosted.org/packages/da/fe/1439035ceb8bdf5c79440a6cc834740e1989d93e8267061bcb83c25c9bbe/input_reader-1.2.2.zip" } ] }