{ "info": { "author": "Walt Woods", "author_email": "woodswalben@gmail.com", "bugtrack_url": null, "classifiers": [ "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python :: 3" ], "description": "# `vuespa`\n\nA combined Python + Vue.js Single Page Application (SPA) framework.\n\nExample usage (from `vuespa/__init__.py`):\n\n1. Write Python API:\n\n\n class Client(vuespa.Client):\n async def vuespa_on_open(self):\n print(\"Client connected!\")\n\n # vuespa_on_close exists, too\n\n async def api_shoe(self, arg1):\n return f'Got {arg1}'\n\n vuespa.VueSpa('vue.app', Client).run()\n\n Optionally, may specify `vuespa.VueSpa('vue.app', Client, port=8080).run()` to run on ports 8080 (webserver and websocket) and 8081 (Vue dev server).\n\n2. Create app via ``vue create vue.app``.\n\n3. Edit ``vue.app/src/main.ts`` (if typescript) with:\n\n declare var VueSpaBackend: any;\n Vue.use(VueSpaBackend); // or app.use(VueSpaBackend) for Vue 3+\n\n4. Edit ``vue.app/public/index.html`` with:\n\n \n\n5. Save ``./shims-vuespa.d.ts`` from this repository to ``vue.app/src/shims-vuespa.d.ts``, to silence Typescript errors.\n\n6. Add calls to the server as:\n\n await this.$vuespa.call('shoe', 32)\n\n7. Run the Python script! This will build the Vue application, run a Python web server on a random port, and point your web browser at the deployment.\n\nAs a shortcut in e.g. template callbacks, can use `$vuespa.update('propName', 'shoe', 32)` to place the call to `api_shoe` and then set the resulting value in `propName`.\n\n## Reverse proxy (Nginx) forwarding\n`python-vuespa` uses a single port for both websocket and HTTP traffic. This makes it fairly simple to set up port forwarding, but with a reverse proxy, additional configuration may be necessary. Notably, to proxy from an SSL Nginx connection to a WSS secure websocket:\n\n```\n# WS must be separate\nlocation /vuespa.ws {\n proxy_pass http://127.0.0.1:8080;\n proxy_read_timeout 3600;\n proxy_http_version 1.1;\n proxy_set_header Upgrade $http_upgrade;\n proxy_set_header Connection \"upgrade\";\n}\n\nlocation / {\n proxy_pass http://127.0.0.1:8080;\n proxy_set_header Host $host;\n proxy_set_header X-Real-IP $remote_addr;\n proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n proxy_set_header X-Forwarded-Proto $scheme;\n #proxy_connect_timeout 3600;\n proxy_read_timeout 3600;\n}\n```\n\nNote that using SELinux (e.g., CentOS) may yield additional issues in the form of a 502 Bad Gateway response: https://stackoverflow.com/a/24830777\n\n## History\n* 2021-11-03 - 0.5.2 release. Support for `wss:` protocol when forwarded via HTTPS. Additional documentation to support.\n* 2021-08-10 - 0.5.1 release. Error if sending message > 512MB, as some browsers (notably Chrome) cannot load messages this large.\n* 2021-07-14 - 0.5.0 release. Vue 3.x support.\n* 2021-04-28 - 0.4.0 release. Parallelism for responses on a single web socket. Before, they would block one another, which was annoying for long-running tasks.\n* 2021-02-11 - 0.3.7 release. If neither host nor port is specified, 'localhost' will be used as the host (resulting in a random port being selected).\n* 2021-02-11 - 0.3.6 release. Default bind to IPv4 and IPv6, and documentation update. Some docker containers were having issues as docker now will not translate an IPv6 request to an IPv4 one.\n* 2020-10-07 - 0.3.5 release. Support JSON body in XMLHttpRequest for GET/POST interactions, which is less confusing than encodeURIComponent with a query string.\n* 2020-06-03 - 0.3.4 release. Better support for applications tunneled over a proxy.\n* 2020-06-01 - 0.3.3 release. Larger websocket messages allowed to server by default.\n* 2020-05-28 - 0.3.1 release. Fixes for websockets, mostly documentation, but also page load race condition.\n* 2020-05-27 - 0.2.9 release. Websockets may now receive interactions via HTTP GET/POST requests, to allow child tabs from a Vuespa application to direct the parent tab. This is useful primarily for plugins, which execute code uncontrolled by the core application author, and might execute in an IFrame. Additionally, a `config_web_callback` method has been added which allows for registering arbitrary HTTP endpoints.\n* 2020-04-02 - 0.2.8 release. Production mode no longer runs 'npm install' if dist folder exists already.\n* 2020-02-04 - 0.2.7 release. Fixed an error from moving to aiohttp websocket. Fixed vue serve hot reloading.\n* 2020-01-06 - 0.2.6 release. A few things:\n * Use IPv4 host by default, since e.g. Docker has issues with IPv6.\n * Only use one port (instead of one for HTTP and a separate port for websocket). This is to make Docker usage easier. Note that for development, the Vue development port will not be forwarded by default.\n* 2019-12-18 - 0.2.5 release built. Better documentation (shows $vuespa.call), and randomly select port unless otherwise specified.\n* 2019-10-21 - 0.2.3 release.", "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/wwoods/python-vuespa", "keywords": "", "license": "", "maintainer": "", "maintainer_email": "", "name": "vuespa", "package_url": "https://pypi.org/project/vuespa/", "platform": "", "project_url": "https://pypi.org/project/vuespa/", "project_urls": { "Homepage": "https://github.com/wwoods/python-vuespa" }, "release_url": "https://pypi.org/project/vuespa/0.5.2/", "requires_dist": null, "requires_python": "", "summary": "Helper library for Python+Vue Single Page Applications", "version": "0.5.2", "yanked": false, "yanked_reason": null }, "last_serial": 11916787, "releases": { "0.1": [ { "comment_text": "", "digests": { "md5": "940771b7688e6c832b1c7cd8eed10675", "sha256": "9d3da7f7eb05f70a86648beea8d4c0821bd665cac0fca810195881d74de89913" }, "downloads": -1, "filename": "vuespa-0.1.tar.gz", "has_sig": false, "md5_digest": "940771b7688e6c832b1c7cd8eed10675", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4156, "upload_time": "2019-10-11T00:53:45", "upload_time_iso_8601": "2019-10-11T00:53:45.558651Z", "url": "https://files.pythonhosted.org/packages/21/e1/af817880dc3cc97fa5b69d71a99922631f511b2065fc01e3a5f8bcbe27d8/vuespa-0.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.0": [ { "comment_text": "", "digests": { "md5": "f9c4e66e8c6b907eb03967e430f105d6", "sha256": "b631c6d3983943cf3739d197c4dbedc4e53925d36a5b5f7872cbe24208257674" }, "downloads": -1, "filename": "vuespa-0.2.0.tar.gz", "has_sig": false, "md5_digest": "f9c4e66e8c6b907eb03967e430f105d6", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4178, "upload_time": "2019-10-11T00:55:45", "upload_time_iso_8601": "2019-10-11T00:55:45.502506Z", "url": "https://files.pythonhosted.org/packages/0e/a1/860f6470083ff8ede13d94c04ab524ae1b195363ba9a3aa952d5f4639482/vuespa-0.2.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.1": [ { "comment_text": "", "digests": { "md5": "84504454ced717bb5b35e8721261f7f1", "sha256": "168bf7b1b5855fa4cdf1717af0fd1856019f65fe8257078348fbc97524453cbc" }, "downloads": -1, "filename": "vuespa-0.2.1.tar.gz", "has_sig": false, "md5_digest": "84504454ced717bb5b35e8721261f7f1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4234, "upload_time": "2019-10-21T20:44:04", "upload_time_iso_8601": "2019-10-21T20:44:04.130700Z", "url": "https://files.pythonhosted.org/packages/01/d5/0cf61b8ce61837a947abe54cf9334f44219a3b8c179f9126c7b0425a70dd/vuespa-0.2.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.2": [ { "comment_text": "", "digests": { "md5": "46782d1d29b438861e72dbeef909f914", "sha256": "858c8df311cc8b361a7a8459bc011cb9ccb8996336c0b1d404300b327cd96aca" }, "downloads": -1, "filename": "vuespa-0.2.2.tar.gz", "has_sig": false, "md5_digest": "46782d1d29b438861e72dbeef909f914", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4227, "upload_time": "2019-10-21T21:35:55", "upload_time_iso_8601": "2019-10-21T21:35:55.515013Z", "url": "https://files.pythonhosted.org/packages/55/66/977afe89f266754ad87d7402f90f905f84bb0d05c480cab4a2f51a8dc153/vuespa-0.2.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.3": [ { "comment_text": "", "digests": { "md5": "204d6d96fc96f0d1181634e3c6bedca1", "sha256": "33aef197ead19d39049babf923c7258536df551c5b4c1eed479121b49ef2da69" }, "downloads": -1, "filename": "vuespa-0.2.3.tar.gz", "has_sig": false, "md5_digest": "204d6d96fc96f0d1181634e3c6bedca1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4364, "upload_time": "2019-10-21T22:45:02", "upload_time_iso_8601": "2019-10-21T22:45:02.964606Z", "url": "https://files.pythonhosted.org/packages/15/70/665962e68329d6c2ca30ef86800148a175d7784f06be79d0cc955133e66f/vuespa-0.2.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.4": [ { "comment_text": "", "digests": { "md5": "969c468a54f88523183cd2e737576392", "sha256": "15fa514b7b13309804342b23c2ae422983198891c52ee458e33ba1ac8df6c9e9" }, "downloads": -1, "filename": "vuespa-0.2.4.tar.gz", "has_sig": false, "md5_digest": "969c468a54f88523183cd2e737576392", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 4358, "upload_time": "2019-10-21T22:48:32", "upload_time_iso_8601": "2019-10-21T22:48:32.657833Z", "url": "https://files.pythonhosted.org/packages/32/d2/b68e9e0576c76c28b35ecf627d3a43b69ec29e391d4fdc914e6e23550ff8/vuespa-0.2.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.5": [ { "comment_text": "", "digests": { "md5": "0b9ae127158f783671b28e7ed8d67443", "sha256": "1ccefc5488c148a621668c18dbb4cbce742206629f1cb3cf5d03c5f1226368ee" }, "downloads": -1, "filename": "vuespa-0.2.5.tar.gz", "has_sig": false, "md5_digest": "0b9ae127158f783671b28e7ed8d67443", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5495, "upload_time": "2019-12-20T20:56:40", "upload_time_iso_8601": "2019-12-20T20:56:40.333325Z", "url": "https://files.pythonhosted.org/packages/5e/50/7d01cfa20eedbdd0da116294f4f868f8ef2bc3977eb49a9ec9713373ee8c/vuespa-0.2.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.6": [ { "comment_text": "", "digests": { "md5": "7e1badab2883b8d9b69a9796e94a025c", "sha256": "c10d3a905927dcd5ff98b637d0718950bc5ae0743f1a3bd89b9f3070dde9f90a" }, "downloads": -1, "filename": "vuespa-0.2.6.tar.gz", "has_sig": false, "md5_digest": "7e1badab2883b8d9b69a9796e94a025c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 5766, "upload_time": "2020-01-07T02:29:17", "upload_time_iso_8601": "2020-01-07T02:29:17.262833Z", "url": "https://files.pythonhosted.org/packages/ee/c6/ca0aeff3186355114d2bb99742d6537f2b4ec4fe8d45034c8379aea6ecf5/vuespa-0.2.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.8": [ { "comment_text": "", "digests": { "md5": "0f5678c1745f132474939c600c29bd56", "sha256": "59d266959b982d7584ba832689eddc4c1b5d0ee7b209f7b8bac6fc1e15a99ddd" }, "downloads": -1, "filename": "vuespa-0.2.8.tar.gz", "has_sig": false, "md5_digest": "0f5678c1745f132474939c600c29bd56", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 6287, "upload_time": "2020-04-02T19:08:53", "upload_time_iso_8601": "2020-04-02T19:08:53.053469Z", "url": "https://files.pythonhosted.org/packages/61/8a/58c88d1f9fcdb4d1d3ec9f36cbdeef375d3705173d6523089683f5da2e61/vuespa-0.2.8.tar.gz", "yanked": false, "yanked_reason": null } ], "0.2.9": [ { "comment_text": "", "digests": { "md5": "d1b02a9c6e3c527280fb9f6a17a871d1", "sha256": "66498d08a676d62fc254482cdb71f0781745b3735975a0f1815bfb1cede1e23f" }, "downloads": -1, "filename": "vuespa-0.2.9.tar.gz", "has_sig": false, "md5_digest": "d1b02a9c6e3c527280fb9f6a17a871d1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10037, "upload_time": "2020-05-27T15:29:46", "upload_time_iso_8601": "2020-05-27T15:29:46.895896Z", "url": "https://files.pythonhosted.org/packages/3f/b3/6b943a16c32edb24fcb38a901a74758ddb9ef13e2e3972f4418d4aef65f1/vuespa-0.2.9.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.0": [ { "comment_text": "", "digests": { "md5": "6a9c8b6471b73dbf4d004287258d9afc", "sha256": "9131c869e8e78a94fbd16851cf4b1f54bd9b93958838e097f0a0793f09a262ce" }, "downloads": -1, "filename": "vuespa-0.3.0.tar.gz", "has_sig": false, "md5_digest": "6a9c8b6471b73dbf4d004287258d9afc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10039, "upload_time": "2020-05-28T14:32:37", "upload_time_iso_8601": "2020-05-28T14:32:37.451147Z", "url": "https://files.pythonhosted.org/packages/21/0b/5bb627ad1196f91a516e391369491f5a72417fbaadfc0841cc0616f691bd/vuespa-0.3.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.1": [ { "comment_text": "", "digests": { "md5": "20c49aea7fd7ea703760906d7aae04a7", "sha256": "0a33bdbb0830207da9466c79f7d815ceeee789a25d3f5c6bf2ee328e3f5a71ab" }, "downloads": -1, "filename": "vuespa-0.3.1.tar.gz", "has_sig": false, "md5_digest": "20c49aea7fd7ea703760906d7aae04a7", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10175, "upload_time": "2020-05-28T22:51:57", "upload_time_iso_8601": "2020-05-28T22:51:57.417121Z", "url": "https://files.pythonhosted.org/packages/19/ae/4189b5a5495693d4917fd24eea0c1793c287a6f165ee27dd7d71394c2411/vuespa-0.3.1.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.2": [ { "comment_text": "", "digests": { "md5": "d1f2a46364b7b7842a4c852b02934c1f", "sha256": "216458b06c3051a9a08dcc1eeab01bc9cb6d79dd56da6c61fb86a6c05bcf2e7e" }, "downloads": -1, "filename": "vuespa-0.3.2.tar.gz", "has_sig": false, "md5_digest": "d1f2a46364b7b7842a4c852b02934c1f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10305, "upload_time": "2020-06-01T15:16:36", "upload_time_iso_8601": "2020-06-01T15:16:36.226782Z", "url": "https://files.pythonhosted.org/packages/f3/7d/9a4dae3e6d48a6ebd84b5b731db99c6f5de49600e83678e5d60b725c9bdd/vuespa-0.3.2.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.3": [ { "comment_text": "", "digests": { "md5": "0690ee4e5edc10ea3946b417a2769b01", "sha256": "62d8834b474c30165a8c173aa8d1d57ab7e460551d17a7dc2f5620930e8065e2" }, "downloads": -1, "filename": "vuespa-0.3.3.tar.gz", "has_sig": false, "md5_digest": "0690ee4e5edc10ea3946b417a2769b01", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10314, "upload_time": "2020-06-01T15:25:52", "upload_time_iso_8601": "2020-06-01T15:25:52.907164Z", "url": "https://files.pythonhosted.org/packages/bc/35/d9d13133a00409fc9fc9f5a46c6a42b6e5b8575bf3b25c823028f83ffea5/vuespa-0.3.3.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.4": [ { "comment_text": "", "digests": { "md5": "f451e33434fffff8d2410d9ec71845f9", "sha256": "6fd39ca6c19247e3a780988899d8fe5f9bcd9b364cc6338d0dfbfb0b4a461e3a" }, "downloads": -1, "filename": "vuespa-0.3.4.tar.gz", "has_sig": false, "md5_digest": "f451e33434fffff8d2410d9ec71845f9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10388, "upload_time": "2020-06-03T18:26:24", "upload_time_iso_8601": "2020-06-03T18:26:24.260180Z", "url": "https://files.pythonhosted.org/packages/f8/84/7ef3f929ab1c42f1fa438e23d7fe2b328a5765d9e4ca98d5bb5d80c6e270/vuespa-0.3.4.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.5": [ { "comment_text": "", "digests": { "md5": "ffa7e9ebe8d397ba74166a9568041786", "sha256": "5c0db25a18417337c053a46bffbc1a7805b3f5f725f4a97c315420f0f7e792e9" }, "downloads": -1, "filename": "vuespa-0.3.5.tar.gz", "has_sig": false, "md5_digest": "ffa7e9ebe8d397ba74166a9568041786", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10531, "upload_time": "2020-10-07T23:28:19", "upload_time_iso_8601": "2020-10-07T23:28:19.502350Z", "url": "https://files.pythonhosted.org/packages/aa/73/1ffdadbcb9a83cddf9008463df1bd8025436dc8a3e5cc6146129ef6696a9/vuespa-0.3.5.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.6": [ { "comment_text": "", "digests": { "md5": "fb34bdcf53cd362837e56ee967000861", "sha256": "1bf0f85bd4a11c0b4a5128b52f6eb5f29d7eefe2b9635bb849e846ea8435929f" }, "downloads": -1, "filename": "vuespa-0.3.6.tar.gz", "has_sig": false, "md5_digest": "fb34bdcf53cd362837e56ee967000861", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10683, "upload_time": "2021-02-12T01:45:19", "upload_time_iso_8601": "2021-02-12T01:45:19.368511Z", "url": "https://files.pythonhosted.org/packages/6d/64/bc531b8eeede48162217b7da4a650ecfef6afc7920763a048f1f2fd76242/vuespa-0.3.6.tar.gz", "yanked": false, "yanked_reason": null } ], "0.3.7": [ { "comment_text": "", "digests": { "md5": "cfc1137a09ef3244f76f9a525959ff3b", "sha256": "026bbf2584f09a12dd31b3cbb465d2a8db64fd5840de722e3870fa5c01ddcd35" }, "downloads": -1, "filename": "vuespa-0.3.7.tar.gz", "has_sig": false, "md5_digest": "cfc1137a09ef3244f76f9a525959ff3b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 10842, "upload_time": "2021-02-12T01:53:37", "upload_time_iso_8601": "2021-02-12T01:53:37.559481Z", "url": "https://files.pythonhosted.org/packages/8c/38/b0087a48ef3fdcbf03ce9c47c8db4e4e45f32162897a8de82380ad5bfb2f/vuespa-0.3.7.tar.gz", "yanked": false, "yanked_reason": null } ], "0.4.0": [ { "comment_text": "", "digests": { "md5": "6c18812c23f5669efd39ed5f3a4e8ec1", "sha256": "219813445529fae2902c686c871eed8fd8898c9faa3fdcbe85956cb5cd636e9f" }, "downloads": -1, "filename": "vuespa-0.4.0.tar.gz", "has_sig": false, "md5_digest": "6c18812c23f5669efd39ed5f3a4e8ec1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11391, "upload_time": "2021-04-28T15:44:56", "upload_time_iso_8601": "2021-04-28T15:44:56.794805Z", "url": "https://files.pythonhosted.org/packages/11/6d/83a70e30430d81a2b314214efa63717da9b8903c6b87b36b4a21e75578c0/vuespa-0.4.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.0": [ { "comment_text": "", "digests": { "md5": "e786c5d9dacdf74a2017db424065c294", "sha256": "e1848469dbee35857d50f9e046f550580be433d581513a46e2134814c2dc4f04" }, "downloads": -1, "filename": "vuespa-0.5.0.tar.gz", "has_sig": false, "md5_digest": "e786c5d9dacdf74a2017db424065c294", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 11189, "upload_time": "2021-07-14T22:47:23", "upload_time_iso_8601": "2021-07-14T22:47:23.567602Z", "url": "https://files.pythonhosted.org/packages/21/60/a581553b12ef59558075b0e5eb0ffa03a718fce47febf4c1f5061863fd9d/vuespa-0.5.0.tar.gz", "yanked": false, "yanked_reason": null } ], "0.5.2": [ { "comment_text": "", "digests": { "md5": "c96f12b39a48b5ec12cc27e631cd39cd", "sha256": "cfe98deff185b449739f4f251eb0df2cc0dbc15d17790d063e44135ea02bae03" }, "downloads": -1, "filename": "vuespa-0.5.2.tar.gz", "has_sig": false, "md5_digest": "c96f12b39a48b5ec12cc27e631cd39cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12399, "upload_time": "2021-11-03T17:02:09", "upload_time_iso_8601": "2021-11-03T17:02:09.418541Z", "url": "https://files.pythonhosted.org/packages/57/3c/7d95782c67becbec138901535dc3a8a7abb5294bf9413964975b9ab43bab/vuespa-0.5.2.tar.gz", "yanked": false, "yanked_reason": null } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "c96f12b39a48b5ec12cc27e631cd39cd", "sha256": "cfe98deff185b449739f4f251eb0df2cc0dbc15d17790d063e44135ea02bae03" }, "downloads": -1, "filename": "vuespa-0.5.2.tar.gz", "has_sig": false, "md5_digest": "c96f12b39a48b5ec12cc27e631cd39cd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 12399, "upload_time": "2021-11-03T17:02:09", "upload_time_iso_8601": "2021-11-03T17:02:09.418541Z", "url": "https://files.pythonhosted.org/packages/57/3c/7d95782c67becbec138901535dc3a8a7abb5294bf9413964975b9ab43bab/vuespa-0.5.2.tar.gz", "yanked": false, "yanked_reason": null } ], "vulnerabilities": [] }