{ "info": { "author": "Martijn Arts", "author_email": "m.arts@gmx.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 3 - Alpha", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7" ], "description": "# dasher\nGenerate interactive plotly dash dashboards in an instant!\n\n## Installation\n\nInstall the module using pip:\n\n pip install -U dasher\n\n## Usage\nCreating a simple, interactive dashboard with a nice layout is as easy as this:\n\n from dasher import Dasher\n import dash_html_components as html\n\n app = Dasher(__name__, title=\"My first dashboard\")\n\n\n @app.callback(\n \"My first callback\",\n \"Try out the widgets!\",\n _labels=[\"Greeting\", \"Place\"],\n text=\"Hello\",\n place=[\"World\", \"Universe\"],\n )\n def my_callback(text, place):\n msg = \"{} {}!\".format(text, place)\n return [html.H1(msg)]\n\n\n if __name__ == \"__main__\":\n app.run_server(debug=True)\n\nThe resulting dashboard looks like this:\n![Hello World dashboard](resources/hello_world.gif)\n\nThe code for this dashboard can be found in ``examples/readme_example.py``.\n\n## Concept\nThe idea behind dasher is to create auto-generated interactive \n[ploty dash](https://dash.plot.ly/) dashboards as easy as using \n[ipywidgets ``interact``](https://ipywidgets.readthedocs.io/en/stable/examples/Using%20Interact.html)\nin jupyter notebooks. That is, by decorating a user defined callback function! Here,\nthe keyword arguments of the decorator define the interactive widgets and the callback \nfunction must return what you want to show in the content container in the dashboard. \n\nDasher provides a simple default layout consisting of a header with the dashboard's \ntitle, a widget container providing the interactivity and the content container. \nThe only thing you need to do in the callback function is to process the input arguments\n(which correspond to the widgets) and to return a list of the plotly dash components \nthat you want to appear in the content container!\n\nThe interactive widgets are automatically generated based on the type of the keyword \narguments of the decorator. For example, a string will result in an input field and \na list will become a dropdown box. Dasher supports the same widget abbreviations as\n[ipywidgets](https://ipywidgets.readthedocs.io/en/stable/examples/Using%20Interact.html#Widget-abbreviations)\n``interact``.\n\nSince the layout and the widget connections to the callback are taken care of by\ndasher, you can concentrate on what you to display on the dashboard. As a result,\ngenerating a stunning interactive visualization becomes a matter of minutes! \n\n### Supported widgets\nThe type of a keyword argument of the ``callback`` decorator determines which widget\nwill be generated. All supported types and the resulting widget (dash component) \nare:\n* ``bool``: Radio item (``dash_bootstrap_components.RadioItem``)\n* ``str``: Input field (``dash_bootstrap_components.Input``)\n* ``int``: Slider, integer (``dash_core_components.Slider``)\n* ``float``: Slider, float (``dash_core_components.Slider``)\n* ``tuple``: Slider, (``dash_core_components.Slider``) \n Can be ``(min, max)`` or ``(min, max, step)``. The type of all the tuple entries\n must either be ``int`` or ``float``, which determines whether an integer or\n float slider will be generated.\n* ``collections.Iterable``: Dropdown menu (``dash_core_components.Dropdown``) \n Typically a ``list`` or anything iterable, which is not a ``tuple``.\n* ``collections.Mapping``: Dropdown menu (``dash_core_components.Dropdown``) \n Typically a ``dict``. A mapping will use the keys as labels shown in the\n dropdown menu, while the values will be used as arguments to the callback\n function.\n* ``dash.development.base_component.Component``: custom dash component \n Any dash component will be used as-is. This allows full\n customization of a widget if desired. The components ``value`` will be used\n as argument of the callback function.\n\n### Multiple callbacks\n``dasher`` supports multiple callbacks and will autmatically create multiple tabs\nfor you. See ``examples/plot_demo.py`` for an example!\n\n![Multiple callbacks as tabs](resources/tabs.gif)\n\n### Widget demo\nFor a demo of all supported automatic widgets and an example how to use custom\ncomponents, see ``examples/widget_demo.py``.\n\n## Authors\n[Martijn Arts](https://github.com/mfaafm)\n\n## License\n[MIT license](LICENSE)\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/mfaafm/dasher", "keywords": "dashboard plotly dash prototyping fast", "license": "MIT", "maintainer": "", "maintainer_email": "", "name": "dasher", "package_url": "https://pypi.org/project/dasher/", "platform": "", "project_url": "https://pypi.org/project/dasher/", "project_urls": { "Homepage": "https://github.com/mfaafm/dasher" }, "release_url": "https://pypi.org/project/dasher/0.1.2/", "requires_dist": [ "dash", "dash-core-components", "dash-html-components", "dash-bootstrap-components (>=0.6)" ], "requires_python": ">=3", "summary": "Generate interactive plotly dash dashboards in an instant", "version": "0.1.2" }, "last_serial": 5542710, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "417b66fc4953f9f97629b10c45e7f0ba", "sha256": "c129e7b606eddc542f5edaa1d4ca5f080db4e6f79300c8f28737b79fe1d00ade" }, "downloads": -1, "filename": "dasher-0.1-py3-none-any.whl", "has_sig": false, "md5_digest": "417b66fc4953f9f97629b10c45e7f0ba", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 8728, "upload_time": "2019-04-03T23:20:05", "url": "https://files.pythonhosted.org/packages/36/ab/5b241c586d79c7832a6f3f06b5e131c63a4d3fb8e45c358a7242d8a91626/dasher-0.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "62642f1adc9d3942fa14063260faded6", "sha256": "cc9e55190645c09b5895d57c1b9f640b3e5091f5348c5ddec4fbdc947d80ff03" }, "downloads": -1, "filename": "dasher-0.1.tar.gz", "has_sig": false, "md5_digest": "62642f1adc9d3942fa14063260faded6", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 22732, "upload_time": "2019-04-03T23:20:07", "url": "https://files.pythonhosted.org/packages/1f/46/934c2ec97ba8ebea76b17aa278c67da4123afd13d2ac9105fc15b09e201f/dasher-0.1.tar.gz" } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "cc7815f59254d8033fb3b5a4cf132d07", "sha256": "b5b5afcae87d99268f2fa33ff282563dccf176762bdb3a49f7daafa79e7313d0" }, "downloads": -1, "filename": "dasher-0.1.1-py3-none-any.whl", "has_sig": false, "md5_digest": "cc7815f59254d8033fb3b5a4cf132d07", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 11246, "upload_time": "2019-06-10T18:04:02", "url": "https://files.pythonhosted.org/packages/83/e7/a22c88bebae9136e1b86d1b35f030d58efebf512aab3333d1e04956b9b8c/dasher-0.1.1-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "4b2a19939b9472b4ac3fc7d9bc70dd34", "sha256": "a5c876a74ed03da409637d2784c10f17142d0ab7aadca24254e7327ee7ae46a6" }, "downloads": -1, "filename": "dasher-0.1.1.tar.gz", "has_sig": false, "md5_digest": "4b2a19939b9472b4ac3fc7d9bc70dd34", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 25850, "upload_time": "2019-06-10T18:04:04", "url": "https://files.pythonhosted.org/packages/00/ca/895e908b8a4c95723b59b6816b85c2d69b3912dd9cc748483ade21947ab0/dasher-0.1.1.tar.gz" } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "d682dc7f9840ba9b36399b0f920ab5ac", "sha256": "f3be42e246132b0d24580bc9861eafb23b550ba60bf82a5f01add3693d8cde8a" }, "downloads": -1, "filename": "dasher-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d682dc7f9840ba9b36399b0f920ab5ac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 11622, "upload_time": "2019-07-16T21:09:33", "url": "https://files.pythonhosted.org/packages/a9/64/c9bcbdc052aaffeec395dbb9fada060a0ffc6ab29f4c5e4eb65591b8319f/dasher-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f06a0a65693819a142f736da41d5f1be", "sha256": "e1ef257fc9235bf5960594d23a1fcfb14080e7caae6ed3b54a25727bac3f8de3" }, "downloads": -1, "filename": "dasher-0.1.2.tar.gz", "has_sig": false, "md5_digest": "f06a0a65693819a142f736da41d5f1be", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 25929, "upload_time": "2019-07-16T21:09:35", "url": "https://files.pythonhosted.org/packages/d8/98/59caf9a4bb039e68b515dd85021935ae42eb0d56601d56f191b8df6f7dce/dasher-0.1.2.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "d682dc7f9840ba9b36399b0f920ab5ac", "sha256": "f3be42e246132b0d24580bc9861eafb23b550ba60bf82a5f01add3693d8cde8a" }, "downloads": -1, "filename": "dasher-0.1.2-py3-none-any.whl", "has_sig": false, "md5_digest": "d682dc7f9840ba9b36399b0f920ab5ac", "packagetype": "bdist_wheel", "python_version": "py3", "requires_python": ">=3", "size": 11622, "upload_time": "2019-07-16T21:09:33", "url": "https://files.pythonhosted.org/packages/a9/64/c9bcbdc052aaffeec395dbb9fada060a0ffc6ab29f4c5e4eb65591b8319f/dasher-0.1.2-py3-none-any.whl" }, { "comment_text": "", "digests": { "md5": "f06a0a65693819a142f736da41d5f1be", "sha256": "e1ef257fc9235bf5960594d23a1fcfb14080e7caae6ed3b54a25727bac3f8de3" }, "downloads": -1, "filename": "dasher-0.1.2.tar.gz", "has_sig": false, "md5_digest": "f06a0a65693819a142f736da41d5f1be", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3", "size": 25929, "upload_time": "2019-07-16T21:09:35", "url": "https://files.pythonhosted.org/packages/d8/98/59caf9a4bb039e68b515dd85021935ae42eb0d56601d56f191b8df6f7dce/dasher-0.1.2.tar.gz" } ] }