{ "info": { "author": "Simon Lars\u00e9n", "author_email": "slarse@kth.se", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Education", "License :: OSI Approved :: MIT License", "Operating System :: POSIX", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: Implementation :: CPython" ], "description": "# `repomate-junit4`, a JUnit 4.12 test runner plugin for `repomate`\n\n[![Build Status](https://travis-ci.com/slarse/repomate-junit4.svg?token=1VKcbDz66bMbTdt1ebsN&branch=master)](https://travis-ci.com/slarse/repomate-junit4)\n[![Code Coverage](https://codecov.io/gh/slarse/repomate-junit4/branch/master/graph/badge.svg)](https://codecov.io/gh/slarse/repomate-junit4)\n[![PyPi Version](https://badge.fury.io/py/repomate-junit4.svg)](https://badge.fury.io/py/repomate-junit4)\n![Supported Python Versions](https://img.shields.io/badge/python-3.5%2C%203.6%2C%203.7-blue.svg)\n![Supported Platforms](https://img.shields.io/badge/platforms-Linux%2C%20macOS-blue.svg)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)\n\nThis is a plugin for [repomate](https://github.com/slarse/repomate) that runs\nJUnit4 test classes on production classes in a cloned student repo.\n\n## Requirements\n`repomate-junit4` has a few non-Python dependencies.\n\n1. `java` must ba available from the command line.\n2. `javac` must be available from the command line.\n - In other words, install a `JDK` version that is compatible with the files\n you intend to test!\n3. `junit-4.12.jar` must be available on the `CLASSPATH` variable, or configured\n (see [Added CLI arguments](#added-cli-arguments) and\n [Configuration file](#configuration-file)).\n4. `hamcrest-core-1.3.jar` must be available on the `CLASSPATH` variable or\n configured in order to make use of `hamcrest` matchers.\n\nThe `hamcrest` and `junit` jars ar available from Maven Central:\n\n```bash\nwget http://central.maven.org/maven2/junit/junit/4.12/junit-4.12.jar\nwget http://central.maven.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar\n```\n\n## Install\nThe recommended way to install `repomate-junit4` is with `pip`.\n\n```bash\npython3 -m pip install --user repomate-junit4\n```\n\nThe plugin itself does not actually require `repomate`, but it is fairly\nuseless without. If `repomate` and `repomate-junit4` are both installed in the\nsame environment, then `repomate` should just find `repomate-junit4`.\nFor `repomate` to actually use `repomate-junit4`, it must be configured\nin the `repomate` configuration file. Refer to the\n[`repomate` docs](https://repomate.readthedocs.io/en/latest/configuration.html)\nfor information on the configuration file and its expected location, and the\n[Configuration file](#configuration-file) section here for info on what you\nneed to add to it.\n\n## Usage\n\n### Terminology and conventions\nThis is terminology added in excess to that which is defined in the [`repomate`\ndocs](https://repomate.readthedocs.io/en/latest/fundamentals.html#terminology).\nFor brevity, some conventions expected by `repomate-junit4` are baked into\nthese definitions.\n\n* _Production class:_ A Java file/class written in the student repo.\n* _Test file_: A file ending in `Test.java` which contains a test class for\n some production class. If the students are supposed to write a file called\n `LinkedList.java`, the corresponding test class must be called\n `LinkedListTest.java`.\n* _Test dir_: A directory named after a master repo, containing tests for\n student repos based on that master repo. Should contain test files\n as defined above.\n* _Reference tests directory (RTD)_: A local directory containing subdirectories\n with reference tests. Each subdirectory should be a test dir as defined above.\n\n### Security aspects\nThere are some inconvenient security implications to running untrusted code on\nyour own computer. `repomate-junit4` tries to limit what a student's code can\ndo by running with a very strict JVM\n[Security Policy](https://docs.oracle.com/javase/7/docs/technotes/guides/security/PolicyFiles.html).\nThis is enforced by the Java\n[SecurityManager](https://docs.oracle.com/javase/8/docs/api/java/lang/SecurityManager.html).\nThe policy used looks like this:\n\n```\n// empty grant to strip all permissions from all codebases\ngrant {\n};\n\n// the `junit-4.12.jar` needs this permission for introspection\ngrant codeBase \"file:{junit4_jar_path}\" {{\n permission java.lang.RuntimePermission \"accessDeclaredMembers\";\n}};\n\"\"\"\n```\n\nThis policy disallows student code from doing most illicit things, such as\naccessing files outside of the codebases's directory, or accessing the network.\nThe `{junit4_jar_path}` is dynamically resolved during runtime, and will lend\nthe actual `junit-4.12.jar` archive that is used to run the test classes\nsufficient permissions to do so.\n\nThis policy seems to work well for introductory courses in Java, but there may\nbe snags because of how restrictive it is. If you find that some permission\nshould definitely be added, please\n[open an issue about it](https://github.com/slarse/repomate-junit4/issues/new)\nThere are plans to add the ability to specify a custom security policy, but\ncurrently, your only choice is to either use this default policy or disable it\nwith `--disable-security`.\n\n> **Important:** The security policy relies on the correctness of the Java\n> SecurityManager. It is probably not bulletproof, so if you have strict\n> security requirements, you should probably only run this plugin inside of a\n> properly secured environment (for example, a virtual machine).\n\n### Added CLI arguments\n`repomate-junit4` adds four new CLI arguments to the `repomate clone` command.\n\n* `-rtd|--reference-tests-dir`\n - Path to the RTD.\n - **Required** unless specified in the configuration file.\n* `-junit|--junit-path`\n - Path to the `junit-4.12.jar` library.\n - **Required** unless specified on the `CLASSPATH` variable, or in the\n configuration file.\n* `-ham|--hamcrest-path`\n - Path to the `hamcrest-core-1.3.jar` library.\n - **Required** unless specified on the `CLASSPATH` variable, or in the\n configuration file.\n* `-i|--ignore-tests`\n - A whitespace separated list of test files (e.g. `LinkedListTest.java`) to\n ignore. This is useful for example if there are abstract test classes in\n the test dir.\n* `--disable-security`\n - Disable the seurity policy.\n* `-v|--verbose`\n - Display more verbose information (currently only concerns test failures).\n - Long lines are truncated.\n* `-vv|--very-verbose`\n - Same as `-v`, but without truncation.\n\n### Configuration file\nFirst and foremost, `junit4` must be added to the `plugins` option under the\n`[DEFAULTS]` section in order to activate the plugin,\n[see details here](https://repomate.readthedocs.io/en/latest/plugins.html#using-existing-plugins).\nThe `--hamcrest-path`, `--junit-path` and `--reference-tests-dir` arguments can\nbe configured in the standard\n[`repomate` configuration file](https://repomate.readthedocs.io/en/latest/configuration.html)\nby adding the `[junit4]` section heading. Example:\n\n```bash\n[DEFAULTS]\nplugins = junit4\n\n[junit4]\nreference_tests_dir = /absolute/path/to/rtd\njunit_path = /absolute/path/to/junit-4.12.jar\nhamcrest_path = /absolute/path/to/hamcrest-core-1.3.jar\n```\n\n> **Important:** All of the paths in the config must be absolute for\n> `repomate-junit4` to behave as expected.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "https://github.com/slarse/repomate-junit4/archive/v0.5.0.tar.gz", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/slarse/repomate-junit4", "keywords": "", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "repomate-junit4", "package_url": "https://pypi.org/project/repomate-junit4/", "platform": "", "project_url": "https://pypi.org/project/repomate-junit4/", "project_urls": { "Download": "https://github.com/slarse/repomate-junit4/archive/v0.5.0.tar.gz", "Homepage": "https://github.com/slarse/repomate-junit4" }, "release_url": "https://pypi.org/project/repomate-junit4/0.5.0/", "requires_dist": [ "repomate-plug (>=0.4.1)", "daiquiri", "colored", "appdirs ; extra == 'test'", "daiquiri ; extra == 'test'", "pytest (>=4.0.0) ; extra == 'test'", "pytest-cov (>=2.5.1) ; extra == 'test'", "pytest-mock ; extra == 'test'", "codecov ; extra == 'test'" ], "requires_python": "", "summary": "JUnit-4.12 plugin for repomate", "version": "0.5.0" }, "last_serial": 4939968, "releases": { "0.1.0": [ { "comment_text": "", "digests": { "md5": "2ef2f1e92133c325877993c535cbd5b5", "sha256": "f10227d107e2bb2e9e3cc0ea165c542d7b880440bf77cfadd2cf2a70f99ba79c" }, "downloads": -1, "filename": "repomate_junit4-0.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "2ef2f1e92133c325877993c535cbd5b5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 6981, "upload_time": "2018-08-26T16:33:38", "url": "https://files.pythonhosted.org/packages/69/c2/42a9280578704d9bef55f7b599d213008b6e4ac01b6ddc9c48d90e80c030/repomate_junit4-0.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4c7841159bf873ce1c51ed09a823eb50", "sha256": "131e04e8e162a460063f0b2404751a5f37f25a7ae170f27af371cea559828f61" }, "downloads": -1, "filename": "repomate-junit4-0.1.0.tar.gz", "has_sig": false, "md5_digest": "4c7841159bf873ce1c51ed09a823eb50", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6771, "upload_time": "2018-08-26T16:33:39", "url": "https://files.pythonhosted.org/packages/ec/77/168b0be27f5b0d858c536354ff286ef7e35648f9e19839ce49ead36df790/repomate-junit4-0.1.0.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "99bab1ddc1d7670de86741070ef07d70", "sha256": "fd79c65db7578148f9e24bd79d176d47819c23447306e3709d203841e773295b" }, "downloads": -1, "filename": "repomate_junit4-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "99bab1ddc1d7670de86741070ef07d70", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8333, "upload_time": "2018-10-29T10:41:19", "url": "https://files.pythonhosted.org/packages/81/79/5dafe6699fd3a980665d2609e20b8a73eab176e363da1b899b36e4491a5f/repomate_junit4-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "206eaf9bd3c9abc56dd4fded1396d84e", "sha256": "45b6cc1fd94a4ff003c3b13ac8d268fa3cb8896d4791cdd2f4165fdb7df27995" }, "downloads": -1, "filename": "repomate-junit4-0.1.1.tar.gz", "has_sig": false, "md5_digest": "206eaf9bd3c9abc56dd4fded1396d84e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7340, "upload_time": "2018-10-29T10:41:21", "url": "https://files.pythonhosted.org/packages/66/9b/59655b4b1e61f88b5f1939775e0949aa25cb222f0cb5f61d5aef6d1a5118/repomate-junit4-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "c4ca53614c40d8ba03d088c9af2e1f14", "sha256": "b3c0c7a2877508fd425fd34b33cd17d648b29bfd23c0fd9604fc60b9c0771233" }, "downloads": -1, "filename": "repomate_junit4-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "c4ca53614c40d8ba03d088c9af2e1f14", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8311, "upload_time": "2018-10-29T10:46:37", "url": "https://files.pythonhosted.org/packages/b2/08/398b82e1613dbe173dace093c00d33cf1d68429399775a0d3d73d2985f3a/repomate_junit4-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "d46596a0808f851805fba0088bd9d9c1", "sha256": "d4372f0d753a3722d5e75ffd281e8be9ce3ae10809618b82250956aa1d7f4f42" }, "downloads": -1, "filename": "repomate-junit4-0.1.2.tar.gz", "has_sig": false, "md5_digest": "d46596a0808f851805fba0088bd9d9c1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7314, "upload_time": "2018-10-29T10:46:41", "url": "https://files.pythonhosted.org/packages/c3/1c/f6d686c214d47353b3362c6d9cf10be5c31aef2ec07a64e0c0a24818d545/repomate-junit4-0.1.2.tar.gz" } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "1e65633c6bbd81fc6ee4c71c56de4cb0", "sha256": "74b279dc18daf3f7a60e3e67dba12b81a18aaafd2c7c21144a9ef14a31359e66" }, "downloads": -1, "filename": "repomate_junit4-0.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "1e65633c6bbd81fc6ee4c71c56de4cb0", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8298, "upload_time": "2018-11-18T12:49:30", "url": "https://files.pythonhosted.org/packages/cb/d1/c01232766f28076cee90d5265937b15deb75c3b057437e8407d3e37b425b/repomate_junit4-0.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "773dc2e2bec2183b6bb6a42a8465a44a", "sha256": "7567e684a3393488bd142fa1bb5625b5189136f70f61b6df791a5cc5456315e0" }, "downloads": -1, "filename": "repomate-junit4-0.1.3.tar.gz", "has_sig": false, "md5_digest": "773dc2e2bec2183b6bb6a42a8465a44a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 7316, "upload_time": "2018-11-18T12:49:32", "url": "https://files.pythonhosted.org/packages/8f/67/84833baf0344e065f25d5b785a681ae13ed8b49f747e40d9ac223679cd4f/repomate-junit4-0.1.3.tar.gz" } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "60e0b433ea274fd2fdfe0b07ec72842b", "sha256": "e162c467d952e5926f5b116ac3a319ead3b680009954f8045b5b052ca742b174" }, "downloads": -1, "filename": "repomate_junit4-0.2.0-py3-none-any.whl", "has_sig": false, "md5_digest": "60e0b433ea274fd2fdfe0b07ec72842b", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8788, "upload_time": "2018-11-24T11:47:55", "url": "https://files.pythonhosted.org/packages/be/ff/843887b4d88719939e1e56f507883980a852ba146e2ca13b3e015e27acd5/repomate_junit4-0.2.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c9accdfebbe85ec290dc0792c4186e54", "sha256": "a0f72de6a930758b39f35b7af126ac144200831a670df75d2d038a09bc860fec" }, "downloads": -1, "filename": "repomate-junit4-0.2.0.tar.gz", "has_sig": false, "md5_digest": "c9accdfebbe85ec290dc0792c4186e54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8505, "upload_time": "2018-11-24T11:47:56", "url": "https://files.pythonhosted.org/packages/a5/0c/97d20d772120f0934f47a5af54247da3371811b399cfb19e597cd2c65b7f/repomate-junit4-0.2.0.tar.gz" } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "34c4d61b4e5d0ea6e5d871df8d54fbb1", "sha256": "f72a1e890bef3234251b67cbe465d3339531ec8c97c1b66131ffbbc5354d0cee" }, "downloads": -1, "filename": "repomate_junit4-0.2.1-py3-none-any.whl", "has_sig": false, "md5_digest": "34c4d61b4e5d0ea6e5d871df8d54fbb1", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 8992, "upload_time": "2019-02-03T20:53:12", "url": "https://files.pythonhosted.org/packages/c6/a4/570faffc6972732fba1e3dc23661f4c2093f9efdd510358300cc89f66ed7/repomate_junit4-0.2.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c0ac2b5cdc43ae3cab8ab7667ca751d3", "sha256": "384500a5786a8768fe3b3ddadb44acd4211a919e1de7722a2c81df3de54a772f" }, "downloads": -1, "filename": "repomate-junit4-0.2.1.tar.gz", "has_sig": false, "md5_digest": "c0ac2b5cdc43ae3cab8ab7667ca751d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 8185, "upload_time": "2019-02-03T20:53:13", "url": "https://files.pythonhosted.org/packages/0d/76/93bd78b1e4ab64545b9016f69a4c8074ab9312d94b66d9fc847e7a8cbce6/repomate-junit4-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "28bd38c4324c6149b8fcbc0e3eaa1a21", "sha256": "44217fe48ee069534b09b9eed9306894e9f11a2d0c5755d6afa8a4d2387dc1b3" }, "downloads": -1, "filename": "repomate_junit4-0.3.0-py3-none-any.whl", "has_sig": false, "md5_digest": "28bd38c4324c6149b8fcbc0e3eaa1a21", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 9836, "upload_time": "2019-02-21T18:30:16", "url": "https://files.pythonhosted.org/packages/28/a2/b2bb52736d4490b0e4334cf51013e38b8aacf4b9badc543fdfd33b11d520/repomate_junit4-0.3.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "8a95e86ccf19e76aca7f91ef7e5a2f8b", "sha256": "d8b6418529d0c14c6535b3437e4cacac37022886f2973e4d0b6a167c59eab6c4" }, "downloads": -1, "filename": "repomate-junit4-0.3.0.tar.gz", "has_sig": false, "md5_digest": "8a95e86ccf19e76aca7f91ef7e5a2f8b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 9551, "upload_time": "2019-02-21T18:30:18", "url": "https://files.pythonhosted.org/packages/42/ab/253add19e368f3da79033882c6ba65192b0aec870f16c6f9282d705136ca/repomate-junit4-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "8346f479e364746c849fbf0ef46c90b2", "sha256": "936d80ce7ddd8114eeb7d74d278ff5a84ebbb003ca1645156904315fc9e5cbd1" }, "downloads": -1, "filename": "repomate_junit4-0.3.1-py3-none-any.whl", "has_sig": false, "md5_digest": "8346f479e364746c849fbf0ef46c90b2", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 11820, "upload_time": "2019-02-24T07:53:42", "url": "https://files.pythonhosted.org/packages/73/ed/5e31a0249f6e461cf5f455bf05ca91c86e7c366660d184d790a4039272fc/repomate_junit4-0.3.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "e6f3c5cb211a261c6ccd89ade937bfe2", "sha256": "8edfe191c744b452bfbdcf332012b5d773dc785d2ab7f5fd51c5769ed1582759" }, "downloads": -1, "filename": "repomate-junit4-0.3.1.tar.gz", "has_sig": false, "md5_digest": "e6f3c5cb211a261c6ccd89ade937bfe2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11513, "upload_time": "2019-02-24T07:53:44", "url": "https://files.pythonhosted.org/packages/d7/d7/f45168687cb80d33db41fe651e2d12542aa00fb0027c3486034e67d7773d/repomate-junit4-0.3.1.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "266fb34157b18aa9971bce89a67c9fd3", "sha256": "12338d7faae08c2947f5c111a2c564bcc171752dd2c367c3318d685c5b70626b" }, "downloads": -1, "filename": "repomate_junit4-0.4.0-py3-none-any.whl", "has_sig": false, "md5_digest": "266fb34157b18aa9971bce89a67c9fd3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13441, "upload_time": "2019-02-28T15:35:37", "url": "https://files.pythonhosted.org/packages/f2/d9/f58523819626f0614b4240b3d5e4dd043b686bb86241923ba953940a0634/repomate_junit4-0.4.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "95188cd29dad181e8327f197adb5ed84", "sha256": "aa0897c1b1b4c5828018f3a2eafc298091c0af353e5caf050c8f3adbb8dc894e" }, "downloads": -1, "filename": "repomate-junit4-0.4.0.tar.gz", "has_sig": false, "md5_digest": "95188cd29dad181e8327f197adb5ed84", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13847, "upload_time": "2019-02-28T15:35:38", "url": "https://files.pythonhosted.org/packages/e5/59/c9af6a6198b10667df528b109cea2a50b07dbb7e35cf65258777157df27a/repomate-junit4-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "92a2f3a302f10b4e0dc819a6479324f9", "sha256": "f3fd4f680415f9e29df86fb40e05190968539cdd35b4a4870568990a026b8881" }, "downloads": -1, "filename": "repomate_junit4-0.4.1-py3-none-any.whl", "has_sig": false, "md5_digest": "92a2f3a302f10b4e0dc819a6479324f9", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13462, "upload_time": "2019-03-02T14:15:08", "url": "https://files.pythonhosted.org/packages/7a/93/1fb09360016eb1c8fd54fa5399253a21d2c625ed4fa3f6a77384aae20574/repomate_junit4-0.4.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "3d1d90d0cce8a0236ed9b98ad10efeb6", "sha256": "4c91a1401c0b9fb2b9d8729705821051238e5611dfe6f14e89404ba446cd0ebf" }, "downloads": -1, "filename": "repomate-junit4-0.4.1.tar.gz", "has_sig": false, "md5_digest": "3d1d90d0cce8a0236ed9b98ad10efeb6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13300, "upload_time": "2019-03-02T14:15:10", "url": "https://files.pythonhosted.org/packages/b5/ff/e91866c810c8a096e9a2b6bb89fe111a721ebdbea33a1fe5413c0ba9008e/repomate-junit4-0.4.1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "0257cfcb486ac6584764c867fe550467", "sha256": "79ce2ddfa77bd7fbdc3e8b23bf34555bc6050bda3114a1ac95d4cd938a5b4956" }, "downloads": -1, "filename": "repomate_junit4-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0257cfcb486ac6584764c867fe550467", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13921, "upload_time": "2019-03-14T14:22:50", "url": "https://files.pythonhosted.org/packages/e5/bd/4c2031d25b119106938011189c869e83e48b9b9641859566a34646c0c20d/repomate_junit4-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a75c1ebe1994ec65f400254c75f862ec", "sha256": "0be2053cc533182a11b6cd5a7c41e983687e615ecffd4625a00432a2185e4de1" }, "downloads": -1, "filename": "repomate-junit4-0.5.0.tar.gz", "has_sig": false, "md5_digest": "a75c1ebe1994ec65f400254c75f862ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13786, "upload_time": "2019-03-14T14:22:52", "url": "https://files.pythonhosted.org/packages/64/62/6ad3dcba0f4f9d9f76d835b2d3e5fc28b062bd5336c97935a15e04554a3d/repomate-junit4-0.5.0.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "0257cfcb486ac6584764c867fe550467", "sha256": "79ce2ddfa77bd7fbdc3e8b23bf34555bc6050bda3114a1ac95d4cd938a5b4956" }, "downloads": -1, "filename": "repomate_junit4-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "0257cfcb486ac6584764c867fe550467", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 13921, "upload_time": "2019-03-14T14:22:50", "url": "https://files.pythonhosted.org/packages/e5/bd/4c2031d25b119106938011189c869e83e48b9b9641859566a34646c0c20d/repomate_junit4-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a75c1ebe1994ec65f400254c75f862ec", "sha256": "0be2053cc533182a11b6cd5a7c41e983687e615ecffd4625a00432a2185e4de1" }, "downloads": -1, "filename": "repomate-junit4-0.5.0.tar.gz", "has_sig": false, "md5_digest": "a75c1ebe1994ec65f400254c75f862ec", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 13786, "upload_time": "2019-03-14T14:22:52", "url": "https://files.pythonhosted.org/packages/64/62/6ad3dcba0f4f9d9f76d835b2d3e5fc28b062bd5336c97935a15e04554a3d/repomate-junit4-0.5.0.tar.gz" } ] }