{ "info": { "author": "Oleks", "author_email": "oleks@oleks.info", "bugtrack_url": null, "classifiers": [], "description": "``staffeli`` \u2014 DIKU Support Tools for Canvas LMS\n================================================\n\nThese tools leverage the `Canvas LMS REST\nAPI `__ to create a\nmore pleasant environment for working with\n`Absalon `__.\n\n\"Staffeli\" is Danish for \"easel\" \u2014 a support frame for holding up a\ncanvas.\n\n|Documentation Status| |Travis CI (Linux + macOS) Status| |License: EUPL\nv1.1| |PyPI|\n\n.. |Documentation Status| image:: https://readthedocs.org/projects/staffeli/badge/\n :target: http://staffeli.readthedocs.io/en/latest/\n.. |Travis CI (Linux + macOS) Status| image:: https://travis-ci.org/DIKU-EDU/staffeli.svg\n :target: https://travis-ci.org/DIKU-EDU/staffeli\n.. |License: EUPL v1.1| image:: https://img.shields.io/badge/license-EUPL%20v1.1-blue.svg\n :target: https://github.com/DIKU-EDU/Staffeli/blob/master/LICENSE.md\n.. |PyPI| image:: https://img.shields.io/pypi/v/staffeli.svg\n :target: https://pypi.python.org/pypi/staffeli\n\n.. contents::\n\n.. section-numbering::\n\nPurpose\n-------\n\nThe purpose of Staffeli is two-fold:\n\n1. Leverage the `Canvas LMS REST\n API `__ to get\n things done better, faster, stronger.\n2. Quick prototyping of new features for `Canvas\n LMS `__.\n\nInitially, Staffeli is *not* intended for managing course content,\nmerely to snapshot course data (e.g. enrolled students, groups,\nsections, submissions), *and* to get grading done efficiently.\n\nAlthough Staffeli is written in Python 3, it is not intent on forcing you to\nmanage your course using Python, or to have to get intimate with the Staffeli\nAPI to get things done. Staffeli extensively uses YAML files for storage,\nenabling the easy use of both *command-line utilities* and *the programming\nlanguage of your choice*, to get things done quickly, and efficiently.\n\nStatus\n------\n\nStaffeli is maturing. It is being transitioned to be annotated with `type hints\n`__, with the types checked\nstatically with `mypy `__, and a test-suite `has been\nset up `__, but full-blown continuous integration remains to be set up.\n\nWe are still covering a fairly small subset of the API. Brace yourself. Lend a\nhand.\n\nInstallation\n------------\n\n1. Clone, or\n `download `__\n this repository.\n2. ``pip3 install -e .``\n\nGetting Started\n---------------\n\nWith Staffeli, we work with local course clones. We aim to keep these\nclones compatible with git.\n\nWe recommend that you create a local directory ``canvas``, ``absalon``,\nor similar, for all of you Canvas-related local course clones. Staffeli\nneeds some initial help to be able to login with your credentials. You\nneed to `generate a\ntoken `__\nfor Staffeli to use, and save it as ``.token``, ``token``, or\n``token.txt`` in this high-level directory.\n\n**NB!** This is your personal token so **do not** share it with others,\nelse they can easily impersonate you using a tool like Staffeli.\nUnfortunately, to the best of our knowledge, Canvas has no means to\nsegregate or specialize tokens, so this is really \"all or nothing\".\n\nCloning a Course\n^^^^^^^^^^^^^^^^\n\nTo clone a course:\n\n::\n\n $ staffeli clone \n\nThe ```` may be a substring of the course name as it\nappears on your dashboard. Casing is not important. If there are\nmultiple conflicting names, or no matching course names, Staffeli will\ncomplain and let you try again.\n\nFetch Submissions for a New Assignment\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nUse ``staffeli fetch``. For instance, to fetch all submissions for \"A3\":\n\n::\n\n $ staffeli fetch subs/A3\n\nTo fetch just the metadata for all submissions, but not the submissions\nthemselves:\n\n::\n\n $ staffeli fetch subs\n\nFetch Groups\n^^^^^^^^^^^^\n\nThis is a good idea to make sure you are up-to-date with canvas.\n\n::\n\n $ staffeli fetch groups\n\nSplit According to Some Group Category\n^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n\nAssuming you already fetched groups and submissions,\n\n::\n\n $ staffeli groupsplit subs/A3 groups/Team.yml\n\nNB\n~~\n\nIf you are using git to share course internals, remember to push both\nchanges to ```groups`` `__, ```subs`` `__, and\n```splits`` `__, when making splits for some new assignment.\n\nGrade a Submission\n^^^^^^^^^^^^^^^^^^\n\nAssuming you are in the submission directory, you can use\n``staffeli grade`` to grade the submission:\n\n::\n\n staffeli grade GRADE [-m COMMENT] [FILEPATH]...\n\n Where\n GRADE pass, fail, or an int.\n [-m COMMENT] An optional comment to write.\n [FILEPATH]... Optional files to upload alongside.\n\nDocumentation\n-------------\n\nIt is up-and-coming on\n[ReadTheDocs](http://staffeli.readthedocs.io/en/latest/). The source files for\nthat page are under [docs/source](docs/source), and they are, much like this\nREADME, written in `reStructured Text\n`_. It is also suggested to\nfollow the `Python documentation style guide\n`_.\n\nContributing\n------------\n\nFirst, take a look at our `design guide `__ and `style\nguide `__.\n\nContact us at dikunix at dikumail dot dk.\n\nTake a look at our on-going\n`issues `__.\n\nTesting\n-------\n\nCurrently, `Travis CI `__ will\nonly check that you roughly conform to the `PEP 8 Python Style\nGuide `__ (using\n`flake8 `__), and perform static type-checking\nwith `mypy `__, all only for selected Python\nfiles in this repository. See (and run?)\n```static_tests.py`` `__ for further details.\n\nBefore you do that however, you might want to do this:\n\n::\n\n $ pip3 install -r test-requirements.txt\n\nThis will also install what you need to run the dynamic tests we have in\nstore under `tests `__, except for **Docker**:\n```start_local_canvas.py`` `__ will fire up a\nDocker image with a local Canvas instance for use with our\n`tests `__. You will also find it in your browser under the\naddress ``localhost:3000``. The user is ``canvas@example.edu`` and the\npassword is ``canvas``.\n\nThe static and dynamic tests are also part of the\n```pre-commit`` `__ and\n```pre-push`` `__ hooks, respectively. Install these\nhooks by executing ```hooks/install.sh`` `__.\nUnfortunately, neither these hooks, nor the hooks installer will work on\nWindows.\n\nStatic Testing Framework\n^^^^^^^^^^^^^^^^^^^^^^^^\n\nWe use `flake8 `__ for style-checking and\n`mypy `__ for static type-checking.\n\nAssuming you have these tools installed, you can do this:\n\n::\n\n $ ./static_tests.py\n\nThis is also part of the ```pre-commit`` `__ hook.\n\nDynamic Testing Framework\n^^^^^^^^^^^^^^^^^^^^^^^^^\n\nWe use `pytest `__ together with\n`hypothesis `__.\n\nAssuming you have these tools installed, you can do this:\n\n::\n\n $ pytest\n\nThis is also part of the ```pre-push`` `__ hook.\n\nDynamic Test Coverage\n^^^^^^^^^^^^^^^^^^^^^\n\nRun ``pytest`` with the option ``--cov=staffeli`` to get an idea of the\ntest coverage of Staffeli proper.\n\nIt is pretty lousy ATM. As of 2017-05-16, the numbers were:\n\n::\n\n Name Stmts Miss Cover\n -------------------------------------------------\n staffeli/assignment.py 28 28 0%\n staffeli/cachable.py 22 13 41%\n staffeli/canvas.py 326 326 0%\n staffeli/canvasTA-subs.py 58 58 0%\n staffeli/cli.py 295 295 0%\n staffeli/course.py 37 4 89%\n staffeli/files.py 57 41 28%\n staffeli/listed.py 31 13 58%\n staffeli/names.py 3 1 67%\n staffeli/resubmissions.py 121 121 0%\n staffeli/speedgrader_url.py 9 9 0%\n staffeli/submission.py 22 22 0%\n staffeli/typed_canvas.py 102 4 96%\n staffeli/upload.py 17 17 0%\n -------------------------------------------------\n TOTAL 1128 952 16%", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/DIKU-EDU/staffeli", "keywords": "staffeli,Canvas,DIKU", "license": "EUPLv1.1", "maintainer": "", "maintainer_email": "", "name": "staffeli", "package_url": "https://pypi.org/project/staffeli/", "platform": "", "project_url": "https://pypi.org/project/staffeli/", "project_urls": { "Homepage": "https://github.com/DIKU-EDU/staffeli" }, "release_url": "https://pypi.org/project/staffeli/0.4.2/", "requires_dist": null, "requires_python": "", "summary": "DIKU support tools for Canvas LMS", "version": "0.4.2" }, "last_serial": 2880823, "releases": { "0.3.1": [ { "comment_text": "", "digests": { "md5": "1955a4e8daf887516bc7173be0f62b3b", "sha256": "eb48fc3c7eb809ec8c63df122293ca6f3edcc9daa0b427c50ef6497ad4b5a280" }, "downloads": -1, "filename": "staffeli-0.3.1.tar.gz", "has_sig": false, "md5_digest": "1955a4e8daf887516bc7173be0f62b3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4366, "upload_time": "2017-02-15T15:21:20", "url": "https://files.pythonhosted.org/packages/f1/54/38f669033efe9129378cf7c844a2ee0b26198ed664a4bb990cb67038ca86/staffeli-0.3.1.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "e3d65ae2404e6999816a65e50f15d8e6", "sha256": "c560adea35eb761a26719d439b6baa3e5054f649b7f0d00ea90911d69a8c1276" }, "downloads": -1, "filename": "staffeli-0.4.1.tar.gz", "has_sig": false, "md5_digest": "e3d65ae2404e6999816a65e50f15d8e6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21383, "upload_time": "2017-05-16T20:48:49", "url": "https://files.pythonhosted.org/packages/98/4b/abf5bde1bd828ef20d2d4511c18fa4f24c76ea069068dfe80f6e20f2aaf5/staffeli-0.4.1.tar.gz" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "5799b6b794c56ae36316d175de90dc27", "sha256": "b8864a01f5eb3841538a7669ef65a3017d880e022f2c5a8a7a39ecf6f683760d" }, "downloads": -1, "filename": "staffeli-0.4.2.tar.gz", "has_sig": true, "md5_digest": "5799b6b794c56ae36316d175de90dc27", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29155, "upload_time": "2017-05-17T15:20:57", "url": "https://files.pythonhosted.org/packages/b6/96/4f3bd3194a03bc11b2732bfaf5a179663340abb3b94c52f32390c59af953/staffeli-0.4.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "5799b6b794c56ae36316d175de90dc27", "sha256": "b8864a01f5eb3841538a7669ef65a3017d880e022f2c5a8a7a39ecf6f683760d" }, "downloads": -1, "filename": "staffeli-0.4.2.tar.gz", "has_sig": true, "md5_digest": "5799b6b794c56ae36316d175de90dc27", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 29155, "upload_time": "2017-05-17T15:20:57", "url": "https://files.pythonhosted.org/packages/b6/96/4f3bd3194a03bc11b2732bfaf5a179663340abb3b94c52f32390c59af953/staffeli-0.4.2.tar.gz" } ] }