{ "info": { "author": "Coumes Quentin", "author_email": "coumes.quentin@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Natural Language :: English", "Operating System :: POSIX :: Linux", "Programming Language :: Python :: 3.5", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "[![Build Status](https://travis-ci.org/qcoumes/wimsapi.svg?branch=master)](https://travis-ci.org/qcoumes/wimsapi)\n[![codecov](https://codecov.io/gh/qcoumes/wimsapi/branch/master/graph/badge.svg)](https://codecov.io/gh/qcoumes/wimsapi)\n[![CodeFactor](https://www.codefactor.io/repository/github/qcoumes/wimsapi/badge)](https://www.codefactor.io/repository/github/qcoumes/wimsapi)\n[![Documentation Status](https://readthedocs.org/projects/wimsapi/badge/?version=master)](https://wimsapi.readthedocs.io/?badge=master)\n[![PyPI Version](https://badge.fury.io/py/wimsapi.svg)](https://badge.fury.io/py/wimsapi)\n[![Python 3.5+](https://img.shields.io/badge/python-3.5+-brightgreen.svg)](#)\n[![License MIT](https://img.shields.io/badge/license-MIT-brightgreen.svg)](https://github.com/qcoumes/wimsapi/blob/master/LICENSE)\n\n\n# Python API for WIMS' adm/raw module\n\n**WimsAPI** is an API written in python3 allowing to communicate with a *WIMS*\nserver through its *adm/raw* extension.\n\nFor more information about *adm/raw*,\n[see its documentation](https://wims.auto.u-psud.fr/wims/wims.cgi?module=adm/raw&job=help)\n\nHere the [documentation of wimsapi](https://wimsapi.readthedocs.io/en/latest/).\n\n## Installation\n\nThe latest stable version is available on [PyPI](https://pypi.org/project/wimsapi/) :\n\n```bash\npip install wimsapi\n```\n\nor from the sources:\n\n```bash\ngit clone https://github.com/qcoumes/wimsapi\ncd wimsapi\npython3 setup.py install\n```\n \n\n## Configuration\n\n### Global configuration\n\nIn order for *WIMS* to accept requests from **WimsAPI**,\na file must be created in `[WIMS_HOME]/log/classes/.connections/`,\nthe file's name will serve as the identifier name for **WimsAPI**.\n\nHere an exemple of such file:\n`[WIMS_HOME]/log/classes/.connections/myself`\n```\nident_site=172.17.0.1\n\nident_desc=This WIMS server\n\nident_agent=python-requests\n\n# http / https.\nident_protocol=http\n\n# password must be a word composed of alpha-numeric characters.\nident_password=toto\n\nident_type=json\n\n# The address and identifier/password pair for calling back.\nback_url=http://localhost/wims/wims.cgi\nback_ident=myself\nback_password=toto\n```\n \nHere a description of the important parameters:\n\n* `ident_site`: a space separated list of IP allowed to send request to this\n *WIMS* server.\n* `ident_agent`: ***Must*** be set to `python-requests`.\n* `ident_password`: Used alongside the file's name as *identifier* in the request\n to authenticate yourself on *WIMS*.\n* `ident_type`: ***Must*** be set to `json`.\n\nThe above example would allow a computer/server of ip `172.17.0.1` to send a request\nto the *WIMS* server with identifier *myself* and password *toto*.\n\n\n### Class Configuration\n\nIf you create a class thanks to this API, everything should work perfectly.\nHowever, if you want to use it with an already existing class, some more\nconfiguration must be done.\n\nYou must edit the file `[WIMS_HOME]/log/classes/[CLASS_ID]/.def` and add\nthis line at the end of the file:\n\n```\n!set class_connections=+IDENT/RCLASS+\n```\n\nWhere **IDENT** is the identifier use by the API (name of the corresponding\nfile in `[WIMS_HOME]/log/classes/.connections/` as defined above) and\n**RCLASS** is an identifier sent in the request to authenticate yourself\non the class.\n\nBasically, to authenticate yourself on a class on your *WIMS* server, you\nwill need :\n\n* `url` : URL to the *WIMS* (`https://wims.unice.fr/wims/wims.cgi` for instance)\n* `ident` : Name of the file in `[WIMS_HOME]/log/classes/.connections/`\n* `passwd` : Value of `ident_password` in\n `[WIMS_HOME]/log/classes/.connections/[IDENT]`\n* `rclass` : Value set after the **/** in `class_connections` in\n `[WIMS_HOME]/log/classes/[CLASS_ID]/.def`\n\n\n\n## Example\n\n```python\nfrom wimsapi import Class, User\n\nc = Class.get(\"https://wims.unice.fr/wims/wims.cgi\", \"myself\", \"toto\", 9999, \"myclass\")\n\nc.institution = \"Another institution\" # Modify class' institution\nc.save()\n\nu = User.get(c, \"qcoumes\")\nu.email = \"coumes.quentin@gmail.com\" # Modify user's email\nu.save()\n\nnew = User(\"quser\", \"lastname\", \"firstname\", \"password\", \"mail@mail.com\")\nc.additem(new) # Add the new user to the class.\n```\n\nFor more informations about usage or example : Here the complete [documentation of wimsapi](https://wimsapi.readthedocs.io/en/latest/).\n\n\n## Testing\n\nTo test *wimsapi*, you will need a running WIMS' server. If needed, you can set up one quickly with docker using the DockerFile [here](https://github.com/qcoumes/docker-wims-minimal), following the *README* steps.\n\nThe default URL used for tests is `http://localhost:7777/wims/wims.cgi`, you can override it with the environment variable `WIMS_URL`. For instance:\n```bash\nWIMS_URL=http://mywims.com/wims/wims.cgi pytest\n```\n\n\n______\n\n# Changelog\n\n\n### 0.5.2\n\n* Parameters of `api.py` requests are now encoding in `ISO-8859-1`, mathching WIMS'\n default encoding\n \n* Adding `__repr__` and `__str__` method to `Class` and `Item`\u00a0subtypes.\n\n* Getting Exams from the WIMS server now retrieve the correct status.\n\n\n### 0.5.1\n\n* Fix sheet's score computation\n\n\n## 0.5.0\n\n* Added classes `Exam` and `ExamScore`, `ExerciseScore` and `SheetScore`\nto store scores\n\n* `Sheet` / `Exam`:\n * Title and description are now optionnal in constructor.\n * Added method `scores(user=None)` to retrieve the score of one or every user.\n\n* Added class method `check()` to `Class` to check wheter a class exists or not.\n\n* Better `__eq__` and `__hash__` for every class.\n\n\n### 0.4.1\n\n* Listing functions now return an empty list when needed\n\n\n## 0.4.0\n\n* Added new item : `Sheet`\n* Added the possibility to list items and classes through `Class.list()` and\n `class.listitem()`.\n* Added `__eq__()` for items and classes.\n* Fixed some documentation\n\n\n### 0.3.9\n\n* Renamed Class member `date` to `expiration` to match the *ADM/RAW* argument.\n* `Class.limit` is now an *int* when retrieving the class from a *WIMS* server.\n* Now propagate exception if expiration in Class `__init__` is not `yyyymmdd`.\n\n### 0.3.7 & 0.3.8\n\n* `check_exists` is now used properly\n\n\n### 0.3.6\n\n* Added `check_exists=True` parameter to item's save method. \n If check_exists is True, the api will check if an item with the same ID\n exists on the WIMS' server. If it exists, save will instead modify this\n item instead of trying to create new one. \n `wclass.additem()` will now use `check_exists=False`.\n* Fix response check in `wclass.save()`\n\n\n### 0.3.5\n\n* Fix missing `self.lang = lang` in **Class**' `__init__`\n\n\n### 0.3.4\n\n* Fix `long_description` in setup.py\n\n\n### 0.3.3\n\n* `qclass` argument is now optionnal in Class constructor,\n allowing WIMS to choose a free `qclass` when saving for\n the fist time. \n\n\n### 0.3.2\n\n* Fixed `WimsAPI.putexo()`.\n* Updated tests and unskipped some according to latest WIMS version.\n\n\n### 0.3.1\n\n* Fixed buggy import in setup.py\n\n\n## 0.3.0\n\n* Adding **Classe** higher level API, allowing to manipulate a WIMS' Class.\n* Adding **User** higher level API, allowing to manipulate a WIMS' User.\n* Adding documentation.\n\n\n### 0.2.2\n\n* More tests.\n\n\n### 0.2.1\n\n* Fixed travis CI.\n\n\n## 0.2.0\n\n* Add User and Class higher level classes.\n* Add some tests fomr WimsApi.\n* Add Travis CI.\n\n\n## 0.1.0\n\n* Initial public release.", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/qcoumes/wimsapi", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "wimsapi", "package_url": "https://pypi.org/project/wimsapi/", "platform": "", "project_url": "https://pypi.org/project/wimsapi/", "project_urls": { "Homepage": "https://github.com/qcoumes/wimsapi" }, "release_url": "https://pypi.org/project/wimsapi/0.5.2/", "requires_dist": null, "requires_python": "", "summary": "A Python 3 implementation of WIMS adm/raw module.", "version": "0.5.2" }, "last_serial": 5542496, "releases": { "0.2.1": [ { "comment_text": "", "digests": { "md5": "6adf6de3a63b5bc781f4837dd0d21970", "sha256": "d87a53afa752fafb60800454d1e9c02da28465f6696d3bf320ebb291bc9a82e9" }, "downloads": -1, "filename": "wimsapi-0.2.1.tar.gz", "has_sig": false, "md5_digest": "6adf6de3a63b5bc781f4837dd0d21970", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17926, "upload_time": "2018-11-10T20:07:43", "url": "https://files.pythonhosted.org/packages/7b/64/4ac333fcab8bd0555995ac5f40ca2e70ec7ea90e11d536396aa69e684117/wimsapi-0.2.1.tar.gz" } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "b19928abca95e7093cc422d5faa260d5", "sha256": "aa75de1e4aaf7703180c7e57be224a81eadc4c7d8a4f0e968a07f0380a6d7cc7" }, "downloads": -1, "filename": "wimsapi-0.3.0.tar.gz", "has_sig": false, "md5_digest": "b19928abca95e7093cc422d5faa260d5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19491, "upload_time": "2018-12-03T14:08:50", "url": "https://files.pythonhosted.org/packages/36/2f/df5a4af4febaecc7cf7b0c9d08bc397d753fa1ca13dbaf4af5119ee3c125/wimsapi-0.3.0.tar.gz" } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "0211dcc3c744b8d7f98e5c2c9086ef8e", "sha256": "8e3bdfa9dde965217b2b719f78020589459864af06a5e23292328fd49779876f" }, "downloads": -1, "filename": "wimsapi-0.3.1.tar.gz", "has_sig": false, "md5_digest": "0211dcc3c744b8d7f98e5c2c9086ef8e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19521, "upload_time": "2018-12-03T15:33:14", "url": "https://files.pythonhosted.org/packages/c1/65/18c4431797971d1d5f2f21d4b22fe80132b17695bfc1fad56d295c6f214f/wimsapi-0.3.1.tar.gz" } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "eb7535732704903081e930f8b8ad78e9", "sha256": "e3baa786e5cbf7e5560248c5f98195fa4f67e52cc9e3b9502a6f24f245b66225" }, "downloads": -1, "filename": "wimsapi-0.3.2.tar.gz", "has_sig": false, "md5_digest": "eb7535732704903081e930f8b8ad78e9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19627, "upload_time": "2019-01-14T20:31:13", "url": "https://files.pythonhosted.org/packages/72/8b/47592e7c9bbf94db7adeb2e7d581077dc1a2d67865b58a937c98ac7b020c/wimsapi-0.3.2.tar.gz" } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "ce6c0fd0d1e2e0acf71da902a1812723", "sha256": "13e80cd3af4f42d78c8a17d826ecc8c8ffa7a76525684c59a19023539856a4c1" }, "downloads": -1, "filename": "wimsapi-0.3.3.tar.gz", "has_sig": false, "md5_digest": "ce6c0fd0d1e2e0acf71da902a1812723", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20132, "upload_time": "2019-01-18T08:09:52", "url": "https://files.pythonhosted.org/packages/6e/c2/d49376c91fdcc19d41bd7a215216393859b121a6c1db9b8888f6bc8f9b26/wimsapi-0.3.3.tar.gz" } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "5777745b1863942731f5a8a0fe1524d3", "sha256": "ab86697a962d445e8754d127896202fc5d698949a3a17a378d6b5d0073b85743" }, "downloads": -1, "filename": "wimsapi-0.3.4.tar.gz", "has_sig": false, "md5_digest": "5777745b1863942731f5a8a0fe1524d3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20157, "upload_time": "2019-01-18T09:32:58", "url": "https://files.pythonhosted.org/packages/ba/bb/07c086156e88bd471aedfe13405233e19b5c17e83114f4120731f9b3dd1a/wimsapi-0.3.4.tar.gz" } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "8623d69af2c7257a2fc13912094d3e02", "sha256": "33ecb8ed74f27b521dc86fc82c514e70ff570dbdd1d9d86ed2fefabce8cf9cf3" }, "downloads": -1, "filename": "wimsapi-0.3.5.tar.gz", "has_sig": false, "md5_digest": "8623d69af2c7257a2fc13912094d3e02", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 20654, "upload_time": "2019-01-29T14:41:46", "url": "https://files.pythonhosted.org/packages/10/37/2f0d05cb53778b64bd21c23981d2e554d822648e1c9fbab4922500b1a3e9/wimsapi-0.3.5.tar.gz" } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "72db599dd45b7c8d5ba2df2eec55ce5c", "sha256": "de4fde90b4ef04e4c10f101f05df9f50ae5ed5dcdcce0a47fd44a1722a943c9d" }, "downloads": -1, "filename": "wimsapi-0.3.6.tar.gz", "has_sig": false, "md5_digest": "72db599dd45b7c8d5ba2df2eec55ce5c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21011, "upload_time": "2019-02-03T21:41:16", "url": "https://files.pythonhosted.org/packages/6e/74/613198bc76bab39533c4da5378d455bd91a85a427c95168eb9e1343cdd6e/wimsapi-0.3.6.tar.gz" } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "e4599eeabbef40ba24e811d80162e442", "sha256": "cab1153f43329e301895d57f12bce94b3ee7b212474bf318aa9b12c5ecc00b64" }, "downloads": -1, "filename": "wimsapi-0.3.7.tar.gz", "has_sig": false, "md5_digest": "e4599eeabbef40ba24e811d80162e442", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21059, "upload_time": "2019-02-04T15:21:26", "url": "https://files.pythonhosted.org/packages/18/b2/9304618ea2a0bb5bfdb2995520cf22cf71a03a0555bb6aac3bb781a54846/wimsapi-0.3.7.tar.gz" } ], "0.3.8": [ { "comment_text": "", "digests": { "md5": "8960fb3b3ac655842303d98c918a85e4", "sha256": "a1c4551ccccba955ca8baf5edbabe1bf91b7cdb052fafb3fa3d3e56927aff848" }, "downloads": -1, "filename": "wimsapi-0.3.8.tar.gz", "has_sig": false, "md5_digest": "8960fb3b3ac655842303d98c918a85e4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21076, "upload_time": "2019-02-04T22:15:24", "url": "https://files.pythonhosted.org/packages/a1/79/89f30cb9cea0507782955beba8deea333be69bf3a942b11350e8865d8be5/wimsapi-0.3.8.tar.gz" } ], "0.3.9": [ { "comment_text": "", "digests": { "md5": "b4422be1cae5f25242588559bf470b28", "sha256": "067ab86561048ad5a772ba63b0a788d57f52326378d4af6f76111a3bd05e6ff3" }, "downloads": -1, "filename": "wimsapi-0.3.9.tar.gz", "has_sig": false, "md5_digest": "b4422be1cae5f25242588559bf470b28", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 21271, "upload_time": "2019-02-18T21:40:07", "url": "https://files.pythonhosted.org/packages/0a/da/ea750bade6aab4c7e593abcb50645198fad59cc8b051743fa17de4d43ef5/wimsapi-0.3.9.tar.gz" } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "1303fbc68412e6619f0d2a0fa1049df4", "sha256": "4fd35e182ac544c2b33831dadfa8042b97951b6a8710a5fd07283fcdb194c729" }, "downloads": -1, "filename": "wimsapi-0.4.0.tar.gz", "has_sig": false, "md5_digest": "1303fbc68412e6619f0d2a0fa1049df4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23768, "upload_time": "2019-05-11T21:24:37", "url": "https://files.pythonhosted.org/packages/39/64/bcd5d47446cd257295bc3427ca880218eb7574afffeedc6e463c36fd08be/wimsapi-0.4.0.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "184d82d76e69c57d85af01d173142671", "sha256": "c6662cd152682474e92cb566eb5413be5935b4c7ba2ad6101bfa49d2ea9d470a" }, "downloads": -1, "filename": "wimsapi-0.4.1.tar.gz", "has_sig": false, "md5_digest": "184d82d76e69c57d85af01d173142671", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 23875, "upload_time": "2019-05-13T13:11:13", "url": "https://files.pythonhosted.org/packages/2d/d4/f25e637054baf45627875db9c859488a22c0cbde9ffd539afb00dba02dad/wimsapi-0.4.1.tar.gz" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "42c66deba3d39fc3115f1b5597259a03", "sha256": "a862d3423d408f276b82ca56a21d8cdc598e3b0064b490fd81c3b8290af8b503" }, "downloads": -1, "filename": "wimsapi-0.5.0.tar.gz", "has_sig": false, "md5_digest": "42c66deba3d39fc3115f1b5597259a03", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27720, "upload_time": "2019-06-29T19:08:45", "url": "https://files.pythonhosted.org/packages/4b/08/cbf8b1e8ac6da8bb2465c3aac11a697669097672ac4553fa7af06d6c3765/wimsapi-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "e06f5bd5d8f13a39e5b40094a51ff6db", "sha256": "2f1ff8211b13a99c8dafe41be4994369f435d9d12db0453cd8dc80679abced14" }, "downloads": -1, "filename": "wimsapi-0.5.1.tar.gz", "has_sig": false, "md5_digest": "e06f5bd5d8f13a39e5b40094a51ff6db", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 27761, "upload_time": "2019-07-09T15:15:59", "url": "https://files.pythonhosted.org/packages/15/5e/690b3197d8cdf404556163b824859ac24e42bdd178e27b24cfb72ca331e8/wimsapi-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "b7e1096c50ab7a5c2441bbedec854f79", "sha256": "8310f9087df480de5044fa45df9b9c4fb675307286270674a281930ad4ae128b" }, "downloads": -1, "filename": "wimsapi-0.5.2.tar.gz", "has_sig": false, "md5_digest": "b7e1096c50ab7a5c2441bbedec854f79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28245, "upload_time": "2019-07-16T20:14:02", "url": "https://files.pythonhosted.org/packages/23/db/f7d8afa406c3f6e1c5c69de753b7934e968ae222bddde36c14cb0abf0a7d/wimsapi-0.5.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "b7e1096c50ab7a5c2441bbedec854f79", "sha256": "8310f9087df480de5044fa45df9b9c4fb675307286270674a281930ad4ae128b" }, "downloads": -1, "filename": "wimsapi-0.5.2.tar.gz", "has_sig": false, "md5_digest": "b7e1096c50ab7a5c2441bbedec854f79", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 28245, "upload_time": "2019-07-16T20:14:02", "url": "https://files.pythonhosted.org/packages/23/db/f7d8afa406c3f6e1c5c69de753b7934e968ae222bddde36c14cb0abf0a7d/wimsapi-0.5.2.tar.gz" } ] }