From 8fd02afd87d8d057bd5b5f89372da3589a51cebf Mon Sep 17 00:00:00 2001 From: SebastianBitsch Date: Tue, 3 Feb 2026 20:06:21 +0000 Subject: [PATCH] chore: sync with API changes --- rencom/_generated/models.py | 298 +++++++++++++++++++----------------- uv.lock | 2 +- 2 files changed, 158 insertions(+), 142 deletions(-) diff --git a/rencom/_generated/models.py b/rencom/_generated/models.py index f9e9fd9..06335f2 100644 --- a/rencom/_generated/models.py +++ b/rencom/_generated/models.py @@ -8,7 +8,7 @@ # generated by datamodel-codegen: # filename: openapi.json -# timestamp: 2026-01-30T06:44:41+00:00 +# timestamp: 2026-02-03T20:05:57+00:00 from __future__ import annotations @@ -19,20 +19,20 @@ class ApiKeyCreate(BaseModel): - user_email: Annotated[EmailStr, Field(title="User Email")] - organization_name: Annotated[str | None, Field(title="Organization Name")] = None - tier: Annotated[str | None, Field(title="Tier")] = "free" - expires_in_days: Annotated[int | None, Field(title="Expires In Days")] = None + user_email: Annotated[EmailStr, Field(title='User Email')] + organization_name: Annotated[str | None, Field(title='Organization Name')] = None + tier: Annotated[str | None, Field(title='Tier')] = 'free' + expires_in_days: Annotated[int | None, Field(title='Expires In Days')] = None class ApiKeyListItem(BaseModel): - key_prefix: Annotated[str, Field(title="Key Prefix")] - organization_name: Annotated[str | None, Field(title="Organization Name")] - tier: Annotated[str, Field(title="Tier")] - requests_count: Annotated[int, Field(title="Requests Count")] - last_used_at: Annotated[AwareDatetime | None, Field(title="Last Used At")] - created_at: Annotated[AwareDatetime, Field(title="Created At")] - is_active: Annotated[bool, Field(title="Is Active")] + key_prefix: Annotated[str, Field(title='Key Prefix')] + organization_name: Annotated[str | None, Field(title='Organization Name')] + tier: Annotated[str, Field(title='Tier')] + requests_count: Annotated[int, Field(title='Requests Count')] + last_used_at: Annotated[AwareDatetime | None, Field(title='Last Used At')] + created_at: Annotated[AwareDatetime, Field(title='Created At')] + is_active: Annotated[bool, Field(title='Is Active')] class ApiKeyResponse(BaseModel): @@ -40,310 +40,326 @@ class ApiKeyResponse(BaseModel): str, Field( description="Full API key - save this, won't be shown again", - title="Api Key", + title='Api Key', ), ] - key_prefix: Annotated[str, Field(title="Key Prefix")] - user_email: Annotated[EmailStr, Field(title="User Email")] - tier: Annotated[str, Field(title="Tier")] - rate_limit_per_minute: Annotated[int, Field(title="Rate Limit Per Minute")] - rate_limit_per_day: Annotated[int, Field(title="Rate Limit Per Day")] - expires_at: Annotated[AwareDatetime | None, Field(title="Expires At")] + key_prefix: Annotated[str, Field(title='Key Prefix')] + user_email: Annotated[EmailStr, Field(title='User Email')] + tier: Annotated[str, Field(title='Tier')] + rate_limit_per_minute: Annotated[int, Field(title='Rate Limit Per Minute')] + rate_limit_per_day: Annotated[int, Field(title='Rate Limit Per Day')] + expires_at: Annotated[AwareDatetime | None, Field(title='Expires At')] class CreateApiKeyRequest(BaseModel): - organization_name: Annotated[str, Field(title="Organization Name")] + organization_name: Annotated[str, Field(title='Organization Name')] class HealthResponse(BaseModel): status: Annotated[ - str, Field(description="Service status", examples=["healthy"], title="Status") + str, Field(description='Service status', examples=['healthy'], title='Status') + ] + timestamp: Annotated[ + AwareDatetime, Field(description='Current timestamp', title='Timestamp') ] - timestamp: Annotated[AwareDatetime, Field(description="Current timestamp", title="Timestamp")] class LoginRequest(BaseModel): - email: Annotated[EmailStr, Field(title="Email")] + email: Annotated[EmailStr, Field(title='Email')] class LoginResponse(BaseModel): - message: Annotated[str, Field(title="Message")] - expires_in: Annotated[int | None, Field(title="Expires In")] = 900 + message: Annotated[str, Field(title='Message')] + expires_in: Annotated[int | None, Field(title='Expires In')] = 900 class MerchantEndpoints(BaseModel): rest: Annotated[ - str | None, Field(examples=["https://shop.example.com/ucp/v1"], title="Rest") + str | None, Field(examples=['https://shop.example.com/ucp/v1'], title='Rest') ] = None mcp: Annotated[ - str | None, Field(examples=["https://shop.example.com/ucp/mcp"], title="Mcp") + str | None, Field(examples=['https://shop.example.com/ucp/mcp'], title='Mcp') ] = None a2a: Annotated[ - str | None, Field(examples=["https://shop.example.com/ucp/a2a"], title="A2A") + str | None, Field(examples=['https://shop.example.com/ucp/a2a'], title='A2A') ] = None class MerchantSearchResult(BaseModel): - id: Annotated[int, Field(description="Database merchant ID", title="Id")] + id: Annotated[int, Field(description='Database merchant ID', title='Id')] domain: Annotated[ str, Field( - description="Merchant domain name", - examples=["shop.example.com"], - title="Domain", + description='Merchant domain name', + examples=['shop.example.com'], + title='Domain', ), ] name: Annotated[ str | None, - Field(description="Merchant name", examples=["Example Shop"], title="Name"), + Field(description='Merchant name', examples=['Example Shop'], title='Name'), ] = None description: Annotated[ str | None, Field( - description="Merchant description", - examples=["Premium fashion and lifestyle products"], - title="Description", + description='Merchant description', + examples=['Premium fashion and lifestyle products'], + title='Description', ), ] = None capabilities: Annotated[ list[str], Field( - description="Supported UCP capabilities", - examples=["dev.ucp.shopping.checkout", "dev.ucp.shopping.catalog"], - title="Capabilities", + description='Supported UCP capabilities', + examples=['dev.ucp.shopping.checkout', 'dev.ucp.shopping.catalog'], + title='Capabilities', ), ] has_native_catalog: Annotated[ bool, Field( - description="Has native UCP catalog API", + description='Has native UCP catalog API', examples=[True], - title="Has Native Catalog", + title='Has Native Catalog', ), ] - endpoints: Annotated[MerchantEndpoints, Field(description="UCP service endpoints")] + endpoints: Annotated[MerchantEndpoints, Field(description='UCP service endpoints')] ucp_profile_url: Annotated[ str, Field( - description="URL to UCP profile", - examples=["https://shop.example.com/.well-known/ucp"], - title="Ucp Profile Url", + description='URL to UCP profile', + examples=['https://shop.example.com/.well-known/ucp'], + title='Ucp Profile Url', ), ] industry: Annotated[ str | None, - Field(description="Merchant industry", examples=["fashion"], title="Industry"), + Field(description='Merchant industry', examples=['fashion'], title='Industry'), ] = None region: Annotated[ str | None, - Field(description="Merchant region", examples=["US"], title="Region"), + Field(description='Merchant region', examples=['US'], title='Region'), ] = None is_verified: Annotated[ - bool | None, Field(description="Verified merchant status", title="Is Verified") + bool | None, Field(description='Verified merchant status', title='Is Verified') ] = False class ProductPrice(BaseModel): - amount: Annotated[int, Field(title="Amount")] - currency: Annotated[str | None, Field(title="Currency")] = "USD" + amount: Annotated[int, Field(title='Amount')] + currency: Annotated[str | None, Field(title='Currency')] = 'USD' class ProductRating(BaseModel): - average: Annotated[float, Field(ge=0.0, le=5.0, title="Average")] - count: Annotated[int, Field(ge=0, title="Count")] + average: Annotated[float, Field(ge=0.0, le=5.0, title='Average')] + count: Annotated[int, Field(ge=0, title='Count')] class Availability(Enum): - in_stock = "in_stock" - out_of_stock = "out_of_stock" - preorder = "preorder" - discontinued = "discontinued" + in_stock = 'in_stock' + out_of_stock = 'out_of_stock' + preorder = 'preorder' + discontinued = 'discontinued' class DataSource(Enum): - ucp_catalog = "ucp_catalog" - schema_org = "schema_org" - sitemap = "sitemap" - opengraph = "opengraph" - manual = "manual" + ucp_catalog = 'ucp_catalog' + schema_org = 'schema_org' + sitemap = 'sitemap' + opengraph = 'opengraph' + manual = 'manual' class ProductSearchResult(BaseModel): - id: Annotated[int, Field(title="Id")] - merchant_id: Annotated[int, Field(title="Merchant Id")] - merchant_domain: Annotated[str, Field(title="Merchant Domain")] - merchant_name: Annotated[str | None, Field(title="Merchant Name")] = None - title: Annotated[str, Field(title="Title")] - description: Annotated[str | None, Field(title="Description")] = None + id: Annotated[int, Field(title='Id')] + merchant_id: Annotated[int, Field(title='Merchant Id')] + merchant_domain: Annotated[str, Field(title='Merchant Domain')] + merchant_name: Annotated[str | None, Field(title='Merchant Name')] = None + title: Annotated[str, Field(title='Title')] + description: Annotated[str | None, Field(title='Description')] = None price: ProductPrice | None = None - image_url: Annotated[str | None, Field(title="Image Url")] = None - product_url: Annotated[str, Field(title="Product Url")] - availability: Annotated[Availability | None, Field(title="Availability")] = None + image_url: Annotated[str | None, Field(title='Image Url')] = None + product_url: Annotated[str, Field(title='Product Url')] + availability: Annotated[Availability | None, Field(title='Availability')] = None rating: ProductRating | None = None - ucp_checkout_available: Annotated[bool, Field(title="Ucp Checkout Available")] - data_source: Annotated[DataSource, Field(title="Data Source")] - quality_score: Annotated[int, Field(ge=0, le=100, title="Quality Score")] + ucp_checkout_available: Annotated[bool, Field(title='Ucp Checkout Available')] + data_source: Annotated[DataSource, Field(title='Data Source')] + quality_score: Annotated[int, Field(ge=0, le=100, title='Quality Score')] class ResourceSearchResult(BaseModel): - id: Annotated[int, Field(description="Resource ID", examples=[123], title="Id")] + id: Annotated[int, Field(description='Resource ID', examples=[123], title='Id')] resource: Annotated[ str, Field( - description="Resource URL", - examples=["https://api.example.com/v1/trading"], - title="Resource", + description='Resource URL', + examples=['https://api.example.com/v1/trading'], + title='Resource', ), ] description: Annotated[ str | None, Field( - description="Resource description", - examples=["Real-time trading data API with global coverage"], - title="Description", + description='Resource description', + examples=['Real-time trading data API with global coverage'], + title='Description', ), ] = None max_amount_required: Annotated[ int | None, Field( - description="Price in atomic units (e.g., cents for USDC)", + description='Price in atomic units (e.g., cents for USDC)', examples=[1000000], - title="Max Amount Required", + title='Max Amount Required', ), ] = None network: Annotated[ str | None, - Field(description="Blockchain network", examples=["base"], title="Network"), + Field(description='Blockchain network', examples=['base'], title='Network'), ] = None final_score: Annotated[ float, Field( - description="Combined ranking score (0-1)", + description='Combined ranking score (0-1)', examples=[0.92], - title="Final Score", + title='Final Score', ), ] class SortBy(Enum): - recommended = "recommended" - price_low = "price_low" - price_high = "price_high" - newest = "newest" - most_popular = "most_popular" - most_used = "most_used" + recommended = 'recommended' + price_low = 'price_low' + price_high = 'price_high' + newest = 'newest' + most_popular = 'most_popular' + most_used = 'most_used' class UsageResponse(BaseModel): - current_period: Annotated[dict[str, Any], Field(title="Current Period")] - total_requests: Annotated[int, Field(title="Total Requests")] - api_keys: Annotated[list[dict[str, Any]], Field(title="Api Keys")] + current_period: Annotated[dict[str, Any], Field(title='Current Period')] + total_requests: Annotated[int, Field(title='Total Requests')] + api_keys: Annotated[list[dict[str, Any]], Field(title='Api Keys')] class UserResponse(BaseModel): - id: Annotated[int, Field(title="Id")] - email: Annotated[EmailStr, Field(title="Email")] - email_verified: Annotated[bool, Field(title="Email Verified")] - account_status: Annotated[str, Field(title="Account Status")] - created_at: Annotated[str, Field(title="Created At")] + id: Annotated[int, Field(title='Id')] + email: Annotated[EmailStr, Field(title='Email')] + email_verified: Annotated[bool, Field(title='Email Verified')] + account_status: Annotated[str, Field(title='Account Status')] + created_at: Annotated[str, Field(title='Created At')] class ValidationError(BaseModel): - loc: Annotated[list[str | int], Field(title="Location")] - msg: Annotated[str, Field(title="Message")] - type: Annotated[str, Field(title="Error Type")] + loc: Annotated[list[str | int], Field(title='Location')] + msg: Annotated[str, Field(title='Message')] + type: Annotated[str, Field(title='Error Type')] class VerifyResponse(BaseModel): - access_token: Annotated[str, Field(title="Access Token")] - user: Annotated[dict[str, Any], Field(title="User")] + access_token: Annotated[str, Field(title='Access Token')] + user: Annotated[dict[str, Any], Field(title='User')] default_api_key: ApiKeyResponse class HTTPValidationError(BaseModel): - detail: Annotated[list[ValidationError] | None, Field(title="Detail")] = None + detail: Annotated[list[ValidationError] | None, Field(title='Detail')] = None class MerchantDetails(BaseModel): - domain: Annotated[str, Field(title="Domain")] - name: Annotated[str | None, Field(title="Name")] = None - description: Annotated[str | None, Field(title="Description")] = None - ucp_profile: Annotated[dict[str, Any], Field(title="Ucp Profile")] - capabilities: Annotated[list[str], Field(title="Capabilities")] + domain: Annotated[str, Field(title='Domain')] + name: Annotated[str | None, Field(title='Name')] = None + description: Annotated[str | None, Field(title='Description')] = None + ucp_profile: Annotated[dict[str, Any], Field(title='Ucp Profile')] + capabilities: Annotated[list[str], Field(title='Capabilities')] endpoints: MerchantEndpoints - industry: Annotated[str | None, Field(title="Industry")] = None - region: Annotated[str | None, Field(title="Region")] = None - is_verified: Annotated[bool, Field(title="Is Verified")] - is_active: Annotated[bool, Field(title="Is Active")] - first_discovered_at: Annotated[AwareDatetime, Field(title="First Discovered At")] - last_crawled_at: Annotated[AwareDatetime | None, Field(title="Last Crawled At")] = None - search_appearances: Annotated[int | None, Field(title="Search Appearances")] = None - click_count: Annotated[int | None, Field(title="Click Count")] = None + industry: Annotated[str | None, Field(title='Industry')] = None + region: Annotated[str | None, Field(title='Region')] = None + is_verified: Annotated[bool, Field(title='Is Verified')] + is_active: Annotated[bool, Field(title='Is Active')] + first_discovered_at: Annotated[AwareDatetime, Field(title='First Discovered At')] + last_crawled_at: Annotated[AwareDatetime | None, Field(title='Last Crawled At')] = ( + None + ) + search_appearances: Annotated[int | None, Field(title='Search Appearances')] = None + click_count: Annotated[int | None, Field(title='Click Count')] = None class MerchantSearchResponse(BaseModel): merchants: Annotated[ list[MerchantSearchResult], - Field(description="List of matching merchants", title="Merchants"), + Field(description='List of matching merchants', title='Merchants'), ] total: Annotated[ int, Field( - description="Total number of matching merchants", + description='Total number of matching merchants', examples=[42], - title="Total", + title='Total', ), ] has_more: Annotated[ bool, - Field(description="More results available", examples=[True], title="Has More"), + Field(description='More results available', examples=[True], title='Has More'), + ] + limit: Annotated[ + int, Field(description='Results per page', examples=[10], title='Limit') + ] + offset: Annotated[ + int, Field(description='Pagination offset', examples=[0], title='Offset') ] - limit: Annotated[int, Field(description="Results per page", examples=[10], title="Limit")] - offset: Annotated[int, Field(description="Pagination offset", examples=[0], title="Offset")] session_id: Annotated[ str, - Field(description="Session ID for tracking user behavior", title="Session Id"), + Field(description='Session ID for tracking user behavior', title='Session Id'), ] search_log_id: Annotated[ int, - Field(description="Search log ID for click tracking", title="Search Log Id"), + Field(description='Search log ID for click tracking', title='Search Log Id'), ] class ProductSearchResponse(BaseModel): - products: Annotated[list[ProductSearchResult], Field(title="Products")] - total: Annotated[int, Field(title="Total")] - has_more: Annotated[bool, Field(title="Has More")] - limit: Annotated[int, Field(title="Limit")] - offset: Annotated[int, Field(title="Offset")] - query: Annotated[str, Field(title="Query")] + products: Annotated[list[ProductSearchResult], Field(title='Products')] + total: Annotated[int, Field(title='Total')] + has_more: Annotated[bool, Field(title='Has More')] + limit: Annotated[int, Field(title='Limit')] + offset: Annotated[int, Field(title='Offset')] + query: Annotated[str, Field(title='Query')] session_id: Annotated[ str, - Field(description="Session ID for tracking user behavior", title="Session Id"), + Field(description='Session ID for tracking user behavior', title='Session Id'), ] search_log_id: Annotated[ int, - Field(description="Search log ID for click tracking", title="Search Log Id"), + Field(description='Search log ID for click tracking', title='Search Log Id'), ] class SearchResponse(BaseModel): results: Annotated[ list[ResourceSearchResult], - Field(description="Ranked search results", title="Results"), + Field(description='Ranked search results', title='Results'), ] has_more: Annotated[ bool, Field( - description="Whether more results are available", + description='Whether more results are available', examples=[True], - title="Has More", + title='Has More', ), ] - limit: Annotated[int, Field(description="Requested limit", examples=[3], title="Limit")] - offset: Annotated[int, Field(description="Requested offset", examples=[0], title="Offset")] + limit: Annotated[ + int, Field(description='Requested limit', examples=[3], title='Limit') + ] + offset: Annotated[ + int, Field(description='Requested offset', examples=[0], title='Offset') + ] query: Annotated[ str | None, - Field(description="Original search query", examples=["trading api"], title="Query"), + Field( + description='Original search query', examples=['trading api'], title='Query' + ), ] = None - sort_by: Annotated[SortBy | None, Field(description="Sort method used")] = "recommended" + sort_by: Annotated[SortBy | None, Field(description='Sort method used')] = ( + 'recommended' + ) diff --git a/uv.lock b/uv.lock index bd09d3e..7712883 100644 --- a/uv.lock +++ b/uv.lock @@ -2558,7 +2558,7 @@ wheels = [ [[package]] name = "rencom" -version = "0.1.3" +version = "0.1.5" source = { editable = "." } dependencies = [ { name = "email-validator" },