{ "info": { "author": "Kirill Kouzoubov", "author_email": "kirill888@gmail.com", "bugtrack_url": null, "classifiers": [ "Development Status :: 5 - Production/Stable", "Framework :: Jupyter", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3.6", "Programming Language :: Python :: 3.7", "Programming Language :: Python :: 3.8" ], "description": "===============\njupyter-ui-poll\n===============\n\n.. image:: https://mybinder.org/badge_logo.svg\n :target: `run it`_\n\nBlock Jupyter cell execution while interacting with widgets.\n\nThis library is for people familiar with ``ipywidgets`` who want to solve the\nfollowing problem:\n\n1. Display User Interface in Jupyter [#]_ using ``ipywidgets`` [#]_ or similar\n2. Wait for data to be entered (this step is surprisingly non-trivial to implement)\n3. Use entered data in cells below\n\nYou want to implement a notebook like the one below\n\n.. code-block:: python\n\n # cell 1\n ui = make_ui()\n display(ui)\n data = ui.wait_for_data()\n\n # cell 2\n do_things_with(data)\n\n # cell 3.\n do_more_tings()\n\nAnd you want to be able to execute ``Cells -> Run All`` menu option and still get correct output.\n\nThis library assists in implementing your custom ``ui.wait_for_data()`` poll loop.\nIf you have tried implementing such workflow in the past you'll know that it is\nnot that simple. If you haven't, see `Technical Details`_ section below for an\nexplanation on why it's hard and how ``jupyter-ui-poll`` solves it.\n\nQuick, self contained example:\n\n.. code-block:: python\n\n import time\n from ipywidgets import Button\n from jupyter_ui_poll import ui_events\n\n # Set up simple GUI, button with on_click callback\n # that sets ui_done=True and changes button text\n ui_done = False\n def on_click(btn):\n global ui_done\n ui_done = True\n btn.description = '\ud83d\udc4d'\n\n btn = Button(description='Click Me')\n btn.on_click(on_click)\n display(btn)\n\n # Wait for user to press the button\n with ui_events() as poll:\n while ui_done is False:\n poll(10) # React to UI events (upto 10 at a time)\n print('.', end='')\n time.sleep(0.1)\n print('done')\n\nFor a more detailed tutorial see `Example notebook`_, you can also `run it`_ right now using awesome `Binder`_ service.\n\nInstallation\n============\n\nThis library requires Python 3.6 or greater.\n\n\n.. code-block::\n\n pip install jupyter-ui-poll\n # or with conda/mamba\n conda install -c kirill-odc jupyter-ui-poll\n\n\nTechnical Details\n=================\n\nJupyter widgets (``ipywidgets``) provide an excellent foundation to develop\ninteractive data investigation apps directly inside Jupyter notebook or Jupyter\nlab environment. Jupyter is great at displaying data and ``ipywidgets`` provide\na mechanism to get input from the user in a more convenient way than entering or\nchanging Python code inside a Jupyter cell. Developer can construct an\ninteractive user interface often used to parameterise information display or\nother kinds of computation.\n\nInteractivity is handled with callbacks, ``ipywidget`` GUI is HTML based, user\nactions, like clicking a button, trigger JavaScript events that are then\ntranslated in to calls to Python code developer registered with the library. It\nis a significantly different, asynchronous, paradigm than your basic Jupyter\nnotebook which operates in a straightforward blocking, linear fashion. It is not\npossible to display a Modal UI that would block execution of other Jupyter cells\nuntil needed information is supplied by the user.\n\n``jupyter-ui-poll`` allows one to implement a \"blocking GUI\" inside a Jupyter\nenvironment. It is a common requirement to query user for some non-trivial input\nparameters that are easier to enter via GUI rather than code. User input happens\nat the top of the notebook, then that data is used in cells below. While this is\npossible to achieve directly with ``ipywidgets`` it requires teaching the user\nto enter all the needed data before moving on to execute the cells below. This\nis bound to cause some confusion and also breaks ``Cells -> Run All`` functionality.\n\nAn obvious solution is to keep running in a loop until all the needed data was\nentered by the user.\n\n.. code-block:: python\n\n display(app.make_ui())\n while not app.have_all_the_data():\n time.sleep(0.1)\n\nA naive version of the code above does not work. This is because no widget\nevents are being processed while executing code inside a Jupyter cell. Callbacks\nyou have registered with the widget library won't get a chance to run and so\nstate of ``app.have_all_the_data()`` won't ever change. \"Execute code inside\nJupyter cell\" is just another event being processed by the IPython kernel, and\nonly one event is executed at a time. One could ask IPython kernel to process\nmore events by calling ``kernel.do_one_iteration()`` in the poll loop. This\nkinda works, callbacks will be called as input is entered, but IPython will also\nprocess \"execute cell\" events, so ``Cells -> Run All`` scenario will still be\nbroken, as code in lower cells will be executed before the data it operates on\nbecomes available.\n\nThis library hooks into IPython internal machinery to selectively execute events\nin a polling fashion, delaying code cell execution events until after\ninteractive part is over.\n\nBasic idea was copied from ``ipython_blocking`` [#]_ project:\n\n1. Overwrite ``execute_request`` handler in IPython kernel temporarily\n2. Call ``kernel.do_one_iteration()`` in a polling fashion until exit conditions are met\n3. Reinstate default handler for ``execute_request``\n4. Replay code cell execution events cached by custom handler taking care of\n where output goes, and being careful about exception handling\n\n\n.. [#] https://jupyter.org/\n.. [#] https://github.com/jupyter-widgets/ipywidgets\n.. [#] https://github.com/kafonek/ipython_blocking\n\n.. _Example notebook: notebooks/Examples.ipynb\n.. _run it: https://mybinder.org/v2/gh/kirill888/jupyter-ui-poll/develop?filepath=notebooks%2FExamples.ipynb\n.. _Binder: https://mybinder.org/\n\n\n", "description_content_type": "text/x-rst", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/kirill888/jupyter-ui-poll", "keywords": "jupyter,ipywidgets", "license": "MIT License", "maintainer": "", "maintainer_email": "", "name": "jupyter-ui-poll", "package_url": "https://pypi.org/project/jupyter-ui-poll/", "platform": "any", "project_url": "https://pypi.org/project/jupyter-ui-poll/", "project_urls": { "Bug Reporting": "https://github.com/kirill888/jupyter-ui-poll/issues", "Documentation": "https://jupyter-ui-poll.readthedocs.io/en/latest/", "Homepage": "https://github.com/kirill888/jupyter-ui-poll" }, "release_url": "https://pypi.org/project/jupyter-ui-poll/0.2.1/", "requires_dist": [ "ipython", "tornado", "pyzmq", "wheel ; extra == 'dev'", "jupyter ; extra == 'dev'", "sphinx ; extra == 'docs'", "sphinx-autodoc-typehints ; extra == 'docs'", "sphinx-rtd-theme ; extra == 'docs'" ], "requires_python": ">=3.6", "summary": "Block jupyter cell execution while interacting with widgets", "version": "0.2.1", "yanked": false, "yanked_reason": null }, "last_serial": 11674478, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "a740d4741a5726559b6359765760c505", "sha256": "eea5c5376c38e2d6e62c32f0e077832cf1f7f72e0df9bb64db4e45de5a1e5cc1" }, "downloads": -1, "filename": "jupyter_ui_poll-0.0.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "a740d4741a5726559b6359765760c505", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">= 3.6", "size": 3609, "upload_time": "2019-09-22T11:23:30", "upload_time_iso_8601": "2019-09-22T11:23:30.226044Z", "url": "https://files.pythonhosted.org/packages/b3/c0/3922a8899a54904071964688613e5affa4274e9e6a445dc86f1c1a8c6692/jupyter_ui_poll-0.0.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bf4d19118d4329edde308766e32cd801", "sha256": "4ac9ff5e3ac644d2f1300a85174dc3ac27b26961f554eae22725020aa0e5eb06" }, "downloads": -1, "filename": "jupyter-ui-poll-0.0.1.tar.gz", "has_sig": false, "md5_digest": "bf4d19118d4329edde308766e32cd801", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.6", "size": 2161, "upload_time": "2019-09-22T11:23:32", "upload_time_iso_8601": "2019-09-22T11:23:32.751952Z", "url": "https://files.pythonhosted.org/packages/d0/2e/cdd500fdfeff01dc3bc0dac20a3bdc91653ce1d328c19c2e1596a9cc748c/jupyter-ui-poll-0.0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.0": [ { "comment_text": "", "digests": { "md5": "4d610e6d377f33eebfc0a717f5571454", "sha256": "297c49af1b6f76b197623073681f1a5f99e4848fafd246b3e0b1d8806f38bd95" }, "downloads": -1, "filename": "jupyter_ui_poll-0.1.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4d610e6d377f33eebfc0a717f5571454", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">= 3.5", "size": 6420, "upload_time": "2019-10-19T13:47:39", "upload_time_iso_8601": "2019-10-19T13:47:39.500586Z", "url": "https://files.pythonhosted.org/packages/9d/aa/c13150815960b2f00bdb91eb187528b621e620ab7753fe4faf838f8a9971/jupyter_ui_poll-0.1.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "e8f1e0de9a4139ceb306203bd7478a23", "sha256": "9b663585230a9f3952c204ab1fd415e31b5d32771f08bc9845b00674a2f66168" }, "downloads": -1, "filename": "jupyter-ui-poll-0.1.0.tar.gz", "has_sig": false, "md5_digest": "e8f1e0de9a4139ceb306203bd7478a23", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.5", "size": 5400, "upload_time": "2019-10-19T13:47:41", "upload_time_iso_8601": "2019-10-19T13:47:41.553895Z", "url": "https://files.pythonhosted.org/packages/0f/08/2985cb15b0f6024e3b39388bc71b67f689fc0ea61a0d42e1ef908023d212/jupyter-ui-poll-0.1.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.1": [ { "comment_text": "", "digests": { "md5": "7241e918bc2f06f8e94decb373cda7c9", "sha256": "a9bad0ca13c51f62cb573c38c8bb8f6bacd5b4b7d3c9663a2160c173d97b8507" }, "downloads": -1, "filename": "jupyter_ui_poll-0.1.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "7241e918bc2f06f8e94decb373cda7c9", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">= 3.5", "size": 6581, "upload_time": "2019-10-26T10:53:43", "upload_time_iso_8601": "2019-10-26T10:53:43.406211Z", "url": "https://files.pythonhosted.org/packages/40/33/7ee27623a8ddba7135d2b7ed47effa82cca90956837ef7f5ed3ca9c0c6ff/jupyter_ui_poll-0.1.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "bc32a71d3afd9e94e2c7f4c9a17d5fe6", "sha256": "2224c1e130afcb6cc1e9ef57e8ced79ee8dc057761ad6474829f9ddb06cf4c12" }, "downloads": -1, "filename": "jupyter-ui-poll-0.1.1.tar.gz", "has_sig": false, "md5_digest": "bc32a71d3afd9e94e2c7f4c9a17d5fe6", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.5", "size": 5560, "upload_time": "2019-10-26T10:53:45", "upload_time_iso_8601": "2019-10-26T10:53:45.401130Z", "url": "https://files.pythonhosted.org/packages/1b/76/d98fd38bee7db70900de52e1105458b1e1f2b3dfca2c5a98a9c7ae1261b8/jupyter-ui-poll-0.1.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.2": [ { "comment_text": "", "digests": { "md5": "42794791f7113efa72ce52d535da22a0", "sha256": "1c0a22149ef8893706abce3d8d43e5cbd9a9590573649f6ad13b8555f3f98925" }, "downloads": -1, "filename": "jupyter_ui_poll-0.1.2-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "42794791f7113efa72ce52d535da22a0", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">= 3.5", "size": 6591, "upload_time": "2020-01-05T06:40:33", "upload_time_iso_8601": "2020-01-05T06:40:33.523490Z", "url": "https://files.pythonhosted.org/packages/fc/4d/f7cb8ea5bad31fa68dfb689c9fa51e0ffa8ed08f4e07c3d3acac005f3506/jupyter_ui_poll-0.1.2-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "f52345bc11e43ad0e9a45182c1268c43", "sha256": "191cddaf82ec5b8e466528f0c654fbc178ddeb58d396f0dd826a5801a5f0f16b" }, "downloads": -1, "filename": "jupyter-ui-poll-0.1.2.tar.gz", "has_sig": false, "md5_digest": "f52345bc11e43ad0e9a45182c1268c43", "packagetype": "sdist", "python_version": "source", "requires_python": ">= 3.5", "size": 5566, "upload_time": "2020-01-05T06:40:34", "upload_time_iso_8601": "2020-01-05T06:40:34.885630Z", "url": "https://files.pythonhosted.org/packages/50/33/8a9f0e3da0dcba9b737039cf3808ebdeee4770e6e0c80ee41352bf1a75a0/jupyter-ui-poll-0.1.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.1.3": [ { "comment_text": "", "digests": { "md5": "62ba014743cc7e9de637d882f165ab96", "sha256": "70cf391eadb9b6175bea18e798ab6e26d5cf9667945235f35b5968bca31a8ee5" }, "downloads": -1, "filename": "jupyter_ui_poll-0.1.3-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "62ba014743cc7e9de637d882f165ab96", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.5", "size": 6610, "upload_time": "2021-09-04T04:39:24", "upload_time_iso_8601": "2021-09-04T04:39:24.883767Z", "url": "https://files.pythonhosted.org/packages/ab/fd/bff6e1633f9724975ed4b2b721b0c6b64fb35b0bf1a9551637d268d5f3de/jupyter_ui_poll-0.1.3-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "ed02971f7b3be1195ec280ddd1477159", "sha256": "b8a30d13f07699683ab49adcbfe737598d1a0ae0447e5db1a76687caf5bffe55" }, "downloads": -1, "filename": "jupyter-ui-poll-0.1.3.tar.gz", "has_sig": false, "md5_digest": "ed02971f7b3be1195ec280ddd1477159", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.5", "size": 6522, "upload_time": "2021-09-04T04:39:25", "upload_time_iso_8601": "2021-09-04T04:39:25.862693Z", "url": "https://files.pythonhosted.org/packages/af/d5/9029e12bbfe123479f7dc4eb8bfe5af85271cab9582ca3ea3db80fad9a14/jupyter-ui-poll-0.1.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "ceacf03f1a021c335296bb3014c2a650", "sha256": "b649e853f81e9435cfa1088b533f7a8fce5d0a6713f1813b6cfb9d2d05c4bd95" }, "downloads": -1, "filename": "jupyter_ui_poll-0.2.0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "ceacf03f1a021c335296bb3014c2a650", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 8936, "upload_time": "2021-09-19T09:59:18", "upload_time_iso_8601": "2021-09-19T09:59:18.290783Z", "url": "https://files.pythonhosted.org/packages/34/cd/123b16e7643938f6caa8ff827ae42c91531160bb34619265e338e558d9f1/jupyter_ui_poll-0.2.0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "524261ef51b2b3cc8700e24ea1aaee4b", "sha256": "2a273e566525b9d683fbb70050a77043aa4cd58b0c5f6d2c13b453db524bd66c" }, "downloads": -1, "filename": "jupyter-ui-poll-0.2.0.tar.gz", "has_sig": false, "md5_digest": "524261ef51b2b3cc8700e24ea1aaee4b", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9596, "upload_time": "2021-09-19T09:59:19", "upload_time_iso_8601": "2021-09-19T09:59:19.695673Z", "url": "https://files.pythonhosted.org/packages/51/67/7443c9630f89fb3e16002aa026560247bcba75ee8b97a9f1bc53e435e6fd/jupyter-ui-poll-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0a0": [ { "comment_text": "", "digests": { "md5": "e32fec7ffbd2722168f59177f389fa60", "sha256": "6fd562396e0b8ef5b34882237e76010220634770d7c711685cdf0049623740fa" }, "downloads": -1, "filename": "jupyter_ui_poll-0.2.0a0-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "e32fec7ffbd2722168f59177f389fa60", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 6899, "upload_time": "2021-09-04T05:32:15", "upload_time_iso_8601": "2021-09-04T05:32:15.962029Z", "url": "https://files.pythonhosted.org/packages/8c/f6/ea5dd4193e7be28498ae81b6a6f2423124c9100d4b3b7ffec4e0a3436186/jupyter_ui_poll-0.2.0a0-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "0ef908e02e36ebf80cddde3a51b00ab8", "sha256": "8724d6661a6253be515a1ee6d8659db6cbadcd04c5ff12d97c019d9bb0f09286" }, "downloads": -1, "filename": "jupyter-ui-poll-0.2.0a0.tar.gz", "has_sig": false, "md5_digest": "0ef908e02e36ebf80cddde3a51b00ab8", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 6800, "upload_time": "2021-09-04T05:32:17", "upload_time_iso_8601": "2021-09-04T05:32:17.270930Z", "url": "https://files.pythonhosted.org/packages/ef/ec/29f3d9fc099af01c762a5f539ec4e3c9d7c0b184765f7198988ea7ea9346/jupyter-ui-poll-0.2.0a0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0a1": [ { "comment_text": "", "digests": { "md5": "4b1d6699cf7e69aa8f1b644726d35c1e", "sha256": "7359ccf54e8813a02b526ec0de10453b0b1983128d12a2f28cf4f0f2194c205c" }, "downloads": -1, "filename": "jupyter_ui_poll-0.2.0a1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "4b1d6699cf7e69aa8f1b644726d35c1e", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 8256, "upload_time": "2021-09-18T05:24:28", "upload_time_iso_8601": "2021-09-18T05:24:28.459373Z", "url": "https://files.pythonhosted.org/packages/39/d0/7fd146da3c5948901dac436b678dbc4b9c29f265c7d775f2d64f146c6c45/jupyter_ui_poll-0.2.0a1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "8f9e082ccaf4e5e29b11acf80558f72a", "sha256": "e97a544bde8f29f215dfce612d90da028fa35401c550ee4952e053aebac3a05d" }, "downloads": -1, "filename": "jupyter-ui-poll-0.2.0a1.tar.gz", "has_sig": false, "md5_digest": "8f9e082ccaf4e5e29b11acf80558f72a", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 8790, "upload_time": "2021-09-18T05:24:29", "upload_time_iso_8601": "2021-09-18T05:24:29.594045Z", "url": "https://files.pythonhosted.org/packages/0a/19/ad68102cd09dd845599dc886ec562c12fec4563dffb4a0f9cd1c7032d375/jupyter-ui-poll-0.2.0a1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "53d5749ff0e7b36c0b403d6bf8305fe1", "sha256": "60d995aa9d98c2a9edf6f3d5ec7739c19df3b648e5b7eef49eebe96ab0984ea0" }, "downloads": -1, "filename": "jupyter_ui_poll-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "53d5749ff0e7b36c0b403d6bf8305fe1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 8958, "upload_time": "2021-10-09T10:12:41", "upload_time_iso_8601": "2021-10-09T10:12:41.566476Z", "url": "https://files.pythonhosted.org/packages/92/5a/c56063f90457e7537fbb92764542b092c14e3f9fa85c5d5b15b7fc495c33/jupyter_ui_poll-0.2.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a5f7770656053490764eb3f69b0612cb", "sha256": "5b5bb4609bca862ffaebfe17d4a626e64769985b63d5fd176f985a9a0d159a5e" }, "downloads": -1, "filename": "jupyter-ui-poll-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a5f7770656053490764eb3f69b0612cb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9648, "upload_time": "2021-10-09T10:12:42", "upload_time_iso_8601": "2021-10-09T10:12:42.652726Z", "url": "https://files.pythonhosted.org/packages/14/fe/a1cf0ad987a331c66f98e37b6b623f1d8624e6554788b95956248d22da03/jupyter-ui-poll-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "53d5749ff0e7b36c0b403d6bf8305fe1", "sha256": "60d995aa9d98c2a9edf6f3d5ec7739c19df3b648e5b7eef49eebe96ab0984ea0" }, "downloads": -1, "filename": "jupyter_ui_poll-0.2.1-py2.py3-none-any.whl", "has_sig": false, "md5_digest": "53d5749ff0e7b36c0b403d6bf8305fe1", "packagetype": "bdist_wheel", "python_version": "py2.py3", "requires_python": ">=3.6", "size": 8958, "upload_time": "2021-10-09T10:12:41", "upload_time_iso_8601": "2021-10-09T10:12:41.566476Z", "url": "https://files.pythonhosted.org/packages/92/5a/c56063f90457e7537fbb92764542b092c14e3f9fa85c5d5b15b7fc495c33/jupyter_ui_poll-0.2.1-py2.py3-none-any.whl", "yanked": false, "yanked_reason": null }, { "comment_text": "", "digests": { "md5": "a5f7770656053490764eb3f69b0612cb", "sha256": "5b5bb4609bca862ffaebfe17d4a626e64769985b63d5fd176f985a9a0d159a5e" }, "downloads": -1, "filename": "jupyter-ui-poll-0.2.1.tar.gz", "has_sig": false, "md5_digest": "a5f7770656053490764eb3f69b0612cb", "packagetype": "sdist", "python_version": "source", "requires_python": ">=3.6", "size": 9648, "upload_time": "2021-10-09T10:12:42", "upload_time_iso_8601": "2021-10-09T10:12:42.652726Z", "url": "https://files.pythonhosted.org/packages/14/fe/a1cf0ad987a331c66f98e37b6b623f1d8624e6554788b95956248d22da03/jupyter-ui-poll-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }