{ "info": { "author": "Richard Lawrence", "author_email": "richard.lawrence@berkeley.edu", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v2 or later (GPLv2+)", "Programming Language :: Python", "Topic :: Education" ], "description": "===========\nschoolutils\n===========\n\nschoolutils provides a simple, efficient way to track and manage\nstudent data. It includes:\n\n* a database for storing information about students, courses,\n assignments, and grades\n* a command-line interface for interacting with the database \n* tools for calculating grades \n* tools for importing and exporting student data in useful formats\n* reports on basic grade statistics\n\nOther planned features include:\n\n* tools for reporting more complex grade statistics\n* tools for receiving student assignments via email, and returning\n graded assignments and comments via email\n\nInstallation\n============\n\nInstalling locally vs. system-wide\n----------------------------------\nIf you are your computer's administrator, you probably want to\ninstall schoolutils system-wide. In that case, you need to run the\n``pip`` or ``python`` installation commands below with administrator\nprivileges. On Mac OS X and GNU/Linux, you can generally do that by\nprefixing ``sudo`` to these commands (e.g., ``sudo pip install\nschoolutils``).\n\nIf you do not have adminstrative access to the computer where you want\nto install schoolutils, or you simply don't want to install it\nsystem-wide, there are a couple of options for installing it locally.\nThe first is to install schoolutils in a Python `virtual environment\n`_ that you control. To do\nthis, create and activate a virtual environment, then run the ``pip``\ncommand below. The second is to install schoolutils to a directory in\nyour control which is on the system Python interpreter's path. You\ncan do that by passing the ``--user`` option to the ``python`` command\nbelow (``python setup.py install --user``).\n\nNote that if you don't install schoolutils system-wide, you may need\nto adjust your shell's $PATH environment variable to make the\n``grade`` command available. A virtual environment makes this easy,\nso that is the recommended method for installing locally.\n\nInstallation procedures\n-----------------------\nThe easiest way to install schoolutils is via `pip\n`_::\n\n $ pip install schoolutils\n\nYou can also `download\n`_ the package from\nPyPI, unpack it, and run::\n\n $ python setup.py install\n\nfrom the package directory.\n\nFinally, you can get the development version with ``git``. The project\nis hosted on both `Bitbucket `_\nand `Github `_. You can clone it\nusing one of the following commands::\n\n $ git clone https://bitbucket.org/wyleyr/schoolutils.git\n $ git clone git://github.com/wyleyr/schoolutils.git \n\nThen run the ``setup.py`` script from the repository root, as above.\n\nschoolutils has no dependencies (besides the Python standard library),\nso the installation should go smoothly; if you have any problems, please\n`report a bug `_.\n\nConfiguration\n=============\nIt isn't necessary to configure schoolutils, but it will be faster to\nuse if you do. The command-line interface expects to find configuration\nfiles in the ``.schoolutils`` directory of your home directory. You\nshould create three Python modules there: ``config.py``,\n``calculators.py``, and ``validators.py``. Sample configuration files\nare included in the ``examples`` directory of the source package::\n\n $ mkdir ~/.schoolutils\n $ cp path/to/schoolutils_source/examples/*.py ~/.schoolutils\n\nThe comments in the sample files explain the values you should provide\nthere. The most important one in ``config.py`` is ``gradedb_file``,\nwhich should contain the path to your grade database file. If you\ndon't provide this value, you will have to type it in every time you\nstart the grading program.\n\nFirst run\n=========\nOnce you've installed the package, you can run the grading program as\nfollows::\n\n $ grade\n\nThis will start the grading program's interactive user interface with\nthe configuration you specified in your ``config.py`` module.\nFrom there, you can:\n\n1) Add a course\n2) Add or import students into the course\n3) Add assignments\n4) Start entering grades\n\n\nAfter that\n==========\n\nA few concepts\n--------------\nThe grading program has a few important concepts you should be aware\nof:\n\nCurrently selected course and assignment\n The grading program has a notion of the 'current course' and\n 'current assignment'. Most of the actions you take in the grading\n program depend on your having previously selected a course or\n assignment. For example, when you add or import students, the\n grading program will add them as members of the current course.\n When you enter grades, you will be entering grades for the current\n assignment. You can specify the current course and assignment in\n your ``config.py`` module, or select them interactively. \n\nEntered vs. calculated grades\n 'Entered' grades are grades you have entered into the database\n through the interactive interface. These are the sort of grades you\n produce by hand: for example, letter grades for a batch of papers\n that you've graded.\n\n 'Calculated' grades are grades you use the grading program to\n calculate. Grades are calculated by a Python function that you must\n provide, in your ``calculators.py`` module (see below). These will\n also be saved in the database, when you run the grade calculation\n command.\n\n You can use the grading program without ever calculating grades, but\n it will (hopefully!) save you some work if you do.\n \nGrade calculation function\n A grade calculation function is a function you define in your\n ``calculators.py`` module. This function should calculate the\n calculated grades for a single student on the basis of entered\n grades. You should define one grade calculation function per\n course.\n\n Grade calculation functions use a special naming convention so the\n grading program knows which function to use when calculating\n grades. The name should be::\n \n calculate_grade__\n\n For example, if you are teaching a course numbered '12A' in the fall\n semester of 2013, you'd write a grade calculation function named::\n\n calculate_grade_12A_fall2013\n\n Each grade calculation function will receive a set of database rows\n as input, representing a single student's grades in the current\n course. The function should return a dictionary or list of\n dictionaries representing grades calculated for that student. For\n more information, see the example ``calculators.py`` module.\n\nValidator function\n A validator function is a function you define in your\n ``validators.py`` module. It prepares data that you type into the\n user interface to be saved to the database. This function should\n accept a string and either return an appropriate value or raise a\n Python ``ValueError``. If a validator raises a ``ValueError``, the\n user interface asks you to re-enter the value until you type one\n that validates. For example, the ``letter_grade`` validator ensures\n that any string passed to it is a letter grade, so that you can't\n save a letter grade of 'W' by mistake.\n\n schoolutils provides sensible defaults for all validator functions,\n so defining your own is not strictly necessary. But you can reduce\n data-entry errors by providing custom validator functions, which\n will override the defaults. See the sample ``validators.py``\n module for more information and a list of the validators for which\n you can provide custom definitions.\n\n\nCommand-line options\n--------------------\nTo see command-line options available for the grading program, use::\n\n $ grade --help\n\nWarning\n-------\nschoolutils is alpha-quality software. It is offered in the hope you\nfind it useful, but (like all software) it has bugs, so please take\nsensible precautions to protect your data. In particular, you should\n**backup your grade database file(s)** regularly! This is easy, because\nSQLite stores your whole grade database as a single flat file, so just\ndo it!\n\nAs with all Free software, schoolutils has no warranty. Please see\nthe warranty notice in the license file or the individual source files\nfor more information.", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/wyleyr/schoolutils", "keywords": null, "license": "UNKNOWN", "maintainer": null, "maintainer_email": null, "name": "schoolutils", "package_url": "https://pypi.org/project/schoolutils/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/schoolutils/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://bitbucket.org/wyleyr/schoolutils" }, "release_url": "https://pypi.org/project/schoolutils/0.1.7/", "requires_dist": null, "requires_python": null, "summary": "Utilities to track and manage student data, including a grade database, grade calculators, and more", "version": "0.1.7" }, "last_serial": 909938, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "75564f3e351450270a8fa5f739e6425f", "sha256": "c2497d9e5b78a37906dec43ccd02e58f7b7aa695b253b08bdd47b136dfc9fd1d" }, "downloads": -1, "filename": "schoolutils-0.1.0.tar.gz", "has_sig": false, "md5_digest": "75564f3e351450270a8fa5f739e6425f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29593, "upload_time": "2013-01-14T19:21:16", "url": "https://files.pythonhosted.org/packages/77/69/1c0e560b0a5126e5ca956f086463e6c423b2f99ee4463c35e850472e6513/schoolutils-0.1.0.tar.gz" }, { "comment_text": "", "digests": { "md5": "b1357631f3cb903a7e6d561b6a164c7a", "sha256": "3b404793d601f94a83ce15675dea7f615d910b4c173666e20f7c75e45aa788cb" }, "downloads": -1, "filename": "schoolutils-0.1.0.zip", "has_sig": false, "md5_digest": "b1357631f3cb903a7e6d561b6a164c7a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35845, "upload_time": "2013-01-14T19:21:22", "url": "https://files.pythonhosted.org/packages/7a/19/567b8f1d3271215f53be78995a17318ae5638ef3aad3ce1a472a140577c2/schoolutils-0.1.0.zip" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "d2e22db9f65ba46fa9b561c75497ac87", "sha256": "2c033a10c4e46b1f65ef5e06cee4b620fb009de46ada3b2073c411dfc8b3304b" }, "downloads": -1, "filename": "schoolutils-0.1.1.tar.gz", "has_sig": false, "md5_digest": "d2e22db9f65ba46fa9b561c75497ac87", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29890, "upload_time": "2013-01-14T21:19:09", "url": "https://files.pythonhosted.org/packages/82/31/71d5f6bee17675724a7580b1499de27a94f648602c6463aa2c5fbc69cc20/schoolutils-0.1.1.tar.gz" }, { "comment_text": "", "digests": { "md5": "37b32bf209ff008e067cd8235d57bcb3", "sha256": "3ce1f255fc3c57cc2fc3b9ddb84c95ebfc135e4bdf7852f9ebefa42af29c1e5d" }, "downloads": -1, "filename": "schoolutils-0.1.1.zip", "has_sig": false, "md5_digest": "37b32bf209ff008e067cd8235d57bcb3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36143, "upload_time": "2013-01-14T21:19:12", "url": "https://files.pythonhosted.org/packages/79/65/610fd31411b4ba34170db683756e61d8575223e8bd3cdee74682d8c0514b/schoolutils-0.1.1.zip" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "affa63027ee075d7d8e758dfa561e609", "sha256": "c007e19387a5cc132e3cd631753c1fd6a598663c1a25b157b7f610401aea5042" }, "downloads": -1, "filename": "schoolutils-0.1.2.tar.gz", "has_sig": false, "md5_digest": "affa63027ee075d7d8e758dfa561e609", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30116, "upload_time": "2013-01-15T19:06:00", "url": "https://files.pythonhosted.org/packages/02/f7/a289e1a08d5b732b79ecd780bead4795340bd092a6fbcb2a7659e2dd6631/schoolutils-0.1.2.tar.gz" }, { "comment_text": "", "digests": { "md5": "e75d2d9d22a645e80cfadc98faf009a1", "sha256": "5fb56cb57404f465918bb53807168713705274c845a57d0c07b6eec26164257e" }, "downloads": -1, "filename": "schoolutils-0.1.2.zip", "has_sig": false, "md5_digest": "e75d2d9d22a645e80cfadc98faf009a1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 36561, "upload_time": "2013-01-15T19:06:02", "url": "https://files.pythonhosted.org/packages/52/26/670f78c3093f14680e8c035f3d23d4dda967552c867dd37243995b47aa96/schoolutils-0.1.2.zip" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "5de80ce14692cca226cba0733664f105", "sha256": "3f92fe5d15f2ad2f69d6a71315f0124d8f4e624c99d35f78db67ce545c61f219" }, "downloads": -1, "filename": "schoolutils-0.1.3.tar.gz", "has_sig": false, "md5_digest": "5de80ce14692cca226cba0733664f105", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 35849, "upload_time": "2013-01-16T05:49:07", "url": "https://files.pythonhosted.org/packages/0c/00/9771f5c6ed6f0ab91d04ca26138f3ecdebb3abc635a75e4b16e603bd37ac/schoolutils-0.1.3.tar.gz" }, { "comment_text": "", "digests": { "md5": "da41a3228c7b4c0b9b294ea122032531", "sha256": "a33234dcadf079b394011a070e686264e142c086a580838553e204b25489c3c1" }, "downloads": -1, "filename": "schoolutils-0.1.3.zip", "has_sig": false, "md5_digest": "da41a3228c7b4c0b9b294ea122032531", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45500, "upload_time": "2013-01-16T05:49:09", "url": "https://files.pythonhosted.org/packages/1c/5c/9581653b8177c742a8ddebaff64083586aa2b6372ebac4a1ff67fb7d5b56/schoolutils-0.1.3.zip" } ], "0.1.4": [ { "comment_text": "", "digests": { "md5": "6b82246bdb362f2194167a1efaa22d3b", "sha256": "83d84436ca5a3bd8fe292ee26ac6398dbc77ad912dbd4d3c004764e6430ce240" }, "downloads": -1, "filename": "schoolutils-0.1.4.tar.gz", "has_sig": false, "md5_digest": "6b82246bdb362f2194167a1efaa22d3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34995, "upload_time": "2013-01-17T19:28:03", "url": "https://files.pythonhosted.org/packages/89/b1/c90bc3876d85796265cfbd862efaa18c2114525549e3feebb20c79613b47/schoolutils-0.1.4.tar.gz" }, { "comment_text": "", "digests": { "md5": "13d7e381ece3d921feed8b1f07b385b3", "sha256": "e4f61a03f07ad7c649c9c2095a77a6c94e4a20244e4d16afbf451910de8c09c3" }, "downloads": -1, "filename": "schoolutils-0.1.4.zip", "has_sig": false, "md5_digest": "13d7e381ece3d921feed8b1f07b385b3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 45663, "upload_time": "2013-01-17T19:28:05", "url": "https://files.pythonhosted.org/packages/e0/3c/cf48c0008123acd2a41d2f6061235b1bd59b0af51fa9b56331a7117aa365/schoolutils-0.1.4.zip" } ], "0.1.5": [ { "comment_text": "", "digests": { "md5": "64058830ddcd3bd9ccb38852d47cb618", "sha256": "84957eab8594b484491a6761bf8f56d644dca2f70f7e7e425689355b1112a35b" }, "downloads": -1, "filename": "schoolutils-0.1.5.tar.gz", "has_sig": false, "md5_digest": "64058830ddcd3bd9ccb38852d47cb618", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 44421, "upload_time": "2013-05-20T18:39:46", "url": "https://files.pythonhosted.org/packages/6f/85/49ff5d835c204019a3c59cbc4859d31d8adfe16d3b0f489b47a69ec93d80/schoolutils-0.1.5.tar.gz" }, { "comment_text": "", "digests": { "md5": "886a4e7d53ea7a11654292a8f3962319", "sha256": "309f6615d0bc22b8643e2ecde0a13aa223af6fffb58ca1608d9bd4df86e9b189" }, "downloads": -1, "filename": "schoolutils-0.1.5.zip", "has_sig": false, "md5_digest": "886a4e7d53ea7a11654292a8f3962319", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55921, "upload_time": "2013-05-20T18:39:48", "url": "https://files.pythonhosted.org/packages/37/ac/2af301cd9deefdfcc1025137fe9da8b5e30d731dcb36dc8bfb415aac4692/schoolutils-0.1.5.zip" } ], "0.1.6": [ { "comment_text": "", "digests": { "md5": "d12258613491f4f11509952e6cbb0717", "sha256": "84123cf9044ce2cb22a6e91cecddfedae4a15ae285a993aefaf17bb156039cc8" }, "downloads": -1, "filename": "schoolutils-0.1.6.tar.gz", "has_sig": false, "md5_digest": "d12258613491f4f11509952e6cbb0717", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 48662, "upload_time": "2013-05-25T21:58:22", "url": "https://files.pythonhosted.org/packages/e2/50/decee7e1d430ef406857e95d403053f6ebeb8f194b3387143a1ba6e8c235/schoolutils-0.1.6.tar.gz" }, { "comment_text": "", "digests": { "md5": "e20feb881faa2c60b73effe41d571a12", "sha256": "275b259d77553c2a0e2fc4f8fd6cc128aab288030c096e2d652f539cc226a8a5" }, "downloads": -1, "filename": "schoolutils-0.1.6.zip", "has_sig": false, "md5_digest": "e20feb881faa2c60b73effe41d571a12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 62347, "upload_time": "2013-05-25T21:58:25", "url": "https://files.pythonhosted.org/packages/46/43/dfa4d97675fe23e144e09d98f665d8570d227ae43eaf7c250bd82078dc4e/schoolutils-0.1.6.zip" } ], "0.1.6a": [ { "comment_text": "", "digests": { "md5": "e2f29a6d85db8d7270998965a9f4cdce", "sha256": "c47ee9831eb0b21beddb75361c40370c2474cca33d341c88b958d6304c9eb4f6" }, "downloads": -1, "filename": "schoolutils-0.1.6a.tar.gz", "has_sig": false, "md5_digest": "e2f29a6d85db8d7270998965a9f4cdce", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49487, "upload_time": "2013-05-28T16:56:47", "url": "https://files.pythonhosted.org/packages/b3/ae/bcf5d5ff0649841979fc445b45fa9bd9d6c4de0a7d3941b1b35e2046c11b/schoolutils-0.1.6a.tar.gz" }, { "comment_text": "", "digests": { "md5": "7860abeae849d43229ceb0cdd133af47", "sha256": "78c400cefcaf65c36fa790d045f2725ac2852a7c87142c12fed358c8122d1515" }, "downloads": -1, "filename": "schoolutils-0.1.6a.zip", "has_sig": false, "md5_digest": "7860abeae849d43229ceb0cdd133af47", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 63606, "upload_time": "2013-05-28T16:56:50", "url": "https://files.pythonhosted.org/packages/66/79/007d4d77410a2204d47c69d222322460bcfe6d8dddf79374ef66bbf816f8/schoolutils-0.1.6a.zip" } ], "0.1.7": [ { "comment_text": "", "digests": { "md5": "d9c06fcdca0eba80237ed9c7c4ec6da5", "sha256": "b9f4583c390b22be87381fb08fac9242db286378c30e96a1f305764aacf2d887" }, "downloads": -1, "filename": "schoolutils-0.1.7.tar.gz", "has_sig": false, "md5_digest": "d9c06fcdca0eba80237ed9c7c4ec6da5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52910, "upload_time": "2013-11-03T01:07:18", "url": "https://files.pythonhosted.org/packages/fe/c9/809e0a6c491867f3fd1d510ff8b3b1aba7f7e2db9860632cb613b8a0b799/schoolutils-0.1.7.tar.gz" }, { "comment_text": "", "digests": { "md5": "db77727c3985e88ea33bf1f3fe733d9b", "sha256": "063eb382301b6936034d006b52b1b7d91c2458ab1b4f2b0e42f09da01da50970" }, "downloads": -1, "filename": "schoolutils-0.1.7.zip", "has_sig": false, "md5_digest": "db77727c3985e88ea33bf1f3fe733d9b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67231, "upload_time": "2013-11-03T01:07:21", "url": "https://files.pythonhosted.org/packages/92/dc/0e3c6da019fb8210c0ff85d49483377e0c8dd1ec68732f76396936f7bb16/schoolutils-0.1.7.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d9c06fcdca0eba80237ed9c7c4ec6da5", "sha256": "b9f4583c390b22be87381fb08fac9242db286378c30e96a1f305764aacf2d887" }, "downloads": -1, "filename": "schoolutils-0.1.7.tar.gz", "has_sig": false, "md5_digest": "d9c06fcdca0eba80237ed9c7c4ec6da5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 52910, "upload_time": "2013-11-03T01:07:18", "url": "https://files.pythonhosted.org/packages/fe/c9/809e0a6c491867f3fd1d510ff8b3b1aba7f7e2db9860632cb613b8a0b799/schoolutils-0.1.7.tar.gz" }, { "comment_text": "", "digests": { "md5": "db77727c3985e88ea33bf1f3fe733d9b", "sha256": "063eb382301b6936034d006b52b1b7d91c2458ab1b4f2b0e42f09da01da50970" }, "downloads": -1, "filename": "schoolutils-0.1.7.zip", "has_sig": false, "md5_digest": "db77727c3985e88ea33bf1f3fe733d9b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 67231, "upload_time": "2013-11-03T01:07:21", "url": "https://files.pythonhosted.org/packages/92/dc/0e3c6da019fb8210c0ff85d49483377e0c8dd1ec68732f76396936f7bb16/schoolutils-0.1.7.zip" } ] }