pipecatcloud 1.0.0__tar.gz → 1.0.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/CHANGELOG.md +16 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/CLAUDE.md +1 -1
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/PKG-INFO +4 -4
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/README.md +2 -2
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/pyproject.toml +1 -1
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/_utils/console_utils.py +1 -1
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/commands/deploy.py +11 -9
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/commands/secrets.py +1 -1
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud.egg-info/PKG-INFO +4 -4
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud.egg-info/SOURCES.txt +3 -0
- pipecatcloud-1.0.1/src/pipecatcloud.egg-info/scm_file_list.json +70 -0
- pipecatcloud-1.0.1/src/pipecatcloud.egg-info/scm_version.json +8 -0
- pipecatcloud-1.0.1/tests/test_deploy_image_pull_secret.py +114 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/uv.lock +137 -3
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/.claude/settings.json +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/.github/workflows/format.yml +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/.github/workflows/publish-pypi.yml +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/.github/workflows/publish-test.yml +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/.github/workflows/python-compatibility.yml +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/.github/workflows/tests.yml +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/.gitignore +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/.pre-commit-config.yaml +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/LICENSE +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/pipecat-cloud.png +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/pytest.ini +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/scripts/fix-ruff.sh +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/setup.cfg +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/__init__.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/__version__.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/_utils/__init__.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/_utils/async_utils.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/_utils/auth_utils.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/_utils/build_utils.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/_utils/deploy_utils.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/_utils/regions.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/agent.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/api.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/__init__.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/api.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/commands/__init__.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/commands/agent.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/commands/auth.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/commands/build.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/commands/docker.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/commands/organizations.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/commands/regions.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/commands/spend_limit.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/config.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/cli/entry_point.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/config.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/constants.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/exception.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/py.typed +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/session.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud/smallwebrtc/session_manager.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud.egg-info/dependency_links.txt +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud.egg-info/entry_points.txt +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud.egg-info/requires.txt +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/src/pipecatcloud.egg-info/top_level.txt +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/__init__.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/conftest.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_agent_args.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_agent_sessions.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_agent_stop.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_api_client.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_auth.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_build_utils.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_config_file.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_deploy_poll.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_deployment_status.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_docker_commands.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_krisp_viva.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_max_session_duration.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_pat_auth.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_regions.py +0 -0
- {pipecatcloud-1.0.0 → pipecatcloud-1.0.1}/tests/test_spend_limit.py +0 -0
|
@@ -5,6 +5,22 @@ All notable changes to **Pipecat Cloud** will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.0.1] - 2026-07-13
|
|
9
|
+
|
|
10
|
+
### Fixed
|
|
11
|
+
|
|
12
|
+
- `pipecat cloud deploy` now verifies the image pull secret passed via
|
|
13
|
+
`--credentials` by looking it up in the secrets list, matching on both name
|
|
14
|
+
and type. Previously the check misread an API error response as "secret
|
|
15
|
+
exists", and a regular secret set with the same name also passed. A deploy
|
|
16
|
+
referencing a missing image pull secret now aborts with a clear error
|
|
17
|
+
instead of proceeding.
|
|
18
|
+
|
|
19
|
+
- Documentation links in CLI output now point to `docs.pipecat.ai` instead of
|
|
20
|
+
the retired `docs.pipecat.daily.co` domain. API error panels link directly
|
|
21
|
+
to the matching entry in the error codes reference, and the deploy and
|
|
22
|
+
image pull secret prompts link to the image pull secrets guide.
|
|
23
|
+
|
|
8
24
|
## [1.0.0] - 2026-06-19
|
|
9
25
|
|
|
10
26
|
### Added
|
|
@@ -8,7 +8,7 @@ Guidance for Claude Code working in this repo.
|
|
|
8
8
|
|
|
9
9
|
- Package root: `src/pipecatcloud/`
|
|
10
10
|
- CLI: registered as a Pipecat CLI extension via the `pipecat_cli.extensions:cloud` entry point (surfaced as `pipecat cloud`). There is no standalone entry point — no `[project.scripts]` and no `__main__`; the CLI runs only through the Pipecat CLI.
|
|
11
|
-
- Public docs: https://docs.pipecat.
|
|
11
|
+
- Public docs: https://docs.pipecat.ai/pipecat-cloud
|
|
12
12
|
|
|
13
13
|
## Toolchain
|
|
14
14
|
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pipecatcloud
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.1
|
|
4
4
|
Summary: Cloud hosting for Pipecat AI applications
|
|
5
5
|
License: BSD 2-Clause License
|
|
6
|
-
Project-URL: Website, https://docs.pipecat.
|
|
6
|
+
Project-URL: Website, https://docs.pipecat.ai/pipecat-cloud
|
|
7
7
|
Keywords: pipecat,pipecat-ai,voice,ai,llm
|
|
8
8
|
Requires-Python: >=3.11
|
|
9
9
|
Description-Content-Type: text/markdown
|
|
@@ -25,7 +25,7 @@ Dynamic: license-file
|
|
|
25
25
|
<img alt="pipecat cloud" width="500px" height="auto" src="https://raw.githubusercontent.com/daily-co/pipecat-cloud/main/pipecat-cloud.png">
|
|
26
26
|
</div></h1>
|
|
27
27
|
|
|
28
|
-
[](https://docs.pipecat.
|
|
28
|
+
[](https://docs.pipecat.ai/pipecat-cloud)
|
|
29
29
|
[](https://pypi.org/project/pipecatcloud)
|
|
30
30
|
|
|
31
31
|
# Pipecat Cloud
|
|
@@ -41,7 +41,7 @@ Python module and CLI for interacting with [Pipecat Cloud](https://pipecat.daily
|
|
|
41
41
|
|
|
42
42
|
### Documentation
|
|
43
43
|
|
|
44
|
-
Documentation for Pipecat Cloud is available [here](https://docs.pipecat.
|
|
44
|
+
Documentation for Pipecat Cloud is available [here](https://docs.pipecat.ai/pipecat-cloud).
|
|
45
45
|
|
|
46
46
|
### Installation
|
|
47
47
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
<img alt="pipecat cloud" width="500px" height="auto" src="https://raw.githubusercontent.com/daily-co/pipecat-cloud/main/pipecat-cloud.png">
|
|
3
3
|
</div></h1>
|
|
4
4
|
|
|
5
|
-
[](https://docs.pipecat.
|
|
5
|
+
[](https://docs.pipecat.ai/pipecat-cloud)
|
|
6
6
|
[](https://pypi.org/project/pipecatcloud)
|
|
7
7
|
|
|
8
8
|
# Pipecat Cloud
|
|
@@ -18,7 +18,7 @@ Python module and CLI for interacting with [Pipecat Cloud](https://pipecat.daily
|
|
|
18
18
|
|
|
19
19
|
### Documentation
|
|
20
20
|
|
|
21
|
-
Documentation for Pipecat Cloud is available [here](https://docs.pipecat.
|
|
21
|
+
Documentation for Pipecat Cloud is available [here](https://docs.pipecat.ai/pipecat-cloud).
|
|
22
22
|
|
|
23
23
|
### Installation
|
|
24
24
|
|
|
@@ -116,7 +116,7 @@ class PipecatConsole(Console):
|
|
|
116
116
|
Panel(
|
|
117
117
|
f"[red]{title}[/red]\n\n[dim]Error message:[/dim]\n{error_message}",
|
|
118
118
|
title=f"[bold red]{PANEL_TITLE_ERROR}{f' - {code}' if code else ''}[/bold red]",
|
|
119
|
-
subtitle=f"[dim]Docs: https://docs.pipecat.
|
|
119
|
+
subtitle=f"[dim]Docs: https://docs.pipecat.ai/pipecat-cloud/fundamentals/error-codes#{str(code).lower()}[/dim]"
|
|
120
120
|
if not hide_subtitle and code
|
|
121
121
|
else None,
|
|
122
122
|
title_align="left",
|
|
@@ -332,22 +332,24 @@ async def _deploy(params: DeployConfigParams, org, force: bool = False):
|
|
|
332
332
|
f"[dim]Verifying image pull secret {params.image_credentials} exists...[/dim]"
|
|
333
333
|
)
|
|
334
334
|
)
|
|
335
|
-
|
|
336
|
-
secret_set=params.image_credentials, org=org, live=live
|
|
337
|
-
)
|
|
335
|
+
sets, error = await API.secrets_list(org=org, live=live)
|
|
338
336
|
|
|
339
337
|
if error:
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
338
|
+
return typer.Exit()
|
|
339
|
+
|
|
340
|
+
# Image pull secrets are globally unique by name (region is validated
|
|
341
|
+
# server-side at deploy), so match on name + type without region filter.
|
|
342
|
+
creds_exist = any(
|
|
343
|
+
s.get("name") == params.image_credentials and s.get("type") == "imagePullSecret"
|
|
344
|
+
for s in (sets or [])
|
|
345
|
+
)
|
|
345
346
|
|
|
346
347
|
if not creds_exist:
|
|
347
348
|
live.stop()
|
|
348
349
|
console.error(
|
|
349
350
|
f"Image pull secret with name [bold]'{params.image_credentials}'[/bold] not found in namespace [bold]'{org}'[/bold]"
|
|
350
351
|
)
|
|
352
|
+
return typer.Exit()
|
|
351
353
|
|
|
352
354
|
live.update(
|
|
353
355
|
console.status(
|
|
@@ -775,7 +777,7 @@ def create_deploy_command(app: typer.Typer):
|
|
|
775
777
|
console.error(
|
|
776
778
|
"Deployments require an image pull secret [bold](--credentials)[/bold] to securely pull images from private repositories."
|
|
777
779
|
"\nPlease provide an image pull secret name or use [bold][--no-credentials][/bold] to deploy without one.",
|
|
778
|
-
subtitle="Learn more:https://docs.pipecat.
|
|
780
|
+
subtitle="Learn more: https://docs.pipecat.ai/pipecat-cloud/fundamentals/secrets#image-pull-secrets",
|
|
779
781
|
title_extra="Attempt to deploy without repository credentials",
|
|
780
782
|
)
|
|
781
783
|
return typer.Exit()
|
|
@@ -567,7 +567,7 @@ async def image_pull_secret(
|
|
|
567
567
|
if not credentials:
|
|
568
568
|
console.print(
|
|
569
569
|
"[cyan]For more information about image pull secrets, see: "
|
|
570
|
-
"https://docs.pipecat.
|
|
570
|
+
"https://docs.pipecat.ai/pipecat-cloud/fundamentals/secrets#image-pull-secrets[/cyan]\n"
|
|
571
571
|
)
|
|
572
572
|
username = await questionary.text(f"Username for image repository '{host}'").ask_async()
|
|
573
573
|
password = await questionary.password(
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pipecatcloud
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.1
|
|
4
4
|
Summary: Cloud hosting for Pipecat AI applications
|
|
5
5
|
License: BSD 2-Clause License
|
|
6
|
-
Project-URL: Website, https://docs.pipecat.
|
|
6
|
+
Project-URL: Website, https://docs.pipecat.ai/pipecat-cloud
|
|
7
7
|
Keywords: pipecat,pipecat-ai,voice,ai,llm
|
|
8
8
|
Requires-Python: >=3.11
|
|
9
9
|
Description-Content-Type: text/markdown
|
|
@@ -25,7 +25,7 @@ Dynamic: license-file
|
|
|
25
25
|
<img alt="pipecat cloud" width="500px" height="auto" src="https://raw.githubusercontent.com/daily-co/pipecat-cloud/main/pipecat-cloud.png">
|
|
26
26
|
</div></h1>
|
|
27
27
|
|
|
28
|
-
[](https://docs.pipecat.
|
|
28
|
+
[](https://docs.pipecat.ai/pipecat-cloud)
|
|
29
29
|
[](https://pypi.org/project/pipecatcloud)
|
|
30
30
|
|
|
31
31
|
# Pipecat Cloud
|
|
@@ -41,7 +41,7 @@ Python module and CLI for interacting with [Pipecat Cloud](https://pipecat.daily
|
|
|
41
41
|
|
|
42
42
|
### Documentation
|
|
43
43
|
|
|
44
|
-
Documentation for Pipecat Cloud is available [here](https://docs.pipecat.
|
|
44
|
+
Documentation for Pipecat Cloud is available [here](https://docs.pipecat.ai/pipecat-cloud).
|
|
45
45
|
|
|
46
46
|
### Installation
|
|
47
47
|
|
|
@@ -29,6 +29,8 @@ src/pipecatcloud.egg-info/SOURCES.txt
|
|
|
29
29
|
src/pipecatcloud.egg-info/dependency_links.txt
|
|
30
30
|
src/pipecatcloud.egg-info/entry_points.txt
|
|
31
31
|
src/pipecatcloud.egg-info/requires.txt
|
|
32
|
+
src/pipecatcloud.egg-info/scm_file_list.json
|
|
33
|
+
src/pipecatcloud.egg-info/scm_version.json
|
|
32
34
|
src/pipecatcloud.egg-info/top_level.txt
|
|
33
35
|
src/pipecatcloud/_utils/__init__.py
|
|
34
36
|
src/pipecatcloud/_utils/async_utils.py
|
|
@@ -61,6 +63,7 @@ tests/test_api_client.py
|
|
|
61
63
|
tests/test_auth.py
|
|
62
64
|
tests/test_build_utils.py
|
|
63
65
|
tests/test_config_file.py
|
|
66
|
+
tests/test_deploy_image_pull_secret.py
|
|
64
67
|
tests/test_deploy_poll.py
|
|
65
68
|
tests/test_deployment_status.py
|
|
66
69
|
tests/test_docker_commands.py
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
{
|
|
2
|
+
"files": [
|
|
3
|
+
"pipecat-cloud.png",
|
|
4
|
+
".pre-commit-config.yaml",
|
|
5
|
+
"README.md",
|
|
6
|
+
"uv.lock",
|
|
7
|
+
"LICENSE",
|
|
8
|
+
"pyproject.toml",
|
|
9
|
+
"CHANGELOG.md",
|
|
10
|
+
"CLAUDE.md",
|
|
11
|
+
".gitignore",
|
|
12
|
+
"pytest.ini",
|
|
13
|
+
"scripts/fix-ruff.sh",
|
|
14
|
+
"src/pipecatcloud/agent.py",
|
|
15
|
+
"src/pipecatcloud/py.typed",
|
|
16
|
+
"src/pipecatcloud/__init__.py",
|
|
17
|
+
"src/pipecatcloud/session.py",
|
|
18
|
+
"src/pipecatcloud/config.py",
|
|
19
|
+
"src/pipecatcloud/exception.py",
|
|
20
|
+
"src/pipecatcloud/api.py",
|
|
21
|
+
"src/pipecatcloud/constants.py",
|
|
22
|
+
"src/pipecatcloud/__version__.py",
|
|
23
|
+
"src/pipecatcloud/smallwebrtc/session_manager.py",
|
|
24
|
+
"src/pipecatcloud/_utils/__init__.py",
|
|
25
|
+
"src/pipecatcloud/_utils/build_utils.py",
|
|
26
|
+
"src/pipecatcloud/_utils/console_utils.py",
|
|
27
|
+
"src/pipecatcloud/_utils/deploy_utils.py",
|
|
28
|
+
"src/pipecatcloud/_utils/regions.py",
|
|
29
|
+
"src/pipecatcloud/_utils/auth_utils.py",
|
|
30
|
+
"src/pipecatcloud/_utils/async_utils.py",
|
|
31
|
+
"src/pipecatcloud/cli/__init__.py",
|
|
32
|
+
"src/pipecatcloud/cli/config.py",
|
|
33
|
+
"src/pipecatcloud/cli/entry_point.py",
|
|
34
|
+
"src/pipecatcloud/cli/api.py",
|
|
35
|
+
"src/pipecatcloud/cli/commands/agent.py",
|
|
36
|
+
"src/pipecatcloud/cli/commands/__init__.py",
|
|
37
|
+
"src/pipecatcloud/cli/commands/organizations.py",
|
|
38
|
+
"src/pipecatcloud/cli/commands/build.py",
|
|
39
|
+
"src/pipecatcloud/cli/commands/secrets.py",
|
|
40
|
+
"src/pipecatcloud/cli/commands/auth.py",
|
|
41
|
+
"src/pipecatcloud/cli/commands/docker.py",
|
|
42
|
+
"src/pipecatcloud/cli/commands/regions.py",
|
|
43
|
+
"src/pipecatcloud/cli/commands/spend_limit.py",
|
|
44
|
+
"src/pipecatcloud/cli/commands/deploy.py",
|
|
45
|
+
".claude/settings.json",
|
|
46
|
+
"tests/test_agent_stop.py",
|
|
47
|
+
"tests/test_deploy_poll.py",
|
|
48
|
+
"tests/__init__.py",
|
|
49
|
+
"tests/test_docker_commands.py",
|
|
50
|
+
"tests/test_api_client.py",
|
|
51
|
+
"tests/test_config_file.py",
|
|
52
|
+
"tests/test_deployment_status.py",
|
|
53
|
+
"tests/test_spend_limit.py",
|
|
54
|
+
"tests/test_auth.py",
|
|
55
|
+
"tests/test_agent_args.py",
|
|
56
|
+
"tests/test_agent_sessions.py",
|
|
57
|
+
"tests/test_max_session_duration.py",
|
|
58
|
+
"tests/test_regions.py",
|
|
59
|
+
"tests/conftest.py",
|
|
60
|
+
"tests/test_krisp_viva.py",
|
|
61
|
+
"tests/test_build_utils.py",
|
|
62
|
+
"tests/test_deploy_image_pull_secret.py",
|
|
63
|
+
"tests/test_pat_auth.py",
|
|
64
|
+
".github/workflows/publish-test.yml",
|
|
65
|
+
".github/workflows/python-compatibility.yml",
|
|
66
|
+
".github/workflows/format.yml",
|
|
67
|
+
".github/workflows/tests.yml",
|
|
68
|
+
".github/workflows/publish-pypi.yml"
|
|
69
|
+
]
|
|
70
|
+
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Regression tests for the image pull secret existence check in `pcc deploy`.
|
|
3
|
+
|
|
4
|
+
PCC-195: the deploy command used to verify an image pull secret by calling the
|
|
5
|
+
per-set secrets GET endpoint and treating its HTTP 400 as "exists". That hack
|
|
6
|
+
also passed a regular (non-image-pull) secret that happened to share the name,
|
|
7
|
+
and the "not found" branch never actually aborted the deploy. The check now
|
|
8
|
+
lists secret sets and matches on name + type == "imagePullSecret", aborting when
|
|
9
|
+
no match is found.
|
|
10
|
+
"""
|
|
11
|
+
|
|
12
|
+
import sys
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from unittest.mock import AsyncMock, patch
|
|
15
|
+
|
|
16
|
+
import pytest
|
|
17
|
+
import typer
|
|
18
|
+
|
|
19
|
+
# Import from source, not installed package
|
|
20
|
+
sys.path.insert(0, str(Path(__file__).parent.parent / "src"))
|
|
21
|
+
|
|
22
|
+
from pipecatcloud._utils.deploy_utils import DeployConfigParams
|
|
23
|
+
from pipecatcloud.cli.commands.deploy import _deploy
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _make_params():
|
|
27
|
+
return DeployConfigParams(
|
|
28
|
+
agent_name="test-agent",
|
|
29
|
+
image="test:latest",
|
|
30
|
+
image_credentials="mycreds",
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
@pytest.fixture
|
|
35
|
+
def deploy_mocks():
|
|
36
|
+
"""Patch the external collaborators of the CLI `_deploy` flow.
|
|
37
|
+
|
|
38
|
+
`console` and `Live` are stubbed so nothing renders; `API.agent` reports no
|
|
39
|
+
existing deployment (so no confirmation prompt), and `API.deploy` returns an
|
|
40
|
+
error to halt the flow immediately after the image pull secret guard.
|
|
41
|
+
"""
|
|
42
|
+
with (
|
|
43
|
+
patch("pipecatcloud.cli.commands.deploy.API") as mock_api,
|
|
44
|
+
patch("pipecatcloud.cli.commands.deploy.Live"),
|
|
45
|
+
patch("pipecatcloud.cli.commands.deploy.console"),
|
|
46
|
+
):
|
|
47
|
+
mock_api.agent = AsyncMock(return_value=(None, None))
|
|
48
|
+
mock_api.deploy = AsyncMock(return_value=(None, {"code": "stop"}))
|
|
49
|
+
yield mock_api
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
@pytest.mark.asyncio
|
|
53
|
+
async def test_matching_image_pull_secret_passes_guard(deploy_mocks):
|
|
54
|
+
"""A set with matching name and type 'imagePullSecret' lets the deploy proceed."""
|
|
55
|
+
# Arrange
|
|
56
|
+
deploy_mocks.secrets_list = AsyncMock(
|
|
57
|
+
return_value=(
|
|
58
|
+
[{"name": "mycreds", "type": "imagePullSecret", "region": "us-west-2"}],
|
|
59
|
+
None,
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
# Act
|
|
64
|
+
await _deploy(_make_params(), "test-org", force=True)
|
|
65
|
+
|
|
66
|
+
# Assert: guard passed, so deployment was attempted
|
|
67
|
+
deploy_mocks.deploy.assert_awaited_once()
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
@pytest.mark.asyncio
|
|
71
|
+
async def test_same_name_wrong_type_is_rejected(deploy_mocks):
|
|
72
|
+
"""A regular secret sharing the name must NOT satisfy the image pull check (PCC-195)."""
|
|
73
|
+
# Arrange
|
|
74
|
+
deploy_mocks.secrets_list = AsyncMock(
|
|
75
|
+
return_value=(
|
|
76
|
+
[{"name": "mycreds", "type": "secret", "region": "us-west-2"}],
|
|
77
|
+
None,
|
|
78
|
+
)
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
# Act
|
|
82
|
+
result = await _deploy(_make_params(), "test-org", force=True)
|
|
83
|
+
|
|
84
|
+
# Assert: aborted before attempting deployment
|
|
85
|
+
assert isinstance(result, typer.Exit)
|
|
86
|
+
deploy_mocks.deploy.assert_not_awaited()
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
@pytest.mark.asyncio
|
|
90
|
+
async def test_missing_secret_is_rejected(deploy_mocks):
|
|
91
|
+
"""No matching set aborts the deploy before calling API.deploy."""
|
|
92
|
+
# Arrange
|
|
93
|
+
deploy_mocks.secrets_list = AsyncMock(return_value=([], None))
|
|
94
|
+
|
|
95
|
+
# Act
|
|
96
|
+
result = await _deploy(_make_params(), "test-org", force=True)
|
|
97
|
+
|
|
98
|
+
# Assert
|
|
99
|
+
assert isinstance(result, typer.Exit)
|
|
100
|
+
deploy_mocks.deploy.assert_not_awaited()
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@pytest.mark.asyncio
|
|
104
|
+
async def test_secrets_list_error_aborts(deploy_mocks):
|
|
105
|
+
"""An error while listing secrets aborts the deploy."""
|
|
106
|
+
# Arrange
|
|
107
|
+
deploy_mocks.secrets_list = AsyncMock(return_value=(None, {"code": "500"}))
|
|
108
|
+
|
|
109
|
+
# Act
|
|
110
|
+
result = await _deploy(_make_params(), "test-org", force=True)
|
|
111
|
+
|
|
112
|
+
# Assert
|
|
113
|
+
assert isinstance(result, typer.Exit)
|
|
114
|
+
deploy_mocks.deploy.assert_not_awaited()
|
|
@@ -322,6 +322,12 @@ wheels = [
|
|
|
322
322
|
{ url = "https://files.pythonhosted.org/packages/12/b3/231ffd4ab1fc9d679809f356cebee130ac7daa00d6d6f3206dd4fd137e9e/distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2", size = 20277, upload-time = "2023-12-24T09:54:30.421Z" },
|
|
323
323
|
]
|
|
324
324
|
|
|
325
|
+
[[package]]
|
|
326
|
+
name = "docopt"
|
|
327
|
+
version = "0.6.2"
|
|
328
|
+
source = { registry = "https://pypi.org/simple" }
|
|
329
|
+
sdist = { url = "https://files.pythonhosted.org/packages/a2/55/8f8cab2afd404cf578136ef2cc5dfb50baa1761b68c9da1fb1e4eed343c9/docopt-0.6.2.tar.gz", hash = "sha256:49b3a825280bd66b3aa83585ef59c4a8c82f2c8a522dbe754a8bc8d08c85c491", size = 25901, upload-time = "2014-06-16T11:18:57.406Z" }
|
|
330
|
+
|
|
325
331
|
[[package]]
|
|
326
332
|
name = "docstring-parser"
|
|
327
333
|
version = "0.17.0"
|
|
@@ -952,6 +958,18 @@ wheels = [
|
|
|
952
958
|
{ url = "https://files.pythonhosted.org/packages/88/b2/d0896bdcdc8d28a7fc5717c305f1a861c26e18c05047949fb371034d98bd/nodeenv-1.10.0-py2.py3-none-any.whl", hash = "sha256:5bb13e3eed2923615535339b3c620e76779af4cb4c6a90deccc9e36b274d3827", size = 23438, upload-time = "2025-12-20T14:08:52.782Z" },
|
|
953
959
|
]
|
|
954
960
|
|
|
961
|
+
[[package]]
|
|
962
|
+
name = "num2words"
|
|
963
|
+
version = "0.5.14"
|
|
964
|
+
source = { registry = "https://pypi.org/simple" }
|
|
965
|
+
dependencies = [
|
|
966
|
+
{ name = "docopt" },
|
|
967
|
+
]
|
|
968
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f6/58/ad645bd38b4b648eb2fc2ba1b909398e54eb0cbb6a7dbd2b4953e38c9621/num2words-0.5.14.tar.gz", hash = "sha256:b066ec18e56b6616a3b38086b5747daafbaa8868b226a36127e0451c0cf379c6", size = 218213, upload-time = "2024-12-17T20:17:10.191Z" }
|
|
969
|
+
wheels = [
|
|
970
|
+
{ url = "https://files.pythonhosted.org/packages/d6/5b/545e9267a1cc080c8a1be2746113a063e34bcdd0f5173fd665a5c13cb234/num2words-0.5.14-py3-none-any.whl", hash = "sha256:1c8e5b00142fc2966fd8d685001e36c4a9911e070d1b120e1beb721fa1edb33d", size = 163525, upload-time = "2024-12-17T20:17:06.074Z" },
|
|
971
|
+
]
|
|
972
|
+
|
|
955
973
|
[[package]]
|
|
956
974
|
name = "numba"
|
|
957
975
|
version = "0.65.1"
|
|
@@ -1218,7 +1236,7 @@ wheels = [
|
|
|
1218
1236
|
|
|
1219
1237
|
[[package]]
|
|
1220
1238
|
name = "pipecat-ai"
|
|
1221
|
-
version = "1.
|
|
1239
|
+
version = "1.5.0"
|
|
1222
1240
|
source = { registry = "https://pypi.org/simple" }
|
|
1223
1241
|
dependencies = [
|
|
1224
1242
|
{ name = "aiofiles" },
|
|
@@ -1228,6 +1246,7 @@ dependencies = [
|
|
|
1228
1246
|
{ name = "loguru" },
|
|
1229
1247
|
{ name = "markdown" },
|
|
1230
1248
|
{ name = "nltk" },
|
|
1249
|
+
{ name = "num2words" },
|
|
1231
1250
|
{ name = "numba" },
|
|
1232
1251
|
{ name = "numpy" },
|
|
1233
1252
|
{ name = "onnxruntime" },
|
|
@@ -1236,13 +1255,17 @@ dependencies = [
|
|
|
1236
1255
|
{ name = "protobuf" },
|
|
1237
1256
|
{ name = "pydantic" },
|
|
1238
1257
|
{ name = "pyloudnorm" },
|
|
1258
|
+
{ name = "pyyaml" },
|
|
1259
|
+
{ name = "pyyaml-include" },
|
|
1239
1260
|
{ name = "resampy" },
|
|
1240
1261
|
{ name = "soxr" },
|
|
1262
|
+
{ name = "typing-extensions" },
|
|
1241
1263
|
{ name = "wait-for2", marker = "python_full_version < '3.12'" },
|
|
1264
|
+
{ name = "websockets" },
|
|
1242
1265
|
]
|
|
1243
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1266
|
+
sdist = { url = "https://files.pythonhosted.org/packages/e3/59/7b46ccbeb7c8f68083d0bc1ef39583e78938c6e65af1ff6f707051ea0948/pipecat_ai-1.5.0.tar.gz", hash = "sha256:df9bd5c3176076d425ffba3d510e0122d055b97c9ba8ad35a4390073eb421e18", size = 11624719, upload-time = "2026-07-04T17:11:50.441Z" }
|
|
1244
1267
|
wheels = [
|
|
1245
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1268
|
+
{ url = "https://files.pythonhosted.org/packages/41/05/c7daebbf0fc59fd6106e34e52a255727443c1db49d046f7ed0bd9dcb6e4e/pipecat_ai-1.5.0-py3-none-any.whl", hash = "sha256:6089ac7ec418b310975c9c16dd472c16f99838810aae707d669b4f6f5981cf8a", size = 11264890, upload-time = "2026-07-04T17:11:47.677Z" },
|
|
1246
1269
|
]
|
|
1247
1270
|
|
|
1248
1271
|
[[package]]
|
|
@@ -1717,6 +1740,18 @@ wheels = [
|
|
|
1717
1740
|
{ url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
|
|
1718
1741
|
]
|
|
1719
1742
|
|
|
1743
|
+
[[package]]
|
|
1744
|
+
name = "pyyaml-include"
|
|
1745
|
+
version = "1.4.1"
|
|
1746
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1747
|
+
dependencies = [
|
|
1748
|
+
{ name = "pyyaml" },
|
|
1749
|
+
]
|
|
1750
|
+
sdist = { url = "https://files.pythonhosted.org/packages/7f/be/2d07ad85e3d593d69640876a8686eae2c533db8cb7bf298d25c421b4d2d5/pyyaml-include-1.4.1.tar.gz", hash = "sha256:1a96e33a99a3e56235f5221273832464025f02ff3d8539309a3bf00dec624471", size = 20592, upload-time = "2024-03-25T14:56:43.748Z" }
|
|
1751
|
+
wheels = [
|
|
1752
|
+
{ url = "https://files.pythonhosted.org/packages/d5/ca/6a2cc3a73170d10b5af1f1613baa2ed1f8f46f62dd0bfab2bffd2c2fe260/pyyaml_include-1.4.1-py3-none-any.whl", hash = "sha256:323c7f3a19c82fbc4d73abbaab7ef4f793e146a13383866831631b26ccc7fb00", size = 19079, upload-time = "2024-03-25T14:56:41.274Z" },
|
|
1753
|
+
]
|
|
1754
|
+
|
|
1720
1755
|
[[package]]
|
|
1721
1756
|
name = "questionary"
|
|
1722
1757
|
version = "2.1.1"
|
|
@@ -2161,6 +2196,105 @@ wheels = [
|
|
|
2161
2196
|
{ url = "https://files.pythonhosted.org/packages/af/b5/123f13c975e9f27ab9c0770f514345bd406d0e8d3b7a0723af9d43f710af/wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1", size = 37286, upload-time = "2025-09-22T16:29:51.641Z" },
|
|
2162
2197
|
]
|
|
2163
2198
|
|
|
2199
|
+
[[package]]
|
|
2200
|
+
name = "websockets"
|
|
2201
|
+
version = "16.1"
|
|
2202
|
+
source = { registry = "https://pypi.org/simple" }
|
|
2203
|
+
sdist = { url = "https://files.pythonhosted.org/packages/8c/02/b9a097e1e16fee4e2fd1ec8c39f6a9c5d6257bae8fa12640caf869f54436/websockets-16.1.tar.gz", hash = "sha256:299468cbe42e2b9981134c7c51d99387d8a7bf562b00183b3eec53f882846dad", size = 182530, upload-time = "2026-07-10T06:32:57.734Z" }
|
|
2204
|
+
wheels = [
|
|
2205
|
+
{ url = "https://files.pythonhosted.org/packages/9e/13/d47429afcc2c28616c32640009c84ea3f95660dab805766345b9682468e0/websockets-16.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a9b1d7a63cba8e6b9b77e499a81eab29d31100298d090ad4507d1048c0b9cae0", size = 179770, upload-time = "2026-07-10T06:30:46.308Z" },
|
|
2206
|
+
{ url = "https://files.pythonhosted.org/packages/6f/c7/2f0a722039a1e0107be73ed672ba604449b4956e48733e8e6b8a005aea42/websockets-16.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:bedbc5efeb96621aa2921d2d92608246691399418cac22acba427eb11877ea1f", size = 177455, upload-time = "2026-07-10T06:30:47.601Z" },
|
|
2207
|
+
{ url = "https://files.pythonhosted.org/packages/43/6a/c26b0ae449e93d256ce5cdd50d5fe97b575a63e8dcd311a1faa972fd6bc6/websockets-16.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fd847ab82133015afe65d778e7966ab42dba16bd7ad2e5b8a7918db6539f3f94", size = 177731, upload-time = "2026-07-10T06:30:49.102Z" },
|
|
2208
|
+
{ url = "https://files.pythonhosted.org/packages/cc/3f/381550b344a02f0d2f84cda25e79b54575291bc7022128a41163fe8ba5b0/websockets-16.1-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:e2fb33ccb16ee40a95cc676d7b0ff451a9a2632f11a0dbc2e666326892b2e1de", size = 187066, upload-time = "2026-07-10T06:30:50.505Z" },
|
|
2209
|
+
{ url = "https://files.pythonhosted.org/packages/4a/87/5ab1ec2086910f23cfb9ec0c1c29fbcc24a9d190b5198b1557c00ce4a47e/websockets-16.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:97f15b6d9ea9c2eaf6ccab964a082b09bfa6634a495bb0c2e9e7ee6943f58976", size = 188301, upload-time = "2026-07-10T06:30:51.835Z" },
|
|
2210
|
+
{ url = "https://files.pythonhosted.org/packages/75/4b/bbbb8e6fac4cfc53d7aaa69a3d531bf10799354b0021f4b58914aced8c1a/websockets-16.1-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:638cf57c48b4ad8ac1ff1e453f4f97db2426b690ddc111e6da96b27b4a340bc3", size = 191594, upload-time = "2026-07-10T06:30:53.229Z" },
|
|
2211
|
+
{ url = "https://files.pythonhosted.org/packages/5c/da/6c0c349443d6e999f481e3d9a0e57e7ac2956d75d6391bec24b92af3fe13/websockets-16.1-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2c1c85f61bc9d5eac57ce705d848dc2d2ce3680638300bf4e1da7d749e2cf4ce", size = 188862, upload-time = "2026-07-10T06:30:54.744Z" },
|
|
2212
|
+
{ url = "https://files.pythonhosted.org/packages/d7/ea/a368d37c010425a5451f42052fe804e754e23333e8448aef5d55c8a8d64f/websockets-16.1-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:eeab6d27f51c7e579023c971f5e6dff200deadf01faf6831beaecd32052dfaef", size = 187633, upload-time = "2026-07-10T06:30:56.055Z" },
|
|
2213
|
+
{ url = "https://files.pythonhosted.org/packages/0d/4e/2ecd59add10d0855ec03dbdedfcdacdbd1aaabcd44b7dcbeda27538662e9/websockets-16.1-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2ed64e5a97b0b97a0b66e18bfe281317a75fbbd5afe692f939ea8d14a4292f2c", size = 185089, upload-time = "2026-07-10T06:30:57.444Z" },
|
|
2214
|
+
{ url = "https://files.pythonhosted.org/packages/6f/eb/c6c3dcd7a01097bb0d42f4e9ef21a2c2a491d36b77cd0870ab59f9e8e77f/websockets-16.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9b3b021d0ed4bc16eea9775f62c9fa71acdacba0fc790b38581754dedf29ca60", size = 187790, upload-time = "2026-07-10T06:30:58.731Z" },
|
|
2215
|
+
{ url = "https://files.pythonhosted.org/packages/9b/3e/775d36885d5e48ab8020aaf377de0ff5fbeb8bc2682a7e46419e4a14521c/websockets-16.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:6eb604a4167f0a0d53c2243dfc667a29f0b43c3436057184e070bb82a1000fa2", size = 186381, upload-time = "2026-07-10T06:31:00.355Z" },
|
|
2216
|
+
{ url = "https://files.pythonhosted.org/packages/ad/90/6305c00812a92e47d0582604c02bd759db0118bbafc13f707d712dbcf898/websockets-16.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:9a3f125e44c3e34d61d111652e608e0f5b85ce08c225c8d56ad0eb822fa40030", size = 188193, upload-time = "2026-07-10T06:31:01.677Z" },
|
|
2217
|
+
{ url = "https://files.pythonhosted.org/packages/f6/32/96bf8302c81d961585b4d34a2ddd3f229782f9b8c57bc78bbf98f1b1a4ac/websockets-16.1-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8fdf0b00d0d1f30d1f06a92cab46fe542eec3eb302a7aee7163f142d0780f216", size = 185771, upload-time = "2026-07-10T06:31:03.062Z" },
|
|
2218
|
+
{ url = "https://files.pythonhosted.org/packages/e8/1f/e8fe44b1d2dc417d740d9959d28fd2a846f268e7df38a686c04ac7dfe947/websockets-16.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:67b56828712f5fa7852de4c0265c28827311a657a4d275b7312ed0d1a918bee4", size = 186803, upload-time = "2026-07-10T06:31:04.34Z" },
|
|
2219
|
+
{ url = "https://files.pythonhosted.org/packages/a5/29/b07d3a4e1eb2ab03e94e7f53f0c7a628e85fde6ad86011f7afd08f27b985/websockets-16.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:39c7e7730be33b8f0cd6f0aa8e8c82f9cdd1813f159765e073b2ece65f4824b5", size = 187041, upload-time = "2026-07-10T06:31:05.567Z" },
|
|
2220
|
+
{ url = "https://files.pythonhosted.org/packages/a6/fd/e0abb8acc435642ac4a671490f6cf781c882f3fe682cdced9080ea455ab5/websockets-16.1-cp311-cp311-win32.whl", hash = "sha256:c54fe94fb2f11e11b48920c5f971e298cec73ac35db56efe57a49db63dfc95d4", size = 180158, upload-time = "2026-07-10T06:31:06.929Z" },
|
|
2221
|
+
{ url = "https://files.pythonhosted.org/packages/81/06/85574d9458d3b913090087b817df0cc47b68e9a01dd0ab6ac04b77f49b0a/websockets-16.1-cp311-cp311-win_amd64.whl", hash = "sha256:f9f4fb9ae8b802e55609685db98382d48fd3feb1397804e1e774968dea0f28c7", size = 180456, upload-time = "2026-07-10T06:31:08.247Z" },
|
|
2222
|
+
{ url = "https://files.pythonhosted.org/packages/a1/52/748c014f07f4e0e170c8932de7e647a1511d5ab3049cd978797136aee577/websockets-16.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b6aa3f7ad345cf3862c21f4fbf2ef5e14d911348476c2845e137c091fe3a3f0b", size = 179798, upload-time = "2026-07-10T06:31:09.664Z" },
|
|
2223
|
+
{ url = "https://files.pythonhosted.org/packages/8b/5e/2a2e64d977d084e49d37c187c26c056daaff41965be7300cd5dbde6f8b07/websockets-16.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:b43fcfb521ac2f34ba80b7b8ea16303e4ad82dd8af667bf40839ad3a5d37b164", size = 177478, upload-time = "2026-07-10T06:31:11.072Z" },
|
|
2224
|
+
{ url = "https://files.pythonhosted.org/packages/aa/12/5b85b4e75d697e548a94962ce5c036b05dd21cb9545759d555c5586422fc/websockets-16.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2bd3e12cd9afbe2baedae0b1eeade8ba64329b60fe2f9abdc966bd10fd2c2ef5", size = 177746, upload-time = "2026-07-10T06:31:12.386Z" },
|
|
2225
|
+
{ url = "https://files.pythonhosted.org/packages/9d/62/79b1c8f0cee0da648b4899e1c5b0dbd3aa59846985136a54854db6827ab4/websockets-16.1-cp312-cp312-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35f41979c8623df9bd30d949d82010a8fda5c56ff12cd8508a5b7272b6d4b53a", size = 187345, upload-time = "2026-07-10T06:31:13.754Z" },
|
|
2226
|
+
{ url = "https://files.pythonhosted.org/packages/25/34/b7c5c52c2f24280e1c017acb7ad491a566750a5cceca7f3cf999373bba21/websockets-16.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a24d1f35aef07d794a16c853c688e74956c50239bec37b4f2de080056046419b", size = 188581, upload-time = "2026-07-10T06:31:15.075Z" },
|
|
2227
|
+
{ url = "https://files.pythonhosted.org/packages/bc/37/604193bebcbeffe96fdf795960b83a15d600880c64dc17ec9c31c5b3427d/websockets-16.1-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0c64c024ddf7a35331b21fcddb562a039c275d2c82e8c2d12939e7da23997270", size = 191362, upload-time = "2026-07-10T06:31:16.395Z" },
|
|
2228
|
+
{ url = "https://files.pythonhosted.org/packages/a5/b4/5ee27575b367d7110d4d13945e2a9de067ec84dc71e54b87f01e38550d9a/websockets-16.1-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:c3e99757f5baafe20fc598e202ea6f5b0b265186ad38d0a17bd8beca16296955", size = 189216, upload-time = "2026-07-10T06:31:17.776Z" },
|
|
2229
|
+
{ url = "https://files.pythonhosted.org/packages/7e/22/3e2dcc78d85fc5d9d814895ce6d07d0dfacc0f6aaa1d151f2b8c8d772299/websockets-16.1-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:353f3bc6e058ac1ccab4b3588e8598837a8c04cfc8351233e6d523be675d844c", size = 187971, upload-time = "2026-07-10T06:31:19.152Z" },
|
|
2230
|
+
{ url = "https://files.pythonhosted.org/packages/9e/2f/cd271717b93d5ee19626cb5e38a85baab745c86e33db7c31a3ac729b31b8/websockets-16.1-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:0352f5b38b40e857b6428d468fa21dbb4dd4a567d933c26d9831b4efe1b92f43", size = 185381, upload-time = "2026-07-10T06:31:20.665Z" },
|
|
2231
|
+
{ url = "https://files.pythonhosted.org/packages/78/91/6ad6f2f1426317b5001bd490534208c7360636b35bac1dec2e0c22bfc40e/websockets-16.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:70bd789afab579602968c39f21cb925466505f3edff22f0ae852bca54978a4f9", size = 188015, upload-time = "2026-07-10T06:31:22.024Z" },
|
|
2232
|
+
{ url = "https://files.pythonhosted.org/packages/c7/6d/533733132ab4c07540efd4a8f0b9a435d3a5059b2f26cc476ace1abf7f45/websockets-16.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:d0fb4b46f121eccd539353baebd1083a8767a9a351109453d1d1caecd1ba40c2", size = 186619, upload-time = "2026-07-10T06:31:23.376Z" },
|
|
2233
|
+
{ url = "https://files.pythonhosted.org/packages/08/73/16c059f3d73b3331eba10793704afa4faa9939234fb08ef7dca35794e8f0/websockets-16.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c14b6634af01541e4efe2954fd8f263386f7aa6d37c01e55dd8109fd17661452", size = 188497, upload-time = "2026-07-10T06:31:25.024Z" },
|
|
2234
|
+
{ url = "https://files.pythonhosted.org/packages/4d/89/9a8fae7dd2acdcfb1a8844c29fe42b518a04b64fce38a0923b6290e452f1/websockets-16.1-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:a58532c49a851bcb481e58c1be23b315c17fe2fbbed509d75aeea12f543d2c15", size = 186051, upload-time = "2026-07-10T06:31:26.291Z" },
|
|
2235
|
+
{ url = "https://files.pythonhosted.org/packages/f6/40/b240c7dd6a0e0c59c1f68377cc3015263521080c327c15f5e753c1f6d378/websockets-16.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4e969170c3b08e1d8dabd990fef1fa702c4233aeaabec33f871806e444f6a0e4", size = 187029, upload-time = "2026-07-10T06:31:27.605Z" },
|
|
2236
|
+
{ url = "https://files.pythonhosted.org/packages/50/35/524e3fac40e47d6fdcf6c4b2c95ef1bc8a97e01593c90eff86621df7b716/websockets-16.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ff9b000064b88787ba9f7a3cb2af2b68a658ca5aad76458a46469e7124b678a0", size = 187308, upload-time = "2026-07-10T06:31:28.927Z" },
|
|
2237
|
+
{ url = "https://files.pythonhosted.org/packages/00/13/56840cf62c8859af6ba22b9529da937332468c80f32b598753e8a66d3990/websockets-16.1-cp312-cp312-win32.whl", hash = "sha256:b9f5d83f80f4d7c4bba6d97f3755ac05850c784dce0fd2ab371c4e41172f53ff", size = 180161, upload-time = "2026-07-10T06:31:30.316Z" },
|
|
2238
|
+
{ url = "https://files.pythonhosted.org/packages/d6/ff/87eb9eb44cb62424a8d729834f2b0515a47e2669fabec29820268f4d50a1/websockets-16.1-cp312-cp312-win_amd64.whl", hash = "sha256:6852c9f653966c16109d3b6f31181fd734f7914927e3f0fa1117af7a18c9aa21", size = 180462, upload-time = "2026-07-10T06:31:31.708Z" },
|
|
2239
|
+
{ url = "https://files.pythonhosted.org/packages/d9/63/df158b155420b566f025e75613424ad9649a24bcb0e9f259321ab3d58bea/websockets-16.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:b0232ed141cec3df2af5a3959a071c51f40036336b0d37e17faf9ef52fc73e47", size = 179791, upload-time = "2026-07-10T06:31:33.108Z" },
|
|
2240
|
+
{ url = "https://files.pythonhosted.org/packages/74/cf/00fe9414dfeafa6fe54eae9f5716c8c8e9ac59d192be3b893c096d395846/websockets-16.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a71b73d143991714144e159f767b698f03c4a70b8a65ae1733b650cff488045b", size = 177472, upload-time = "2026-07-10T06:31:34.522Z" },
|
|
2241
|
+
{ url = "https://files.pythonhosted.org/packages/8b/76/b10633424d40681b4e892ffd08ca5226322b2426e62d4ab71eae484c3a32/websockets-16.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:187323204c3b2fc465e8fc2609e60437c521790cb9c1acb49c4c452a33e57f37", size = 177737, upload-time = "2026-07-10T06:31:35.964Z" },
|
|
2242
|
+
{ url = "https://files.pythonhosted.org/packages/dc/61/d3bb03b2229bb1afd72008742d586cf1ea240dce64dd48c71c8c7fd3294c/websockets-16.1-cp313-cp313-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9dba74233c8c3ce368850818c98354dad2570f57231b3fd3bd00d7aa57628881", size = 187403, upload-time = "2026-07-10T06:31:37.496Z" },
|
|
2243
|
+
{ url = "https://files.pythonhosted.org/packages/26/16/cc2e80478f688fc3c39c67dc1fac6a0783858058914ebc2489917462cb42/websockets-16.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:63339bc8c63c86a463177775cb7c677691f5bcfac7b3b2f01b286d42acd41600", size = 188639, upload-time = "2026-07-10T06:31:38.86Z" },
|
|
2244
|
+
{ url = "https://files.pythonhosted.org/packages/15/d6/ad87b2507e57de1cbf897a56c963f2925962ed5e85fbe06aaa83ced27acd/websockets-16.1-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:23e545ea8ae4263e37cdfd4e22a217f519e48e432728bc461185bbf585f38a83", size = 190078, upload-time = "2026-07-10T06:31:40.218Z" },
|
|
2245
|
+
{ url = "https://files.pythonhosted.org/packages/9e/1a/5b37b3fd335d5811f29fc829f2646a3e6d1463a4bf09c3100708684c766e/websockets-16.1-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2237081454846fb40403a80ba86d82e2038b9c45865ab96af0abe7d002a91045", size = 189267, upload-time = "2026-07-10T06:31:41.523Z" },
|
|
2246
|
+
{ url = "https://files.pythonhosted.org/packages/42/98/06afc33e9450d4230f94c664db78875d90f5f6a5fb77f0bc6ec15ae74e1c/websockets-16.1-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5f5218de1ed047385ca53744caba9435d65f75d008364970a3fae95a05812cf9", size = 188022, upload-time = "2026-07-10T06:31:42.838Z" },
|
|
2247
|
+
{ url = "https://files.pythonhosted.org/packages/8c/bf/42fef5d5887c18cf2d148b02debf56cecb9cfbffc68027cde9b12c8f432c/websockets-16.1-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:75c98e3920039d0edff03b74478ada504b7ce3a1bc406db2cabfca84320f7baf", size = 185435, upload-time = "2026-07-10T06:31:44.219Z" },
|
|
2248
|
+
{ url = "https://files.pythonhosted.org/packages/a0/9b/8021c133add5fe40ed40312553a6cd1408c069d7efe3444ad483d4973ed3/websockets-16.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1facd189d8190af30487a55b4c3688484dd50801628a3b5b2ccd26db08e67057", size = 188080, upload-time = "2026-07-10T06:31:45.986Z" },
|
|
2249
|
+
{ url = "https://files.pythonhosted.org/packages/69/54/1e37384f395eaa127383aab15c1c45e200890a7d7b99db5c312233d193e0/websockets-16.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:cc0c6a6eef613c7da32d4fb068f82ef834b58134f6a16b54e6c1e5bf9529ab3d", size = 186678, upload-time = "2026-07-10T06:31:47.449Z" },
|
|
2250
|
+
{ url = "https://files.pythonhosted.org/packages/68/79/1caeacab5bc2081e4519288d248bc8bd2de30652e6eaa94be6be09a1fe5b/websockets-16.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ad9411eded8988b879be6038206698bf7106c85a78f642c004485bcb95be17eb", size = 188554, upload-time = "2026-07-10T06:31:48.886Z" },
|
|
2251
|
+
{ url = "https://files.pythonhosted.org/packages/ee/83/b3dca5fad71487b726e31cb0acf56f226792c1cc34e6ab18cbf146bd2d74/websockets-16.1-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:cd68f0914f3b64694895bc5e9b14e8b447e41d7bf5ffaf989bb8dcb5e2dfdce7", size = 186109, upload-time = "2026-07-10T06:31:50.508Z" },
|
|
2252
|
+
{ url = "https://files.pythonhosted.org/packages/5b/0b/8f246c3712f07f207b52ea5fb47f3b2b66fafec7303162644c74aed51c6a/websockets-16.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:fef2debfe7f7ebdda12176f26166f95b7af17af05ba06150fcf889032e0213e9", size = 187061, upload-time = "2026-07-10T06:31:51.861Z" },
|
|
2253
|
+
{ url = "https://files.pythonhosted.org/packages/47/eb/27d6c92a01696b6495386af4fc941d7d0a13f2eab2bf9c336111d7321491/websockets-16.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3cd6c9b798218798f4bb7b2e71c38f0e744bb94ca537b13376f88019d46384d", size = 187347, upload-time = "2026-07-10T06:31:53.246Z" },
|
|
2254
|
+
{ url = "https://files.pythonhosted.org/packages/6b/d5/eeee439921f55d5eaeabcea18d0f7ce32cdc39cb8fc1e185431a094c5c7b/websockets-16.1-cp313-cp313-win32.whl", hash = "sha256:84c170c6869633536921e4474b1cce7254c0c9b0053ef5725f966cee47e718e4", size = 180149, upload-time = "2026-07-10T06:31:55.058Z" },
|
|
2255
|
+
{ url = "https://files.pythonhosted.org/packages/a3/03/971e98d4a4864cf263f9e94c5b2b7c9a9b7682d77bfbba4e732c55ee85a9/websockets-16.1-cp313-cp313-win_amd64.whl", hash = "sha256:bef52d327d70fa75dad93ee61ea2cb1d1489aca9f35c188833563f5a3b4df0a5", size = 180458, upload-time = "2026-07-10T06:31:56.767Z" },
|
|
2256
|
+
{ url = "https://files.pythonhosted.org/packages/8d/e6/da1dc11507f8118145a81c751fe0c77e5e1c11b8554496addb39389e2dc2/websockets-16.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:f881fca0a45dd6789939bd6637cd98169b92f1c3fdc78262f2cb9ec2cb1f324e", size = 179833, upload-time = "2026-07-10T06:31:58.19Z" },
|
|
2257
|
+
{ url = "https://files.pythonhosted.org/packages/6e/ac/c0d46f62e31e232487b2c123bc3cfd9a4e45684ca7dc0c37f0987f29baae/websockets-16.1-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:30c379d5b207d3a7f0ba4c2e4602a895b0bcc63fb5f5371a4ae7fbddb03b672b", size = 177524, upload-time = "2026-07-10T06:31:59.563Z" },
|
|
2258
|
+
{ url = "https://files.pythonhosted.org/packages/4a/33/abd966074b34a51e4f134e0aaed80f5a4a0a35163ea5ac58a1bc5a076d23/websockets-16.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:98ab58a4faa72b46da0127ccc1931dcbfc0985b0778892300a092185910c4cbe", size = 177743, upload-time = "2026-07-10T06:32:00.959Z" },
|
|
2259
|
+
{ url = "https://files.pythonhosted.org/packages/ea/30/646e47b8a8dff04e227bdab512e6dde60663a647eeac7bbd6edddd92bbc5/websockets-16.1-cp314-cp314-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:8e9c4e369fc181b2d41a99e01477215cecdc8546a39f7d41a59cc0a7065a0b09", size = 187474, upload-time = "2026-07-10T06:32:02.54Z" },
|
|
2260
|
+
{ url = "https://files.pythonhosted.org/packages/d2/72/890ab9d77494af93ea65268230bfbc0a90ba789401ed7a44356a44785644/websockets-16.1-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0704df094b2d5fa7f6f410925a594c2a5c9a09167731a76292e5410934208209", size = 188717, upload-time = "2026-07-10T06:32:04.156Z" },
|
|
2261
|
+
{ url = "https://files.pythonhosted.org/packages/d5/aa/baedbbaa6bf9ed6029617ed5e8976535bd805f483ca9b3484e7ad9ee08bf/websockets-16.1-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:b22b1f4950f6ab7126623329c3b47b3b90a14c05db517f2db2a026ad6c928352", size = 190090, upload-time = "2026-07-10T06:32:05.822Z" },
|
|
2262
|
+
{ url = "https://files.pythonhosted.org/packages/52/4f/d813ec94e18002571ef4959d87a630eff6e01b72a51bcb0832b75ae8c51a/websockets-16.1-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:1ae4a686a662964a6671069f84f7f908cc3475e782227726b0c622c715962105", size = 189320, upload-time = "2026-07-10T06:32:07.223Z" },
|
|
2263
|
+
{ url = "https://files.pythonhosted.org/packages/b8/3c/8ec52a6662f3df64090fba28cd521d405d54759268d8e820477037e8c80d/websockets-16.1-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:856bdd638f8277f86465057bfdd4da097c73058fb0f9d2bd5baea29e2bf2d367", size = 188068, upload-time = "2026-07-10T06:32:08.586Z" },
|
|
2264
|
+
{ url = "https://files.pythonhosted.org/packages/96/7f/f0ae6042b14f86fa5f996c6563ea4cf107adc036ccbedc9d4f418d0095f9/websockets-16.1-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9003a1fde1c21a322a3ca3fa0c4bda8c639da81dbc925162766086643b05ba87", size = 185493, upload-time = "2026-07-10T06:32:09.968Z" },
|
|
2265
|
+
{ url = "https://files.pythonhosted.org/packages/89/ad/5ffc53af9939c49fd653d147fa5b8f78ced1f6bce6c49a7446860945b0ce/websockets-16.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:39e947b1f5fdab045174306e3916785bf3ed537648acc1549827c08c33b10953", size = 188141, upload-time = "2026-07-10T06:32:11.434Z" },
|
|
2266
|
+
{ url = "https://files.pythonhosted.org/packages/67/62/729206c0ee577a4db8eae6dd06e0eef725a1287c6df11b2ef831d003df31/websockets-16.1-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:5dd0e666b5931c0509cf65714686a1c5126771e663a79ac5d40da4f58b1f9502", size = 186653, upload-time = "2026-07-10T06:32:12.845Z" },
|
|
2267
|
+
{ url = "https://files.pythonhosted.org/packages/1b/86/e8806a99ec4589914f255e6b658853fe537bf359c05e6ba5762ad9c27917/websockets-16.1-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:a0285df7925657ad65a65fb8dc330808bce082827538fd50ef45fa12d1fc5bca", size = 188614, upload-time = "2026-07-10T06:32:14.236Z" },
|
|
2268
|
+
{ url = "https://files.pythonhosted.org/packages/89/38/ac554e2fc6ff0b8deeff9798b92e7abd8f99e2bd9731532e7033de208220/websockets-16.1-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:82d1c2cab3c133e9d059b3a5420bed9376bd30e21c185c63dda4ddadf6ddda47", size = 186165, upload-time = "2026-07-10T06:32:15.626Z" },
|
|
2269
|
+
{ url = "https://files.pythonhosted.org/packages/6c/c5/4ef4d8e53342f94f3c49e1ae089b32c1e8b3878e15e0022c7708c647f351/websockets-16.1-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:c39907f1eaf11f6277def65aa02d68f30576b693d0c1ca332aafa3caa723ac6d", size = 187119, upload-time = "2026-07-10T06:32:17.114Z" },
|
|
2270
|
+
{ url = "https://files.pythonhosted.org/packages/3a/33/4788b1dd417bd97eeb2698af3b9df6775ac656f96e9987da0419a067602f/websockets-16.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:45c5ea55446171949eb99fd34b771ceddd511ca21958d40d0197ced33159e5ee", size = 187411, upload-time = "2026-07-10T06:32:18.629Z" },
|
|
2271
|
+
{ url = "https://files.pythonhosted.org/packages/30/38/00d37aad6dc3244ce349e2864815362e50b3cfc00cac28d216db20efe40f/websockets-16.1-cp314-cp314-win32.whl", hash = "sha256:b8ef8b1c8d6bd029a475ac432e730fba2dfd456715d26c473e2a82291024b99c", size = 179822, upload-time = "2026-07-10T06:32:20.233Z" },
|
|
2272
|
+
{ url = "https://files.pythonhosted.org/packages/9d/37/2a8cb0eaddee5eaebda47a90a3ba0898d1ce3d866b02a4857fea17d82e5b/websockets-16.1-cp314-cp314-win_amd64.whl", hash = "sha256:7358ff21632b5d062707f73e859c824f1c3807e73d8ca25e71caca7c4cdcf145", size = 180167, upload-time = "2026-07-10T06:32:21.749Z" },
|
|
2273
|
+
{ url = "https://files.pythonhosted.org/packages/07/5a/262ad5fcaef4198997b165060f09a63f861e76939b1786ab546ccc3f8120/websockets-16.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:d0f38f4c3e9b359e257c339c2cc1967ccaeedb102e57c1c986bdce4bf4f32268", size = 180166, upload-time = "2026-07-10T06:32:23.278Z" },
|
|
2274
|
+
{ url = "https://files.pythonhosted.org/packages/1a/c7/36377db690f4292826e4501a6dec2801dc55fd1cf0405923b04937e478df/websockets-16.1-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:3c3d2cbd1602593bad49bd86fa3fbb25407d87a3b4bf8857c0ac5ac4914e1901", size = 177697, upload-time = "2026-07-10T06:32:25.164Z" },
|
|
2275
|
+
{ url = "https://files.pythonhosted.org/packages/fa/c7/07171abce1e39799a76f473608580fe98bd43a1230f5146159622c02bccf/websockets-16.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:36069b74671e7e667f48a7484249f84c45a825a134c8b1bdc01875d0daa10d79", size = 177902, upload-time = "2026-07-10T06:32:26.564Z" },
|
|
2276
|
+
{ url = "https://files.pythonhosted.org/packages/14/17/c831f48e250bc4749f57c00dcce73337c41cd32f6d59a64567b84e782601/websockets-16.1-cp314-cp314t-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:587f83c2ce8a5d628e166384d77fa7f0ac69b9007d515ab442123e6615aa8da3", size = 187766, upload-time = "2026-07-10T06:32:27.981Z" },
|
|
2277
|
+
{ url = "https://files.pythonhosted.org/packages/2c/2e/4dfe63e245b0ecfaf470cf082d25c6ce35808159135fd88c82653a6b11ab/websockets-16.1-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4a6db7972d52bc1b66cefe2246902e256cbaebc9ba8a45eac09343d7eb6671b2", size = 188939, upload-time = "2026-07-10T06:32:29.365Z" },
|
|
2278
|
+
{ url = "https://files.pythonhosted.org/packages/ba/e5/5faf65aebd9562f6b4bc473d24ce38cc56f84eb5f5bee66ed9b86733f93c/websockets-16.1-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e7d6014888a0632e1ed7a4095248bb3095232999447f2d83bfb1900987dd9ed9", size = 191081, upload-time = "2026-07-10T06:32:30.868Z" },
|
|
2279
|
+
{ url = "https://files.pythonhosted.org/packages/49/cd/2634f2f2c0556c1aae6501ed6840019cc569dd6fdbcac6494378daea4dc0/websockets-16.1-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:9cb074d150e4ad2a77aa8a332c2be85f3f64f2681519d2570c1225c12c9821ff", size = 189513, upload-time = "2026-07-10T06:32:32.399Z" },
|
|
2280
|
+
{ url = "https://files.pythonhosted.org/packages/59/bb/2c700b51196104f09715b326b1f092ed25326bdf79a03e00a4842e503743/websockets-16.1-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d19c9067e1fe9490f974bffbc0e443b80a7674c5efb4980c429cc00771f07c5a", size = 188240, upload-time = "2026-07-10T06:32:33.897Z" },
|
|
2281
|
+
{ url = "https://files.pythonhosted.org/packages/f1/20/86283636e499a1a357fa9441f690ba34f255e731f2fea174132b3b762b57/websockets-16.1-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d440ff0c6c7469ad59c0a412c383c235935b43635e89425e3f6a0c36de90c31b", size = 185955, upload-time = "2026-07-10T06:32:35.279Z" },
|
|
2282
|
+
{ url = "https://files.pythonhosted.org/packages/91/23/d7fb734b0095d43bc7f1c9f68afd50adb4176e7e513403e8c70ad7daa4fa/websockets-16.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8613129a2533f08de24505e69a3e403cedaadae49abdb043c4d170ca71b7e4bd", size = 188491, upload-time = "2026-07-10T06:32:36.673Z" },
|
|
2283
|
+
{ url = "https://files.pythonhosted.org/packages/6a/5e/168a192689db468405ecf3b8e4a2c18811936b0724d017ad7e6d252734f0/websockets-16.1-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:a5bf9c23f197b4ec88290fd5463f33db67362a1bb10f85fc2e8e7627f0ddab97", size = 186983, upload-time = "2026-07-10T06:32:38.207Z" },
|
|
2284
|
+
{ url = "https://files.pythonhosted.org/packages/7e/9b/66795fa91ebe49019ebe4fa910282172252e37046b80e08fc52e0c365150/websockets-16.1-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:520b0fd0395f075febb283c76755af724ab9fd19dffa4f3bfd18cb4e622790a3", size = 188890, upload-time = "2026-07-10T06:32:39.545Z" },
|
|
2285
|
+
{ url = "https://files.pythonhosted.org/packages/5a/32/126bbc844be5afb3613fd43211dac10a9645f4cf39741d04acaa2ec7030c/websockets-16.1-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:7143aa09a67e1c013be44e81a88dfe90fc6244198ab86c7edd064152cf619805", size = 186583, upload-time = "2026-07-10T06:32:41.038Z" },
|
|
2286
|
+
{ url = "https://files.pythonhosted.org/packages/22/b9/0b5db9cbcf6e4970db4496893244a8d92e07f71a8ef27cf34b08aa02fef1/websockets-16.1-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:7acb811fad08e611755800d1560e395c67e11a6bd563598ea6abb319afb86938", size = 187353, upload-time = "2026-07-10T06:32:42.501Z" },
|
|
2287
|
+
{ url = "https://files.pythonhosted.org/packages/99/2e/254b2131a10d831b76e2c18dfe7add9729c6292c674a8085bf8de01ad151/websockets-16.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:c5cf88e3faa2f7931bc6baeee7599c97656a3f6ac7f831f4fccba233e141783a", size = 187784, upload-time = "2026-07-10T06:32:43.929Z" },
|
|
2288
|
+
{ url = "https://files.pythonhosted.org/packages/21/dc/e7288aa8e3ac5a88a0924619984d663c1abf2a87d0ea98290c66fdaee0ec/websockets-16.1-cp314-cp314t-win32.whl", hash = "sha256:589f8842521c8307684ce0b40ce4ad70c5e0aa46484c6f1225a94ef4b8970341", size = 179947, upload-time = "2026-07-10T06:32:45.495Z" },
|
|
2289
|
+
{ url = "https://files.pythonhosted.org/packages/d3/de/37edf1260ff0fbbd2f82433489c4cfbe799ac2ff21355331609879329fe6/websockets-16.1-cp314-cp314t-win_amd64.whl", hash = "sha256:2c0e0857c30bbbc2bb5c30687508f0b7ec19aa026cd9f2ff8424d0fee42dcc07", size = 180291, upload-time = "2026-07-10T06:32:47.119Z" },
|
|
2290
|
+
{ url = "https://files.pythonhosted.org/packages/4d/f4/84ef884775bbe77c46cce79bc7d705ea3bc6574cc00acf81af89754c077d/websockets-16.1-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7289d899c79e763e6221c8dcb8959361cb43274418538d7c7ad16a43b01d12f9", size = 177387, upload-time = "2026-07-10T06:32:48.574Z" },
|
|
2291
|
+
{ url = "https://files.pythonhosted.org/packages/d3/d9/6831ec6f65e1eeac770375f4f4b604f23df9bafaa1b47004bc5f9488d513/websockets-16.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:e22e9e3719f5131bd62da4db63c8da63eb8c91cc99e16c1cbd122f130e1ae07a", size = 177663, upload-time = "2026-07-10T06:32:50.043Z" },
|
|
2292
|
+
{ url = "https://files.pythonhosted.org/packages/9d/d4/21d4922fa7fe855813a8b38f181a0ecf02a586e16c1f095fd05471f78cc2/websockets-16.1-pp311-pypy311_pp73-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:83bdabafef431247e6b11a9aab8a0893fd8e82e1ed95b32e0373625b03ffce4a", size = 178501, upload-time = "2026-07-10T06:32:51.439Z" },
|
|
2293
|
+
{ url = "https://files.pythonhosted.org/packages/91/87/7a0320df854dacd09507ca972cb04a4dc5aae279583cc5b80ad5f5819533/websockets-16.1-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0b8d13ceabc5c60995f201b5211d76876e17e68706ebf5d3bc666b32eefff1a6", size = 179397, upload-time = "2026-07-10T06:32:52.892Z" },
|
|
2294
|
+
{ url = "https://files.pythonhosted.org/packages/31/6a/0da1eb8c8da2ace7b578c8523d32618af85e62a9ebad56051d4a14a38a1c/websockets-16.1-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:81495f9c0085361c582efbc3207fb877174cfe03370f17d9cd70624404aa526f", size = 180546, upload-time = "2026-07-10T06:32:54.619Z" },
|
|
2295
|
+
{ url = "https://files.pythonhosted.org/packages/66/58/bd83247f39ddc26ffc2c24eb05087a3b749e00cb4509fc6d19daa23c8495/websockets-16.1-py3-none-any.whl", hash = "sha256:c5149dfe490ec7e5ee5dbf624c642fb725f93a5575c7f00ab594ca9eddb8dd81", size = 174031, upload-time = "2026-07-10T06:32:56.079Z" },
|
|
2296
|
+
]
|
|
2297
|
+
|
|
2164
2298
|
[[package]]
|
|
2165
2299
|
name = "win32-setctime"
|
|
2166
2300
|
version = "1.2.0"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|