{ "info": { "author": "Cordell Bloor", "author_email": "cgbloor@ucalgary.ca", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Console", "Intended Audience :: Developers", "Intended Audience :: Education", "Intended Audience :: End Users/Desktop", "License :: OSI Approved :: GNU General Public License v3 or later (GPLv3+)", "Natural Language :: English", "Operating System :: MacOS", "Operating System :: Microsoft :: Windows", "Operating System :: POSIX :: Linux", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Topic :: Education" ], "description": "Motivation\n----------\n\nIt's frustrating dealing with the zip files full of assignment\nsubmissions that you get from D2L.\n\n- Merging all of a student's submissions into a single folder is\n tedious.\n- Navigating submissions on the command line sucks, because each\n directory name starts with a long number.\n- Extracting all the zip files, tar archives, and 7z archives that\n students submit adds a needless extra step to marking.\n\nI've found this tool useful for eliminating those annoyances, and I hope\nyou will too.\n\nHow to Use\n----------\n\nThis is the most common command I use:\n\n.. code:: bash\n\n d2lmf extract -R \"Assignment 1 Download Oct 11, 2015 803 PM.zip\" A1/T01\n\nIt extracts the submissions from the zip folder into the directory\n``A1/T01``. The ``-R`` option makes it run all the recommended cleanup\nactions on the submissions, and is equivalent to using ``-x``, ``-j``,\n``-c`` and ``-m``.\n\nThe ``-x`` specifies that we want to extract any zip, rar, tar, or 7z\narchives that students submitted. The ``-j`` deletes 'junk' like\n``.DS_Store``. The ``-c`` collapses needlessly nested directories.\nFinally, the ``-m`` merges all submitted files into a single directory\nfor each student.\n\nOn Windows, you may need to invoke d2lmf as a Python module, like so:\n\n.. code:: bash\n\n python -m d2lmf extract -R \"Assignment 1 Download Oct 11, 2015 803 PM.zip\" A1/T01\n\nHow to Install\n--------------\n\nUbuntu\n~~~~~~\n\n.. code:: bash\n\n sudo apt-get install python-pip\n sudo pip install d2lmf\n\nOSX\n~~~\n\n.. code:: bash\n\n curl https://bootstrap.pypa.io/get-pip.py > get-pip.py\n sudo python get-pip.py\n sudo pip install d2lmf\n\nWindows\n~~~~~~~\n\nFirst, download and install Python from\nhttps://www.python.org/downloads/\n\nThen, install d2lmf with the command below:\n\n.. code:: bash\n\n python -m pip install d2lmf\n\nDependencies\n------------\n\nThe extraction of rar and 7z archives depends on external tools. If you\ndo not have a rar or 7z utility installed, those archives will be\nskipped.\n\nOn Windows, I suggest installing `7-Zip `__. On\nUbuntu, p7zip is the equivalent, and it can be installed with\n``sudo apt-get install p7zip-full``. p7zip is also available for OSX,\nand can be installed from `homebrew `__ with\n``brew install p7zip``.\n\n\n", "description_content_type": null, "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/cgmb/d2lmf", "keywords": "", "license": "GPLv3+", "maintainer": "", "maintainer_email": "", "name": "d2lmf", "package_url": "https://pypi.org/project/d2lmf/", "platform": "", "project_url": "https://pypi.org/project/d2lmf/", "project_urls": { "Homepage": "https://github.com/cgmb/d2lmf" }, "release_url": "https://pypi.org/project/d2lmf/1.0.0/", "requires_dist": [ "patool (>=1.9)" ], "requires_python": "", "summary": "A command-line tool to help mark assignments submitted to D2L.", "version": "1.0.0" }, "last_serial": 3492548, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "b712bf6854cd413bdb6039a07e5df8d5", "sha256": "9dc50603b8123b0c91d283e61b5e87daf361b288ba9ad2893fd592a42ae2d61b" }, "downloads": -1, "filename": "d2lmf-0.0.1-py2-none-any.whl", "has_sig": true, "md5_digest": "b712bf6854cd413bdb6039a07e5df8d5", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5465, "upload_time": "2015-10-07T07:39:25", "url": "https://files.pythonhosted.org/packages/88/8b/4d63540c6710a9677af7ea2351710df389ccbc9b5c7cda355366252a1573/d2lmf-0.0.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f844c946929a377b4aa1f1f9b3489fd5", "sha256": "28c7a1ddeb09dbf479a4253bd598cafffe0f8d0b27e2d4a2cbba603e27fac7cb" }, "downloads": -1, "filename": "d2lmf-0.0.1.tar.gz", "has_sig": true, "md5_digest": "f844c946929a377b4aa1f1f9b3489fd5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4370, "upload_time": "2015-10-07T07:39:30", "url": "https://files.pythonhosted.org/packages/6f/b2/69df68b74dbfa63ca1da412492b5c08aeb72a2637c3074229d524aa105fe/d2lmf-0.0.1.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "ee7272339eb9defd45ed07ccbeecb8d2", "sha256": "c914fee346cd41f7bb2647e1791a5c375ad7e5f98eb87d008ee293c29b0d0420" }, "downloads": -1, "filename": "d2lmf-0.0.2-py2-none-any.whl", "has_sig": true, "md5_digest": "ee7272339eb9defd45ed07ccbeecb8d2", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 5751, "upload_time": "2015-10-14T07:32:34", "url": "https://files.pythonhosted.org/packages/43/52/0f4604e9ccbcb1bf92a4474e944ce632cb61816f80a79205ebab7389be29/d2lmf-0.0.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3b820254efd8d5e1ec0ce202ab2541e2", "sha256": "4eca55eda16921ff55e9c2777ad0204030b41e58a0bdffcb6e461e2330282502" }, "downloads": -1, "filename": "d2lmf-0.0.2.tar.gz", "has_sig": true, "md5_digest": "3b820254efd8d5e1ec0ce202ab2541e2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4659, "upload_time": "2015-10-14T07:32:38", "url": "https://files.pythonhosted.org/packages/64/70/679048cbf488a028577141eaba1fcc1d14d04ad7907dcebc743812532c75/d2lmf-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "f550d6f4cf6fd2b22fffa3166313e9ac", "sha256": "0281395c3828d71e12fa5aefc9c69fd4340b909ceddfdccae57a8b132e6c9aaa" }, "downloads": -1, "filename": "d2lmf-0.0.3-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "f550d6f4cf6fd2b22fffa3166313e9ac", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 5946, "upload_time": "2015-10-17T22:58:03", "url": "https://files.pythonhosted.org/packages/5d/f5/cd088905c3028869714b89f151924af99d6e489e1cff804b6881496f8bb4/d2lmf-0.0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "378cb891dbe6bfd49d4636cac320f26b", "sha256": "acddc416584342a79e928f90a2257663a1d02ef9843f365606e6ec4af769c75f" }, "downloads": -1, "filename": "d2lmf-0.0.3.tar.gz", "has_sig": true, "md5_digest": "378cb891dbe6bfd49d4636cac320f26b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4845, "upload_time": "2015-10-17T22:58:10", "url": "https://files.pythonhosted.org/packages/05/ec/875d2666b8535c965dfdd4bd26960f2cce86b0dd5fdcd31f22bf8563fab6/d2lmf-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "28b3c81d6b6ef83fad16cb60ac940f73", "sha256": "ef1bbb95c2ca5dc74104d08e2c7ab27d536612e99dc1372db7278bc0bcbe9568" }, "downloads": -1, "filename": "d2lmf-0.0.4-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "28b3c81d6b6ef83fad16cb60ac940f73", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 8110, "upload_time": "2016-02-03T02:22:06", "url": "https://files.pythonhosted.org/packages/87/35/6fd8c27d913acc6343e1e9354589c660ea0863c107f54923fe509dcfd11d/d2lmf-0.0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "997463fbd34229b1ea728a160f76579a", "sha256": "d4c968d731e36157205df509f9a75868e7c3857427ec64355f7f2fe989a8ca4b" }, "downloads": -1, "filename": "d2lmf-0.0.4.tar.gz", "has_sig": true, "md5_digest": "997463fbd34229b1ea728a160f76579a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17475, "upload_time": "2016-02-03T02:22:15", "url": "https://files.pythonhosted.org/packages/4a/63/52011fe656cdace2062c3209d00c30ecb68258f319f74667461ab2a49e47/d2lmf-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "867aeedf2605a21fe789266269536f02", "sha256": "a7f065cd10686c1776acfdd125dc760dced789350cb140d1ac8263236277d948" }, "downloads": -1, "filename": "d2lmf-0.0.5-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "867aeedf2605a21fe789266269536f02", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9024, "upload_time": "2016-02-12T07:42:11", "url": "https://files.pythonhosted.org/packages/f4/8e/da0177cafee1481389f47cd84a80f8c2dad9d43f9930b73ffc6de22260a1/d2lmf-0.0.5-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "37e4f50b2f247eb8f7f05ca260c5212e", "sha256": "d4d1279a1a17586de056397f86025f224d369210588cabdd7fd83805a3f55af5" }, "downloads": -1, "filename": "d2lmf-0.0.5.tar.gz", "has_sig": true, "md5_digest": "37e4f50b2f247eb8f7f05ca260c5212e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18106, "upload_time": "2016-02-12T07:42:20", "url": "https://files.pythonhosted.org/packages/6b/2e/2d16451c70a490345f945c64992287dc36c02c3c898daba84540191f4de3/d2lmf-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "3e3615fd453f72ac490ee6c59c2792f6", "sha256": "57cb1965bacb0d44e6c40515ee5f6268543db612dc8c747861ad5b99928e0f92" }, "downloads": -1, "filename": "d2lmf-0.0.6-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "3e3615fd453f72ac490ee6c59c2792f6", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9060, "upload_time": "2016-03-24T08:30:22", "url": "https://files.pythonhosted.org/packages/3d/33/d0a25eca7148c18ab347f23804475aef377b91ac5bb7c42402325a513565/d2lmf-0.0.6-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "63ec790e5783bbcc509e3abd9e29226b", "sha256": "ca77e1db28e1d5a124dc24cae903c420edded2c6dd0e1a6362c6bbcfd02a554c" }, "downloads": -1, "filename": "d2lmf-0.0.6.tar.gz", "has_sig": true, "md5_digest": "63ec790e5783bbcc509e3abd9e29226b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18133, "upload_time": "2016-03-24T08:36:31", "url": "https://files.pythonhosted.org/packages/31/62/bb5a7df55031fc0483eb4ad4dc53a2b981621c9f219efcb8a1a35ceeafc9/d2lmf-0.0.6.tar.gz" } ], "0.0.7": [ { "comment_text": "", "digests": { "md5": "1e914cfdf29550c1b340252ad0a6c29b", "sha256": "069097f5605eafefad18f80a8bbfd5fc96c7a3183a03f3adebfc32ebcb401ace" }, "downloads": -1, "filename": "d2lmf-0.0.7-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "1e914cfdf29550c1b340252ad0a6c29b", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9240, "upload_time": "2016-12-05T23:17:44", "url": "https://files.pythonhosted.org/packages/28/cc/b20466fc4f5f81e3ae37c6069154d6f45976ccf8e3bc2efbe19679fc0537/d2lmf-0.0.7-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e4427513aa89e68eb04996494ae52703", "sha256": "44bfcb4f090be0d28fcbbcd96dcb4d14b4aa46dc92cb7ab83f7ef983ea6a42c1" }, "downloads": -1, "filename": "d2lmf-0.0.7.tar.gz", "has_sig": true, "md5_digest": "e4427513aa89e68eb04996494ae52703", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 18994, "upload_time": "2016-12-05T23:17:46", "url": "https://files.pythonhosted.org/packages/0f/38/7cf1e8d343ad8a1390b82a6c27ed5057e5368556f6941d7c20517ce7a7b0/d2lmf-0.0.7.tar.gz" } ], "1.0.0": [ { "comment_text": "", "digests": { "md5": "4becf0cbd021eeb0359a3530d75bf9d1", "sha256": "5e4ccf5274776f1dd916b4f31e2c1e2a7103d53bfb758d05c98c268436ca3a43" }, "downloads": -1, "filename": "d2lmf-1.0.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "4becf0cbd021eeb0359a3530d75bf9d1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9083, "upload_time": "2018-01-16T01:36:12", "url": "https://files.pythonhosted.org/packages/82/0a/1b674c054186060071e67b3344d204111c160965bdceae81a68e91ec4f21/d2lmf-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65864e510503a87cc951dd7df5d08a72", "sha256": "532d8bab219bbfc2f435e5734e40c03765494e95a687458d577d6c4a42830c6b" }, "downloads": -1, "filename": "d2lmf-1.0.0.tar.gz", "has_sig": true, "md5_digest": "65864e510503a87cc951dd7df5d08a72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19159, "upload_time": "2018-01-16T01:36:18", "url": "https://files.pythonhosted.org/packages/81/69/03a4a71c89da89b7e9a1edbeb9533e56367e17f73b01ab15e8ca591959b2/d2lmf-1.0.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4becf0cbd021eeb0359a3530d75bf9d1", "sha256": "5e4ccf5274776f1dd916b4f31e2c1e2a7103d53bfb758d05c98c268436ca3a43" }, "downloads": -1, "filename": "d2lmf-1.0.0-py2.py3-none-any.whl", "has_sig": true, "md5_digest": "4becf0cbd021eeb0359a3530d75bf9d1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 9083, "upload_time": "2018-01-16T01:36:12", "url": "https://files.pythonhosted.org/packages/82/0a/1b674c054186060071e67b3344d204111c160965bdceae81a68e91ec4f21/d2lmf-1.0.0-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "65864e510503a87cc951dd7df5d08a72", "sha256": "532d8bab219bbfc2f435e5734e40c03765494e95a687458d577d6c4a42830c6b" }, "downloads": -1, "filename": "d2lmf-1.0.0.tar.gz", "has_sig": true, "md5_digest": "65864e510503a87cc951dd7df5d08a72", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19159, "upload_time": "2018-01-16T01:36:18", "url": "https://files.pythonhosted.org/packages/81/69/03a4a71c89da89b7e9a1edbeb9533e56367e17f73b01ab15e8ca591959b2/d2lmf-1.0.0.tar.gz" } ] }