{ "info": { "author": "Ricardo Ribeiro", "author_email": "ricardojvr@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Environment :: Web Environment", "Framework :: Django :: 2.0", "Intended Audience :: Developers", "Intended Audience :: End Users/Desktop", "Intended Audience :: Information Technology", "Intended Audience :: Science/Research", "Natural Language :: English", "Operating System :: MacOS :: MacOS X", "Operating System :: Microsoft :: Windows", "Operating System :: Unix", "Programming Language :: Python :: 3", "Topic :: Artistic Software", "Topic :: Games/Entertainment", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Browsers", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: CGI Tools/Libraries", "Topic :: Internet :: WWW/HTTP :: Dynamic Content :: Content Management System", "Topic :: Internet :: WWW/HTTP :: Site Management", "Topic :: Internet :: WWW/HTTP :: Site Management :: Link Checking", "Topic :: Internet :: WWW/HTTP :: WSGI", "Topic :: Internet :: WWW/HTTP :: WSGI :: Application", "Topic :: Internet :: WWW/HTTP :: WSGI :: Middleware", "Topic :: Internet :: WWW/HTTP :: WSGI :: Server", "Topic :: Multimedia :: Graphics :: 3D Rendering", "Topic :: Multimedia :: Graphics :: Capture :: Digital Camera", "Topic :: Multimedia :: Graphics :: Presentation", "Topic :: Multimedia :: Graphics :: Viewers", "Topic :: Multimedia :: Video :: Display", "Topic :: Scientific/Engineering :: Human Machine Interfaces", "Topic :: Scientific/Engineering :: Visualization", "Topic :: Software Development :: Build Tools", "Topic :: Software Development :: Libraries :: Application Frameworks", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: Software Development :: User Interfaces", "Topic :: Software Development :: Widget Sets" ], "description": "![Important](https://img.shields.io/badge/Important-Note-red.svg \"Screen\") \nIf you find this project useful, please, do not forget to ![star it](https://raw.githubusercontent.com/UmSenhorQualquer/pyforms/v1.0.beta/docs/imgs/start.png?raw=true \"Screen\") it.\n\n\n# Pyforms Web\n\nPyforms **Web** is a software layer, part of the Pyforms main library. This layer implements the execution of a Pyforms application in a web browser.\n\n![Diagram](https://raw.githubusercontent.com/UmSenhorQualquer/pyforms-web/v4/docs/source/_static/imgs/pyforms-layers-web.png \"Screen\")\n\n\n\n# Pyforms\n\n\n
\n\nPyforms is a Python 3 cross-enviroment framework that aims the boost the development productivity. The library provides an API in Python to develop applications that can be executed in Windows GUI mode, Web mode, or in Terminal mode.\n\n[More @ ![Diagram](https://raw.githubusercontent.com/UmSenhorQualquer/pyforms-web/v4/docs/source/_static/imgs/rtd.png)](https://pyforms.readthedocs.io)\n\n## Advantages\n* With a minimal API, interfaces are easily defined using a short Python code.\n* Avoid the constant switching between the GUI designers and the Python IDE.\n* It is designed to allow the coding of advanced functionalities with a minimal effort.\n* The code is organized in modules and prepared to be reused by other applications.\n* It makes the applications maintenance easier.\n* Turn the prototyping much easier and fast.\n* Due to its simplicity it has a low learning curve.\n\n## Installation\n\nCheck the documentation at [pyforms.readthedocs.org](http://pyforms.readthedocs.org) and [pyforms-web.readthedocs.org](http://pyforms-web.readthedocs.org)\n\n## Rationale behind the framework\n\nThe development of this library started with the necessity of allowing users with low programming skills to edit parameters from my python scripts.\nThe idea was to transform scripts which had already been developed into GUI applications with a low effort and in a short time.\n\nFor example in my computer vision applications in the majority of the times there were variables that had to be set manually in the scripts for each video, to adjust the thresholds, blobs sizes, and other parameters to the environment light conditions... To test each set of parameters the script had to be executed.\nWith GUI applications, users would be able to set the parameters using a GUI interface and visualize the results instantly without the need of restarting the script. That was the idea.\n\nAfter looking into the several python options for GUI interfaces, PyQt was the one that seemed the best tool for a fast development with the QtDesigner, but after a while developing in Qt, switching between the designer and the python IDE was becoming too costly in terms of time because the interfaces were constantly evolving.\n\nBeing a Django developer, I did get inspiration on it for this framework. In the [Django](https://www.djangoproject.com/) Models we just need to define the type of variables and their disposition in the form (in ModelAdminWidget) to generate a HTML form for data edition.\nFor the GUIs that I wanted to build in my python scripts, I would like to have the same simplicity, so I could focus on the algorithms and not on GUIs developing.\n\n\nThe result was the simplicity you can see in the example below:\n\n```python\nfrom pyforms.basewidget import BaseWidget\nfrom pyforms.controls import ControlFile\nfrom pyforms.controls import ControlText\nfrom pyforms.controls import ControlSlider\nfrom pyforms.controls import ControlPlayer\nfrom pyforms.controls import ControlButton\n\nfrom confapp import conf\n\nclass ComputerVisionAlgorithm(BaseWidget):\n\n UID = 'cva'\n TITLE = 'Computer vision algorithm'\n\n LAYOUT_POSITION = conf.ORQUESTRA_HOME\n\n ORQUESTRA_MENU = 'left'\n ORQUESTRA_MENU_ORDER = 10\n\n def __init__(self, *args, **kwargs):\n super().__init__('Computer vision algorithm example')\n\n\n #Definition of the forms fields\n self._videofile = ControlFile('Video')\n self._outputfile = ControlText('Results output file')\n self._threshold = ControlSlider('Threshold', default=114, minimum=0, maximum=255)\n self._blobsize = ControlSlider('Minimum blob size', default=110, minimum=100, maximum=2000)\n self._player = ControlPlayer('Player')\n self._runbutton = ControlButton('Run')\n\n #Define the function that will be called when a file is selected\n self._videofile.changed_event = self.__videoFileSelectionEvent\n #Define the event that will be called when the run button is processed\n self._runbutton.value = self.__runEvent\n #Define the event called before showing the image in the player\n self._player.process_frame_event = self.__process_frame\n\n #Define the organization of the Form Controls\n self._formset = [\n ('_videofile', '_outputfile'),\n '_threshold',\n ('_blobsize', '_runbutton'),\n '_player'\n ]\n\n\n def __videoFileSelectionEvent(self):\n \"\"\"\n When the videofile is selected instanciate the video in the player\n \"\"\"\n self._player.value = self._videofile.value\n\n def __process_frame(self, frame):\n \"\"\"\n Do some processing to the frame and return the result frame\n \"\"\"\n return frame\n\n def __runEvent(self):\n \"\"\"\n After setting the best parameters run the full algorithm\n \"\"\"\n pass\n\n```\n\nResult of the application running in a web browser:\n\n\n![ScreenShot](https://raw.githubusercontent.com/UmSenhorQualquer/pyforms-web/v4/docs/source/_static/imgs/web-example-computervisionalgorithm.png)\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://github.com/UmSenhorQualquer/pyforms-web", "keywords": "web development single-page-application pyforms", "license": "GNU GPLv3", "maintainer": "", "maintainer_email": "", "name": "PyForms-Web", "package_url": "https://pypi.org/project/PyForms-Web/", "platform": "", "project_url": "https://pypi.org/project/PyForms-Web/", "project_urls": { "Homepage": "https://github.com/UmSenhorQualquer/pyforms-web" }, "release_url": "https://pypi.org/project/PyForms-Web/4.1.5/", "requires_dist": [ "django-jfu-pyforms", "orquestra", "numpy", "opencv-python (~=3.4)", "django (>2.1)", "simplejson", "sorl-thumbnail", "dill", "filelock", "Pillow", "python-dateutil", "confapp" ], "requires_python": "", "summary": "Pyforms Web is Python 3 framework to create single-page web applications.", "version": "4.1.5" }, "last_serial": 5721123, "releases": { "4.0.7": [ { "comment_text": "", "digests": { "md5": "6a7a73f48b5f23357fa8f6d20c980ab5", "sha256": "4815d31e8d14789d8bd9d86a7d4a7aaaaaea13fd05042fa28a17297914fe62de" }, "downloads": -1, "filename": "PyForms_Web-4.0.7-py3-none-any.whl", "has_sig": false, "md5_digest": "6a7a73f48b5f23357fa8f6d20c980ab5", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1091376, "upload_time": "2018-08-09T14:41:00", "url": "https://files.pythonhosted.org/packages/0f/cc/e932d17b884b8058e660ba2f06053c8a93f978b950e8cbcc04a5358605fd/PyForms_Web-4.0.7-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "1f53af2784376f66215f3e8c8cfc5109", "sha256": "8cfb0d61eb3099ef38ea2a219c23cc76e56a93eda641355b184953a37ee3b753" }, "downloads": -1, "filename": "PyForms-Web-4.0.7.tar.gz", "has_sig": false, "md5_digest": "1f53af2784376f66215f3e8c8cfc5109", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50599, "upload_time": "2018-08-09T14:41:02", "url": "https://files.pythonhosted.org/packages/63/a2/de88c245d7fdecbf3cf1678f87870a4d3859f82624804667521550d1ab1f/PyForms-Web-4.0.7.tar.gz" } ], "4.1.0": [ { "comment_text": "", "digests": { "md5": "381e04467768da503d8b06541535368c", "sha256": "971aa9ba79af8ba8f0809c34dc00382dd936b141a7bbb8b8764a136ad0d06ed5" }, "downloads": -1, "filename": "PyForms_Web-4.1.0-py3-none-any.whl", "has_sig": false, "md5_digest": "381e04467768da503d8b06541535368c", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1500308, "upload_time": "2019-05-03T12:18:02", "url": "https://files.pythonhosted.org/packages/38/50/0e34aa9795f2bbff346e3190d204a6375bc8543d730f273e39207b892575/PyForms_Web-4.1.0-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cd02f98d3e99a9f17772c483314c4cc4", "sha256": "a78b3b06d0bf7dc403a2e14efa1d1403bd61476087fd0731007598eee9b2c1d5" }, "downloads": -1, "filename": "PyForms-Web-4.1.0.tar.gz", "has_sig": false, "md5_digest": "cd02f98d3e99a9f17772c483314c4cc4", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57190, "upload_time": "2019-05-03T12:18:06", "url": "https://files.pythonhosted.org/packages/2d/bb/11657df856b2b378e9cd3a62f64a6f1e1065ea5fd14ccf8d269d6860b265/PyForms-Web-4.1.0.tar.gz" } ], "4.1.1": [ { "comment_text": "", "digests": { "md5": "2cce4488400bd1619964893c818eda30", "sha256": "14b3f3f75926b964b30ce26f4c1aef8a9f3394cb97570b22f4aa5682798180cb" }, "downloads": -1, "filename": "PyForms_Web-4.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "2cce4488400bd1619964893c818eda30", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1500709, "upload_time": "2019-05-28T12:54:27", "url": "https://files.pythonhosted.org/packages/11/6f/33fb03d30b348ba4653dd16ee4c199587e2de372462038193b849b74b319/PyForms_Web-4.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "03206f91590d4a6c092a42adbfcb59b6", "sha256": "3e4eb54db95003bc3e029427712efe5a3187f83ca2c95feed8f43a5826d6a46f" }, "downloads": -1, "filename": "PyForms-Web-4.1.1.tar.gz", "has_sig": false, "md5_digest": "03206f91590d4a6c092a42adbfcb59b6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57578, "upload_time": "2019-05-28T12:54:30", "url": "https://files.pythonhosted.org/packages/87/4c/1a56763aefe76a1da449d1cce65a7248d511a4b5f65b19eae442116aee57/PyForms-Web-4.1.1.tar.gz" } ], "4.1.2": [ { "comment_text": "", "digests": { "md5": "e4cac9e5c29865d290132eb1615f1ca3", "sha256": "9e85f4a5972dbde4a3ca875ac6d7712bc9292b4fa6b2942ef8e7da192d8fae59" }, "downloads": -1, "filename": "PyForms_Web-4.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "e4cac9e5c29865d290132eb1615f1ca3", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1500721, "upload_time": "2019-05-28T12:56:14", "url": "https://files.pythonhosted.org/packages/9c/d7/addac15f9712be0761293bdd2ee99de63db014f301131d35c21bc39e869d/PyForms_Web-4.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "cef8ef6e14738ffe8c2aa23918a84450", "sha256": "281b7fce690994d296b908f4af12d85312b6d33b37036ad427d8c338a57bf3cc" }, "downloads": -1, "filename": "PyForms-Web-4.1.2.tar.gz", "has_sig": false, "md5_digest": "cef8ef6e14738ffe8c2aa23918a84450", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57583, "upload_time": "2019-05-28T12:56:16", "url": "https://files.pythonhosted.org/packages/e1/ed/66768b403db5f4f2b570a206ad50e84f559e9c7276196f065c0171089f87/PyForms-Web-4.1.2.tar.gz" } ], "4.1.3": [ { "comment_text": "", "digests": { "md5": "2fd3e23639e8ebac6f4ee15e743a418a", "sha256": "951badf593065f56cf1550e52c2c451aa0d23de02498ba3477b85e6192fbd4ba" }, "downloads": -1, "filename": "PyForms_Web-4.1.3-py3-none-any.whl", "has_sig": false, "md5_digest": "2fd3e23639e8ebac6f4ee15e743a418a", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1501083, "upload_time": "2019-05-28T13:07:10", "url": "https://files.pythonhosted.org/packages/4f/15/d93647f2c78c4470349aa86ec43a8c5d81240b4e2650ee242274f7833f8e/PyForms_Web-4.1.3-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "9520dada6185d4d9c681de2f9e16cbed", "sha256": "3dd428c9566d4f94dc62bede8a61f5176c9e4d965e6a00ee0d849d469058d7dc" }, "downloads": -1, "filename": "PyForms-Web-4.1.3.tar.gz", "has_sig": false, "md5_digest": "9520dada6185d4d9c681de2f9e16cbed", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 57602, "upload_time": "2019-05-28T13:07:13", "url": "https://files.pythonhosted.org/packages/05/5c/1115036724b9a6ac326fd447b6270843e48d1601c8670bb84b002934da24/PyForms-Web-4.1.3.tar.gz" } ], "4.1.4": [ { "comment_text": "", "digests": { "md5": "3356a9c054c6e404b6be4190d3eaaabf", "sha256": "5956137f558ebecbc051a5d97ae88fa07ae56a7fb702f3c8de5d198f830a7f2a" }, "downloads": -1, "filename": "PyForms_Web-4.1.4-py3-none-any.whl", "has_sig": false, "md5_digest": "3356a9c054c6e404b6be4190d3eaaabf", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1638050, "upload_time": "2019-08-20T12:39:52", "url": "https://files.pythonhosted.org/packages/dd/f4/291adf8c0bbf80b840fc42b1adaa74f23b1b69c15757cf4b769219deb2c7/PyForms_Web-4.1.4-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "a09016f27cd302491db9805002cd5256", "sha256": "38c20fb95124b0d9df5fc79084dfc5497f923ad0f63b7ff0ce4437700ac6f7a7" }, "downloads": -1, "filename": "PyForms-Web-4.1.4.tar.gz", "has_sig": false, "md5_digest": "a09016f27cd302491db9805002cd5256", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56162, "upload_time": "2019-08-20T12:39:54", "url": "https://files.pythonhosted.org/packages/4a/b1/bc3cbf30d3a390eee29ac60626f8ee26b8e53032eac6e35e987c90cd5ca6/PyForms-Web-4.1.4.tar.gz" } ], "4.1.5": [ { "comment_text": "", "digests": { "md5": "f6674cecd69e4a5fc377ed0374d07032", "sha256": "765b14b709d88c2aeca15ad648508b1c2870b3b8c3a04a1cb2ae809ae371f819" }, "downloads": -1, "filename": "PyForms_Web-4.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "f6674cecd69e4a5fc377ed0374d07032", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1638174, "upload_time": "2019-08-23T14:37:13", "url": "https://files.pythonhosted.org/packages/8d/3f/284f24ca33e2c0e07408ee7b4c5b30b215c8632980f9c6f047770658ffeb/PyForms_Web-4.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6338545aa61e0b74edb11a4773a496ef", "sha256": "65d5b6bb47f686c83290fabc8a6cc6460ee5ce559791aca8109e228770cb207d" }, "downloads": -1, "filename": "PyForms-Web-4.1.5.tar.gz", "has_sig": false, "md5_digest": "6338545aa61e0b74edb11a4773a496ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56190, "upload_time": "2019-08-23T14:37:14", "url": "https://files.pythonhosted.org/packages/73/60/f7d45975a51447e72eafb58b9a596ab201d34dc76d057b66ddc56e76a447/PyForms-Web-4.1.5.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "f6674cecd69e4a5fc377ed0374d07032", "sha256": "765b14b709d88c2aeca15ad648508b1c2870b3b8c3a04a1cb2ae809ae371f819" }, "downloads": -1, "filename": "PyForms_Web-4.1.5-py3-none-any.whl", "has_sig": false, "md5_digest": "f6674cecd69e4a5fc377ed0374d07032", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": null, "size": 1638174, "upload_time": "2019-08-23T14:37:13", "url": "https://files.pythonhosted.org/packages/8d/3f/284f24ca33e2c0e07408ee7b4c5b30b215c8632980f9c6f047770658ffeb/PyForms_Web-4.1.5-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "6338545aa61e0b74edb11a4773a496ef", "sha256": "65d5b6bb47f686c83290fabc8a6cc6460ee5ce559791aca8109e228770cb207d" }, "downloads": -1, "filename": "PyForms-Web-4.1.5.tar.gz", "has_sig": false, "md5_digest": "6338545aa61e0b74edb11a4773a496ef", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 56190, "upload_time": "2019-08-23T14:37:14", "url": "https://files.pythonhosted.org/packages/73/60/f7d45975a51447e72eafb58b9a596ab201d34dc76d057b66ddc56e76a447/PyForms-Web-4.1.5.tar.gz" } ] }