diff --git a/.release-please-manifest.json b/.release-please-manifest.json index ce5e5c7..fea3454 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,3 +1,3 @@ { - ".": "0.35.0" + ".": "1.0.0" } \ No newline at end of file diff --git a/.stats.yml b/.stats.yml index 2a5683f..4a04c1d 100644 --- a/.stats.yml +++ b/.stats.yml @@ -1,4 +1,4 @@ configured_endpoints: 25 -openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-b84f53b1a92511eff85645f287ec08d43adcdcc589367c015770bde836422a65.yml -openapi_spec_hash: 71e317da7bc58cfc3bc2e4180f5b6267 -config_hash: f86a4e06ae5ed725aa79d58d7a8dc27c +openapi_spec_url: https://storage.googleapis.com/stainless-sdk-openapi-specs/context-dev/context.dev-aea83574a2e2963acf3791ff66f3b2d552e8b07ff00e2705ccd9a96cb3756a6e.yml +openapi_spec_hash: 3a11cd57f8e308484a461522a7f634ee +config_hash: eebf67a9c2ccfe2641980c154d7a698e diff --git a/CHANGELOG.md b/CHANGELOG.md index 4bd6209..22eca09 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,13 @@ # Changelog +## 1.0.0 (2026-06-18) + +Full Changelog: [v0.35.0...v1.0.0](https://github.com/context-dot-dev/context-python-sdk/compare/v0.35.0...v1.0.0) + +### Features + +* **api:** api update ([fc0ae29](https://github.com/context-dot-dev/context-python-sdk/commit/fc0ae29ae44c8a3cac7a9ac7294ff818634a442c)) + ## 0.35.0 (2026-06-11) Full Changelog: [v0.34.0...v0.35.0](https://github.com/context-dot-dev/context-python-sdk/compare/v0.34.0...v0.35.0) diff --git a/pyproject.toml b/pyproject.toml index 7ef0c26..f524bf0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "context.dev" -version = "0.35.0" +version = "1.0.0" description = "The official Python library for the context.dev API" dynamic = ["readme"] license = "Apache-2.0" diff --git a/src/context/dev/_version.py b/src/context/dev/_version.py index aba26ef..d2117c7 100644 --- a/src/context/dev/_version.py +++ b/src/context/dev/_version.py @@ -1,4 +1,4 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. __title__ = "context.dev" -__version__ = "0.35.0" # x-release-please-version +__version__ = "1.0.0" # x-release-please-version diff --git a/src/context/dev/types/web_web_crawl_md_response.py b/src/context/dev/types/web_web_crawl_md_response.py index ae798bc..6c8206d 100644 --- a/src/context/dev/types/web_web_crawl_md_response.py +++ b/src/context/dev/types/web_web_crawl_md_response.py @@ -1,12 +1,12 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import List, Optional +from typing import Dict, List, Union, Optional from pydantic import Field as FieldInfo from .._models import BaseModel -__all__ = ["WebWebCrawlMdResponse", "Metadata", "Result", "ResultMetadata", "KeyMetadata"] +__all__ = ["WebWebCrawlMdResponse", "Metadata", "Result", "ResultMetadata", "ResultMetadataAlternate", "KeyMetadata"] class Metadata(BaseModel): @@ -29,10 +29,33 @@ class Metadata(BaseModel): """Total number of URLs crawled""" +class ResultMetadataAlternate(BaseModel): + href: str + """Resolved alternate URL.""" + + hreflang: Optional[str] = None + """Language or locale for the alternate URL, when present.""" + + title: Optional[str] = None + """Alternate resource title, when present.""" + + type: Optional[str] = None + """Alternate resource MIME type, when present.""" + + class ResultMetadata(BaseModel): crawl_depth: int = FieldInfo(alias="crawlDepth") """Depth relative to the start URL. 0 = start URL, 1 = one link away.""" + final_url: str = FieldInfo(alias="finalUrl") + """Final URL scraped after redirects or scraper fallback, when known. + + Falls back to sourceUrl when unavailable. + """ + + source_url: str = FieldInfo(alias="sourceUrl") + """Original URL requested by the caller.""" + status_code: int = FieldInfo(alias="statusCode") """HTTP status code of the response""" @@ -40,10 +63,58 @@ class ResultMetadata(BaseModel): """true if the page was fetched and parsed successfully""" title: str - """The page's content (empty string if unavailable)""" + """Best page title extracted from the page (empty string if unavailable).""" url: str - """The URL that was fetched""" + """The crawl URL fetched for this page.""" + + additional_meta: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="additionalMeta", default=None) + """Additional non-social meta tags not promoted to top-level metadata fields.""" + + alternates: Optional[List[ResultMetadataAlternate]] = None + """Resolved alternate links from link rel=alternate tags.""" + + author: Optional[str] = None + """Author metadata, when present.""" + + canonical_url: Optional[str] = FieldInfo(alias="canonicalUrl", default=None) + """Resolved canonical URL, when present.""" + + description: Optional[str] = None + """Best description extracted from standard, Open Graph, or Twitter metadata.""" + + favicon: Optional[str] = None + """Resolved favicon URL, when present.""" + + image: Optional[str] = None + """Primary resolved preview image from Open Graph, Twitter, or image metadata.""" + + json_ld: Optional[List[Dict[str, object]]] = FieldInfo(alias="jsonLd", default=None) + """JSON-LD structured data blocks parsed from the page.""" + + keywords: Optional[List[str]] = None + """Keywords extracted from the page's keywords meta tag.""" + + language: Optional[str] = None + """Language extracted from html lang or language meta tags.""" + + modified_time: Optional[str] = FieldInfo(alias="modifiedTime", default=None) + """Modified timestamp/date from page metadata, when present.""" + + open_graph: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="openGraph", default=None) + """Open Graph metadata with the og: prefix removed and keys camel-cased.""" + + published_time: Optional[str] = FieldInfo(alias="publishedTime", default=None) + """Published timestamp/date from page metadata, when present.""" + + robots: Optional[str] = None + """Robots meta directive, when present.""" + + site_name: Optional[str] = FieldInfo(alias="siteName", default=None) + """Site or application name from page metadata.""" + + twitter: Optional[Dict[str, Union[str, List[str]]]] = None + """Twitter card metadata with the twitter: prefix removed and keys camel-cased.""" class Result(BaseModel): diff --git a/src/context/dev/types/web_web_scrape_html_response.py b/src/context/dev/types/web_web_scrape_html_response.py index 690047c..0a458e2 100644 --- a/src/context/dev/types/web_web_scrape_html_response.py +++ b/src/context/dev/types/web_web_scrape_html_response.py @@ -1,11 +1,91 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import Optional +from typing import Dict, List, Union, Optional from typing_extensions import Literal +from pydantic import Field as FieldInfo + from .._models import BaseModel -__all__ = ["WebWebScrapeHTMLResponse", "KeyMetadata"] +__all__ = ["WebWebScrapeHTMLResponse", "Metadata", "MetadataAlternate", "KeyMetadata"] + + +class MetadataAlternate(BaseModel): + href: str + """Resolved alternate URL.""" + + hreflang: Optional[str] = None + """Language or locale for the alternate URL, when present.""" + + title: Optional[str] = None + """Alternate resource title, when present.""" + + type: Optional[str] = None + """Alternate resource MIME type, when present.""" + + +class Metadata(BaseModel): + """Metadata extracted from the scraped page HTML.""" + + final_url: str = FieldInfo(alias="finalUrl") + """Final URL scraped after redirects or scraper fallback, when known. + + Falls back to sourceUrl when unavailable. + """ + + source_url: str = FieldInfo(alias="sourceUrl") + """Original URL requested by the caller.""" + + additional_meta: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="additionalMeta", default=None) + """Additional non-social meta tags not promoted to top-level metadata fields.""" + + alternates: Optional[List[MetadataAlternate]] = None + """Resolved alternate links from link rel=alternate tags.""" + + author: Optional[str] = None + """Author metadata, when present.""" + + canonical_url: Optional[str] = FieldInfo(alias="canonicalUrl", default=None) + """Resolved canonical URL, when present.""" + + description: Optional[str] = None + """Best description extracted from standard, Open Graph, or Twitter metadata.""" + + favicon: Optional[str] = None + """Resolved favicon URL, when present.""" + + image: Optional[str] = None + """Primary resolved preview image from Open Graph, Twitter, or image metadata.""" + + json_ld: Optional[List[Dict[str, object]]] = FieldInfo(alias="jsonLd", default=None) + """JSON-LD structured data blocks parsed from the page.""" + + keywords: Optional[List[str]] = None + """Keywords extracted from the page's keywords meta tag.""" + + language: Optional[str] = None + """Language extracted from html lang or language meta tags.""" + + modified_time: Optional[str] = FieldInfo(alias="modifiedTime", default=None) + """Modified timestamp/date from page metadata, when present.""" + + open_graph: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="openGraph", default=None) + """Open Graph metadata with the og: prefix removed and keys camel-cased.""" + + published_time: Optional[str] = FieldInfo(alias="publishedTime", default=None) + """Published timestamp/date from page metadata, when present.""" + + robots: Optional[str] = None + """Robots meta directive, when present.""" + + site_name: Optional[str] = FieldInfo(alias="siteName", default=None) + """Site or application name from page metadata.""" + + title: Optional[str] = None + """Best title extracted from the page.""" + + twitter: Optional[Dict[str, Union[str, List[str]]]] = None + """Twitter card metadata with the twitter: prefix removed and keys camel-cased.""" class KeyMetadata(BaseModel): @@ -30,6 +110,9 @@ class WebWebScrapeHTMLResponse(BaseModel): underlying XML instead — see the `type` field. """ + metadata: Metadata + """Metadata extracted from the scraped page HTML.""" + success: Literal[True] """Indicates success""" diff --git a/src/context/dev/types/web_web_scrape_md_response.py b/src/context/dev/types/web_web_scrape_md_response.py index 2510e1a..7b673f0 100644 --- a/src/context/dev/types/web_web_scrape_md_response.py +++ b/src/context/dev/types/web_web_scrape_md_response.py @@ -1,11 +1,91 @@ # File generated from our OpenAPI spec by Stainless. See CONTRIBUTING.md for details. -from typing import Optional +from typing import Dict, List, Union, Optional from typing_extensions import Literal +from pydantic import Field as FieldInfo + from .._models import BaseModel -__all__ = ["WebWebScrapeMdResponse", "KeyMetadata"] +__all__ = ["WebWebScrapeMdResponse", "Metadata", "MetadataAlternate", "KeyMetadata"] + + +class MetadataAlternate(BaseModel): + href: str + """Resolved alternate URL.""" + + hreflang: Optional[str] = None + """Language or locale for the alternate URL, when present.""" + + title: Optional[str] = None + """Alternate resource title, when present.""" + + type: Optional[str] = None + """Alternate resource MIME type, when present.""" + + +class Metadata(BaseModel): + """Metadata extracted from the scraped page HTML.""" + + final_url: str = FieldInfo(alias="finalUrl") + """Final URL scraped after redirects or scraper fallback, when known. + + Falls back to sourceUrl when unavailable. + """ + + source_url: str = FieldInfo(alias="sourceUrl") + """Original URL requested by the caller.""" + + additional_meta: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="additionalMeta", default=None) + """Additional non-social meta tags not promoted to top-level metadata fields.""" + + alternates: Optional[List[MetadataAlternate]] = None + """Resolved alternate links from link rel=alternate tags.""" + + author: Optional[str] = None + """Author metadata, when present.""" + + canonical_url: Optional[str] = FieldInfo(alias="canonicalUrl", default=None) + """Resolved canonical URL, when present.""" + + description: Optional[str] = None + """Best description extracted from standard, Open Graph, or Twitter metadata.""" + + favicon: Optional[str] = None + """Resolved favicon URL, when present.""" + + image: Optional[str] = None + """Primary resolved preview image from Open Graph, Twitter, or image metadata.""" + + json_ld: Optional[List[Dict[str, object]]] = FieldInfo(alias="jsonLd", default=None) + """JSON-LD structured data blocks parsed from the page.""" + + keywords: Optional[List[str]] = None + """Keywords extracted from the page's keywords meta tag.""" + + language: Optional[str] = None + """Language extracted from html lang or language meta tags.""" + + modified_time: Optional[str] = FieldInfo(alias="modifiedTime", default=None) + """Modified timestamp/date from page metadata, when present.""" + + open_graph: Optional[Dict[str, Union[str, List[str]]]] = FieldInfo(alias="openGraph", default=None) + """Open Graph metadata with the og: prefix removed and keys camel-cased.""" + + published_time: Optional[str] = FieldInfo(alias="publishedTime", default=None) + """Published timestamp/date from page metadata, when present.""" + + robots: Optional[str] = None + """Robots meta directive, when present.""" + + site_name: Optional[str] = FieldInfo(alias="siteName", default=None) + """Site or application name from page metadata.""" + + title: Optional[str] = None + """Best title extracted from the page.""" + + twitter: Optional[Dict[str, Union[str, List[str]]]] = None + """Twitter card metadata with the twitter: prefix removed and keys camel-cased.""" class KeyMetadata(BaseModel): @@ -25,6 +105,9 @@ class WebWebScrapeMdResponse(BaseModel): markdown: str """Page content converted to GitHub Flavored Markdown""" + metadata: Metadata + """Metadata extracted from the scraped page HTML.""" + success: Literal[True] """Indicates success"""