{ "info": { "author": "Fred Callaway", "author_email": "fredc@llaway.com", "bugtrack_url": null, "classifiers": [], "description": "# grade.py\ngrade.py is a testing framework that aids in grading python assignments. grade.py gracefully handles exceptions and offers error carried forward support.\n\nThis package differs from standard testing frameworks in two major ways. First, it relies on a correct implementation of the module, making test scripts quick to write and enabling error carried forward. Second, it is designed to identify graded quality of performance, rather than giving binary PASS/FAIL judgements.\n\n## Usage\n\nAs an end user (i.e. a grader), usage is simple:\n\n $ grade.py path/to/student/module.py\n\nFor example, one could test all the python modules in a directory of student submissions with the command: `grade.py students/*/*.py`. Of course, this will only work if testing scripts have been appropriately registered by the lead grader.\n\n## Writing test scripts\n\nWriting a test script comes in two phases: \n\n1. Correctly implement the assigned module specification.\n2. Write a test suite with functions that generate output using the module.\n\n### Example test function\n\n```python\ndef test_foo(module):\n for i in range(10):\n yield Check('foo({i})', note='good effort')\n```\n\nThis function might generate the following output:\n\n```\nfoo(0) should be 0, but student code raised an exception:\n File \"flc37/foo.py\", line 15, in foo\n return 1.0 / x\nZeroDivisionError: integer division or modulo by zero\n Note: good effort\n\nfoo(5) should be 5, but it is 5.0\n Note: good effort\n```\n\n\nYou can find a more complete example in `example/`, which includes two \"student submisions\" along with an example grading package and detailed commentary.\n\nTo create a new test, first copy the boilerplate from `test/grade_template/`. A package in the `tests/` directory that follows the naming convention `grade_MODULE/` will be used to grade any module with the name `MODULE`. Putting the module in this directory makes it visible to the grade.py command line tool.\n\n## Distributing test scripts\n\nWe are still in the process of developing a generalized distribution strategy. At present, the best option is fork this repository and add scripts directly into the repository. Then update the name of the package and upload it to PyPI so that graders can easily download and update the package using e.g. `$ pip install cs1110grading`", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/fredcallaway/grade.py", "keywords": "grade grading python framework student assignment", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "gradepy", "package_url": "https://pypi.org/project/gradepy/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/gradepy/", "project_urls": { "Homepage": "https://github.com/fredcallaway/grade.py" }, "release_url": "https://pypi.org/project/gradepy/0.3/", "requires_dist": null, "requires_python": "", "summary": "Tools for automated grading of python assignments.", "version": "0.3" }, "last_serial": 1938642, "releases": { "0.0": [ { "comment_text": "", "digests": { "md5": "6275b589e3fd7b2d347e9db26d14dfd7", "sha256": "d7547cf3bd036a9369815dbc9fe73677bf8f6331f9f7b04eb48c2b7179684241" }, "downloads": -1, "filename": "gradepy-0.0.tar.gz", "has_sig": false, "md5_digest": "6275b589e3fd7b2d347e9db26d14dfd7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5336, "upload_time": "2016-01-31T17:25:56", "url": "https://files.pythonhosted.org/packages/af/e1/bea75f4e46b3c86f0a4507278784baab7147ef2be614000b7314a4cbc93f/gradepy-0.0.tar.gz" } ], "0.2": [ { "comment_text": "", "digests": { "md5": "c20cbf9bee2a79d21dce012c29ae463d", "sha256": "080264d8903bbeaa6e712a6dd5cde55920f98d11381f5541290edd2dc671674b" }, "downloads": -1, "filename": "gradepy-0.2.tar.gz", "has_sig": false, "md5_digest": "c20cbf9bee2a79d21dce012c29ae463d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7199, "upload_time": "2016-02-04T01:28:44", "url": "https://files.pythonhosted.org/packages/a6/2b/ec77ed456d6611bbd259aaf2b3bcafda975498ed6f89a13672e865cd7b73/gradepy-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "ea07465c89e1185372c8ab46fe58d730", "sha256": "ba914450018831348c39003d671442183b3909bfa483a9751c08cc416a3ce84f" }, "downloads": -1, "filename": "gradepy-0.3.tar.gz", "has_sig": false, "md5_digest": "ea07465c89e1185372c8ab46fe58d730", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7375, "upload_time": "2016-02-04T01:34:24", "url": "https://files.pythonhosted.org/packages/e0/2c/25a4181cdce38043f0b6bbace54400878c90139f6f0f81f0895851f2286d/gradepy-0.3.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "ea07465c89e1185372c8ab46fe58d730", "sha256": "ba914450018831348c39003d671442183b3909bfa483a9751c08cc416a3ce84f" }, "downloads": -1, "filename": "gradepy-0.3.tar.gz", "has_sig": false, "md5_digest": "ea07465c89e1185372c8ab46fe58d730", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7375, "upload_time": "2016-02-04T01:34:24", "url": "https://files.pythonhosted.org/packages/e0/2c/25a4181cdce38043f0b6bbace54400878c90139f6f0f81f0895851f2286d/gradepy-0.3.tar.gz" } ] }