diff --git a/examples/python/app.py b/examples/python/app.py index 2f15bfb..6faa0bc 100644 --- a/examples/python/app.py +++ b/examples/python/app.py @@ -21,7 +21,7 @@ def page(title, content): # Both sample pages. root_page = page("Home page", "Welcome on sample routing page!") other_page = page("Some other page", "Lorem ipsum dolor sit amet.") -third_page = tags.div(menu, tags.h3("Third Page")) +third_page = tags.div(menu, tags.h3("Third Page"), ui.input_action_button(id = "click", label = "Click me")) # Make output for our router in main UI of Shiny app. app_ui = ui.page_fluid( @@ -46,5 +46,11 @@ def param(): ui.p("No id" if not id else str(id)), ) + @reactive.effect + async def redirect(): + input.click() + print("Elo") + await session.send_custom_message("_shiny_router_change_url", {"url": "elo"}) + app = App(app_ui, server) \ No newline at end of file diff --git a/inst/www/shiny.router.css b/inst/www/shiny.router.css index 377115b..a27bdda 100644 --- a/inst/www/shiny.router.css +++ b/inst/www/shiny.router.css @@ -9,3 +9,7 @@ .router-hidden * { visibility: inherit; } + +div.router-hidden:where(.shiny-html-output):has(>*) { + display: inherit; +} \ No newline at end of file diff --git a/inst/www/shiny.router.js b/inst/www/shiny.router.js index 7bbd330..f6b027a 100644 --- a/inst/www/shiny.router.js +++ b/inst/www/shiny.router.js @@ -41,7 +41,7 @@ window.shinyrouter = function() { }; }(); -var switchUI = function(message) { +const switchUI = function(message) { // In Shiny for R message can be string and path is send as string. // In Shiny for Python meesage has to be an object. Path is send as field. const path = typeof message === "string" ? message : message?.path; @@ -56,6 +56,14 @@ var switchUI = function(message) { Shiny.addCustomMessageHandler("switch-ui", switchUI); +const change_url = function(message) { + // In Shiny for Python meesage has to be an object. Path is send as field. + const url = message.url; + window.location.hash = url; +} + +Shiny.addCustomMessageHandler("_shiny_router_change_url", change_url); + $(window).on("hashchange", function (e) { Shiny.setInputValue("_clientdata_url_hash", window.location.hash); return; diff --git a/pyproject.toml b/pyproject.toml index 9ee0fb3..12442c4 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "shiny_router" -version = "0.1.5" +version = "0.1.12" description = "Add your description here" readme = "README.md" requires-python = ">=3.12" @@ -8,6 +8,7 @@ dependencies = [ "pandas", "shiny", "shiny-router", + "pytest", ] [tool.setuptools] diff --git a/src/shiny_router/router.py b/src/shiny_router/router.py index cabc331..3065b69 100644 --- a/src/shiny_router/router.py +++ b/src/shiny_router/router.py @@ -53,9 +53,12 @@ def router_callback(input, output, session=None, **kwargs): @reactive.event(input._clientdata_url_hash) def _(): requested_path = input._clientdata_url_hash() + log_msg("requested path" + requested_path) parsed_url = urlparse(requested_path) fragment_path = urlparse(parsed_url.fragment) clean_path = fragment_path.path.lstrip("!").lstrip("/") + if clean_path == "": + clean_path = root query_params = parse_qs(fragment_path.query) print("Path:", clean_path) @@ -112,14 +115,6 @@ def route(path, ui, server=None): print("Warning: 'server' argument in 'route' is deprecated.") return {"path": path, "logic": callback_mapping(path, ui, server)} -def router_ui(default, *args, page_404=None): - routes = {**default, **{arg: callback_mapping(arg, ui) for arg, ui in args}} - root = list(default.keys())[0] - if '404' not in routes: - routes['404'] = route('404', page_404) - return {'root': root, 'routes': routes} - - def router_ui_internal(router): # Define paths to JavaScript and CSS files js_file = "shiny.router.js" diff --git a/tests/python/test_router.py b/tests/python/test_router.py new file mode 100644 index 0000000..d50efc3 --- /dev/null +++ b/tests/python/test_router.py @@ -0,0 +1,6 @@ +from shiny_router import route_link + +def test_route_link(): + assert route_link("/") == "./#!/" + assert route_link("abc") == "./#!/abc" + assert route_link("#/xyzq") == "./#!/xyzq" \ No newline at end of file diff --git a/uv.lock b/uv.lock index 920ce0b..8c01db8 100644 --- a/uv.lock +++ b/uv.lock @@ -1,7 +1,11 @@ version = 1 requires-python = ">=3.12" +resolution-markers = [ + "platform_system != 'Emscripten'", + "platform_system == 'Emscripten'", +] -[[distribution]] +[[package]] name = "anyio" version = "4.6.2.post1" source = { registry = "https://pypi.org/simple" } @@ -14,7 +18,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e4/f5/f2b75d2fc6f1a260f340f0e7c6a060f4dd2961cc16884ed851b0d18da06a/anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d", size = 90377 }, ] -[[distribution]] +[[package]] name = "appdirs" version = "1.4.4" source = { registry = "https://pypi.org/simple" } @@ -23,7 +27,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3b/00/2344469e2084fb287c2e0b57b72910309874c3245463acd6cf5e3db69324/appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128", size = 9566 }, ] -[[distribution]] +[[package]] name = "asgiref" version = "3.8.1" source = { registry = "https://pypi.org/simple" } @@ -32,7 +36,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/39/e3/893e8757be2612e6c266d9bb58ad2e3651524b5b40cf56761e985a28b13e/asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47", size = 23828 }, ] -[[distribution]] +[[package]] name = "click" version = "8.1.7" source = { registry = "https://pypi.org/simple" } @@ -44,7 +48,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/00/2e/d53fa4befbf2cfa713304affc7ca780ce4fc1fd8710527771b58311a3229/click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28", size = 97941 }, ] -[[distribution]] +[[package]] name = "colorama" version = "0.4.6" source = { registry = "https://pypi.org/simple" } @@ -53,7 +57,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335 }, ] -[[distribution]] +[[package]] name = "h11" version = "0.14.0" source = { registry = "https://pypi.org/simple" } @@ -62,7 +66,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/95/04/ff642e65ad6b90db43e668d70ffb6736436c7ce41fcc549f4e9472234127/h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761", size = 58259 }, ] -[[distribution]] +[[package]] name = "htmltools" version = "0.6.0" source = { registry = "https://pypi.org/simple" } @@ -75,7 +79,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/0a/ba/aa99706246f1938ca905eb6eeb7db832ac2e157aa4b805acb5cd4cd1791a/htmltools-0.6.0-py3-none-any.whl", hash = "sha256:072a274ff5e2851e0acce13fc5bb2bbdbbad8268dc8b123f881c05012ce7dce0", size = 84954 }, ] -[[distribution]] +[[package]] name = "idna" version = "3.10" source = { registry = "https://pypi.org/simple" } @@ -84,7 +88,16 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, ] -[[distribution]] +[[package]] +name = "iniconfig" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d7/4b/cbd8e699e64a6f16ca3a8220661b5f83792b3017d0f79807cb8708d33913/iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3", size = 4646 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374", size = 5892 }, +] + +[[package]] name = "linkify-it-py" version = "2.0.3" source = { registry = "https://pypi.org/simple" } @@ -96,7 +109,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/04/1e/b832de447dee8b582cac175871d2f6c3d5077cc56d5575cadba1fd1cccfa/linkify_it_py-2.0.3-py3-none-any.whl", hash = "sha256:6bcbc417b0ac14323382aef5c5192c0075bf8a9d6b41820a2b66371eac6b6d79", size = 19820 }, ] -[[distribution]] +[[package]] name = "markdown-it-py" version = "3.0.0" source = { registry = "https://pypi.org/simple" } @@ -108,7 +121,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528 }, ] -[[distribution]] +[[package]] name = "mdit-py-plugins" version = "0.4.2" source = { registry = "https://pypi.org/simple" } @@ -120,7 +133,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a7/f7/7782a043553ee469c1ff49cfa1cdace2d6bf99a1f333cf38676b3ddf30da/mdit_py_plugins-0.4.2-py3-none-any.whl", hash = "sha256:0c673c3f889399a33b95e88d2f0d111b4447bdfea7f237dab2d488f459835636", size = 55316 }, ] -[[distribution]] +[[package]] name = "mdurl" version = "0.1.2" source = { registry = "https://pypi.org/simple" } @@ -129,7 +142,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979 }, ] -[[distribution]] +[[package]] name = "narwhals" version = "1.13.2" source = { registry = "https://pypi.org/simple" } @@ -138,7 +151,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/78/33/a4f221cd10aeae23b119ab642f1c6f7801825bbc78ad79addc0b53d388ab/narwhals-1.13.2-py3-none-any.whl", hash = "sha256:d901ad3741ae39e87e9022cf605ec24a20c40812b6975814a04c031c3e4b55f7", size = 198584 }, ] -[[distribution]] +[[package]] name = "numpy" version = "2.1.3" source = { registry = "https://pypi.org/simple" } @@ -176,7 +189,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/86/09/a5ab407bd7f5f5599e6a9261f964ace03a73e7c6928de906981c31c38082/numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4", size = 12644098 }, ] -[[distribution]] +[[package]] name = "orjson" version = "3.10.11" source = { registry = "https://pypi.org/simple" } @@ -201,7 +214,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/42/62/3760bd1e6e949321d99bab238d08db2b1266564d2f708af668f57109bb36/orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270", size = 136361 }, ] -[[distribution]] +[[package]] name = "packaging" version = "24.1" source = { registry = "https://pypi.org/simple" } @@ -210,7 +223,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124", size = 53985 }, ] -[[distribution]] +[[package]] name = "pandas" version = "2.2.3" source = { registry = "https://pypi.org/simple" } @@ -244,19 +257,43 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ab/5f/b38085618b950b79d2d9164a711c52b10aefc0ae6833b96f626b7021b2ed/pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a", size = 13098436 }, ] -[[distribution]] +[[package]] +name = "pluggy" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/96/2d/02d4312c973c6050a18b314a5ad0b3210edb65a906f868e31c111dede4a6/pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1", size = 67955 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/88/5f/e351af9a41f866ac3f1fac4ca0613908d9a41741cfcf2228f4ad853b697d/pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669", size = 20556 }, +] + +[[package]] name = "prompt-toolkit" version = "3.0.36" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "wcwidth" }, + { name = "wcwidth", marker = "platform_system != 'Emscripten'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/fb/93/180be2342f89f16543ec4eb3f25083b5b84eba5378f68efff05409fb39a9/prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63", size = 423863 } wheels = [ { url = "https://files.pythonhosted.org/packages/eb/37/791f1a6edd13c61cac85282368aa68cb0f3f164440fdf60032f2cc6ca34e/prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305", size = 386414 }, ] -[[distribution]] +[[package]] +name = "pytest" +version = "8.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/6c/62bbd536103af674e227c41a8f3dcd022d591f6eed5facb5a0f31ee33bbc/pytest-8.3.3.tar.gz", hash = "sha256:70b98107bd648308a7952b06e6ca9a50bc660be218d53c257cc1fc94fda10181", size = 1442487 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/77/7440a06a8ead44c7757a64362dd22df5760f9b12dc5f11b6188cd2fc27a0/pytest-8.3.3-py3-none-any.whl", hash = "sha256:a6853c7375b2663155079443d2e45de913a911a11d669df02a50814944db57b2", size = 342341 }, +] + +[[package]] name = "python-dateutil" version = "2.9.0.post0" source = { registry = "https://pypi.org/simple" } @@ -268,7 +305,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892 }, ] -[[distribution]] +[[package]] name = "python-multipart" version = "0.0.17" source = { registry = "https://pypi.org/simple" } @@ -277,7 +314,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/b4/fb/275137a799169392f1fa88fff2be92f16eee38e982720a8aaadefc4a36b2/python_multipart-0.0.17-py3-none-any.whl", hash = "sha256:15dc4f487e0a9476cc1201261188ee0940165cffc94429b6fc565c4d3045cb5d", size = 24453 }, ] -[[distribution]] +[[package]] name = "pytz" version = "2024.2" source = { registry = "https://pypi.org/simple" } @@ -286,19 +323,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/11/c3/005fcca25ce078d2cc29fd559379817424e94885510568bc1bc53d7d5846/pytz-2024.2-py2.py3-none-any.whl", hash = "sha256:31c7c1817eb7fae7ca4b8c7ee50c72f93aa2dd863de768e1ef4245d426aa0725", size = 508002 }, ] -[[distribution]] +[[package]] name = "questionary" version = "2.0.1" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "prompt-toolkit" }, + { name = "prompt-toolkit", marker = "platform_system != 'Emscripten'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/84/d0/d73525aeba800df7030ac187d09c59dc40df1c878b4fab8669bdc805535d/questionary-2.0.1.tar.gz", hash = "sha256:bcce898bf3dbb446ff62830c86c5c6fb9a22a54146f0f5597d3da43b10d8fc8b", size = 24726 } wheels = [ { url = "https://files.pythonhosted.org/packages/0b/e7/2dd8f59d1d328773505f78b85405ddb1cfe74126425d076ce72e65540b8b/questionary-2.0.1-py3-none-any.whl", hash = "sha256:8ab9a01d0b91b68444dff7f6652c1e754105533f083cbe27597c8110ecc230a2", size = 34248 }, ] -[[distribution]] +[[package]] name = "setuptools" version = "75.3.0" source = { registry = "https://pypi.org/simple" } @@ -307,7 +344,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/90/12/282ee9bce8b58130cb762fbc9beabd531549952cac11fc56add11dcb7ea0/setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd", size = 1251070 }, ] -[[distribution]] +[[package]] name = "shiny" version = "1.2.0" source = { registry = "https://pypi.org/simple" } @@ -337,16 +374,25 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/42/54/a9ccb1efc98a94e12fdec2e73fa0b79de2989c81bbdff45d4aaa608a5167/shiny-1.2.0-py3-none-any.whl", hash = "sha256:ca6bb27bd04bb79423d6d940ff81c57ed14f638df6ab36d88e397442e7ae5924", size = 4305967 }, ] -[[distribution]] +[[package]] name = "shiny-router" -version = "0.1.5" -source = { editable = "." } +version = "0.1.10" +source = { virtual = "." } dependencies = [ { name = "pandas" }, + { name = "pytest" }, { name = "shiny" }, ] -[[distribution]] +[package.metadata] +requires-dist = [ + { name = "pandas" }, + { name = "pytest" }, + { name = "shiny" }, + { name = "shiny-router", virtual = "." }, +] + +[[package]] name = "six" version = "1.16.0" source = { registry = "https://pypi.org/simple" } @@ -355,7 +401,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053 }, ] -[[distribution]] +[[package]] name = "sniffio" version = "1.3.1" source = { registry = "https://pypi.org/simple" } @@ -364,7 +410,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2", size = 10235 }, ] -[[distribution]] +[[package]] name = "starlette" version = "0.41.2" source = { registry = "https://pypi.org/simple" } @@ -376,7 +422,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/54/43/f185bfd0ca1d213beb4293bed51d92254df23d8ceaf6c0e17146d508a776/starlette-0.41.2-py3-none-any.whl", hash = "sha256:fbc189474b4731cf30fcef52f18a8d070e3f3b46c6a04c97579e85e6ffca942d", size = 73259 }, ] -[[distribution]] +[[package]] name = "typing-extensions" version = "4.12.2" source = { registry = "https://pypi.org/simple" } @@ -385,7 +431,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/26/9f/ad63fc0248c5379346306f8668cda6e2e2e9c95e01216d2b8ffd9ff037d0/typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d", size = 37438 }, ] -[[distribution]] +[[package]] name = "tzdata" version = "2024.2" source = { registry = "https://pypi.org/simple" } @@ -394,7 +440,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a6/ab/7e5f53c3b9d14972843a647d8d7a853969a58aecc7559cb3267302c94774/tzdata-2024.2-py2.py3-none-any.whl", hash = "sha256:a48093786cdcde33cad18c2555e8532f34422074448fbc874186f0abd79565cd", size = 346586 }, ] -[[distribution]] +[[package]] name = "uc-micro-py" version = "1.0.3" source = { registry = "https://pypi.org/simple" } @@ -403,25 +449,25 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/37/87/1f677586e8ac487e29672e4b17455758fce261de06a0d086167bb760361a/uc_micro_py-1.0.3-py3-none-any.whl", hash = "sha256:db1dffff340817673d7b466ec86114a9dc0e9d4d9b5ba229d9d60e5c12600cd5", size = 6229 }, ] -[[distribution]] +[[package]] name = "uvicorn" version = "0.32.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "click" }, - { name = "h11" }, + { name = "click", marker = "platform_system != 'Emscripten'" }, + { name = "h11", marker = "platform_system != 'Emscripten'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/e0/fc/1d785078eefd6945f3e5bab5c076e4230698046231eb0f3747bc5c8fa992/uvicorn-0.32.0.tar.gz", hash = "sha256:f78b36b143c16f54ccdb8190d0a26b5f1901fe5a3c777e1ab29f26391af8551e", size = 77564 } wheels = [ { url = "https://files.pythonhosted.org/packages/eb/14/78bd0e95dd2444b6caacbca2b730671d4295ccb628ef58b81bee903629df/uvicorn-0.32.0-py3-none-any.whl", hash = "sha256:60b8f3a5ac027dcd31448f411ced12b5ef452c646f76f02f8cc3f25d8d26fd82", size = 63723 }, ] -[[distribution]] +[[package]] name = "watchfiles" version = "0.24.0" source = { registry = "https://pypi.org/simple" } dependencies = [ - { name = "anyio" }, + { name = "anyio", marker = "platform_system != 'Emscripten'" }, ] sdist = { url = "https://files.pythonhosted.org/packages/c8/27/2ba23c8cc85796e2d41976439b08d52f691655fdb9401362099502d1f0cf/watchfiles-0.24.0.tar.gz", hash = "sha256:afb72325b74fa7a428c009c1b8be4b4d7c2afedafb2982827ef2156646df2fe1", size = 37870 } wheels = [ @@ -452,7 +498,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a6/8b/8a7755c5e7221bb35fe4af2dc44db9174f90ebf0344fd5e9b1e8b42d381e/watchfiles-0.24.0-cp313-none-win_amd64.whl", hash = "sha256:a974231b4fdd1bb7f62064a0565a6b107d27d21d9acb50c484d2cdba515b9366", size = 276622 }, ] -[[distribution]] +[[package]] name = "wcwidth" version = "0.2.13" source = { registry = "https://pypi.org/simple" } @@ -461,7 +507,7 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/fd/84/fd2ba7aafacbad3c4201d395674fc6348826569da3c0937e75505ead3528/wcwidth-0.2.13-py2.py3-none-any.whl", hash = "sha256:3da69048e4540d84af32131829ff948f1e022c1c6bdb8d6102117aac784f6859", size = 34166 }, ] -[[distribution]] +[[package]] name = "websockets" version = "13.1" source = { registry = "https://pypi.org/simple" }