{ "info": { "author": "LabsLand", "author_email": "dev@labsland.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Environment :: Web Environment", "Intended Audience :: Developers", "License :: OSI Approved :: GNU Affero General Public License v3", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 2", "Programming Language :: Python :: 2.7", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Topic :: Education", "Topic :: Internet :: WWW/HTTP", "Topic :: Software Development :: Libraries :: Application Frameworks" ], "description": "# weblablib\n\n[![documentation](https://readthedocs.org/projects/weblablib/badge/?version=latest)](https://developers.labsland.com/weblablib/)\n[![Version](https://img.shields.io/pypi/v/weblablib.svg)](https://pypi.python.org/pypi/weblablib/)\n[![Python versions](https://img.shields.io/pypi/pyversions/weblablib.svg)](https://pypi.python.org/pypi/weblablib/)\n[![build status](https://travis-ci.org/weblabdeusto/weblablib.svg?branch=master)](https://travis-ci.org/weblabdeusto/weblablib)\n[![Coverage Status](https://coveralls.io/repos/github/weblabdeusto/weblablib/badge.svg?branch=master)](https://coveralls.io/github/weblabdeusto/weblablib?branch=master)\n\n**weblablib** is a library for creating [WebLab-Deusto](https://github.com/weblabdeusto/weblabdeusto/) remote laboratories.\n\nA remote laboratory is a software and hardware system that enables students to access real laboratories through the Internet.\nFor example, a student can be learning how to program a robot by writing code in a computer at home and sending it to a remote laboratory, where the student can see how the program behaves in a real environment.\n\nCreating a remote laboratory may imply many layers, such as authentication, authorization, scheduling, etc., so Remote Laboratory Management Systems (RLMS) were created to make the common layers of remote laboatories.\nWebLab-Deusto is an Open Source RLMS, and it has multiple ways ([see the docs](https://weblabdeusto.readthedocs.org)) to create a remote laboratory (in different programming languages, etc.).\n\nIn the case of Python, with the popular [Flask](http://flask.pocoo.org) microframework, **weblablib** is the wrapper used to create *unmanaged labs*.\n*Unmanaged labs* is a term used in WebLab-Deusto to refer laboratories where the authors develop the full stack (server, client, deployment), as opposed to *managed labs*.\n\nIf you are familiar with Flask and with Web development, and want to be able to customize everything but not need to implement all the layers of authentication, administration, etc., this library would be very useful. Furthermore, this library allows you to develop remote laboratories for many environments (from regular computers with Linux to systems such as Raspberry Pi). And it integrates very well with other Flask components such as [Flask-SocketIO](https://flask-socketio.readthedocs.io/), [Flask-SQLAlchemy](http://flask-sqlalchemy.pocoo.org/) for databases or [Flask-Assets](https://flask-assets.readthedocs.io/).\n\n## Documentation\n\nRead the documentation: https://developers.labsland.com/weblablib/\n\n## Installation\n\nSimply use pip:\n```\n pip install weblablib\n```\n\n## Simple usage\n\n```python\nfrom flask import Flask, url_for\nfrom weblablib import WebLab, weblab_user, requires_active\n\napp = Flask(__name__)\napp.config.update({\n 'SECRET_KEY': 'secret', # MUST CHANGE\n 'WEBLAB_USERNAME': 'weblabdeusto',\n 'WEBLAB_PASSWORD': 'password',\n})\n\nweblab = WebLab(app)\n\n@weblab.on_start\ndef on_start(client_data, server_data):\n # ...\n print(\"Starting user\")\n\n@weblab.on_dispose\ndef on_dispose():\n # ...\n print(\"Ending user\")\n\n@weblab.initial_url\ndef initial_url():\n return url_for('index')\n\n@app.route('/')\n@requires_active\ndef index():\n return \"Hello, {}\".format(weblab_user.username)\n\nif __name__ == '__main__':\n app.run(debug=True)\n```\n\n## Advance examples\n\nYou may find [here](https://github.com/weblabdeusto/weblablib/tree/master/examples) the following examples:\n * [simple](https://github.com/weblabdeusto/weblablib/tree/master/examples/simple): basic usage, all in one file.\n * [advanced](https://github.com/weblabdeusto/weblablib/tree/master/examples/advanced): more advanced usage, with separation of files, tasks, more complex session management\n * [complete](https://github.com/weblabdeusto/weblablib/tree/master/examples/complete): based on advanced, but using WebSockets with Flask-SocketIO, internationalization with Flask-Babel and minimified static files with Flask-Assets.\n\nThere is another example called ``quickstart``, which is the one used in the documentation, which is something in between ``simple`` and ``advanced``.\n\n\n", "description_content_type": "text/markdown", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://developers.labsland.com/weblablib/", "keywords": "", "license": "GNU AGPL v3", "maintainer": "", "maintainer_email": "", "name": "weblablib", "package_url": "https://pypi.org/project/weblablib/", "platform": "", "project_url": "https://pypi.org/project/weblablib/", "project_urls": { "Code": "https://github.com/weblabdeusto/weblablib", "Documentation": "https://developers.labsland.com/weblablib/en/stable/", "Homepage": "https://developers.labsland.com/weblablib/", "Issue tracker": "https://github.com/weblabdeusto/weblablib/issues" }, "release_url": "https://pypi.org/project/weblablib/0.5.4/", "requires_dist": [ "redis", "flask", "six", "requests" ], "requires_python": "", "summary": "WebLab-Deusto library for creating unmanaged laboratories", "version": "0.5.4" }, "last_serial": 5734913, "releases": { "0.2": [ { "comment_text": "", "digests": { "md5": "a49fdcf206f8d5e5f2c795b3c96d724f", "sha256": "78c04d45ca9d78a058d30685a73c595fe65ae4711e7bef3510fcd1004cf299cc" }, "downloads": -1, "filename": "weblablib-0.2.tar.gz", "has_sig": false, "md5_digest": "a49fdcf206f8d5e5f2c795b3c96d724f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 17290, "upload_time": "2017-08-22T06:25:58", "url": "https://files.pythonhosted.org/packages/90/a0/470f92a5b0be09c296d1c645ea415aa349daf331e1d7de3abcb9aa0fbce6/weblablib-0.2.tar.gz" } ], "0.3": [ { "comment_text": "", "digests": { "md5": "4013626170992e8355456e9f21b71f88", "sha256": "6f1ef02e3928ba032db7744e5f77218d63fb7ffb579a4551fd549f5c438d4f2f" }, "downloads": -1, "filename": "weblablib-0.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4013626170992e8355456e9f21b71f88", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 20511, "upload_time": "2017-08-29T18:14:43", "url": "https://files.pythonhosted.org/packages/8e/83/3f6bb717d732f8e75f80712190e41fc8f9dbb2168713d93d77374a7c546f/weblablib-0.3-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1ca901ec09da53cfc7f2be3cceaf3ea8", "sha256": "4c7d83c200a869220ca6632c5bb8ad19eb41f14a46adce74ebabceb530ef3c9e" }, "downloads": -1, "filename": "weblablib-0.3.tar.gz", "has_sig": false, "md5_digest": "1ca901ec09da53cfc7f2be3cceaf3ea8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 19576, "upload_time": "2017-08-29T08:07:33", "url": "https://files.pythonhosted.org/packages/77/d1/109f7fdde5e5e101d732d757b0520a5a5db69c75f79a12ca2dacb3d847ec/weblablib-0.3.tar.gz" } ], "0.4": [ { "comment_text": "", "digests": { "md5": "a5b7fa94899c90b37cb3f932fa20095e", "sha256": "2c57805a58e2f65d22367db98f6a13e7c41ea760c7a4540e4e5bbfb2c136bbfd" }, "downloads": -1, "filename": "weblablib-0.4-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a5b7fa94899c90b37cb3f932fa20095e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 27504, "upload_time": "2017-09-07T02:31:49", "url": "https://files.pythonhosted.org/packages/92/07/f8c8d25b97314849514d175fea1bb282c917d9a1a5744796276e1457bd86/weblablib-0.4-py2.py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fa49773b1b5fcfe8c8052b8cf97b91c2", "sha256": "b582476157c0037fb1b130b8f07b9d61e0c7aede2654c6d6dd35fbf9087220eb" }, "downloads": -1, "filename": "weblablib-0.4.tar.gz", "has_sig": false, "md5_digest": "fa49773b1b5fcfe8c8052b8cf97b91c2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 26522, "upload_time": "2017-09-07T02:31:51", "url": "https://files.pythonhosted.org/packages/73/a9/79e548be6b64645e9d68229458861cf65ee6cc80e786c0aaaf6da1be5064/weblablib-0.4.tar.gz" } ], "0.4.1": [ { "comment_text": "", "digests": { "md5": "4b73378280ec676aeef2db3679153522", "sha256": "74107220dbcb17c3e3bc1dc673b156c75f767893d62daff185202b5f2e0d6a50" }, "downloads": -1, "filename": "weblablib-0.4.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4b73378280ec676aeef2db3679153522", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 31414, "upload_time": "2018-08-19T22:25:21", "url": "https://files.pythonhosted.org/packages/ed/fb/2c89fe3e0fda58b51bac7b4a04cd74bf732eac12efa6e1257fa21bc6b3b4/weblablib-0.4.1-py2.py3-none-any.whl" } ], "0.4.2": [ { "comment_text": "", "digests": { "md5": "eea3ebab597905f747c16eafbc8e095e", "sha256": "8feacc7723e28b2a8374ef6bede5215381d153300684bdc18f2bc5398c36ea21" }, "downloads": -1, "filename": "weblablib-0.4.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "eea3ebab597905f747c16eafbc8e095e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": null, "size": 28772, "upload_time": "2018-08-19T22:34:24", "url": "https://files.pythonhosted.org/packages/6f/21/a2b61f15c6da7d1235eea91ed398801437c79c077453b0e1ef26d6fe747f/weblablib-0.4.2-py2.py3-none-any.whl" } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "706d36146e6eee0382e801f8da824417", "sha256": "f05df0a5ffc3651f5c77d242103c09fc834ad5ba51f5a6e4f3fc75f9d845d3ae" }, "downloads": -1, "filename": "weblablib-0.5.0-py3-none-any.whl", "has_sig": false, "md5_digest": "706d36146e6eee0382e801f8da824417", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 75000, "upload_time": "2019-01-17T11:17:50", "url": "https://files.pythonhosted.org/packages/cd/9a/bb4cdbea48ad096539e4fe5a37cefd91b2981bde076a6aa157a9f9079f53/weblablib-0.5.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "0ac69c161969f5748b3ad10491c8f5f7", "sha256": "992e576fa9903e405734bb1dcd065cf62974929ee90d1b44d3cbae04790dd606" }, "downloads": -1, "filename": "weblablib-0.5.0.tar.gz", "has_sig": false, "md5_digest": "0ac69c161969f5748b3ad10491c8f5f7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33826, "upload_time": "2019-01-17T11:17:52", "url": "https://files.pythonhosted.org/packages/94/8e/047f1f80b0bb432e59fa2185704e507da55163f636f203096aef52de22c7/weblablib-0.5.0.tar.gz" } ], "0.5.1": [ { "comment_text": "", "digests": { "md5": "1169e75c969fdd03bdd5e2deb043e980", "sha256": "0d13710d4f9eeae4056c9f9c8f3ecb5a6880ca394a846625899a5a870a3e3c4a" }, "downloads": -1, "filename": "weblablib-0.5.1-py2-none-any.whl", "has_sig": false, "md5_digest": "1169e75c969fdd03bdd5e2deb043e980", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 37512, "upload_time": "2019-01-19T08:46:25", "url": "https://files.pythonhosted.org/packages/5f/64/f60da17a8fae12311dda09b8ae29eb8fdc294b65858591edbf024e6c5eaf/weblablib-0.5.1-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6aa93cdddca03ed55d66a6871cb46b65", "sha256": "58336090d036bc8afe6d5d7fce5b91ec31c9fe5c21042bf78c3f02c8b1b1852f" }, "downloads": -1, "filename": "weblablib-0.5.1-py3-none-any.whl", "has_sig": false, "md5_digest": "6aa93cdddca03ed55d66a6871cb46b65", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49453, "upload_time": "2019-01-19T08:46:27", "url": "https://files.pythonhosted.org/packages/fc/ad/5b5047b5dc41142db56d67254bf2724f61a647fdc50070327688befeb712/weblablib-0.5.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "c18d7e4573a6e377f97caa9677959b16", "sha256": "eccacb8058dd37ed6664bfe0c8860aa4b9686606311725fd495da8a89544fe27" }, "downloads": -1, "filename": "weblablib-0.5.1.tar.gz", "has_sig": false, "md5_digest": "c18d7e4573a6e377f97caa9677959b16", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33845, "upload_time": "2019-01-19T08:46:28", "url": "https://files.pythonhosted.org/packages/44/2d/ba87c9960e7dfdfac9d0dc215a261f19d89a9c71839b604da3992eb9aacb/weblablib-0.5.1.tar.gz" } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "2cc97cc3266a7499843f1c0bebb941fc", "sha256": "7f0ba81906809a1605054dd8d9a0f26f6bf6d217cc1e6e576615bcb77583ccc3" }, "downloads": -1, "filename": "weblablib-0.5.2-py2-none-any.whl", "has_sig": false, "md5_digest": "2cc97cc3266a7499843f1c0bebb941fc", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 37557, "upload_time": "2019-01-25T22:58:20", "url": "https://files.pythonhosted.org/packages/5e/9b/8847bf52f22d2480c829733d55420b90cd27a414770b43da2528e4773e44/weblablib-0.5.2-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "19d9800c0dbdd34a36ce6e3f18cc1c38", "sha256": "79dad63bf21ea6fdf7416f2f050b217ae0c38bc57b1ad29449abb77a97efa904" }, "downloads": -1, "filename": "weblablib-0.5.2-py3-none-any.whl", "has_sig": false, "md5_digest": "19d9800c0dbdd34a36ce6e3f18cc1c38", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49497, "upload_time": "2019-01-25T22:58:21", "url": "https://files.pythonhosted.org/packages/54/93/1d6297faab728563ae5890d6357734b80a388ebb565b9b4b6bd8508c117f/weblablib-0.5.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "fd6c46a35ea27a7e610be03f2ab40dda", "sha256": "c4dad34311519037b099c5c5c28a57c1cd347649df657fc2cf69fec7a5937c13" }, "downloads": -1, "filename": "weblablib-0.5.2.tar.gz", "has_sig": false, "md5_digest": "fd6c46a35ea27a7e610be03f2ab40dda", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 33888, "upload_time": "2019-01-25T22:58:23", "url": "https://files.pythonhosted.org/packages/a4/f4/8affde243ab82e3ae0dd96ef4dbe1590498269043d75a1d5c811139af0a5/weblablib-0.5.2.tar.gz" } ], "0.5.3": [ { "comment_text": "", "digests": { "md5": "dfed2a9387759ea28c0c31e3e5357f4e", "sha256": "b252a56f4607a69f743965f95a43f1476a5bc77c6ded908e42a908e5931ce91b" }, "downloads": -1, "filename": "weblablib-0.5.3-py2-none-any.whl", "has_sig": false, "md5_digest": "dfed2a9387759ea28c0c31e3e5357f4e", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 37672, "upload_time": "2019-08-23T20:31:23", "url": "https://files.pythonhosted.org/packages/6a/62/8baaedee81c29e8712ce3ffbecf7f819584028dd9a8f301c5ab20b7f11b4/weblablib-0.5.3-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f2111373eb9ddc72649bb920a7ab1ab7", "sha256": "06a039a45187afee03b7f193bebf6fb2d7dafa78adb874157530357fd58c10c3" }, "downloads": -1, "filename": "weblablib-0.5.3-py3-none-any.whl", "has_sig": false, "md5_digest": "f2111373eb9ddc72649bb920a7ab1ab7", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49614, "upload_time": "2019-08-23T20:31:24", "url": "https://files.pythonhosted.org/packages/ed/a6/1226c0069dd24be8719109242a759098fca8830b065893117718bd0f5d48/weblablib-0.5.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "7c977ad8df14a2e1c005c1e522347716", "sha256": "7f1dff6184c3d11aeca7d697bdc8dbd3ccba9232a134bf405c42cae30e3a64a1" }, "downloads": -1, "filename": "weblablib-0.5.3.tar.gz", "has_sig": false, "md5_digest": "7c977ad8df14a2e1c005c1e522347716", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34003, "upload_time": "2019-08-23T20:31:26", "url": "https://files.pythonhosted.org/packages/b8/d0/381a1cfdd1542b34977a31aa5f9677ad0011026751d9ec0b805248b79758/weblablib-0.5.3.tar.gz" } ], "0.5.4": [ { "comment_text": "", "digests": { "md5": "f14df3b793a1f127dddcee8db5e23a73", "sha256": "042f96889047d9e53b0e5c521ab4fb1aeb38577df599b2bbf4c6c16cbdde4f32" }, "downloads": -1, "filename": "weblablib-0.5.4-py2-none-any.whl", "has_sig": false, "md5_digest": "f14df3b793a1f127dddcee8db5e23a73", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 37814, "upload_time": "2019-08-27T06:33:05", "url": "https://files.pythonhosted.org/packages/48/2b/ccf4c902b94d1cf1f3988f8445f14d47090200b8a265e396c0b5a76a07ee/weblablib-0.5.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9965f5901e199a0bbbcbfaeba8e76acd", "sha256": "ad91e97ce5fb5cd3e9739ab7a9bbdcd777ff82d77df99e6256ea62a238c969f9" }, "downloads": -1, "filename": "weblablib-0.5.4-py3-none-any.whl", "has_sig": false, "md5_digest": "9965f5901e199a0bbbcbfaeba8e76acd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49757, "upload_time": "2019-08-27T06:33:07", "url": "https://files.pythonhosted.org/packages/4d/93/bd8a46f9f92b76011431ab9b60405af51ea3816983101ae0a1a79631d5a1/weblablib-0.5.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b6d81460398c345b750fe334ae034a8", "sha256": "9896bd43a6d665b5e0a34c376114cf6817deb2950fcd02fa25fcd4c5c63797f8" }, "downloads": -1, "filename": "weblablib-0.5.4.tar.gz", "has_sig": false, "md5_digest": "4b6d81460398c345b750fe334ae034a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34073, "upload_time": "2019-08-27T06:33:08", "url": "https://files.pythonhosted.org/packages/e2/5e/59837d3781bb8cd020a6638189b57cce902512aeb86984600223ffa1ed59/weblablib-0.5.4.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f14df3b793a1f127dddcee8db5e23a73", "sha256": "042f96889047d9e53b0e5c521ab4fb1aeb38577df599b2bbf4c6c16cbdde4f32" }, "downloads": -1, "filename": "weblablib-0.5.4-py2-none-any.whl", "has_sig": false, "md5_digest": "f14df3b793a1f127dddcee8db5e23a73", "packagetype": "bdist_wheel", "python_version": "py2", "requires_python": null, "size": 37814, "upload_time": "2019-08-27T06:33:05", "url": "https://files.pythonhosted.org/packages/48/2b/ccf4c902b94d1cf1f3988f8445f14d47090200b8a265e396c0b5a76a07ee/weblablib-0.5.4-py2-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9965f5901e199a0bbbcbfaeba8e76acd", "sha256": "ad91e97ce5fb5cd3e9739ab7a9bbdcd777ff82d77df99e6256ea62a238c969f9" }, "downloads": -1, "filename": "weblablib-0.5.4-py3-none-any.whl", "has_sig": false, "md5_digest": "9965f5901e199a0bbbcbfaeba8e76acd", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 49757, "upload_time": "2019-08-27T06:33:07", "url": "https://files.pythonhosted.org/packages/4d/93/bd8a46f9f92b76011431ab9b60405af51ea3816983101ae0a1a79631d5a1/weblablib-0.5.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b6d81460398c345b750fe334ae034a8", "sha256": "9896bd43a6d665b5e0a34c376114cf6817deb2950fcd02fa25fcd4c5c63797f8" }, "downloads": -1, "filename": "weblablib-0.5.4.tar.gz", "has_sig": false, "md5_digest": "4b6d81460398c345b750fe334ae034a8", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 34073, "upload_time": "2019-08-27T06:33:08", "url": "https://files.pythonhosted.org/packages/e2/5e/59837d3781bb8cd020a6638189b57cce902512aeb86984600223ffa1ed59/weblablib-0.5.4.tar.gz" } ] }