Skip to content

Commit 5a1f0b3

Browse files
authored
Merge pull request #36 from brand-dot-dev/release-please--branches--main--changes--next
release: 1.30.0
2 parents 1a17b29 + 5d2492a commit 5a1f0b3

8 files changed

Lines changed: 55 additions & 30 deletions

File tree

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "1.29.0"
2+
".": "1.30.0"
33
}

.stats.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
configured_endpoints: 15
2-
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/brand-dev%2Fbrand.dev-737dbedd830e2c989387e90a9bb5baa3915306ecfef2e46b09d02cb1879f043c.yml
3-
openapi_spec_hash: 7bc21f4c6d5fd39c1a3b22626846ca87
2+
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/brand-dev%2Fbrand.dev-73562e26b663cf10185b9e98966accf5f151c6d3cf99b5e060ce5a847045e383.yml
3+
openapi_spec_hash: bf5994966b84f9dda998ad5059ff8318
44
config_hash: 6f10592c7d0c3bafefc1271472283217

CHANGELOG.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,13 @@
11
# Changelog
22

3+
## 1.30.0 (2026-02-07)
4+
5+
Full Changelog: [v1.29.0...v1.30.0](https://github.com/brand-dot-dev/python-sdk/compare/v1.29.0...v1.30.0)
6+
7+
### Features
8+
9+
* **api:** api update ([c94b956](https://github.com/brand-dot-dev/python-sdk/commit/c94b95672e4a684f5375f1b48f351c0839be1fdc))
10+
311
## 1.29.0 (2026-02-02)
412

513
Full Changelog: [v1.28.0...v1.29.0](https://github.com/brand-dot-dev/python-sdk/compare/v1.28.0...v1.29.0)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[project]
22
name = "brand.dev"
3-
version = "1.29.0"
3+
version = "1.30.0"
44
description = "The official Python library for the brand.dev API"
55
dynamic = ["readme"]
66
license = "Apache-2.0"

src/brand/dev/_version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.
22

33
__title__ = "brand.dev"
4-
__version__ = "1.29.0" # x-release-please-version
4+
__version__ = "1.30.0" # x-release-please-version

src/brand/dev/resources/brand.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,8 @@ def retrieve(
192192
def ai_products(
193193
self,
194194
*,
195-
domain: str,
195+
direct_url: str | Omit = omit,
196+
domain: str | Omit = omit,
196197
max_products: int | Omit = omit,
197198
timeout_ms: int | Omit = omit,
198199
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -209,7 +210,13 @@ def ai_products(
209210
description, image, pricing, features, and more.
210211
211212
Args:
212-
domain: The domain name to analyze
213+
direct_url: A specific URL to use directly as the starting point for extraction without
214+
domain resolution. Useful when you want to extract products from a specific page
215+
rather than discovering the site's product pages automatically. Either 'domain'
216+
or 'directUrl' must be provided, but not both.
217+
218+
domain: The domain name to analyze. Either 'domain' or 'directUrl' must be provided, but
219+
not both.
213220
214221
max_products: Maximum number of products to extract.
215222
@@ -229,6 +236,7 @@ def ai_products(
229236
"/brand/ai/products",
230237
body=maybe_transform(
231238
{
239+
"direct_url": direct_url,
232240
"domain": domain,
233241
"max_products": max_products,
234242
"timeout_ms": timeout_ms,
@@ -1731,7 +1739,8 @@ async def retrieve(
17311739
async def ai_products(
17321740
self,
17331741
*,
1734-
domain: str,
1742+
direct_url: str | Omit = omit,
1743+
domain: str | Omit = omit,
17351744
max_products: int | Omit = omit,
17361745
timeout_ms: int | Omit = omit,
17371746
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
@@ -1748,7 +1757,13 @@ async def ai_products(
17481757
description, image, pricing, features, and more.
17491758
17501759
Args:
1751-
domain: The domain name to analyze
1760+
direct_url: A specific URL to use directly as the starting point for extraction without
1761+
domain resolution. Useful when you want to extract products from a specific page
1762+
rather than discovering the site's product pages automatically. Either 'domain'
1763+
or 'directUrl' must be provided, but not both.
1764+
1765+
domain: The domain name to analyze. Either 'domain' or 'directUrl' must be provided, but
1766+
not both.
17521767
17531768
max_products: Maximum number of products to extract.
17541769
@@ -1768,6 +1783,7 @@ async def ai_products(
17681783
"/brand/ai/products",
17691784
body=await async_maybe_transform(
17701785
{
1786+
"direct_url": direct_url,
17711787
"domain": domain,
17721788
"max_products": max_products,
17731789
"timeout_ms": timeout_ms,

src/brand/dev/types/brand_ai_products_params.py

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,27 @@
22

33
from __future__ import annotations
44

5-
from typing_extensions import Required, Annotated, TypedDict
5+
from typing_extensions import Annotated, TypedDict
66

77
from .._utils import PropertyInfo
88

99
__all__ = ["BrandAIProductsParams"]
1010

1111

1212
class BrandAIProductsParams(TypedDict, total=False):
13-
domain: Required[str]
14-
"""The domain name to analyze"""
13+
direct_url: Annotated[str, PropertyInfo(alias="directUrl")]
14+
"""
15+
A specific URL to use directly as the starting point for extraction without
16+
domain resolution. Useful when you want to extract products from a specific page
17+
rather than discovering the site's product pages automatically. Either 'domain'
18+
or 'directUrl' must be provided, but not both.
19+
"""
20+
21+
domain: str
22+
"""The domain name to analyze.
23+
24+
Either 'domain' or 'directUrl' must be provided, but not both.
25+
"""
1526

1627
max_products: Annotated[int, PropertyInfo(alias="maxProducts")]
1728
"""Maximum number of products to extract."""

tests/api_resources/test_brand.py

Lines changed: 8 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -81,15 +81,14 @@ def test_streaming_response_retrieve(self, client: BrandDev) -> None:
8181
@pytest.mark.skip(reason="Prism tests are disabled")
8282
@parametrize
8383
def test_method_ai_products(self, client: BrandDev) -> None:
84-
brand = client.brand.ai_products(
85-
domain="domain",
86-
)
84+
brand = client.brand.ai_products()
8785
assert_matches_type(BrandAIProductsResponse, brand, path=["response"])
8886

8987
@pytest.mark.skip(reason="Prism tests are disabled")
9088
@parametrize
9189
def test_method_ai_products_with_all_params(self, client: BrandDev) -> None:
9290
brand = client.brand.ai_products(
91+
direct_url="https://example.com",
9392
domain="domain",
9493
max_products=1,
9594
timeout_ms=1,
@@ -99,9 +98,7 @@ def test_method_ai_products_with_all_params(self, client: BrandDev) -> None:
9998
@pytest.mark.skip(reason="Prism tests are disabled")
10099
@parametrize
101100
def test_raw_response_ai_products(self, client: BrandDev) -> None:
102-
response = client.brand.with_raw_response.ai_products(
103-
domain="domain",
104-
)
101+
response = client.brand.with_raw_response.ai_products()
105102

106103
assert response.is_closed is True
107104
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -111,9 +108,7 @@ def test_raw_response_ai_products(self, client: BrandDev) -> None:
111108
@pytest.mark.skip(reason="Prism tests are disabled")
112109
@parametrize
113110
def test_streaming_response_ai_products(self, client: BrandDev) -> None:
114-
with client.brand.with_streaming_response.ai_products(
115-
domain="domain",
116-
) as response:
111+
with client.brand.with_streaming_response.ai_products() as response:
117112
assert not response.is_closed
118113
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
119114

@@ -803,15 +798,14 @@ async def test_streaming_response_retrieve(self, async_client: AsyncBrandDev) ->
803798
@pytest.mark.skip(reason="Prism tests are disabled")
804799
@parametrize
805800
async def test_method_ai_products(self, async_client: AsyncBrandDev) -> None:
806-
brand = await async_client.brand.ai_products(
807-
domain="domain",
808-
)
801+
brand = await async_client.brand.ai_products()
809802
assert_matches_type(BrandAIProductsResponse, brand, path=["response"])
810803

811804
@pytest.mark.skip(reason="Prism tests are disabled")
812805
@parametrize
813806
async def test_method_ai_products_with_all_params(self, async_client: AsyncBrandDev) -> None:
814807
brand = await async_client.brand.ai_products(
808+
direct_url="https://example.com",
815809
domain="domain",
816810
max_products=1,
817811
timeout_ms=1,
@@ -821,9 +815,7 @@ async def test_method_ai_products_with_all_params(self, async_client: AsyncBrand
821815
@pytest.mark.skip(reason="Prism tests are disabled")
822816
@parametrize
823817
async def test_raw_response_ai_products(self, async_client: AsyncBrandDev) -> None:
824-
response = await async_client.brand.with_raw_response.ai_products(
825-
domain="domain",
826-
)
818+
response = await async_client.brand.with_raw_response.ai_products()
827819

828820
assert response.is_closed is True
829821
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
@@ -833,9 +825,7 @@ async def test_raw_response_ai_products(self, async_client: AsyncBrandDev) -> No
833825
@pytest.mark.skip(reason="Prism tests are disabled")
834826
@parametrize
835827
async def test_streaming_response_ai_products(self, async_client: AsyncBrandDev) -> None:
836-
async with async_client.brand.with_streaming_response.ai_products(
837-
domain="domain",
838-
) as response:
828+
async with async_client.brand.with_streaming_response.ai_products() as response:
839829
assert not response.is_closed
840830
assert response.http_request.headers.get("X-Stainless-Lang") == "python"
841831

0 commit comments

Comments
 (0)