channel3-sdk 2.0.0__tar.gz → 2.2.0__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.

Potentially problematic release.


This version of channel3-sdk might be problematic. Click here for more details.

Files changed (87) hide show
  1. channel3_sdk-2.2.0/.release-please-manifest.json +3 -0
  2. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/CHANGELOG.md +16 -0
  3. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/PKG-INFO +1 -5
  4. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/README.md +0 -4
  5. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/pyproject.toml +1 -1
  6. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/__init__.py +0 -2
  7. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_client.py +12 -70
  8. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_version.py +1 -1
  9. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/search_perform_params.py +3 -0
  10. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/api_resources/test_search.py +2 -0
  11. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_client.py +0 -20
  12. channel3_sdk-2.0.0/.release-please-manifest.json +0 -3
  13. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/.gitignore +0 -0
  14. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/CONTRIBUTING.md +0 -0
  15. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/LICENSE +0 -0
  16. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/SECURITY.md +0 -0
  17. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/api.md +0 -0
  18. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/bin/check-release-environment +0 -0
  19. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/bin/publish-pypi +0 -0
  20. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/examples/.keep +0 -0
  21. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/noxfile.py +0 -0
  22. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/release-please-config.json +0 -0
  23. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/requirements-dev.lock +0 -0
  24. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/requirements.lock +0 -0
  25. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_base_client.py +0 -0
  26. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_compat.py +0 -0
  27. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_constants.py +0 -0
  28. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_exceptions.py +0 -0
  29. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_files.py +0 -0
  30. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_models.py +0 -0
  31. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_qs.py +0 -0
  32. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_resource.py +0 -0
  33. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_response.py +0 -0
  34. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_streaming.py +0 -0
  35. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_types.py +0 -0
  36. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/__init__.py +0 -0
  37. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/_compat.py +0 -0
  38. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/_datetime_parse.py +0 -0
  39. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/_logs.py +0 -0
  40. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/_proxy.py +0 -0
  41. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/_reflection.py +0 -0
  42. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/_resources_proxy.py +0 -0
  43. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/_streams.py +0 -0
  44. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/_sync.py +0 -0
  45. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/_transform.py +0 -0
  46. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/_typing.py +0 -0
  47. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/_utils/_utils.py +0 -0
  48. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/lib/.keep +0 -0
  49. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/py.typed +0 -0
  50. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/resources/__init__.py +0 -0
  51. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/resources/brands.py +0 -0
  52. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/resources/enrich.py +0 -0
  53. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/resources/products.py +0 -0
  54. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/resources/search.py +0 -0
  55. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/__init__.py +0 -0
  56. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/availability_status.py +0 -0
  57. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/brand.py +0 -0
  58. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/brand_list_params.py +0 -0
  59. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/brand_list_response.py +0 -0
  60. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/enrich_enrich_url_params.py +0 -0
  61. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/enrich_enrich_url_response.py +0 -0
  62. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/price.py +0 -0
  63. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/product_retrieve_response.py +0 -0
  64. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/search_perform_response.py +0 -0
  65. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/channel3_sdk/types/variant.py +0 -0
  66. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/src/public_sdk/lib/.keep +0 -0
  67. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/__init__.py +0 -0
  68. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/api_resources/__init__.py +0 -0
  69. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/api_resources/test_brands.py +0 -0
  70. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/api_resources/test_client.py +0 -0
  71. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/api_resources/test_enrich.py +0 -0
  72. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/api_resources/test_products.py +0 -0
  73. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/conftest.py +0 -0
  74. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/sample_file.txt +0 -0
  75. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_deepcopy.py +0 -0
  76. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_extract_files.py +0 -0
  77. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_files.py +0 -0
  78. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_models.py +0 -0
  79. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_qs.py +0 -0
  80. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_required_args.py +0 -0
  81. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_response.py +0 -0
  82. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_streaming.py +0 -0
  83. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_transform.py +0 -0
  84. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_utils/test_datetime_parse.py +0 -0
  85. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_utils/test_proxy.py +0 -0
  86. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/test_utils/test_typing.py +0 -0
  87. {channel3_sdk-2.0.0 → channel3_sdk-2.2.0}/tests/utils.py +0 -0
@@ -0,0 +1,3 @@
1
+ {
2
+ ".": "2.2.0"
3
+ }
@@ -1,5 +1,21 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.2.0 (2025-09-16)
4
+
5
+ Full Changelog: [v2.1.0...v2.2.0](https://github.com/channel3-ai/sdk-python/compare/v2.1.0...v2.2.0)
6
+
7
+ ### Features
8
+
9
+ * **api:** manual updates ([79f6922](https://github.com/channel3-ai/sdk-python/commit/79f69227ff70ac778731b6dac5f1297a66800893))
10
+
11
+ ## 2.1.0 (2025-09-16)
12
+
13
+ Full Changelog: [v2.0.0...v2.1.0](https://github.com/channel3-ai/sdk-python/compare/v2.0.0...v2.1.0)
14
+
15
+ ### Features
16
+
17
+ * **api:** api update ([b6dac15](https://github.com/channel3-ai/sdk-python/commit/b6dac1516907c474ecfd919c5fad34943b59b101))
18
+
3
19
  ## 2.0.0 (2025-09-16)
4
20
 
5
21
  Full Changelog: [v0.0.2...v2.0.0](https://github.com/channel3-ai/sdk-python/compare/v0.0.2...v2.0.0)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: channel3_sdk
3
- Version: 2.0.0
3
+ Version: 2.2.0
4
4
  Summary: The official Python library for the channel3 API
5
5
  Project-URL: Homepage, https://github.com/channel3-ai/sdk-python
6
6
  Project-URL: Repository, https://github.com/channel3-ai/sdk-python
@@ -65,8 +65,6 @@ from channel3_sdk import Channel3
65
65
 
66
66
  client = Channel3(
67
67
  api_key=os.environ.get("CHANNEL3_API_KEY"), # This is the default and can be omitted
68
- # defaults to "production".
69
- environment="development",
70
68
  )
71
69
 
72
70
  response = client.search.perform()
@@ -88,8 +86,6 @@ from channel3_sdk import AsyncChannel3
88
86
 
89
87
  client = AsyncChannel3(
90
88
  api_key=os.environ.get("CHANNEL3_API_KEY"), # This is the default and can be omitted
91
- # defaults to "production".
92
- environment="development",
93
89
  )
94
90
 
95
91
 
@@ -30,8 +30,6 @@ from channel3_sdk import Channel3
30
30
 
31
31
  client = Channel3(
32
32
  api_key=os.environ.get("CHANNEL3_API_KEY"), # This is the default and can be omitted
33
- # defaults to "production".
34
- environment="development",
35
33
  )
36
34
 
37
35
  response = client.search.perform()
@@ -53,8 +51,6 @@ from channel3_sdk import AsyncChannel3
53
51
 
54
52
  client = AsyncChannel3(
55
53
  api_key=os.environ.get("CHANNEL3_API_KEY"), # This is the default and can be omitted
56
- # defaults to "production".
57
- environment="development",
58
54
  )
59
55
 
60
56
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "channel3_sdk"
3
- version = "2.0.0"
3
+ version = "2.2.0"
4
4
  description = "The official Python library for the channel3 API"
5
5
  dynamic = ["readme"]
6
6
  license = "Apache-2.0"
@@ -6,7 +6,6 @@ from . import types
6
6
  from ._types import NOT_GIVEN, Omit, NoneType, NotGiven, Transport, ProxiesTypes
7
7
  from ._utils import file_from_path
8
8
  from ._client import (
9
- ENVIRONMENTS,
10
9
  Client,
11
10
  Stream,
12
11
  Timeout,
@@ -72,7 +71,6 @@ __all__ = [
72
71
  "AsyncStream",
73
72
  "Channel3",
74
73
  "AsyncChannel3",
75
- "ENVIRONMENTS",
76
74
  "file_from_path",
77
75
  "BaseModel",
78
76
  "DEFAULT_TIMEOUT",
@@ -3,8 +3,8 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  import os
6
- from typing import Any, Dict, Union, Mapping, cast
7
- from typing_extensions import Self, Literal, override
6
+ from typing import Any, Union, Mapping
7
+ from typing_extensions import Self, override
8
8
 
9
9
  import httpx
10
10
 
@@ -41,7 +41,6 @@ from ._base_client import (
41
41
  )
42
42
 
43
43
  __all__ = [
44
- "ENVIRONMENTS",
45
44
  "Timeout",
46
45
  "Transport",
47
46
  "ProxiesTypes",
@@ -52,11 +51,6 @@ __all__ = [
52
51
  "AsyncClient",
53
52
  ]
54
53
 
55
- ENVIRONMENTS: Dict[str, str] = {
56
- "production": "https://api.trychannel3.com",
57
- "development": "https://localhost:8000",
58
- }
59
-
60
54
 
61
55
  class Channel3(SyncAPIClient):
62
56
  search: search.SearchResource
@@ -69,14 +63,11 @@ class Channel3(SyncAPIClient):
69
63
  # client options
70
64
  api_key: str
71
65
 
72
- _environment: Literal["production", "development"] | NotGiven
73
-
74
66
  def __init__(
75
67
  self,
76
68
  *,
77
69
  api_key: str | None = None,
78
- environment: Literal["production", "development"] | NotGiven = NOT_GIVEN,
79
- base_url: str | httpx.URL | None | NotGiven = NOT_GIVEN,
70
+ base_url: str | httpx.URL | None = None,
80
71
  timeout: Union[float, Timeout, None, NotGiven] = NOT_GIVEN,
81
72
  max_retries: int = DEFAULT_MAX_RETRIES,
82
73
  default_headers: Mapping[str, str] | None = None,
@@ -107,31 +98,10 @@ class Channel3(SyncAPIClient):
107
98
  )
108
99
  self.api_key = api_key
109
100
 
110
- self._environment = environment
111
-
112
- base_url_env = os.environ.get("CHANNEL3_BASE_URL")
113
- if is_given(base_url) and base_url is not None:
114
- # cast required because mypy doesn't understand the type narrowing
115
- base_url = cast("str | httpx.URL", base_url) # pyright: ignore[reportUnnecessaryCast]
116
- elif is_given(environment):
117
- if base_url_env and base_url is not None:
118
- raise ValueError(
119
- "Ambiguous URL; The `CHANNEL3_BASE_URL` env var and the `environment` argument are given. If you want to use the environment, you must pass base_url=None",
120
- )
121
-
122
- try:
123
- base_url = ENVIRONMENTS[environment]
124
- except KeyError as exc:
125
- raise ValueError(f"Unknown environment: {environment}") from exc
126
- elif base_url_env is not None:
127
- base_url = base_url_env
128
- else:
129
- self._environment = environment = "production"
130
-
131
- try:
132
- base_url = ENVIRONMENTS[environment]
133
- except KeyError as exc:
134
- raise ValueError(f"Unknown environment: {environment}") from exc
101
+ if base_url is None:
102
+ base_url = os.environ.get("CHANNEL3_BASE_URL")
103
+ if base_url is None:
104
+ base_url = f"https://api.trychannel3.com"
135
105
 
136
106
  super().__init__(
137
107
  version=__version__,
@@ -175,7 +145,6 @@ class Channel3(SyncAPIClient):
175
145
  self,
176
146
  *,
177
147
  api_key: str | None = None,
178
- environment: Literal["production", "development"] | None = None,
179
148
  base_url: str | httpx.URL | None = None,
180
149
  timeout: float | Timeout | None | NotGiven = NOT_GIVEN,
181
150
  http_client: httpx.Client | None = None,
@@ -211,7 +180,6 @@ class Channel3(SyncAPIClient):
211
180
  return self.__class__(
212
181
  api_key=api_key or self.api_key,
213
182
  base_url=base_url or self.base_url,
214
- environment=environment or self._environment,
215
183
  timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
216
184
  http_client=http_client,
217
185
  max_retries=max_retries if is_given(max_retries) else self.max_retries,
@@ -288,14 +256,11 @@ class AsyncChannel3(AsyncAPIClient):
288
256
  # client options
289
257
  api_key: str
290
258
 
291
- _environment: Literal["production", "development"] | NotGiven
292
-
293
259
  def __init__(
294
260
  self,
295
261
  *,
296
262
  api_key: str | None = None,
297
- environment: Literal["production", "development"] | NotGiven = NOT_GIVEN,
298
- base_url: str | httpx.URL | None | NotGiven = NOT_GIVEN,
263
+ base_url: str | httpx.URL | None = None,
299
264
  timeout: Union[float, Timeout, None, NotGiven] = NOT_GIVEN,
300
265
  max_retries: int = DEFAULT_MAX_RETRIES,
301
266
  default_headers: Mapping[str, str] | None = None,
@@ -326,31 +291,10 @@ class AsyncChannel3(AsyncAPIClient):
326
291
  )
327
292
  self.api_key = api_key
328
293
 
329
- self._environment = environment
330
-
331
- base_url_env = os.environ.get("CHANNEL3_BASE_URL")
332
- if is_given(base_url) and base_url is not None:
333
- # cast required because mypy doesn't understand the type narrowing
334
- base_url = cast("str | httpx.URL", base_url) # pyright: ignore[reportUnnecessaryCast]
335
- elif is_given(environment):
336
- if base_url_env and base_url is not None:
337
- raise ValueError(
338
- "Ambiguous URL; The `CHANNEL3_BASE_URL` env var and the `environment` argument are given. If you want to use the environment, you must pass base_url=None",
339
- )
340
-
341
- try:
342
- base_url = ENVIRONMENTS[environment]
343
- except KeyError as exc:
344
- raise ValueError(f"Unknown environment: {environment}") from exc
345
- elif base_url_env is not None:
346
- base_url = base_url_env
347
- else:
348
- self._environment = environment = "production"
349
-
350
- try:
351
- base_url = ENVIRONMENTS[environment]
352
- except KeyError as exc:
353
- raise ValueError(f"Unknown environment: {environment}") from exc
294
+ if base_url is None:
295
+ base_url = os.environ.get("CHANNEL3_BASE_URL")
296
+ if base_url is None:
297
+ base_url = f"https://api.trychannel3.com"
354
298
 
355
299
  super().__init__(
356
300
  version=__version__,
@@ -394,7 +338,6 @@ class AsyncChannel3(AsyncAPIClient):
394
338
  self,
395
339
  *,
396
340
  api_key: str | None = None,
397
- environment: Literal["production", "development"] | None = None,
398
341
  base_url: str | httpx.URL | None = None,
399
342
  timeout: float | Timeout | None | NotGiven = NOT_GIVEN,
400
343
  http_client: httpx.AsyncClient | None = None,
@@ -430,7 +373,6 @@ class AsyncChannel3(AsyncAPIClient):
430
373
  return self.__class__(
431
374
  api_key=api_key or self.api_key,
432
375
  base_url=base_url or self.base_url,
433
- environment=environment or self._environment,
434
376
  timeout=self.timeout if isinstance(timeout, NotGiven) else timeout,
435
377
  http_client=http_client,
436
378
  max_retries=max_retries if is_given(max_retries) else self.max_retries,
@@ -1,4 +1,4 @@
1
1
  # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
2
2
 
3
3
  __title__ = "channel3_sdk"
4
- __version__ = "2.0.0" # x-release-please-version
4
+ __version__ = "2.2.0" # x-release-please-version
@@ -55,6 +55,9 @@ class Filters(TypedDict, total=False):
55
55
  brand_ids: Optional[SequenceNotStr[str]]
56
56
  """List of brand IDs"""
57
57
 
58
+ exclude_product_ids: Optional[SequenceNotStr[str]]
59
+ """List of product IDs to exclude"""
60
+
58
61
  gender: Optional[Literal["male", "female", "unisex"]]
59
62
 
60
63
  price: Optional[FiltersPrice]
@@ -36,6 +36,7 @@ class TestSearch:
36
36
  filters={
37
37
  "availability": ["InStock"],
38
38
  "brand_ids": ["string"],
39
+ "exclude_product_ids": ["string"],
39
40
  "gender": "male",
40
41
  "price": {
41
42
  "max_price": 0,
@@ -95,6 +96,7 @@ class TestAsyncSearch:
95
96
  filters={
96
97
  "availability": ["InStock"],
97
98
  "brand_ids": ["string"],
99
+ "exclude_product_ids": ["string"],
98
100
  "gender": "male",
99
101
  "price": {
100
102
  "max_price": 0,
@@ -560,16 +560,6 @@ class TestChannel3:
560
560
  client = Channel3(api_key=api_key, _strict_response_validation=True)
561
561
  assert client.base_url == "http://localhost:5000/from/env/"
562
562
 
563
- # explicit environment arg requires explicitness
564
- with update_env(CHANNEL3_BASE_URL="http://localhost:5000/from/env"):
565
- with pytest.raises(ValueError, match=r"you must pass base_url=None"):
566
- Channel3(api_key=api_key, _strict_response_validation=True, environment="production")
567
-
568
- client = Channel3(
569
- base_url=None, api_key=api_key, _strict_response_validation=True, environment="production"
570
- )
571
- assert str(client.base_url).startswith("https://api.trychannel3.com")
572
-
573
563
  @pytest.mark.parametrize(
574
564
  "client",
575
565
  [
@@ -1373,16 +1363,6 @@ class TestAsyncChannel3:
1373
1363
  client = AsyncChannel3(api_key=api_key, _strict_response_validation=True)
1374
1364
  assert client.base_url == "http://localhost:5000/from/env/"
1375
1365
 
1376
- # explicit environment arg requires explicitness
1377
- with update_env(CHANNEL3_BASE_URL="http://localhost:5000/from/env"):
1378
- with pytest.raises(ValueError, match=r"you must pass base_url=None"):
1379
- AsyncChannel3(api_key=api_key, _strict_response_validation=True, environment="production")
1380
-
1381
- client = AsyncChannel3(
1382
- base_url=None, api_key=api_key, _strict_response_validation=True, environment="production"
1383
- )
1384
- assert str(client.base_url).startswith("https://api.trychannel3.com")
1385
-
1386
1366
  @pytest.mark.parametrize(
1387
1367
  "client",
1388
1368
  [
@@ -1,3 +0,0 @@
1
- {
2
- ".": "2.0.0"
3
- }
File without changes
File without changes
File without changes
File without changes
File without changes