quilt-hp-python 0.5.1__tar.gz → 0.5.3__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.
Files changed (120) hide show
  1. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/CHANGELOG.md +12 -0
  2. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/PKG-INFO +1 -1
  3. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/reference/client.md +1 -1
  4. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/pyproject.toml +1 -1
  5. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/__init__.py +1 -1
  6. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/auth.py +18 -2
  7. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_cli_surfaces_extra.py +1 -1
  8. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/.github/copilot-instructions.md +0 -0
  9. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/.github/workflows/ci.yml +0 -0
  10. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/.github/workflows/docs-deploy.yml +0 -0
  11. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/.github/workflows/release.yml +0 -0
  12. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/.gitignore +0 -0
  13. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/LICENSE +0 -0
  14. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/README.md +0 -0
  15. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/explanation/architecture.md +0 -0
  16. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/explanation/authentication.md +0 -0
  17. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/explanation/grpc-and-protobuf.md +0 -0
  18. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/explanation/snapshot-and-stream.md +0 -0
  19. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/explanation/streaming-protocol.md +0 -0
  20. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/how-to/authenticate.md +0 -0
  21. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/how-to/automation-daemon.md +0 -0
  22. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/how-to/cli-scripting.md +0 -0
  23. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/how-to/configure-comfort-settings.md +0 -0
  24. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/how-to/configure-schedules.md +0 -0
  25. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/how-to/contribute.md +0 -0
  26. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/how-to/control-spaces.md +0 -0
  27. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/how-to/home-assistant.md +0 -0
  28. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/how-to/regenerate-protos.md +0 -0
  29. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/how-to/stream-updates.md +0 -0
  30. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/how-to/tui-app.md +0 -0
  31. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/index.md +0 -0
  32. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/reference/api-reference.md +0 -0
  33. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/reference/documentation-standards.md +0 -0
  34. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/reference/grpc-services-matrix.md +0 -0
  35. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/reference/hds-entities.md +0 -0
  36. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/reference/models.md +0 -0
  37. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/reference/token-management.md +0 -0
  38. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/docs/tutorial/get-started.md +0 -0
  39. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/mkdocs.yml +0 -0
  40. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/proto/cleaned/quilt_device_pairing.proto +0 -0
  41. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/proto/cleaned/quilt_hds.proto +0 -0
  42. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/proto/cleaned/quilt_notifier.proto +0 -0
  43. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/proto/cleaned/quilt_services.proto +0 -0
  44. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/proto/cleaned/quilt_system.proto +0 -0
  45. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/scripts/bump_version.py +0 -0
  46. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/scripts/check_docs_nav.py +0 -0
  47. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/scripts/generate_public_api_reference.py +0 -0
  48. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/scripts/regen_protos.sh +0 -0
  49. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_paths.py +0 -0
  50. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/__init__.py +0 -0
  51. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_device_pairing_pb2.py +0 -0
  52. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_device_pairing_pb2.pyi +0 -0
  53. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_device_pairing_pb2_grpc.py +0 -0
  54. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_hds_pb2.py +0 -0
  55. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_hds_pb2.pyi +0 -0
  56. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_hds_pb2_grpc.py +0 -0
  57. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_notifier_pb2.py +0 -0
  58. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_notifier_pb2.pyi +0 -0
  59. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_notifier_pb2_grpc.py +0 -0
  60. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_services_pb2.py +0 -0
  61. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_services_pb2.pyi +0 -0
  62. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_services_pb2_grpc.py +0 -0
  63. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_system_pb2.py +0 -0
  64. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_system_pb2.pyi +0 -0
  65. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/_proto/quilt_system_pb2_grpc.py +0 -0
  66. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/cli/__init__.py +0 -0
  67. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/cli/main.py +0 -0
  68. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/cli/settings.py +0 -0
  69. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/cli/store.py +0 -0
  70. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/cli/tui.py +0 -0
  71. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/client.py +0 -0
  72. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/const.py +0 -0
  73. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/exceptions.py +0 -0
  74. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/__init__.py +0 -0
  75. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/_helpers.py +0 -0
  76. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/comfort.py +0 -0
  77. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/controller.py +0 -0
  78. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/energy.py +0 -0
  79. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/enums.py +0 -0
  80. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/indoor_unit.py +0 -0
  81. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/outdoor_unit.py +0 -0
  82. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/qsm.py +0 -0
  83. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/schedule.py +0 -0
  84. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/sensor.py +0 -0
  85. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/software_update.py +0 -0
  86. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/space.py +0 -0
  87. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/models/system.py +0 -0
  88. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/py.typed +0 -0
  89. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/services/__init__.py +0 -0
  90. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/services/hds.py +0 -0
  91. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/services/streaming.py +0 -0
  92. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/services/system.py +0 -0
  93. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/services/user.py +0 -0
  94. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/tokens.py +0 -0
  95. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/src/quilt_hp/transport.py +0 -0
  96. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/__init__.py +0 -0
  97. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/conftest.py +0 -0
  98. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_auth.py +0 -0
  99. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_auth_store_settings_edges.py +0 -0
  100. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_cli_feature_completion.py +0 -0
  101. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_cli_login.py +0 -0
  102. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_client_cache.py +0 -0
  103. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_client_service_error_paths.py +0 -0
  104. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_grpc_retry.py +0 -0
  105. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_hds_payloads.py +0 -0
  106. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_hds_schedule_mapping.py +0 -0
  107. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_hds_service_branches.py +0 -0
  108. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_models.py +0 -0
  109. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_models_extra.py +0 -0
  110. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_models_from_proto.py +0 -0
  111. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_settings_store.py +0 -0
  112. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_streaming.py +0 -0
  113. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_streaming_concurrency.py +0 -0
  114. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_streaming_debounce.py +0 -0
  115. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_streaming_health.py +0 -0
  116. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_streaming_reconnect_dispatch_extra.py +0 -0
  117. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_tokens.py +0 -0
  118. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_transport.py +0 -0
  119. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_transport_interceptor_extra.py +0 -0
  120. {quilt_hp_python-0.5.1 → quilt_hp_python-0.5.3}/tests/test_tui_bindings.py +0 -0
@@ -2,6 +2,18 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
+ ## [0.5.3] - 2026-06-30
6
+
7
+ ## [0.5.2] - 2026-06-30
8
+
9
+ ### Fixed
10
+ - `_make_cognito_client()` now creates the boto3 client with EC2 instance
11
+ metadata (IMDS) credential discovery disabled and explicit connect/read
12
+ timeouts. On non-EC2 hosts (e.g., Home Assistant Yellow) the IMDS endpoint
13
+ at 169.254.169.254 may accept TCP connections but never respond, causing the
14
+ calling thread to block for the full OS-level TCP timeout — well beyond the
15
+ 20-second setup window — and triggering a spurious `ConfigEntryNotReady`.
16
+
5
17
  ## [0.5.1] - 2026-06-30
6
18
 
7
19
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: quilt-hp-python
3
- Version: 0.5.1
3
+ Version: 0.5.3
4
4
  Summary: Async Python client for Quilt mini-split HVAC systems
5
5
  Project-URL: Repository, https://github.com/eman/quilt-hp-python
6
6
  Project-URL: Issues, https://github.com/eman/quilt-hp-python/issues
@@ -69,7 +69,7 @@ Raised when a requested resource does not exist (gRPC `NOT_FOUND`).
69
69
  ### `__version__`
70
70
 
71
71
  ```python
72
- __version__: str # e.g. "0.5.1"
72
+ __version__: str # e.g. "0.5.3"
73
73
  ```
74
74
 
75
75
  ---
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "quilt-hp-python"
7
- version = "0.5.1"
7
+ version = "0.5.3"
8
8
  description = "Async Python client for Quilt mini-split HVAC systems"
9
9
  readme = "README.md"
10
10
  license = { file = "LICENSE" }
@@ -10,7 +10,7 @@ from quilt_hp.exceptions import (
10
10
  QuiltStreamError,
11
11
  )
12
12
 
13
- __version__ = "0.5.1"
13
+ __version__ = "0.5.3"
14
14
 
15
15
  __all__ = [
16
16
  "Environment",
@@ -15,6 +15,8 @@ from functools import partial
15
15
  from typing import Protocol, cast
16
16
 
17
17
  import boto3
18
+ import botocore.session
19
+ from botocore.config import Config
18
20
  from botocore.exceptions import ClientError
19
21
 
20
22
  from quilt_hp.const import COGNITO_CLIENT_ID, COGNITO_REGION
@@ -66,10 +68,24 @@ def _expires_in_s(result: CognitoAuthResult) -> int:
66
68
 
67
69
 
68
70
  def _make_cognito_client() -> _CognitoClient:
69
- """Create a boto3 Cognito Identity Provider client."""
71
+ """Create a boto3 Cognito Identity Provider client.
72
+
73
+ Creates a botocore session with IMDS credential discovery disabled.
74
+ The EC2 instance metadata service (169.254.169.254) can hang on
75
+ non-EC2 hosts that accept the TCP connection but never respond,
76
+ blocking the thread for the full OS-level TCP timeout. Cognito
77
+ user-pool auth flows (CUSTOM_AUTH, REFRESH_TOKEN_AUTH) don't
78
+ require AWS IAM credentials, so skipping IMDS is safe here.
79
+ """
80
+ session = botocore.session.get_session()
81
+ session.set_config_variable("metadata_service_num_attempts", 0)
70
82
  return cast(
71
83
  "_CognitoClient",
72
- boto3.client("cognito-idp", region_name=COGNITO_REGION),
84
+ boto3.Session(botocore_session=session).client(
85
+ "cognito-idp",
86
+ region_name=COGNITO_REGION,
87
+ config=Config(connect_timeout=5, read_timeout=15),
88
+ ),
73
89
  )
74
90
 
75
91
 
@@ -16,7 +16,7 @@ runner = CliRunner()
16
16
  def test_version_option_outputs_package_version() -> None:
17
17
  result = runner.invoke(cli_main.app, ["--version"])
18
18
  assert result.exit_code == 0
19
- assert result.stdout.strip() == "0.5.1"
19
+ assert result.stdout.strip() == "0.5.3"
20
20
 
21
21
 
22
22
  class _FakeClient:
File without changes