Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .release-please-manifest.json
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
{
".": "2.9.0"
".": "2.10.0"
}
8 changes: 4 additions & 4 deletions .stats.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
configured_endpoints: 40
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-a0dda03bbb600917cfb9add468cc4c8c84351a8dbbf61644dbc353263ca1748f.yml
openapi_spec_hash: c24264f32a46d9317aac5af9d6a396f7
config_hash: 920678668dd2da6f8966fbf1b8fde4e2
configured_endpoints: 41
openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-5dbe631ce516ca688273053ddcb58870561bd6dc76fa75df354c954d7af65a3c.yml
openapi_spec_hash: 53a74c4cccbdec8590db38183840a446
config_hash: 0fb0ceca5946298c416cec0cca5260c7
13 changes: 13 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,18 @@
# Changelog

## 2.10.0 (2026-08-17)

Full Changelog: [v2.9.0...v2.10.0](https://github.com/context-dot-dev/context-python-sdk/compare/v2.9.0...v2.10.0)

### Features

* **api:** api update ([253db7d](https://github.com/context-dot-dev/context-python-sdk/commit/253db7d8a9129f323b2a56b82bd5e780bcd8bf86))
* **api:** api update ([740b2d4](https://github.com/context-dot-dev/context-python-sdk/commit/740b2d42d9e897eefd273779ab2a62c285c3b84f))
* **api:** api update ([07e8016](https://github.com/context-dot-dev/context-python-sdk/commit/07e80168ee24305f42bfac338ee85d676e9601d7))
* **api:** api update ([499fb3f](https://github.com/context-dot-dev/context-python-sdk/commit/499fb3fdef35838f9c631560b2bc073b73f3a04a))
* **api:** api update ([853f56b](https://github.com/context-dot-dev/context-python-sdk/commit/853f56b503807b1bb41f4ca26800b56fc41e395c))
* **api:** manual updates ([4f84467](https://github.com/context-dot-dev/context-python-sdk/commit/4f84467a599b7c80702e95b027e87584ba6d07a7))

## 2.9.0 (2026-08-07)

Full Changelog: [v2.8.0...v2.9.0](https://github.com/context-dot-dev/context-python-sdk/compare/v2.8.0...v2.9.0)
Expand Down
12 changes: 12 additions & 0 deletions api.md
Original file line number Diff line number Diff line change
Expand Up @@ -178,3 +178,15 @@ from context.dev.types import PersonEnrichResponse
Methods:

- <code title="post /people/enrich">client.people.<a href="./src/context/dev/resources/people.py">enrich</a>(\*\*<a href="src/context/dev/types/person_enrich_params.py">params</a>) -> <a href="./src/context/dev/types/person_enrich_response.py">PersonEnrichResponse</a></code>

# News

Types:

```python
from context.dev.types import NewsSearchResponse
```

Methods:

- <code title="post /news/search">client.news.<a href="./src/context/dev/resources/news.py">search</a>(\*\*<a href="src/context/dev/types/news_search_params.py">params</a>) -> <a href="./src/context/dev/types/news_search_response.py">NewsSearchResponse</a></code>
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "context.dev"
version = "2.9.0"
version = "2.10.0"
description = "The official Python library for the context.dev API"
dynamic = ["readme"]
license = "Apache-2.0"
Expand Down
45 changes: 44 additions & 1 deletion src/context/dev/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,10 @@
)

if TYPE_CHECKING:
from .resources import ai, web, batch, brand, parse, people, utility, industry, monitors
from .resources import ai, web, news, batch, brand, parse, people, utility, industry, monitors
from .resources.ai import AIResource, AsyncAIResource
from .resources.web import WebResource, AsyncWebResource
from .resources.news import NewsResource, AsyncNewsResource
from .resources.batch import BatchResource, AsyncBatchResource
from .resources.brand import BrandResource, AsyncBrandResource
from .resources.parse import ParseResource, AsyncParseResource
Expand Down Expand Up @@ -180,6 +181,13 @@ def people(self) -> PeopleResource:

return PeopleResource(self)

@cached_property
def news(self) -> NewsResource:
"""Search live first-party RSS and free historical news data by company identity."""
from .resources.news import NewsResource

return NewsResource(self)

@cached_property
def with_raw_response(self) -> ContextDevWithRawResponse:
return ContextDevWithRawResponse(self)
Expand Down Expand Up @@ -415,6 +423,13 @@ def people(self) -> AsyncPeopleResource:

return AsyncPeopleResource(self)

@cached_property
def news(self) -> AsyncNewsResource:
"""Search live first-party RSS and free historical news data by company identity."""
from .resources.news import AsyncNewsResource

return AsyncNewsResource(self)

@cached_property
def with_raw_response(self) -> AsyncContextDevWithRawResponse:
return AsyncContextDevWithRawResponse(self)
Expand Down Expand Up @@ -592,6 +607,13 @@ def people(self) -> people.PeopleResourceWithRawResponse:

return PeopleResourceWithRawResponse(self._client.people)

@cached_property
def news(self) -> news.NewsResourceWithRawResponse:
"""Search live first-party RSS and free historical news data by company identity."""
from .resources.news import NewsResourceWithRawResponse

return NewsResourceWithRawResponse(self._client.news)


class AsyncContextDevWithRawResponse:
_client: AsyncContextDev
Expand Down Expand Up @@ -657,6 +679,13 @@ def people(self) -> people.AsyncPeopleResourceWithRawResponse:

return AsyncPeopleResourceWithRawResponse(self._client.people)

@cached_property
def news(self) -> news.AsyncNewsResourceWithRawResponse:
"""Search live first-party RSS and free historical news data by company identity."""
from .resources.news import AsyncNewsResourceWithRawResponse

return AsyncNewsResourceWithRawResponse(self._client.news)


class ContextDevWithStreamedResponse:
_client: ContextDev
Expand Down Expand Up @@ -722,6 +751,13 @@ def people(self) -> people.PeopleResourceWithStreamingResponse:

return PeopleResourceWithStreamingResponse(self._client.people)

@cached_property
def news(self) -> news.NewsResourceWithStreamingResponse:
"""Search live first-party RSS and free historical news data by company identity."""
from .resources.news import NewsResourceWithStreamingResponse

return NewsResourceWithStreamingResponse(self._client.news)


class AsyncContextDevWithStreamedResponse:
_client: AsyncContextDev
Expand Down Expand Up @@ -787,6 +823,13 @@ def people(self) -> people.AsyncPeopleResourceWithStreamingResponse:

return AsyncPeopleResourceWithStreamingResponse(self._client.people)

@cached_property
def news(self) -> news.AsyncNewsResourceWithStreamingResponse:
"""Search live first-party RSS and free historical news data by company identity."""
from .resources.news import AsyncNewsResourceWithStreamingResponse

return AsyncNewsResourceWithStreamingResponse(self._client.news)


Client = ContextDev

Expand Down
2 changes: 1 addition & 1 deletion src/context/dev/_version.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details.

__title__ = "context.dev"
__version__ = "2.9.0" # x-release-please-version
__version__ = "2.10.0" # x-release-please-version
14 changes: 14 additions & 0 deletions src/context/dev/resources/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,14 @@
WebResourceWithStreamingResponse,
AsyncWebResourceWithStreamingResponse,
)
from .news import (
NewsResource,
AsyncNewsResource,
NewsResourceWithRawResponse,
AsyncNewsResourceWithRawResponse,
NewsResourceWithStreamingResponse,
AsyncNewsResourceWithStreamingResponse,
)
from .batch import (
BatchResource,
AsyncBatchResource,
Expand Down Expand Up @@ -128,4 +136,10 @@
"AsyncPeopleResourceWithRawResponse",
"PeopleResourceWithStreamingResponse",
"AsyncPeopleResourceWithStreamingResponse",
"NewsResource",
"AsyncNewsResource",
"NewsResourceWithRawResponse",
"AsyncNewsResourceWithRawResponse",
"NewsResourceWithStreamingResponse",
"AsyncNewsResourceWithStreamingResponse",
]
54 changes: 35 additions & 19 deletions src/context/dev/resources/brand.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from __future__ import annotations

from typing import Union, Optional
from typing import List, Union, Optional
from typing_extensions import Literal, overload

import httpx
Expand Down Expand Up @@ -1278,7 +1278,10 @@ def search(
self,
*,
query: str,
autocomplete: bool | Omit = omit,
query_by: List[Literal["name", "domain"]] | Omit = omit,
tags: SequenceNotStr[str] | Omit = omit,
typo_tolerance: int | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
Expand All @@ -1287,23 +1290,25 @@ def search(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> BrandSearchResponse:
"""
Search brands by name or domain and get back up to 10 lightweight matches
(domain, name, logo). Name matches rank ahead of domain matches; within each
group the most popular brands come first: by Tranco rank, then market cap for
brands outside the Tranco list, with text relevance breaking ties. Matching is
prefix-based with no typo tolerance, so it is suited to autocomplete. Only
brands already in the Context.dev index are returned — use /brand/retrieve to
fetch (and index) a specific domain. Free on Pro and Scale plans; costs 1 credit
per request on the Free and Starter plans.
Search indexed brands by name or domain

Args:
query: Search term, matched against brand names and domains by prefix (e.g. 'nike',
query: Search term, matched against the fields selected by queryBy (e.g. 'nike',
'nike.com', 'nik').

autocomplete: Whether the search term matches by prefix, so partial words match as they are
typed (e.g. 'nik' matches Nike). Set to false to match whole words only.

query_by: Fields to match the search term against, as a comma-separated list or repeated
parameter: 'name', 'domain', or both. Defaults to both.

tags: Optional comma-separated caller-defined tags for tracking this request. Tags are
recorded on the request's usage log and can be used to filter usage on the
dashboard usage page. Up to 20 tags, each 1-50 characters.

typo_tolerance: Maximum number of typos tolerated when matching, from 0 to 2. Defaults to 0 (no
typo tolerance).

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request
Expand All @@ -1322,7 +1327,10 @@ def search(
query=maybe_transform(
{
"query": query,
"autocomplete": autocomplete,
"query_by": query_by,
"tags": tags,
"typo_tolerance": typo_tolerance,
},
brand_search_params.BrandSearchParams,
),
Expand Down Expand Up @@ -2583,7 +2591,10 @@ async def search(
self,
*,
query: str,
autocomplete: bool | Omit = omit,
query_by: List[Literal["name", "domain"]] | Omit = omit,
tags: SequenceNotStr[str] | Omit = omit,
typo_tolerance: int | Omit = omit,
# Use the following arguments if you need to pass additional parameters to the API that aren't available via kwargs.
# The extra values given here take precedence over values defined on the client or passed to this method.
extra_headers: Headers | None = None,
Expand All @@ -2592,23 +2603,25 @@ async def search(
timeout: float | httpx.Timeout | None | NotGiven = not_given,
) -> BrandSearchResponse:
"""
Search brands by name or domain and get back up to 10 lightweight matches
(domain, name, logo). Name matches rank ahead of domain matches; within each
group the most popular brands come first: by Tranco rank, then market cap for
brands outside the Tranco list, with text relevance breaking ties. Matching is
prefix-based with no typo tolerance, so it is suited to autocomplete. Only
brands already in the Context.dev index are returned — use /brand/retrieve to
fetch (and index) a specific domain. Free on Pro and Scale plans; costs 1 credit
per request on the Free and Starter plans.
Search indexed brands by name or domain

Args:
query: Search term, matched against brand names and domains by prefix (e.g. 'nike',
query: Search term, matched against the fields selected by queryBy (e.g. 'nike',
'nike.com', 'nik').

autocomplete: Whether the search term matches by prefix, so partial words match as they are
typed (e.g. 'nik' matches Nike). Set to false to match whole words only.

query_by: Fields to match the search term against, as a comma-separated list or repeated
parameter: 'name', 'domain', or both. Defaults to both.

tags: Optional comma-separated caller-defined tags for tracking this request. Tags are
recorded on the request's usage log and can be used to filter usage on the
dashboard usage page. Up to 20 tags, each 1-50 characters.

typo_tolerance: Maximum number of typos tolerated when matching, from 0 to 2. Defaults to 0 (no
typo tolerance).

extra_headers: Send extra headers

extra_query: Add additional query parameters to the request
Expand All @@ -2627,7 +2640,10 @@ async def search(
query=await async_maybe_transform(
{
"query": query,
"autocomplete": autocomplete,
"query_by": query_by,
"tags": tags,
"typo_tolerance": typo_tolerance,
},
brand_search_params.BrandSearchParams,
),
Expand Down
Loading
Loading