[
  {
    "path": "LICENSE",
    "content": "CC0 1.0 Universal\n\nStatement of Purpose\n\nThe laws of most jurisdictions throughout the world automatically confer\nexclusive Copyright and Related Rights (defined below) upon the creator and\nsubsequent owner(s) (each and all, an \"owner\") of an original work of\nauthorship and/or a database (each, a \"Work\").\n\nCertain owners wish to permanently relinquish those rights to a Work for the\npurpose of contributing to a commons of creative, cultural and scientific\nworks (\"Commons\") that the public can reliably and without fear of later\nclaims of infringement build upon, modify, incorporate in other works, reuse\nand redistribute as freely as possible in any form whatsoever and for any\npurposes, including without limitation commercial purposes. These owners may\ncontribute to the Commons to promote the ideal of a free culture and the\nfurther production of creative, cultural and scientific works, or to gain\nreputation or greater distribution for their Work in part through the use and\nefforts of others.\n\nFor these and/or other purposes and motivations, and without any expectation\nof additional consideration or compensation, the person associating CC0 with a\nWork (the \"Affirmer\"), to the extent that he or she is an owner of Copyright\nand Related Rights in the Work, voluntarily elects to apply CC0 to the Work\nand publicly distribute the Work under its terms, with knowledge of his or her\nCopyright and Related Rights in the Work and the meaning and intended legal\neffect of CC0 on those rights.\n\n1. Copyright and Related Rights. A Work made available under CC0 may be\nprotected by copyright and related or neighboring rights (\"Copyright and\nRelated Rights\"). Copyright and Related Rights include, but are not limited\nto, the following:\n\n  i. the right to reproduce, adapt, distribute, perform, display, communicate,\n  and translate a Work;\n\n  ii. moral rights retained by the original author(s) and/or performer(s);\n\n  iii. publicity and privacy rights pertaining to a person's image or likeness\n  depicted in a Work;\n\n  iv. rights protecting against unfair competition in regards to a Work,\n  subject to the limitations in paragraph 4(a), below;\n\n  v. rights protecting the extraction, dissemination, use and reuse of data in\n  a Work;\n\n  vi. database rights (such as those arising under Directive 96/9/EC of the\n  European Parliament and of the Council of 11 March 1996 on the legal\n  protection of databases, and under any national implementation thereof,\n  including any amended or successor version of such directive); and\n\n  vii. other similar, equivalent or corresponding rights throughout the world\n  based on applicable law or treaty, and any national implementations thereof.\n\n2. Waiver. To the greatest extent permitted by, but not in contravention of,\napplicable law, Affirmer hereby overtly, fully, permanently, irrevocably and\nunconditionally waives, abandons, and surrenders all of Affirmer's Copyright\nand Related Rights and associated claims and causes of action, whether now\nknown or unknown (including existing as well as future claims and causes of\naction), in the Work (i) in all territories worldwide, (ii) for the maximum\nduration provided by applicable law or treaty (including future time\nextensions), (iii) in any current or future medium and for any number of\ncopies, and (iv) for any purpose whatsoever, including without limitation\ncommercial, advertising or promotional purposes (the \"Waiver\"). Affirmer makes\nthe Waiver for the benefit of each member of the public at large and to the\ndetriment of Affirmer's heirs and successors, fully intending that such Waiver\nshall not be subject to revocation, rescission, cancellation, termination, or\nany other legal or equitable action to disrupt the quiet enjoyment of the Work\nby the public as contemplated by Affirmer's express Statement of Purpose.\n\n3. Public License Fallback. Should any part of the Waiver for any reason be\njudged legally invalid or ineffective under applicable law, then the Waiver\nshall be preserved to the maximum extent permitted taking into account\nAffirmer's express Statement of Purpose. In addition, to the extent the Waiver\nis so judged Affirmer hereby grants to each affected person a royalty-free,\nnon transferable, non sublicensable, non exclusive, irrevocable and\nunconditional license to exercise Affirmer's Copyright and Related Rights in\nthe Work (i) in all territories worldwide, (ii) for the maximum duration\nprovided by applicable law or treaty (including future time extensions), (iii)\nin any current or future medium and for any number of copies, and (iv) for any\npurpose whatsoever, including without limitation commercial, advertising or\npromotional purposes (the \"License\"). The License shall be deemed effective as\nof the date CC0 was applied by Affirmer to the Work. Should any part of the\nLicense for any reason be judged legally invalid or ineffective under\napplicable law, such partial invalidity or ineffectiveness shall not\ninvalidate the remainder of the License, and in such case Affirmer hereby\naffirms that he or she will not (i) exercise any of his or her remaining\nCopyright and Related Rights in the Work or (ii) assert any associated claims\nand causes of action with respect to the Work, in either case contrary to\nAffirmer's express Statement of Purpose.\n\n4. Limitations and Disclaimers.\n\n  a. No trademark or patent rights held by Affirmer are waived, abandoned,\n  surrendered, licensed or otherwise affected by this document.\n\n  b. Affirmer offers the Work as-is and makes no representations or warranties\n  of any kind concerning the Work, express, implied, statutory or otherwise,\n  including without limitation warranties of title, merchantability, fitness\n  for a particular purpose, non infringement, or the absence of latent or\n  other defects, accuracy, or the present or absence of errors, whether or not\n  discoverable, all to the greatest extent permissible under applicable law.\n\n  c. Affirmer disclaims responsibility for clearing rights of other persons\n  that may apply to the Work or any use thereof, including without limitation\n  any person's Copyright and Related Rights in the Work. Further, Affirmer\n  disclaims responsibility for obtaining any necessary consents, permissions\n  or other rights required for any use of the Work.\n\n  d. Affirmer understands and acknowledges that Creative Commons is not a\n  party to this document and has no duty or obligation with respect to this\n  CC0 or use of the Work.\n\nFor more information, please see\n<http://creativecommons.org/publicdomain/zero/1.0/>\n"
  },
  {
    "path": "PULL_REQUEST_TEMPLATE.md",
    "content": "For adding tutorials, packages, or apps\n===========================================\n<!-- If you are making a pull request on the master branch, please resubmit your pull request using the dev-master branch. -->\n\n\n##### What did you add to the README.md file?\n<!-- Make a detailed list of what awesomeness you have added to the readme -->\n\n\nHave you ensured your contribution adheres to the pull request guidelines of [awesome](https://github.com/sindresorhus/awesome/edit/master/pull_request_template.md)? In particular:\n\n- Not a duplicate.\n- Only has awesome items. Awesome lists are curations of the best, not everything.\n- Has consistent formatting and proper spelling/grammar.\n\t- The link and description are separated by a dash. <br>Example: `- [AVA](…) - JavaScript test runner.`\n\t- The description starts with an uppercase character and ends with a period.\n\t- Drop all the `A` / `An` prefixes in the descriptions.\n\t- Consistent and correct naming. For example, `Node.js`, not `NodeJS` or `node.js`.\n\n----------\n\n### For first time contributors...\n\n##### Do you want to be added to the contributors list on the README.md file?  \n<!-- Check yes or no. If yes respond to the next 2 questions. If no, submit the pull request. -->\n- [ ] Yes\n- [ ] No\n\n##### What name would you like?\n<!-- Add a name and link to your name to the README if you checked yes above.-->\n\n\n##### What website would you like your name linked to?\n\n  \n"
  },
  {
    "path": "README.md",
    "content": "# Awesome Dash [![Awesome](https://awesome.re/badge-flat.svg)](https://github.com/sindresorhus/awesome)\n\n[<img src=\"logo.webp\" align=\"right\" width=\"250\">](https://plot.ly/products/dash/)\n\nA curated list of awesome Dash (plotly) resources\n\n> [Dash](https://plot.ly/products/dash/) is a productive Python framework for building web applications.\n> Written on top of Flask, Plotly.js, and React.js, Dash is ideal for building data visualization apps with highly custom user interfaces in pure Python. It's particularly suited for anyone who works with data in Python.\n\n## Contents\n- [Deployment](#deployment)\n- [Tutorials](#tutorials)\n- [Component Libraries](#component-libraries)\n- [App Examples](#app-examples)\n- [Idiomatic examples](#idiomatic-examples)\n- [Galleries](#galleries)\n- [Cheat sheets](#cheat-sheets)\n- [Talks](#talks)\n- [Books](#books)\n- [Community](#community)\n- [Contributors](#contributors)\n\n## Deployment\n\n- [Ploomber Cloud](https://ploomber.io) - The community plan allows free deployments\n\n## Tutorials\n\n- [Introducing Plotly Dash](https://medium.com/@plotlygraphs/introducing-dash-5ecf7191b503) - A high level introduction to Dash by Chris Parmer, the author of Dash. This essay was released as part of Dash's official launch (June 21, 2017).\n- [Plotly's tutorials - Part 1: App Layout](https://dash.plotly.com/layout)\n- [Plotly's tutorials - Part 2: Interactivity](https://dash.plotly.com/basic-callbacks)\n- [Plotly's tutorials - Part 3: Interactive Graphing](https://dash.plotly.com/interactive-graphing)\n- [Plotly's tutorials - Part 4: Callbacks With State](https://dash.plotly.com/sharing-data-between-callbacks)\n- [Charming Data YouTube channel](https://www.youtube.com/charmingdata) - A channel dedicated to teaching Dash and Plotly with over 25k subscribers.\n- [Interactive Web-Based Dashboards in Python](https://alysivji.github.io/reactive-dashboards-with-dash.html) - How the MVC model pertains to Dash and a walkthrough of building an app.\n- [Using Plotly's Dash to deliver public sector decision support dashboards](https://medium.com/a-r-g-o/using-plotlys-dash-to-deliver-public-sector-decision-support-dashboards-ac863fa829fb) - Building a complex dashboard step-by-step.\n- [OPS CodeDay: Dash Plotly Map + Graph](https://radumas.info/blog/tutorial/2017/08/10/codeday.html) - How to use Jupyter notebooks in tandom with Dash to create mapping viz.\n- [Creating Interactive Visualizations with Plotly's Dash Framework](http://pbpython.com/plotly-dash-intro.html) - High level overview of how to get started with Dash.\n- [ARGO Labs - Plotly Dash Tutorial (Video)](https://www.youtube.com/watch?v=yfWJXkySfe0) - Detailed introduction to creating interactive dashboards.\n- [Data Visualization GUIs with Dash and Python (Video playlist)](https://www.youtube.com/watch?v=J_Cy_QjG6NE&list=PLQVvvaa0QuDfsGImWNt1eUEveHOepkjqt) - Five-part series exploring Dash features.\n- [Interactive Visualization of Machine Learning and Computer Vision with Dash](https://www.youtube.com/watch?v=3F5AR-uUqJc) - Official introduction video.\n- [Webinar: Converting React components to Dash components](https://www.youtube.com/watch?v=wifoPPRgG_I) - Official tutorial about how to convert React components to Dash components.\n- [Interactive Image Processing with Dash-Canvas](https://www.youtube.com/watch?v=LKXSFBB5ccI) - Official introduction video to the Dash Canvas components.\n- [Dash Cytoscape Component](https://www.youtube.com/watch?v=snXcIsCMQgk) - Official introduction video to the Dash Cytoscape components.\n- [An introduction to Dash DataTable](https://www.youtube.com/watch?v=dueejcyrYh8) - Official introduction video to the Dash DataTable components.\n- [Tutorial on creating custom Dash components with React.js.](https://dash.plotly.com/plugins)\n\n## Component Libraries\n\n- [Dash PDF](https://github.com/ploomber/dash-pdf) - Display inline PDFs\n- [Dash MUI](https://github.com/ploomber/dash-mui) - Material UI components\n- [Dash React Simple Maps](https://github.com/ploomber/dash-react-simple-maps) - Create interactive maps\n- [Dash Mosaic](https://github.com/ploomber/mosaic-python#dash-mosaic) - Display [Mosaic](https://github.com/uwdata/mosaic) plots\n- [Dash Tabler Icons](https://github.com/ploomber/dash-tabler-icons) - Beautiful icons for your Dash apps\n- [Dash React Syntax Highlighter](https://github.com/ploomber/dash-react-syntax-highlighter) - Display code snippets with a copy button\n- [Dash Canvas Components](https://dash.plotly.com/canvas) - Module for image annotation and image processing using \nDash.\n- [Awesome React Components](https://github.com/brillout/awesome-react-components) - Catalog of React.js components potentially interesting to be wrapped into Dash components.\n- [Awesome React](https://github.com/enaqx/awesome-react) - Helpful resources for developing React.js components.\n- [Dash Core Components](https://github.com/plotly/dash-core-components)\n- [Dash Cytoscape Component](https://dash.plotly.com/cytoscape) - Graph visualization component for creating easily\ncustomizable, high-performance, interactive, and web-based networks.\n- [Dash DataTable Component](https://dash.plotly.com/datatable) - Interactive table that supports rich styling,\nconditional formatting, editing, sorting, filtering, and more.\n- [Dash DAQ Components](https://dash.plotly.com/dash-daq) - Set of controls that make it simpler to integrate data\nacquisition and controls into your Dash applications.\n- [Dash HTML Components](https://github.com/plotly/dash-html-components)\n- [mydcc](https://github.com/jimmybow/mydcc) - Extension of Dash Core Components.\n- [sd-material-ui](https://github.com/StratoDem/sd-material-ui) - StratoDem Analytics implementations of material-ui components for Dash.\n- [sd-range-slider](https://github.com/StratoDem/sd-range-slider) - Range Slider Dash component.\n- [dj-plotly-dash](https://github.com/pikhovkin/dj-plotly-dash) - Plotly Dash fork for Django.\n- [dash-flexbox-grid](https://github.com/pikhovkin/dash-flexbox-grid) - Wrapper around react-flexbox-grid for Plotly Dash.\n- [dash-color-picker](https://github.com/vivekvs1/dash-color-picker) - Wrapper around react-color.\n- [dash-dual-listbox](https://github.com/vivekvs1/dash-dual-listbox) - Wrapper around react-duallist.\n- [dash-bootstrap-components](https://dash-bootstrap-components.opensource.faculty.ai/) - Bootstrap components for Dash.\n- [dash-uploader](https://github.com/np-8/dash-uploader) - Upload component for Dash. Supports large data files.\n- [Dash Mantine Components](https://github.com/snehilvj/dash-mantine-components) - Collection of 40+ Dash components based on Mantine React Components library.\n- [plotly-resampler](https://github.com/predict-idlab/plotly-resampler) - Wrapper for plotly figures that adds data downsampling (aggregating) functionality, enabling the visualization of large datasets.\n- [dash-vega-components](https://github.com/altair-viz/dash-vega-components) - Dash component for Vega-Altair, Vega-Lite, and Vega charts.\n\n## App Examples\n\n- [Oil and Gas Explorer](https://dash.gallery/dash-oil-and-gas/) - Explore oil and gas production over time and with linked visualisations. [Source Code.](https://github.com/plotly/dash-oil-and-gas-demo)\n- [Uber Rides](https://dash.gallery/dash-uber-rides-demo/) - Displays all of the Uber rides in New York City in 2014. Pandas on the backend filters a 0.5gig datafile. [Source Code.](https://github.com/plotly/dash-sample-apps/tree/main/apps/dash-uber-rides-demo)\n- [Drug Discovery](https://dash.gallery/dash-drug-discovery/) - Displays a description of the drug as you hover over points in the graph. [Source Code.](https://github.com/plotly/dash-sample-apps/tree/main/apps/dash-drug-discovery)\n- [Live Wind Streaming](https://dash.gallery/dash-wind-streaming/) - Continually queries a SQL database and displays live charts of wind speed and wind direction. [Source Code.](https://github.com/plotly/dash-sample-apps/tree/main/apps/dash-wind-streaming)\n- [3D Yield Curve](https://dash.gallery/dash-yield-curve/) - Adapted from NYTimes's excellent [A 3-D View of a Chart That Predicts The Economic Future: The Yield Curve](https://www.nytimes.com/interactive/2015/03/19/upshot/3d-yield-curve-economic-growth.html). [Source Code.](https://github.com/plotly/dash-sample-apps/tree/main/apps/dash-yield-curve)\n- [Visualize Earthquakes with Plotly Dash](https://dash-earthquakes-production-45eyyotfta-ey.a.run.app/) - Great UI and usage of geospatial analytics with Dash. Includes [basic unit tests](https://github.com/jackdbd/dash-earthquakes/tree/master/tests). [Source Code.](https://github.com/jackdbd/dash-earthquakes)\n- [GutenSearch](https://gutensearch.com/) - Look inside the books of Project Gutenberg. [Source Code.](https://github.com/cordb/gutensearch)\n\n## Idiomatic examples\n- [Dash recipes](https://github.com/plotly/dash-recipes) - A collection of scripts and examples created of the plotly team while answering questions from the greater Dash community.\n\n## Galleries\n- [Dash Data Dashboards and Apps](https://www.dashboardom.com/) - Collection of data dashboards with real life data, for various topics, as well as a few apps for online marketing built with Dash.\n- [Dash Gallery](https://dash.gallery/) - A collection of Dash apps.\n\n## Talks\n- [Dash: Data exploration web apps in pure Python](https://www.youtube.com/watch?v=eusglTlW4OA) - Chelsea Douglas, PyData DC 2018.\n- [Overview of Dash](https://www.youtube.com/watch?v=sea2K4AuPOk) - Chris Parmer, creator of Dash (SciPy 2017).\n- [We're Launching Dash](https://www.youtube.com/watch?v=5BAthiN0htc&t=1s) - Chris Parmer, creator of Dash, speaking about the motivations behind Dash before it was launched (Plotcon NYC 2016).\n- [Plotly dash and data visualisation in Python, PyData, Berlin 2017](https://www.slideshare.net/vladimirkazantsev/plotly-dash-and-data-visualisation-in-python) - Volodymyr Kazantsev (slides only).\n\n## Cheat sheets\n- [plotly.py Cheat Sheet](https://images.plot.ly/plotly-documentation/images/python_cheat_sheet.pdf)\n\n## Community\n- [Plotly hosted Question and Answer community](https://community.plot.ly)\n- [Stack Overflow](https://stackoverflow.com/questions/tagged/plotly-dash)\n\n## Contributors\n- [Luke Singham](https://lukesingham.com/)\n- [Aly Sivji](https://alysivji.github.io/)\n- [Chris Parmer](https://github.com/chriddyp)\n- [Sergey Pikhovkin](https://github.com/pikhovkin)\n- [Pascal Bugnion](https://pascalbugnion.net)\n- [Florian Kromer](https://github.com/fkromer)\n- [Elias Dabbas](https://www.dashboardom.com)\n- [vaexio](https://github.com/vaexio)\n- [Fanchao MENG](https://github.com/pingf)\n- [Snehil Vijay](https://github.com/snehilvj)\n- [Eduardo Blancas](https://github.com/edublancas)\n\n## License\nThis work is licensed under a Creative Commons Attribution 4.0 International License.\n"
  },
  {
    "path": "contributing.md",
    "content": "# Contribution Guidelines #\n\n### The pull request should have a useful title. Pull requests with `Update readme.md` as title will be closed right away because I'm so tired of nobody reading this document. Please carefully read everything in `Adding to this list`.\n\n## Table of Contents\n\n- [Adding to this list](#adding-to-this-list)\n- [Creating your own awesome list](#creating-your-own-awesome-list)\n- [Adding something to an awesome list](#adding-something-to-an-awesome-list)\n- [Updating your Pull Request](#updating-your-pull-request)\n\n## Adding to this list\n\nPlease ensure your pull request adheres to the following guidelines:\n\n- Search previous suggestions before making a new one, as yours may be a duplicate.\n- Make sure the list is useful before submitting. That implies it has enough content and every item has a good succinct description.\n- Make an individual pull request for each suggestion.\n- Use [title-casing](http://titlecapitalization.com) (AP style).\n- Use the following format: `[Resource Name](link)`\n- Link additions should be added to the bottom of the relevant category.\n- New categories or improvements to the existing categorisation are welcome.\n- Check your spelling and grammar.\n- Make sure your text editor is set to remove trailing whitespace.\n- The pull request and commit should have a useful title.\n\n## Adding something to an awesome list\n\nIf you have something awesome to contribute to an awesome list, this is how you do it.\n\nYou'll need a [GitHub account](https://github.com/join)!\n\n1. Access the awesome list's GitHub page. For example: https://github.com/sindresorhus/awesome\n2. Click on the `readme.md` file: ![Step 2 Click on Readme.md](https://cloud.githubusercontent.com/assets/170270/9402920/53a7e3ea-480c-11e5-9d81-aecf64be55eb.png)\n3. Now click on the edit icon. ![Step 3 - Click on Edit](https://cloud.githubusercontent.com/assets/170270/9402927/6506af22-480c-11e5-8c18-7ea823530099.png)\n4. You can start editing the text of the file in the in-browser editor. Make sure you follow guidelines above. You can use [GitHub Flavored Markdown](https://help.github.com/articles/github-flavored-markdown/). ![Step 4 - Edit the file](https://cloud.githubusercontent.com/assets/170270/9402932/7301c3a0-480c-11e5-81f5-7e343b71674f.png)\n5. Say why you're proposing the changes, and then click on \"Propose file change\". ![Step 5 - Propose Changes](https://cloud.githubusercontent.com/assets/170270/9402937/7dd0652a-480c-11e5-9138-bd14244593d5.png)\n6. Submit the [pull request](https://help.github.com/articles/using-pull-requests/)!\n\n## Updating your Pull Request\n\nSometimes, a maintainer of an awesome list will ask you to edit your Pull Request before it is included. This is normally due to spelling errors or because your PR didn't match the awesome-* list guidelines.\n\n[Here](https://github.com/RichardLitt/docs/blob/master/amending-a-commit-guide.md) is a write up on how to change a Pull Request, and the different ways you can do that.\n"
  },
  {
    "path": "link_validator.py",
    "content": "# Simple link validator for the README.md file\n\nimport asyncio\nimport re\n\nimport httpx\n\n\nasync def validate_link(client: httpx.AsyncClient, url: str) -> tuple[str, bool]:\n    url = url.rstrip(\")\")\n    try:\n        response = await client.head(url, follow_redirects=True, timeout=5.0)\n        is_valid = 200 <= response.status_code < 400\n        print(f\"URL: {url}, Status Code: {response.status_code}\")\n        return url, is_valid\n    except Exception as e:\n        print(f\"URL: {url}, Exception: {e}\")\n        return url, False\n\n\ndef extract_markdown_links(content: str) -> list[str]:\n    # Match markdown links [text](url) and direct URLs\n    markdown_pattern = r\"\\[(?:[^\\]]*)\\]\\((https?://[^\\s\\)]+)\\)\"\n    direct_url_pattern = r\"(?<!\\])\\b(https?://[^\\s\\)]+)\"\n\n    # Find all markdown format links\n    markdown_links = re.findall(markdown_pattern, content)\n    # Find all direct URLs (not part of markdown syntax)\n    direct_urls = re.findall(direct_url_pattern, content)\n\n    return markdown_links + direct_urls\n\n\nasync def check_readme_links(readme_path: str, only_invalid: bool = False) -> None:\n    with open(readme_path, \"r\") as file:\n        content = file.read()\n\n    links = extract_markdown_links(content)\n\n    async with httpx.AsyncClient() as client:\n        tasks = [validate_link(client, link) for link in links]\n        results = await asyncio.gather(*tasks)\n\n        print(\"Results:\")\n        for url, is_valid in results:\n            if not only_invalid or not is_valid:\n                print(f\"{url}: {'Valid' if is_valid else 'Invalid'}\")\n\n\nasyncio.run(check_readme_links(\"README.md\", only_invalid=True))\n"
  },
  {
    "path": "query_github",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n\"\"\"Script to get owners and websites of GitHub projects tagged with topics\nplotly and dash.\n\nThe script has the side effect of depending on environment variables GIT_USER\nand GIT_PASSWORD which have to be set to the Github user name and the GitHub\npassword respectively.\n\nThe script has been tested with PyGithub v1.43.8 running under Python 3.6.8.\n\"\"\"\n\nfrom os import getenv\n\nfrom github import Github\nfrom github.GithubException import RateLimitExceededException\n\nUSER = getenv(\"GIT_USER\")\nPASSWORD = getenv(\"GIT_PASSWORD\")\n\nclient = Github(USER, PASSWORD)  # pylint: disable=C0103\ntry:\n    repos = client.search_repositories(query=\"topic:plotly topic:dash\")  # pylint: disable=C0103\n    for r in repos:\n        name = r.name\n        owner = r.owner.login\n        url = r.owner.blog\n        print(f\"Repo: {name}\")\n        print(f\"   Owner: {owner}\")\n        print(f\"   URL:   {url}\")\nexcept RateLimitExceededException:\n    print(\"You've triggered your GitHub API rate limit. Try again later.\")\n"
  },
  {
    "path": "query_pypi",
    "content": "#!/usr/bin/env python3\n# -*- coding: utf-8 -*-\n\n\"\"\"\nPrints all PyPi projects which make use of the\nPyPi trove classifier avilable for the framework.\nThe script has been tested running under Python 3.6.8.\n\"\"\"\n\n\nimport xmlrpc.client as xmlrpclib\n\nclient = xmlrpclib.ServerProxy('https://pypi.python.org/pypi')\n\ntrove_classifiers = [\"Framework :: Dash\"]\npypi_projects = []\nfor tc in trove_classifiers:\n    tc_pypi_projects = [p[0] for p in client.browse([tc])]\n    pypi_projects += tc_pypi_projects\n\nfor p in set(pypi_projects):\n    print(p)\n~                  \n"
  }
]