From b7cdde3d8acc78247932aa46d58e5a624f74ae73 Mon Sep 17 00:00:00 2001 From: he2ss <19668340+he2ss@users.noreply.github.com> Date: Tue, 3 Nov 2026 13:24:31 +0000 Subject: [PATCH] Update python SDK v0.19.2 --- crowdsec_service_api/__init__.py | 8 + .../__pycache__/__init__.cpython-311.pyc | Bin 5422 -> 5616 bytes .../__pycache__/base_model.cpython-311.pyc | Bin 4378 -> 4370 bytes .../__pycache__/http_client.cpython-311.pyc | Bin 7768 -> 7760 bytes .../__pycache__/models.cpython-311.pyc | Bin 170976 -> 180490 bytes crowdsec_service_api/models.py | 279 +++- .../__pycache__/__init__.cpython-311.pyc | Bin 207 -> 199 bytes .../__pycache__/allowlists.cpython-311.pyc | Bin 12917 -> 12909 bytes .../__pycache__/blocklists.cpython-311.pyc | Bin 15121 -> 14297 bytes .../services/__pycache__/cves.cpython-311.pyc | Bin 12364 -> 12356 bytes .../__pycache__/decisions.cpython-311.pyc | Bin 7222 -> 7214 bytes .../__pycache__/engines.cpython-311.pyc | Bin 2506 -> 7238 bytes .../__pycache__/fingerprints.cpython-311.pyc | Bin 12353 -> 12345 bytes .../services/__pycache__/hub.cpython-311.pyc | Bin 3277 -> 3269 bytes .../services/__pycache__/info.cpython-311.pyc | Bin 2035 -> 2027 bytes .../__pycache__/integrations.cpython-311.pyc | Bin 8075 -> 8067 bytes .../__pycache__/metrics.cpython-311.pyc | Bin 2607 -> 2599 bytes .../__pycache__/products.cpython-311.pyc | Bin 3782 -> 3774 bytes .../tracker_events.cpython-311.pyc | Bin 2914 -> 2906 bytes .../__pycache__/tracker_tags.cpython-311.pyc | Bin 5698 -> 5690 bytes .../__pycache__/vendors.cpython-311.pyc | Bin 10351 -> 10343 bytes crowdsec_service_api/services/allowlists.py | 2 +- crowdsec_service_api/services/blocklists.py | 28 +- crowdsec_service_api/services/cves.py | 2 +- crowdsec_service_api/services/decisions.py | 2 +- crowdsec_service_api/services/engines.py | 121 +- crowdsec_service_api/services/fingerprints.py | 2 +- crowdsec_service_api/services/hub.py | 2 +- crowdsec_service_api/services/info.py | 2 +- crowdsec_service_api/services/integrations.py | 2 +- crowdsec_service_api/services/metrics.py | 2 +- crowdsec_service_api/services/products.py | 2 +- .../services/tracker_events.py | 2 +- crowdsec_service_api/services/tracker_tags.py | 2 +- crowdsec_service_api/services/vendors.py | 2 +- doc/Blocklists.md | 46 - doc/Engines.md | 194 +++ doc/Models.md | 110 +- doc/README.md | 16 + public-openapi.json | 1482 ++++++++++++----- pyproject.toml | 2 +- uv.lock | 275 +-- 42 files changed, 1978 insertions(+), 607 deletions(-) diff --git a/crowdsec_service_api/__init__.py b/crowdsec_service_api/__init__.py index ff34502..2ff84a0 100644 --- a/crowdsec_service_api/__init__.py +++ b/crowdsec_service_api/__init__.py @@ -98,12 +98,16 @@ class Server(Enum): 'DecisionsGetResponsePage', 'DecisionsSortBy', 'DecisionsSortOrder', + 'EngineAssociateTagsRequest', + 'EngineAssociateTagsResponse', 'EngineGetResponse', 'EngineGetResponsePage', 'EntityType', 'FingerprintSubscription', 'GetRemediationMetricsResponse', 'HTTPValidationError', + 'HubItem', + 'HubItems', 'InfoResponse', 'IntegrationCreateRequest', 'IntegrationCreateResponse', @@ -113,6 +117,8 @@ class Server(Enum): 'IntegrationUpdateRequest', 'IntegrationUpdateResponse', 'Links', + 'LogProcessorGetResponse', + 'LogProcessorsGetResponsePage', 'MetricUnits', 'OperatingSystem', 'OriginMetrics', @@ -122,6 +128,8 @@ class Server(Enum): 'PublicBlocklistResponse', 'PublicBlocklistResponsePage', 'RawMetrics', + 'RemediationComponentGetResponse', + 'RemediationComponentsGetResponsePage', 'RemediationMetrics', 'RemediationMetricsData', 'RemediationStats', diff --git a/crowdsec_service_api/__pycache__/__init__.cpython-311.pyc b/crowdsec_service_api/__pycache__/__init__.cpython-311.pyc index 774c3d3749ad2104147477a4abc087cbaa1b7746..f38cef13ee93ea83f47848fa5dd10ed37f49b3c1 100644 GIT binary patch delta 319 zcmZ3d^+B6&IWI340}!-7c$rlozL9StlU$&FMt*Lpeo<*&UTTqke0hFRwti7rs%~OI zCXk+dlqrMp$Ywp}53Ckau6gO1d8v-Y#resZi6yBaiRr~bsfDGf#U;0-vC0(}?RqgYoI+8N$_!(yq+h ROdl8!WCJ@07Rdrb3;_Dqb;SSx delta 125 zcmeyMy-tg7IWI340}x!kTANiSwvlfllUk&HMt*Lpeo<*&UTTqke0hFRwtjMcUU7a- zs%~OICX_vSFH;8Np3Q2^A6O^*b2d+Y%6Vk+1Fq?t_i@kWV7$9IN~D@mx|WHX=>r3T MY+wh$B3Yn)0Qn9oT>t<8 diff --git a/crowdsec_service_api/__pycache__/base_model.cpython-311.pyc b/crowdsec_service_api/__pycache__/base_model.cpython-311.pyc index cbce133f920add7705fd430f60eacb60540a1d13..984f0fedfee1a23c19dee676c4f06024672093b9 100644 GIT binary patch delta 56 zcmbQGG)akjIWI340}xa^c)5{VnOQDaKO;XkRlle-FE6!7KfXM_C|kd%ELAtLAQMP$ J4q-mV3jpe85~KhC delta 64 zcmbQFG)swlIWI340}$-HTDy^3nOQAbKO;XkRlle-FE6!7KfXM_C|f@{Kd(4HCsjAG NAQQ^o?8AJF7XXUN6~_Po diff --git a/crowdsec_service_api/__pycache__/http_client.cpython-311.pyc b/crowdsec_service_api/__pycache__/http_client.cpython-311.pyc index 331d24ce76017049a61c1409d2e2eb805ebe6baf..346b96648ee29cb3e6eb45ea118721a8e41d9860 100644 GIT binary patch delta 56 zcmca%bHRptIWI340}xa^c)5}L9HU%_enx(7s(w*vUS4XEetda;QMP_jS*mVgK_-yi J{GTyW1^_E46iEO8 delta 64 zcmca$bHj#vIWI340}$-HTDy_^9HUx{enx(7s(w*vUS4XEetda;QMP_^eqM2YPO5HV NK_-;F`8#8z3;@2ZdjV_ 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 delta 23287 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 -# timestamp: 2026-08-13T14:33:55+00:00 +# timestamp: 2026-11-03T13:24:23+00:00 from __future__ import annotations @@ -253,13 +253,6 @@ class BlocklistCreateRequest(BaseModelSdk): tags: Annotated[ Optional[List[str]], Field(description='Classification tags', title='Tags') ] = [] - store_full_content_in_s3: Annotated[ - Optional[bool], - Field( - description='Whether to store the full blocklist content in S3 or not', - title='Store Full Content In S3', - ), - ] = False class BlocklistDeleteIPsRequest(BaseModelSdk): @@ -451,6 +444,33 @@ class DecisionsSortOrder(StrEnum): DESC = 'desc' +class EngineAssociateTagsRequest(BaseModelSdk): + model_config = ConfigDict( + extra='forbid', + ) + tags: Annotated[ + List[str], + Field(description='List of tags to associate with the engine', title='Tags'), + ] + + +class EngineAssociateTagsResponse(BaseModelSdk): + modified_count: Annotated[ + Optional[int], + Field( + description='Count of tags associated with the engine', + title='Modified Count', + ), + ] = 0 + errors: Annotated[ + Optional[Dict[str, str]], + Field( + description='Tags that could not be associated with the engine with associated error', + title='Errors', + ), + ] = {} + + class EntityType(StrEnum): ORG = 'org' TAG = 'tag' @@ -465,6 +485,47 @@ class FingerprintSubscription(BaseModelSdk): id: Annotated[str, Field(description='Fingerprint ID', title='Id')] +class HubItem(BaseModelSdk): + name: Annotated[ + Optional[str], Field(description='name of the item', title='Name') + ] = None + version: Annotated[ + Optional[str], Field(description='version of the item', title='Version') + ] = None + status: Annotated[ + Optional[str], Field(description='status of the item', title='Status') + ] = None + + +class HubItems(BaseModelSdk): + scenarios: Annotated[ + Optional[List[HubItem]], Field(description='scenarios', title='Scenarios') + ] = None + parsers: Annotated[ + Optional[List[HubItem]], Field(description='parsers', title='Parsers') + ] = None + postoverflows: Annotated[ + Optional[List[HubItem]], + Field(description='postoverflows', title='Postoverflows'), + ] = None + appsec_configs: Annotated[ + Optional[List[HubItem]], + Field( + alias='appsec-configs', description='appsec configs', title='Appsec-Configs' + ), + ] = None + appsec_rules: Annotated[ + Optional[List[HubItem]], + Field(alias='appsec-rules', description='appsec rules', title='Appsec-Rules'), + ] = None + collections: Annotated[ + Optional[List[HubItem]], Field(description='collections', title='Collections') + ] = None + contexts: Annotated[ + Optional[List[HubItem]], Field(description='contexts', title='Contexts') + ] = None + + class InfoResponse(BaseModelSdk): organization_id: Annotated[ str, Field(description='The organization ID', title='Organization Id') @@ -544,6 +605,50 @@ class PricingTiers(StrEnum): PLATINUM = 'platinum' +class RemediationComponentGetResponse(BaseModelSdk): + id: Annotated[str, Field(description='ID of the remediation component', title='Id')] + organization_id: Annotated[ + str, Field(description='ID of the owner organization', title='Organization Id') + ] + created_at: Annotated[ + datetime, + Field( + description='Time the remediation component was created', title='Created At' + ), + ] + entity_type: Annotated[ + Optional[EntityType], Field(description='Type of the entity') + ] = 'remediation_component' + name: Annotated[ + str, Field(description='Name of the remediation component', title='Name') + ] + version: Annotated[ + Optional[str], + Field(description='Version of the remediation component', title='Version'), + ] = None + type: Annotated[ + Optional[str], + Field(description='Type of the remediation component', title='Type'), + ] = None + last_pull: Annotated[ + Optional[datetime], + Field( + description='Last time the remediation component pulled from CAPI', + title='Last Pull', + ), + ] = None + os: Optional[OperatingSystem] = None + + +class RemediationComponentsGetResponsePage(BaseModelSdk): + items: Annotated[List[RemediationComponentGetResponse], Field(title='Items')] + total: Annotated[Optional[Total], Field(title='Total')] = None + page: Annotated[Optional[Page], Field(title='Page')] = None + size: Annotated[Optional[Size], Field(title='Size')] = None + pages: Annotated[Optional[Pages], Field(title='Pages')] = None + links: Links + + class RemediationMetricsData(BaseModelSdk): value: Annotated[ Union[int, float], Field(description='Value of the metric', title='Value') @@ -1417,7 +1522,7 @@ class BlocklistsUploadBlocklistContentQueryParameters(BaseModelSdk): Optional[datetime], Field( description='Blocklist expiration', - examples=['2026-08-13T14:31:02.942186+00:00'], + examples=['2026-11-03T10:13:59.883208+00:00'], title='Expiration', ), ] = None @@ -1443,12 +1548,6 @@ class BlocklistsAddIpsToBlocklistPathParameters(BaseModelSdk): ] -class BlocklistsOverwriteIpsPathParameters(BaseModelSdk): - blocklist_id: Annotated[ - str, Field(examples=['5f9d88b9e5c4f5b9a3d3e8b1'], title='Blocklist Id') - ] - - class BlocklistsDeleteIpsFromBlocklistPathParameters(BaseModelSdk): blocklist_id: Annotated[ str, Field(examples=['5f9d88b9e5c4f5b9a3d3e8b1'], title='Blocklist Id') @@ -1815,6 +1914,45 @@ class EnginesGetEnginesQueryParameters(BaseModelSdk): ] = 50 +class EnginesGetEnginePathParameters(BaseModelSdk): + engine_id: Annotated[str, Field(title='Engine Id')] + + +class EnginesAssociateTagsWithEnginePathParameters(BaseModelSdk): + engine_id: Annotated[str, Field(title='Engine Id')] + + +class EnginesDisassociateTagsWithEnginePathParameters(BaseModelSdk): + engine_id: Annotated[str, Field(title='Engine Id')] + tag_name: Annotated[str, Field(title='Tag Name')] + + +class EnginesGetEngineLogProcessorsQueryParameters(BaseModelSdk): + page: Annotated[ + Optional[int], Field(description='Page number', ge=1, title='Page') + ] = 1 + size: Annotated[ + Optional[int], Field(description='Page size', ge=1, le=100, title='Size') + ] = 50 + + +class EnginesGetEngineLogProcessorsPathParameters(BaseModelSdk): + engine_id: Annotated[str, Field(title='Engine Id')] + + +class EnginesGetEngineRemediationComponentsQueryParameters(BaseModelSdk): + page: Annotated[ + Optional[int], Field(description='Page number', ge=1, title='Page') + ] = 1 + size: Annotated[ + Optional[int], Field(description='Page size', ge=1, le=100, title='Size') + ] = 50 + + +class EnginesGetEngineRemediationComponentsPathParameters(BaseModelSdk): + engine_id: Annotated[str, Field(title='Engine Id')] + + class MetricsGetMetricsRemediationQueryParameters(BaseModelSdk): start_date: Annotated[ Optional[datetime], @@ -2866,19 +3004,39 @@ class EngineGetResponse(BaseModelSdk): datetime, Field(description='Time the engine was created', title='Created At') ] entity_type: Annotated[ - Optional[EntityType], Field(description='Type of the entity') + Optional[EntityType], Field(description='Type of the entity, fixed to `engine`') ] = 'engine' blocklists: Annotated[ Optional[List[CapiEntitiesListsSubscriberEntityBlocklistSubscription]], - Field(title='Blocklists'), + Field( + description='List of blocklist subscriptions for the engine', + title='Blocklists', + ), ] = [] allowlists: Annotated[ - Optional[List[AllowlistSubscription]], Field(title='Allowlists') + Optional[List[AllowlistSubscription]], + Field( + description='List of allowlist subscriptions for the engine', + title='Allowlists', + ), ] = [] - version: Annotated[Optional[str], Field(title='Version')] = None - enrolled_at: Annotated[Optional[datetime], Field(title='Enrolled At')] = None - os: Optional[OperatingSystem] = None - meta: Annotated[Optional[Dict[str, Any]], Field(title='Meta')] = {} + version: Annotated[ + Optional[str], Field(description='Version of the engine', title='Version') + ] = None + enrolled_at: Annotated[ + Optional[datetime], + Field(description='Time the engine was enrolled', title='Enrolled At'), + ] = None + os: Annotated[ + Optional[OperatingSystem], Field(description='Operating system of the engine') + ] = None + meta: Annotated[ + Optional[Dict[str, Any]], + Field( + description='Metadata for the engine, including feature flags, console options, and datasources', + title='Meta', + ), + ] = {} last_pull: Annotated[ Optional[datetime], Field(description='Last time the engine pulled CAPI', title='Last Pull'), @@ -2891,10 +3049,20 @@ class EngineGetResponse(BaseModelSdk): Optional[datetime], Field(description='Last time the engine logged in CAPI', title='Last Login'), ] = None + last_ip: Annotated[ + Optional[str], + Field(description='Last IP address used by the engine', title='Last Ip'), + ] = None tags: Annotated[ Optional[List[str]], Field(description='List of tags associated with the engine', title='Tags'), ] = [] + scenarios: Annotated[ + Optional[List[str]], + Field( + description='List of scenarios installed on the engine', title='Scenarios' + ), + ] = None class EngineGetResponsePage(BaseModelSdk): @@ -3262,6 +3430,73 @@ class IntegrationUpdateResponse(BaseModelSdk): ] = None +class LogProcessorGetResponse(BaseModelSdk): + id: Annotated[str, Field(description='ID of the log processor', title='Id')] + organization_id: Annotated[ + str, Field(description='ID of the owner organization', title='Organization Id') + ] + created_at: Annotated[ + datetime, + Field(description='Time the log processor was created', title='Created At'), + ] + entity_type: Annotated[ + Optional[EntityType], Field(description='Type of the entity') + ] = 'log_processor' + name: Annotated[str, Field(description='Name of the log processor', title='Name')] + version: Annotated[ + Optional[str], + Field(description='Version of the log processor', title='Version'), + ] = None + last_push: Annotated[ + Optional[datetime], + Field( + description='Last time the log processor pushed to CAPI', title='Last Push' + ), + ] = None + last_update: Annotated[ + Optional[datetime], + Field( + description='Last time the log processor was updated in CAPI', + title='Last Update', + ), + ] = None + last_heartbeat: Annotated[ + Optional[datetime], + Field( + description='Last time the log processor sent a heartbeat to CAPI', + title='Last Heartbeat', + ), + ] = None + feature_flags: Annotated[ + Optional[List[str]], + Field( + description='Feature flags associated with the log processor', + title='Feature Flags', + ), + ] = [] + hub_items: Annotated[ + Optional[HubItems], + Field(description='Hub items associated with the log processor'), + ] = None + os: Optional[OperatingSystem] = None + datasources: Annotated[ + Optional[Dict[str, int]], + Field( + description='Datasources associated with the log processor', + title='Datasources', + ), + ] = None + + +class LogProcessorsGetResponsePage(BaseModelSdk): + items: Annotated[List[LogProcessorGetResponse], Field(title='Items')] + total: Annotated[Optional[Total], Field(title='Total')] = None + page: Annotated[Optional[Page], Field(title='Page')] = None + size: Annotated[Optional[Size], Field(title='Size')] = None + pages: Annotated[Optional[Pages], Field(title='Pages')] = None + links: Links + + class OriginMetrics(BaseModelSdk): origin: Annotated[ Optional[Union[BlocklistOrigin, str]], diff --git a/crowdsec_service_api/services/__pycache__/__init__.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/__init__.cpython-311.pyc index 1f2b0b310e257b761119cfa73f380af0585b3b3d..1e0d3741a3f9591ae4f4185c8af4990b10f19c31 100644 GIT binary patch delta 38 scmX@lc$|@YIWI340}xa^csY^Vlrd_eqcB%dS*mVgL8g9D*~GL=0M@Vz_5c6? delta 46 wcmX@kc%G4aIWI340}$-HT04>3lrd?dqp(nNeqM2YPO5HVL8d;0Juxm506{$u82|tP diff --git a/crowdsec_service_api/services/__pycache__/allowlists.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/allowlists.cpython-311.pyc index de2960ca8bc30cd986ca838582aa4f232ac14551..23a089dc05dcf1790afa727087802879170c2e23 100644 GIT binary patch delta 68 zcmeyG@-~HgIWI340}!-7c)5`~mYKcGK+n)p&uDT!bC6t&enx(7s(w*vUS4XEetda; VQMP_jS*mVgK_-yi{G7Q@4*(2S7pMRL delta 76 zcmaEx@->BfIWI340}x!kTDy@umYLm9&(PRZ&tP&sbC6n!enx(7s(w*vUS4XEetda; ZQMP_^eqM2YPO5HVK_-;F`95=>9st0y8i@b^ diff --git a/crowdsec_service_api/services/__pycache__/blocklists.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/blocklists.cpython-311.pyc index 53f5f028df917819c1239de12bf6763a12985450..dadd2a4f5963c1fb282868b4cc5feae077224b96 100644 GIT binary patch delta 543 zcmbPOb~B%EIWI340}!-7c$sxqYa^czqtF^gAeUh}Ln=cQV+unQQ;O!~9L8Qot;xR_ zwHdW1t1+3^OQcAovZS%3$hELUNpdo9GNkB$L{j8axl&mqLFR!$iUJy+1*nT7MX`l7 zN(!t?3#^Mbl`TaWh*?slfwD?KS(y~kR9UbbOR8KNTZ%H!9(gcd1!S*5iYib*0jNk3 zBnWhf8j!C9R-g{%YXJGm9SjwWQ7XXKRRb&m1Hdqo0wVo2p+_ znwOVaq#s|NUzDw1RFb0_6rb!W|CDjpW^Dx(X0~LYcZyObFBDLkT&^6( zcxCfB<-N>I?-(}ss%J8>WCLX<*U5-Y7SP(k$g%mPRyPx430Sd!vGC+BT?`F92NJhrCdX=tPj)b6 z<1PY;6@!TK$$_TQY*ip;-Q*%uW5$V_mzhd3ZGLL5!^AjkvXIq2#|TzNkq->m$qC{g O!7^WP$QQ{1O$GoF(u{uq delta 726 zcmZ`#OK1~O6n%Fxjcqi=)S7?NG)*%$F_|PaQ9=A6l!DM&!9_OF_PuDDF_X^ZBZX*% zqJjv@6~wiRx)G59g;E7^>q7h>b|Ws`XazxVqi=>Wi;r*~yF$)EarihHN#hpV^G(@wb~K;P z;CtItoXTg^vrN{SwHnjpQd`xk@{C&3RfVNa)hp|FV?zAsffVkS1AUdcE>Aa=YDsM| zt*uoW3^P8-6FaP^GgYOcH}r{L#&})FtQ5j$LH}OoM!duu=Dok;=|7xh{=@W_92Ur$ zgLuaPf4GC_a^;P>|DFJ^jc_PtvzK{5JB=UYD9%Psz$fErQ*5ru^oGXF1r!tJOwi1D5GN%MrgQeqO;c-`Fpmdv0ei>1Uc{5RQFvtB p%=rY6@I^ji+})KG;5M!no*dG;pnr}08?Sr5SkBk~_*#hf{{+#I&4~a2 diff --git a/crowdsec_service_api/services/__pycache__/cves.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/cves.cpython-311.pyc index 901ea05a52ed449eb0e147ca77bf78a8e07374f5..d93824310f8f91c9c06375abb18da6fa88bdddd9 100644 GIT binary patch delta 68 zcmX?;a3q0yIWI340}!-7c)5}LJ2QKkfu5nIp3!7ZmLRz>{fzwFRQ;mTyu8#R{rK|y VqHO)5vQ*u~f=nR2xsm0xHUI&T7g7KK delta 76 zcmX?-a3+C!IWI340}x!kTDy_^J2ShXo}sa+p21{JmLRn_{fzwFRQ;mTyu8#R{rK|y ZqHO)-{Ji4)oK)S!f=noTb0y1ZZ2+{C8Z!U@ diff --git a/crowdsec_service_api/services/__pycache__/decisions.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/decisions.cpython-311.pyc index 478868ad6ba8b4f3cf27488af476e3614214966d..5f0d8ef08105eeb134da317063e23c383961ca30 100644 GIT binary patch delta 68 zcmdmHvCe{fIWI340}!-7c)5|=jfK6;K+n)p&uDT4OORZ&enx(7s(w*vUS4XEetda; VQMP_jS*mVgK_-yie1RoR901G`7Ek~H delta 76 zcmZ2yvCV>eIWI340}x!kTDy_kjfLG%&(PRZ&tP%{OORT!enx(7s(w*vUS4XEetda; ZQMP_^eqM2YPO5HVK_-;F`2rm@|3$j0_8)Z6J0P! z2J?U+6atxmfO^mf7Q~ELkTOz1&d5+F>XH$fz+5(zLO2sHL^2WHHe^H#YDO)@GBI9O zjJ85N6X$x^XfJeRI(Ywx(OF1j5&{X314NIWBf3f>7lVXcfuDP2lDcq|q+)llIF=F| zWvo=B6Q|2G6?ByGvXw6tvxXzRRs_Wf?GM;O4+G= zjzUFvch;n%C7nXg{dsEW&@#-GSBsM+D2TgetZB$22Q90-$H>#7m2(H=%CJ|s`!`VD zgIS{_Bj_X((7W^i4eCKE;`~g?b7WG`<#Vx&6ejqmck5v)(-0Nc)a@;5dW0%^6n-KN zPb#{4PRc~|7}}!INl|Y*CuUSVPGeqO+oY_wLtUJgJE#b4I-%UopVY%^7cF*x#RORF zYp|y-sLfaVlS==Kb~4Fb(EQ>2y{vXoDts0g}nHP8$a1QrZ9I5xZ1AC_jiA6tX5rcXUPy!FN5=TbqI1XBzMK%B@7w9o(- zMGF8SnKNa|97WUe#k{3yDbW#4YE1IByq6Q!w49MOO-(aJFwo!MfA;=2)6=B_O|zL| zk+QV*c8R^2W~b;De5jwp6DUJSYNq~Xy5;!1v6^Y>&i8QnG(%9#wtF97*dJF6YRwdg zFV2!%O6>j62cZR}cV6keFnBF#@BWUh^!`=J-c+)-pYB3qat9~#&T}A~pp~6+#4-{> zH1o4GhcDw_AyD}D0UqO0Ae<4G|3YV^JUJs<4d3@9l8#>%TJkPk&XbDtiST{lLgTai z+px@B4PJ!jU8#TZ=F*uEJV&XJlm0?QF39!H4N66rB{+FE-O< zU8<10Pzkq2SThQ7)PSte*sS7zoQcbVqtbVB#*9w2A}mIiMJI@ekCwC6v{uftY{7J7 zFAq)AtWKHfgaAFbj9exu#gUCtE^C;Mc+!MbOEOAX-E{iBk9~kzp7xCy%1$3fgVaJB z@d7Scnm$t~YrJO^dFdH;f>YFTy4iA4~!3N3kBoQy}0qih8+} zFIt?jK^PRH3po$tG)Zno7CNS91EUr_hVt9z>J*4Kh0wpaL!1Y&KU zqxdW+c1AuYAm-#+g!HVLi{4K3+)Qj(NIWy2c&6IE_R`Sx$v;m)zvLivOG0B1bILu1 zv~RTI`ygGK0CDa3uTK2p#Lu-~YHp>i>|^Wjjl%BRXn8$X$1>E{c>#XU2o6eZhhX)Ot1l%G4?cy z%^*?=+k*NqiZlr4Ne?LiQdc_+#94$n+lno5v0@|Gyu)qO0BJDE;rt@D`6`O9p=ib~ zdmidc1w=DwBa8T)?es>{fLR>3`C||OS%vftFNJKiBQYo6>h3##@|L>ER<}aBbkxlk z)LrxHE)Tc6n{nHNxb2C|MS%y&-c>?&y&WHcbm4_hw|~6-Cp$mc>6UF}#6@d}(YI!( zX*K!SI#zWbtHBkp%5nM#>$vzBSPki7MLY#7OKVN*BSG zT&eq$r5*y9@QB`FO)Dm(!PS}`9d-bsQWARxGQP69Yb-}BCq`?gZ1(WE%QQ>5JOmLF zVDVVqnqHYV;NMH8Ym!xY&w3azf?oY4lJop<4NYJ_w84@oD(V+S@Qf z&o9hA#%zuFZ%0)=;$V!xZ!B%%dx(@yV^96N$ULE%+cX&CC*9^o%rdA%i2}&HCVQl?Jj#2m@BOazP&Yl{{j=jL$Lo8eQ|+*Ec&j( z)p!(pz||-`KnIsGuq;v1@A~ucpbH5tbs=dFReSSh9apR5h72JTgj1<-gAdtisqvrcb#`h&>d=p%o{W)oo7{2mAw{5w_x|JQAGH>B%1H(yYX%&SK{03Tfr z{B?h`X+E*34q8O)P$Oc&*|jISrfqM?ww|1dn zN8{HKAk?yZj*i7vUv|&2p(R<2(v((ar5uGtm-+sMhg(DNNH^vRFC~ocN$N4zq0-dh zx{)Ot4IY6xLmqxxcUcm%Erx4rn=Cg(ZMYG+>}^E2$Ej~b9zwlVE@#bR6sI*$$n1Kb zcgr@(!#tS|2zOhueJSU>ZOJ3}n)&P{-!gF^{X`59R8^ zw=Z$oUOYDZukv`PC65^`P#uCgIJneu zr2=f$;do%ReBQQ{oJSU|?Wr4U$?K6-bzPR<11+Dlgy(Dw=Dy{b!TJVPww{66R0{&P zZu(t(%HKh_MBXPX!{k?N^#G(B5H(`HpdOo7k9lM~-b}^^nGA8}en>Zf$(S#wug|Nm zd!3Ipcm7hlylr+I&Lk$T1Cu9i9Q@PhA4Y#a{zqUkR@%x0XL3qlo$#7)#L1q7oP7lg zfd;)B&n_{T)HEleX>d?9W1y~T+FLVO!@a}WpqmpkEyj-*nTSQv$irSC2&X`78=8Ir z#mgwRlozZvVVNxWVr@y=R^s|u=a>j()yS&J@qbh~?UbEmZJcA~o`L0*$dxUUvM zjWmnFUTMeej-i?aIkZal)Iz8!Bs@?Hqehy=wuF@ARw0M>U_XQ!X%^3tu5SKPz0xSW z6iVKS7u|Q^s{1Zng?HIli*l8>cYAsArA2$MaeJ@%_Mqt71J$<&D%jhC_Wbr}>0vsD zGymYJE`BEDNEZAz$7Fbp?8u+)k+>!9S^c_wE_kalxhFu8a2HYJR9&O%NUUn(8gXvI2 zyqaHts09T#M%02AcymX-YM5 WJRsmFSw5Sa`pmui`3jBr%={avnU=-? delta 337 zcmX?RaY~qPIWI340}x!kTANkRvXRe+Q78?_ZD*LykjfCnn8Fanl)^hXhf$u9Z*mW# z0aph@1!EL diff --git a/crowdsec_service_api/services/__pycache__/fingerprints.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/fingerprints.cpython-311.pyc index 8bd8dd9c4ade64ebfa250e20ae6037dba8cf1d67..cb6be69e98bc455b4346a8e8831c1df9dfc02b40 100644 GIT binary patch delta 68 zcmX?@urq;sIWI340}!-7c)5}LBQtxMfu5nIp3!7xmLRz}{fzwFRQ;mTyu8#R{rK|y VqHO)5vQ*u~f=nR2xtiseHURpc7cBq) delta 76 zcmdm)a4>;;IWI340}x!kTDy_^BQv|9o}sa+p21{hmLRn>{fzwFRQ;mTyu8#R{rK|y ZqHO)-{Ji4)oK)S!f=noTb1};?Z2+v|8V&#e diff --git a/crowdsec_service_api/services/__pycache__/hub.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/hub.cpython-311.pyc index e949a912eea6cb4252ad8dfe30df5e2161aff9d2..71f5148774cc952f84ca41ab7bdab6ead053cae7 100644 GIT binary patch delta 68 zcmX>rc~p{nIWI340}!-7c)5|gf{DG%K+n)p&uDTNQ;=M!enx(7s(w*vUS4XEetda; VQMP_jS*mVgK_-yi%*1?}69CnN79s!u delta 76 zcmX>qc~+8pIWI340}x!kTDy_Ef{EQw&(PRZ&tP&FQ;=G$enx(7s(w*vUS4XEetda; ZQMP_^eqM2YPO5HVK_-;F`4`h^P5_7_8Ug?S diff --git a/crowdsec_service_api/services/__pycache__/info.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/info.cpython-311.pyc index b7f1668f4e0b2491831f2037a9aaf7b6356df25c..b0505d3c9b39aaa238df81dda82dd2e397963304 100644 GIT binary patch delta 68 zcmey&|C*nBIWI340}!-7c)5`~l!?8}K+n)p&uDTwQ;=Mkenx(7s(w*vUS4XEetda; VQMP_jS*mVgK_-yie4j~#6#&{c7B&C? delta 76 zcmaFO|CyhAIWI340}x!kTDy@ul!@I?&(PRZ&tP&oQ;=Gmenx(7s(w*vUS4XEetda; ZQMP_^eqM2YPO5HVK_-;F`8tybD*%Xb85aNm diff --git a/crowdsec_service_api/services/__pycache__/integrations.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/integrations.cpython-311.pyc index 4b69962cc9debe69987800e004e1176430773edd..f8ecabd442875613441b3936fb78f0ede9abc1ae 100644 GIT binary patch delta 68 zcmeCSZ?@-N&dbZi00iw1UT)-8XJ#)m&@;5uGn#D493&T~pOK%Ns$W!^mzP?kA77qd Vl&xP>ma3arkO`zWZ)CnD4FIm>79#)v delta 76 zcmZp+@3!Y&&dbZi00ft>)^6lhXJ$9lGc-2UGnj129Hf?}pOK%Ns$W!^mzP?kA77qd Zl&znfpI4lpld79okO^gPUden*8UR-h83X_T diff --git a/crowdsec_service_api/services/__pycache__/metrics.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/metrics.cpython-311.pyc index 3d0fb0db48b25e92958d5f00367b0658a2e7fd67..e59aba0338bb0196b88deaaea01ab42473b8d4ac 100644 GIT binary patch delta 68 zcmZ24vRs6FIWI340}!-7c)5{#1`~Ukfu5nIp3&r0OhIyy`WgATsrp5wd3mWt`tjxY VMcMjAWvRM}1(`s4vl25eI{?k;6@UN$ delta 76 zcmZ23vR;IHIWI340}x!kTDy^Z1{1rXo}sa+p26f*OhIai`WgATsrp5wd3mWt`tjxY ZMcMkv`FX|pIjOpd1({IxW+`S~b^v^Q7-0Ya diff --git a/crowdsec_service_api/services/__pycache__/products.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/products.cpython-311.pyc index 22bf2776bc74e69d9dbe7eb48e567e83a0727ca7..d70c12238ffdffa1697ca737680ade1d911a2c69 100644 GIT binary patch delta 68 zcmX>myHA#TIWI340}!-7c)5}LJ`;PHfu5nIp3&rwOhIx{`WgATsrp5wd3mWt`tjxY VMcMjAWvRM}1(`s4b0%{vHvsu57U}>1 delta 76 zcmdlddrX#lIWI340}x!kTDy_^J`=m4o}sa+p26ggOhIZ%`WgATsrp5wd3mWt`tjxY ZMcMkv`FX|pIjOpd1({Ix=0xULZUC+{8Os0w diff --git a/crowdsec_service_api/services/__pycache__/tracker_events.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/tracker_events.cpython-311.pyc index 8227a89a16bac00fd8b136eda2c05fc8822b6e55..774a8c5ca91e7911ec05424b72de0a73af34fb0b 100644 GIT binary patch delta 54 zcmaDPc1w(VIWI340}!-7c)5}L3=?~qfu5nIp3&rcOhJqZlMR`Lxr)kCbrTCR^^3|j JhcWYT0075Y5HkP( delta 62 zcmca5_DGC-IWI340}x!kTDy_^3=_Mdo}sa+p26gMOhJqplMR`Lg_860it}?)brTCR M^Þ#|@^08bwi6aWAK diff --git a/crowdsec_service_api/services/__pycache__/tracker_tags.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/tracker_tags.cpython-311.pyc index aba2dfdbb753786007d9839638099f993046b4bb..4d18a1403d0495f74af595898e621155d9e44dad 100644 GIT binary patch delta 68 zcmX@4vrC72IWI340}!-7c)5|ggqgj}K+n)p&uDTRbC6t|enx(7s(w*vUS4XEetda; VQMP_jS*mVgK_-yi{Eyj12msus7P9~V delta 76 zcmdm`b4Z7KIWI340}x!kTDy_Egqht?&(PRZ&tP&JbC6n^enx(7s(w*vUS4XEetda; ZQMP_^eqM2YPO5HVK_-;F`5Uu~5CDte8I%A3 diff --git a/crowdsec_service_api/services/__pycache__/vendors.cpython-311.pyc b/crowdsec_service_api/services/__pycache__/vendors.cpython-311.pyc index 8e81b096ef23c3ce1e8c7459edfcf86a3738b45b..5afcc0483a0dbd667f5878659be3079714897311 100644 GIT binary patch delta 68 zcmaDK@H~KfIWI340}!-7c)5}L7&CjBfu5nIp3&qR%t3OI`WgATsrp5wd3mWt`tjxY VMcMjAWvRM}1(`s4a{!CH3IHFu7c>9> delta 76 zcmaDJ@IHWhIWI340}x!kTDy_^7&E(}o}sa+p26fB%t302`WgATsrp5wd3mWt`tjxY ZMcMkv`FX|pIjOpd1({IxW)Bv56#&@n8WjKl diff --git a/crowdsec_service_api/services/allowlists.py b/crowdsec_service_api/services/allowlists.py index 48e3f71..e2c4cdb 100644 --- a/crowdsec_service_api/services/allowlists.py +++ b/crowdsec_service_api/services/allowlists.py @@ -11,7 +11,7 @@ class Allowlists(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def list_allowlists( self, diff --git a/crowdsec_service_api/services/blocklists.py b/crowdsec_service_api/services/blocklists.py index 53b1060..2779a2d 100644 --- a/crowdsec_service_api/services/blocklists.py +++ b/crowdsec_service_api/services/blocklists.py @@ -11,7 +11,7 @@ class Blocklists(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_blocklists( self, @@ -183,32 +183,6 @@ def add_ips_to_blocklist( return None - def overwrite_ips( - self, - request: BlocklistAddIPsRequest, - blocklist_id: str, - ): - endpoint_url = "/blocklists/{blocklist_id}/ips/bulk_overwrite" - loc = locals() - headers = {} - params = {} - path_params = json.loads( - BlocklistsOverwriteIpsPathParameters(**loc).model_dump_json( - exclude_none=True - ) - ) - - payload = json.loads( - request.model_dump_json( - exclude_none=True - ) - ) if "request" in loc else None - response = self.http_client.post( - url=endpoint_url, path_params=path_params, params=params, headers=headers, json=payload - ) - - return None - def delete_ips_from_blocklist( self, request: BlocklistDeleteIPsRequest, diff --git a/crowdsec_service_api/services/cves.py b/crowdsec_service_api/services/cves.py index 49e76d2..48555da 100644 --- a/crowdsec_service_api/services/cves.py +++ b/crowdsec_service_api/services/cves.py @@ -11,7 +11,7 @@ class Cves(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_cves( self, diff --git a/crowdsec_service_api/services/decisions.py b/crowdsec_service_api/services/decisions.py index 8d5444a..e306505 100644 --- a/crowdsec_service_api/services/decisions.py +++ b/crowdsec_service_api/services/decisions.py @@ -11,7 +11,7 @@ class Decisions(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_decisions( self, diff --git a/crowdsec_service_api/services/engines.py b/crowdsec_service_api/services/engines.py index 20e9ef3..d29a35e 100644 --- a/crowdsec_service_api/services/engines.py +++ b/crowdsec_service_api/services/engines.py @@ -11,7 +11,7 @@ class Engines(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_engines( self, @@ -34,4 +34,123 @@ def get_engines( ) return EngineGetResponsePage(_client=self, **response.json()) + + def get_engine( + self, + engine_id: str, + )-> EngineGetResponse: + endpoint_url = "/engines/{engine_id}" + loc = locals() + headers = {} + params = {} + path_params = json.loads( + EnginesGetEnginePathParameters(**loc).model_dump_json( + exclude_none=True + ) + ) + + response = self.http_client.get( + url=endpoint_url, path_params=path_params, params=params, headers=headers + ) + + return EngineGetResponse(**response.json()) + + def associate_tags_with_engine( + self, + request: EngineAssociateTagsRequest, + engine_id: str, + )-> EngineAssociateTagsResponse: + endpoint_url = "/engines/{engine_id}/tags" + loc = locals() + headers = {} + params = {} + path_params = json.loads( + EnginesAssociateTagsWithEnginePathParameters(**loc).model_dump_json( + exclude_none=True + ) + ) + + payload = json.loads( + request.model_dump_json( + exclude_none=True + ) + ) if "request" in loc else None + response = self.http_client.post( + url=endpoint_url, path_params=path_params, params=params, headers=headers, json=payload + ) + + return EngineAssociateTagsResponse(**response.json()) + + def disassociate_tags_with_engine( + self, + engine_id: str, + tag_name: str, + ): + endpoint_url = "/engines/{engine_id}/tags/{tag_name}" + loc = locals() + headers = {} + params = {} + path_params = json.loads( + EnginesDisassociateTagsWithEnginePathParameters(**loc).model_dump_json( + exclude_none=True + ) + ) + + response = self.http_client.delete( + url=endpoint_url, path_params=path_params, params=params, headers=headers + ) + + return None + + def get_engine_log_processors( + self, + engine_id: str, + page: int = 1, + size: int = 50, + )-> LogProcessorsGetResponsePage: + endpoint_url = "/engines/{engine_id}/log_processors" + loc = locals() + headers = {} + params = json.loads( + EnginesGetEngineLogProcessorsQueryParameters(**loc).model_dump_json( + exclude_none=True + ) + ) + path_params = json.loads( + EnginesGetEngineLogProcessorsPathParameters(**loc).model_dump_json( + exclude_none=True + ) + ) + + response = self.http_client.get( + url=endpoint_url, path_params=path_params, params=params, headers=headers + ) + + return LogProcessorsGetResponsePage(_client=self, **response.json()) + + def get_engine_remediation_components( + self, + engine_id: str, + page: int = 1, + size: int = 50, + )-> RemediationComponentsGetResponsePage: + endpoint_url = "/engines/{engine_id}/remediation_components" + loc = locals() + headers = {} + params = json.loads( + EnginesGetEngineRemediationComponentsQueryParameters(**loc).model_dump_json( + exclude_none=True + ) + ) + path_params = json.loads( + EnginesGetEngineRemediationComponentsPathParameters(**loc).model_dump_json( + exclude_none=True + ) + ) + + response = self.http_client.get( + url=endpoint_url, path_params=path_params, params=params, headers=headers + ) + + return RemediationComponentsGetResponsePage(_client=self, **response.json()) \ No newline at end of file diff --git a/crowdsec_service_api/services/fingerprints.py b/crowdsec_service_api/services/fingerprints.py index 46f5189..6a719b8 100644 --- a/crowdsec_service_api/services/fingerprints.py +++ b/crowdsec_service_api/services/fingerprints.py @@ -11,7 +11,7 @@ class Fingerprints(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_fingerprint_rules( self, diff --git a/crowdsec_service_api/services/hub.py b/crowdsec_service_api/services/hub.py index 8295b49..af2807e 100644 --- a/crowdsec_service_api/services/hub.py +++ b/crowdsec_service_api/services/hub.py @@ -11,7 +11,7 @@ class Hub(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_index( self, diff --git a/crowdsec_service_api/services/info.py b/crowdsec_service_api/services/info.py index d64ea3d..d5dcf4e 100644 --- a/crowdsec_service_api/services/info.py +++ b/crowdsec_service_api/services/info.py @@ -11,7 +11,7 @@ class Info(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_info( self, diff --git a/crowdsec_service_api/services/integrations.py b/crowdsec_service_api/services/integrations.py index 778b5d3..b541496 100644 --- a/crowdsec_service_api/services/integrations.py +++ b/crowdsec_service_api/services/integrations.py @@ -11,7 +11,7 @@ class Integrations(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_integrations( self, diff --git a/crowdsec_service_api/services/metrics.py b/crowdsec_service_api/services/metrics.py index 95e1b03..3ba1c56 100644 --- a/crowdsec_service_api/services/metrics.py +++ b/crowdsec_service_api/services/metrics.py @@ -11,7 +11,7 @@ class Metrics(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_metrics_remediation( self, diff --git a/crowdsec_service_api/services/products.py b/crowdsec_service_api/services/products.py index 58eea54..9123d6c 100644 --- a/crowdsec_service_api/services/products.py +++ b/crowdsec_service_api/services/products.py @@ -11,7 +11,7 @@ class Products(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_products( self, diff --git a/crowdsec_service_api/services/tracker_events.py b/crowdsec_service_api/services/tracker_events.py index ae113e2..4a92a2b 100644 --- a/crowdsec_service_api/services/tracker_events.py +++ b/crowdsec_service_api/services/tracker_events.py @@ -11,7 +11,7 @@ class TrackerEvents(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_exploitation_phase_change_events( self, diff --git a/crowdsec_service_api/services/tracker_tags.py b/crowdsec_service_api/services/tracker_tags.py index b7944a8..861b573 100644 --- a/crowdsec_service_api/services/tracker_tags.py +++ b/crowdsec_service_api/services/tracker_tags.py @@ -11,7 +11,7 @@ class TrackerTags(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_tags( self, diff --git a/crowdsec_service_api/services/vendors.py b/crowdsec_service_api/services/vendors.py index 1e828d9..9a23284 100644 --- a/crowdsec_service_api/services/vendors.py +++ b/crowdsec_service_api/services/vendors.py @@ -11,7 +11,7 @@ class Vendors(Service): def __init__(self, auth: Auth, base_url: str = "https://admin.api.crowdsec.net/v1") -> None: - super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/1.135.0") + super().__init__(base_url=base_url, auth=auth, user_agent="crowdsec_service_api/v0.19.2") def get_vendors( self, diff --git a/doc/Blocklists.md b/doc/Blocklists.md index 01e7143..31b81ee 100644 --- a/doc/Blocklists.md +++ b/doc/Blocklists.md @@ -10,7 +10,6 @@ | [delete_blocklist](#delete_blocklist) | Delete a blocklist by ID. If the blocklist is shared with other organizations or it has subscriptions, the operation will fail. If you want to force delete the blocklist, you can use the force query parameter, so the blocklists will be unshared / unsubscribed. | | [update_blocklist](#update_blocklist) | Update a blocklist's details by ID. It is not possible to update the blocklist content using this operation. | | [add_ips_to_blocklist](#add_ips_to_blocklist) | Add IPs to a blocklist. If an IP is already in the blocklist, its expiration will be updated with the new expiration. | -| [overwrite_ips](#overwrite_ips) | Overwrite blocklist content | | [delete_ips_from_blocklist](#delete_ips_from_blocklist) | Delete IPs from a blocklist | | [download_blocklist_content](#download_blocklist_content) | Download blocklist content as a list of ips as plain text separated by new lines. The response will include the ETag header for cache control. If_Modified_Since and If_None_Match cache control headers are supported for conditional requests. | | [get_blocklist_subscribers](#get_blocklist_subscribers) | Get blocklist subscribers within your organization. | @@ -99,7 +98,6 @@ request = BlocklistCreateRequest( description=None, references=None, tags=None, - store_full_content_in_s3=None, ) try: response = client.create_blocklist( @@ -330,50 +328,6 @@ except HTTPStatusError as e: ``` -## **overwrite_ips** -### Overwrite blocklist content -- Endpoint: `/blocklists/{blocklist_id}/ips/bulk_overwrite` -- Method: `POST` - -### Parameters: -| Parameter | Type | Description | Required | Default | -| --------- | ---- | ----------- | -------- | ------- | -| request | [BlocklistAddIPsRequest](./Models.md#blocklistaddipsrequest) | Request body | Yes | - | -| blocklist_id | str | | True | | -### Errors: -| Code | Description | -| ---- | ----------- | -| 403 | Blocklist is read-only | -| 404 | Blocklist not found | -| 412 | Payload too large for one operation, limit is 20000 IPs per request | -| 500 | Internal server error | -| 422 | Validation Error | -### Usage - -```python -from crowdsec_service_api import ( - Blocklists, - ApiKeyAuth, - BlocklistAddIPsRequest, -) -from httpx import HTTPStatusError -auth = ApiKeyAuth(api_key='your_api_key') -client = Blocklists(auth=auth) -request = BlocklistAddIPsRequest( - ips=None, - expiration=None, -) -try: - response = client.overwrite_ips( - request=request, - blocklist_id='sample-blocklist-id', - ) - print(response) -except HTTPStatusError as e: - print(f"An error occurred: {e.response.status_code} - {e.response.text}") -``` - - ## **delete_ips_from_blocklist** ### Delete IPs from a blocklist - Endpoint: `/blocklists/{blocklist_id}/ips/delete` diff --git a/doc/Engines.md b/doc/Engines.md index bbd42f6..31a9ac0 100644 --- a/doc/Engines.md +++ b/doc/Engines.md @@ -4,6 +4,11 @@ | Method | Description | | ------ | ----------- | | [get_engines](#get_engines) | Get engines for an organization | +| [get_engine](#get_engine) | Get an engine for an organization | +| [associate_tags_with_engine](#associate_tags_with_engine) | Associate tags with an engine | +| [disassociate_tags_with_engine](#disassociate_tags_with_engine) | Disassociate tags from an engine | +| [get_engine_log_processors](#get_engine_log_processors) | Get log processors for an engine | +| [get_engine_remediation_components](#get_engine_remediation_components) | Get remediation components for an engine | ## **get_engines** ### Get engines for an organization @@ -43,3 +48,192 @@ except HTTPStatusError as e: print(f"An error occurred: {e.response.status_code} - {e.response.text}") ``` + +## **get_engine** +### Get an engine for an organization +- Endpoint: `/engines/{engine_id}` +- Method: `GET` + +### Parameters: +| Parameter | Type | Description | Required | Default | +| --------- | ---- | ----------- | -------- | ------- | +| engine_id | str | | True | | +### Returns: +[EngineGetResponse](./Models.md#enginegetresponse) +### Errors: +| Code | Description | +| ---- | ----------- | +| 422 | Validation Error | +### Usage + +```python +from crowdsec_service_api import ( + Engines, + ApiKeyAuth, +) +from httpx import HTTPStatusError +auth = ApiKeyAuth(api_key='your_api_key') +client = Engines(auth=auth) +try: + response = client.get_engine( + engine_id='engine_id', + ) + print(response) +except HTTPStatusError as e: + print(f"An error occurred: {e.response.status_code} - {e.response.text}") +``` + + +## **associate_tags_with_engine** +### Associate tags with an engine +- Endpoint: `/engines/{engine_id}/tags` +- Method: `POST` + +### Parameters: +| Parameter | Type | Description | Required | Default | +| --------- | ---- | ----------- | -------- | ------- | +| request | [EngineAssociateTagsRequest](./Models.md#engineassociatetagsrequest) | Request body | Yes | - | +| engine_id | str | | True | | +### Returns: +[EngineAssociateTagsResponse](./Models.md#engineassociatetagsresponse) +### Errors: +| Code | Description | +| ---- | ----------- | +| 422 | Validation Error | +### Usage + +```python +from crowdsec_service_api import ( + Engines, + ApiKeyAuth, + EngineAssociateTagsRequest, +) +from httpx import HTTPStatusError +auth = ApiKeyAuth(api_key='your_api_key') +client = Engines(auth=auth) +request = EngineAssociateTagsRequest( + tags=None, +) +try: + response = client.associate_tags_with_engine( + request=request, + engine_id='engine_id', + ) + print(response) +except HTTPStatusError as e: + print(f"An error occurred: {e.response.status_code} - {e.response.text}") +``` + + +## **disassociate_tags_with_engine** +### Disassociate tags from an engine +- Endpoint: `/engines/{engine_id}/tags/{tag_name}` +- Method: `DELETE` + +### Parameters: +| Parameter | Type | Description | Required | Default | +| --------- | ---- | ----------- | -------- | ------- | +| engine_id | str | | True | | +| tag_name | str | | True | | +### Errors: +| Code | Description | +| ---- | ----------- | +| 422 | Validation Error | +### Usage + +```python +from crowdsec_service_api import ( + Engines, + ApiKeyAuth, +) +from httpx import HTTPStatusError +auth = ApiKeyAuth(api_key='your_api_key') +client = Engines(auth=auth) +try: + response = client.disassociate_tags_with_engine( + engine_id='engine_id', + tag_name='tag_name', + ) + print(response) +except HTTPStatusError as e: + print(f"An error occurred: {e.response.status_code} - {e.response.text}") +``` + + +## **get_engine_log_processors** +### Get log processors for an engine +- Endpoint: `/engines/{engine_id}/log_processors` +- Method: `GET` + +### Parameters: +| Parameter | Type | Description | Required | Default | +| --------- | ---- | ----------- | -------- | ------- | +| engine_id | str | | True | | +| page | int | Page number | False | 1 | +| size | int | Page size | False | 50 | +### Returns: +[LogProcessorsGetResponsePage](./Models.md#logprocessorsgetresponsepage) +### Errors: +| Code | Description | +| ---- | ----------- | +| 422 | Validation Error | +### Usage + +```python +from crowdsec_service_api import ( + Engines, + ApiKeyAuth, +) +from httpx import HTTPStatusError +auth = ApiKeyAuth(api_key='your_api_key') +client = Engines(auth=auth) +try: + response = client.get_engine_log_processors( + engine_id='engine_id', + page=1, + size=50, + ) + print(response) +except HTTPStatusError as e: + print(f"An error occurred: {e.response.status_code} - {e.response.text}") +``` + + +## **get_engine_remediation_components** +### Get remediation components for an engine +- Endpoint: `/engines/{engine_id}/remediation_components` +- Method: `GET` + +### Parameters: +| Parameter | Type | Description | Required | Default | +| --------- | ---- | ----------- | -------- | ------- | +| engine_id | str | | True | | +| page | int | Page number | False | 1 | +| size | int | Page size | False | 50 | +### Returns: +[RemediationComponentsGetResponsePage](./Models.md#remediationcomponentsgetresponsepage) +### Errors: +| Code | Description | +| ---- | ----------- | +| 422 | Validation Error | +### Usage + +```python +from crowdsec_service_api import ( + Engines, + ApiKeyAuth, +) +from httpx import HTTPStatusError +auth = ApiKeyAuth(api_key='your_api_key') +client = Engines(auth=auth) +try: + response = client.get_engine_remediation_components( + engine_id='engine_id', + page=1, + size=50, + ) + print(response) +except HTTPStatusError as e: + print(f"An error occurred: {e.response.status_code} - {e.response.text}") +``` + diff --git a/doc/Models.md b/doc/Models.md index a3c6cbc..b023ee1 100644 --- a/doc/Models.md +++ b/doc/Models.md @@ -339,7 +339,6 @@ name, description | description | str | Blocklist description || | references | list[str] | Useful references on the list's origins || | tags | list[str] | Classification tags || -| store_full_content_in_s3 | bool | Whether to store the full blocklist content in S3 or not || # **BlocklistDeleteIPsRequest** ## Required: @@ -679,6 +678,21 @@ CREATED_AT, EXPIRE_AT ## Enum: ASC, DESC +# **EngineAssociateTagsRequest** +## Required: +tags +## Properties +| Property | Type | Description | Example | +|----------|------|-------------|---------| +| tags | list[str] | List of tags to associate with the engine || + +# **EngineAssociateTagsResponse** +## Properties +| Property | Type | Description | Example | +|----------|------|-------------|---------| +| modified_count | int | Count of tags associated with the engine || +| errors | Errors | Tags that could not be associated with the engine with associated error || + # **EngineGetResponse** ## Required: id, organization_id, created_at @@ -689,16 +703,18 @@ id, organization_id, created_at | organization_id | str | ID of the owner organization || | created_at | str | Time the engine was created || | entity_type | EntityType | None || -| blocklists | list[BlocklistSubscription] | None || -| allowlists | list[AllowlistSubscription] | None || -| version | Optional[str] | None || -| enrolled_at | Optional[str] | None || +| blocklists | list[BlocklistSubscription] | List of blocklist subscriptions for the engine || +| allowlists | list[AllowlistSubscription] | List of allowlist subscriptions for the engine || +| version | Optional[str] | Version of the engine || +| enrolled_at | Optional[str] | Time the engine was enrolled || | os | OperatingSystem | None || -| meta | Meta | None || +| meta | Meta | Metadata for the engine, including feature flags, console options, and datasources || | last_pull | str | Last time the engine pulled CAPI || | last_push | str | Last time the engine pushed to CAPI || | last_login | str | Last time the engine logged in CAPI || +| last_ip | Optional[str] | Last IP address used by the engine || | tags | list[str] | List of tags associated with the engine || +| scenarios | Optional[list[str]] | List of scenarios installed on the engine || # **EngineGetResponsePage** ## Required: @@ -741,6 +757,26 @@ raw, computed |----------|------|-------------|---------| | detail | list[ValidationError] | None || +# **HubItem** +## Properties +| Property | Type | Description | Example | +|----------|------|-------------|---------| +| name | Optional[str] | name of the item || +| version | Optional[str] | version of the item || +| status | Optional[str] | status of the item || + +# **HubItems** +## Properties +| Property | Type | Description | Example | +|----------|------|-------------|---------| +| scenarios | Optional[list[HubItem]] | scenarios || +| parsers | Optional[list[HubItem]] | parsers || +| postoverflows | Optional[list[HubItem]] | postoverflows || +| appsec-configs | Optional[list[HubItem]] | appsec configs || +| appsec-rules | Optional[list[HubItem]] | appsec rules || +| collections | Optional[list[HubItem]] | collections || +| contexts | Optional[list[HubItem]] | contexts || + # **InfoResponse** ## Required: organization_id, subscription_type, api_key_name @@ -879,6 +915,39 @@ id, name, organization_id, created_at, updated_at, entity_type, output_format, b | next | Optional[str] | None || | prev | Optional[str] | None || +# **LogProcessorGetResponse** +## Required: +id, organization_id, created_at, name +## Properties +| Property | Type | Description | Example | +|----------|------|-------------|---------| +| id | str | ID of the log processor || +| organization_id | str | ID of the owner organization || +| created_at | str | Time the log processor was created || +| entity_type | EntityType | None || +| name | str | Name of the log processor || +| version | Optional[str] | Version of the log processor || +| last_push | str | Last time the log processor pushed to CAPI || +| last_update | str | Last time the log processor was updated in CAPI || +| last_heartbeat | str | Last time the log processor sent a heartbeat to CAPI || +| feature_flags | list[str] | Feature flags associated with the log processor || +| hub_items | HubItems | None || +| os | OperatingSystem | None || +| datasources | Datasources | Datasources associated with the log processor || + +# **LogProcessorsGetResponsePage** +## Required: +items, page, size, links +## Properties +| Property | Type | Description | Example | +|----------|------|-------------|---------| +| items | list[LogProcessorGetResponse] | None || +| total | Optional[int] | None || +| page | Optional[int] | None || +| size | Optional[int] | None || +| pages | Optional[int] | None || +| links | Links | None || + # **MetricUnits** ## Enum: BYTE, PACKET, REQUEST, IP, LINE, EVENT @@ -959,6 +1028,35 @@ items, page, size, links | dropped | list[RemediationMetrics] | dropped metrics || | processed | list[RemediationMetrics] | processed metrics || +# **RemediationComponentGetResponse** +## Required: +id, organization_id, created_at, name +## Properties +| Property | Type | Description | Example | +|----------|------|-------------|---------| +| id | str | ID of the remediation component || +| organization_id | str | ID of the owner organization || +| created_at | str | Time the remediation component was created || +| entity_type | EntityType | None || +| name | str | Name of the remediation component || +| version | Optional[str] | Version of the remediation component || +| type | Optional[str] | Type of the remediation component || +| last_pull | str | Last time the remediation component pulled from CAPI || +| os | OperatingSystem | None || + +# **RemediationComponentsGetResponsePage** +## Required: +items, page, size, links +## Properties +| Property | Type | Description | Example | +|----------|------|-------------|---------| +| items | list[RemediationComponentGetResponse] | None || +| total | Optional[int] | None || +| page | Optional[int] | None || +| size | Optional[int] | None || +| pages | Optional[int] | None || +| links | Links | None || + # **RemediationMetrics** ## Required: total, unit, progression, data diff --git a/doc/README.md b/doc/README.md index 5a2395a..b6a308b 100644 --- a/doc/README.md +++ b/doc/README.md @@ -167,6 +167,10 @@ You can find a Quickstart about this SDK, following this [documentation](https:/ [DecisionsSortOrder](./Models.md#decisionssortorder) +[EngineAssociateTagsRequest](./Models.md#engineassociatetagsrequest) + +[EngineAssociateTagsResponse](./Models.md#engineassociatetagsresponse) + [EngineGetResponse](./Models.md#enginegetresponse) [EngineGetResponsePage](./Models.md#enginegetresponsepage) @@ -179,6 +183,10 @@ You can find a Quickstart about this SDK, following this [documentation](https:/ [HTTPValidationError](./Models.md#httpvalidationerror) +[HubItem](./Models.md#hubitem) + +[HubItems](./Models.md#hubitems) + [InfoResponse](./Models.md#inforesponse) [IntegrationCreateRequest](./Models.md#integrationcreaterequest) @@ -197,6 +205,10 @@ You can find a Quickstart about this SDK, following this [documentation](https:/ [Links](./Models.md#links) +[LogProcessorGetResponse](./Models.md#logprocessorgetresponse) + +[LogProcessorsGetResponsePage](./Models.md#logprocessorsgetresponsepage) + [MetricUnits](./Models.md#metricunits) [OperatingSystem](./Models.md#operatingsystem) @@ -215,6 +227,10 @@ You can find a Quickstart about this SDK, following this [documentation](https:/ [RawMetrics](./Models.md#rawmetrics) +[RemediationComponentGetResponse](./Models.md#remediationcomponentgetresponse) + +[RemediationComponentsGetResponsePage](./Models.md#remediationcomponentsgetresponsepage) + [RemediationMetrics](./Models.md#remediationmetrics) [RemediationMetricsData](./Models.md#remediationmetricsdata) diff --git a/public-openapi.json b/public-openapi.json index d6dc740..67e9125 100644 --- a/public-openapi.json +++ b/public-openapi.json @@ -3,7 +3,7 @@ "info": { "title": "Service API", "description": "This is the API to manage Crowdsec services", - "version": "1.70.56", + "version": "1.70.90", "contact": { "name": "CrowdSec", "url": "https://crowdsec.net", @@ -1270,7 +1270,7 @@ ], "description": "Blocklist expiration", "examples": [ - "2026-08-13T14:31:02.942186+00:00" + "2026-11-03T10:13:59.883208+00:00" ], "title": "Expiration" }, @@ -1401,73 +1401,6 @@ } } }, - "/blocklists/{blocklist_id}/ips/bulk_overwrite": { - "post": { - "tags": [ - "Blocklists" - ], - "summary": "Bulk Overwrite Blocklist Ips", - "description": "Overwrite blocklist content", - "operationId": "overwriteIps", - "parameters": [ - { - "name": "blocklist_id", - "in": "path", - "required": true, - "schema": { - "type": "string", - "format": "ObjectId", - "examples": [ - "5f9d88b9e5c4f5b9a3d3e8b1" - ], - "title": "Blocklist Id" - } - } - ], - "requestBody": { - "required": true, - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/BlocklistAddIPsRequest" - } - } - } - }, - "responses": { - "202": { - "description": "Successful Response", - "content": { - "application/json": { - "schema": {} - } - } - }, - "403": { - "description": "Blocklist is read-only" - }, - "404": { - "description": "Blocklist not found" - }, - "412": { - "description": "Payload too large for one operation, limit is 20000 IPs per request" - }, - "500": { - "description": "Internal server error" - }, - "422": { - "description": "Validation Error", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/HTTPValidationError" - } - } - } - } - } - } - }, "/blocklists/{blocklist_id}/ips/delete": { "post": { "tags": [ @@ -3192,21 +3125,42 @@ } } }, - "/info": { + "/engines/{engine_id}": { "get": { "tags": [ - "Info" + "Engines" + ], + "summary": "Get Engine", + "description": "Get an engine for an organization", + "operationId": "getEngine", + "parameters": [ + { + "name": "engine_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Engine Id" + } + } ], - "summary": "Get Me Info", - "description": "Get the current user and organization informations", - "operationId": "getInfo", "responses": { "200": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/InfoResponse" + "$ref": "#/components/schemas/EngineGetResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" } } } @@ -3214,116 +3168,42 @@ } } }, - "/metrics/remediation": { - "get": { + "/engines/{engine_id}/tags": { + "post": { "tags": [ - "Metrics" + "Engines" ], - "summary": "Get Metrics Remediation", - "description": "Get remediation metrics", - "operationId": "getMetricsRemediation", + "summary": "Associate Tags With Engine", + "description": "Associate tags with an engine", + "operationId": "associateTagsWithEngine", "parameters": [ { - "name": "start_date", - "in": "query", - "required": false, - "schema": { - "type": "string", - "format": "date-time", - "description": "Start date of the metrics, default to last day", - "examples": [ - "2025-03-14T09:30:00Z" - ], - "title": "Start Date" - }, - "description": "Start date of the metrics, default to last day" - }, - { - "name": "end_date", - "in": "query", - "required": false, + "name": "engine_id", + "in": "path", + "required": true, "schema": { "type": "string", - "format": "date-time", - "description": "End date of the metrics", - "examples": [ - "2025-03-15T09:30:00Z" - ], - "title": "End Date" - }, - "description": "End date of the metrics" - }, - { - "name": "engine_ids", - "in": "query", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of engine ids", - "examples": [ - [ - "engine_1", - "engine_2" - ] - ], - "default": [], - "title": "Engine Ids" - }, - "description": "List of engine ids" - }, - { - "name": "integration_ids", - "in": "query", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of integration ids", - "examples": [ - [ - "integration_1", - "integration_2" - ] - ], - "default": [], - "title": "Integration Ids" - }, - "description": "List of integration ids" - }, - { - "name": "tags", - "in": "query", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of tags", - "examples": [ - [ - "tag_1", - "tag_2" - ] - ], - "default": [], - "title": "Tags" - }, - "description": "List of tags" + "title": "Engine Id" + } } ], + "requestBody": { + "required": true, + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/EngineAssociateTagsRequest" + } + } + } + }, "responses": { - "200": { + "201": { "description": "Successful Response", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/GetRemediationMetricsResponse" + "$ref": "#/components/schemas/EngineAssociateTagsResponse" } } } @@ -3341,76 +3221,410 @@ } } }, - "/hub/index/{tenant}/{branch}/.index.json": { - "get": { - "description": "Get a (minimized) index file for 'cscli hub update'. May or may not include unused fields\n(content, long descriptions, labels...) or redundant ones (author, name).", - "operationId": "getIndex", + "/engines/{engine_id}/tags/{tag_name}": { + "delete": { + "tags": [ + "Engines" + ], + "summary": "Disassociate Tags With Engine", + "description": "Disassociate tags from an engine", + "operationId": "disassociateTagsWithEngine", "parameters": [ { + "name": "engine_id", "in": "path", - "name": "branch", "required": true, "schema": { - "title": "Branch", - "type": "string" + "type": "string", + "title": "Engine Id" } }, { + "name": "tag_name", "in": "path", - "name": "tenant", "required": true, "schema": { - "title": "Tenant", - "type": "string" - } - }, - { - "description": "Include content in the index", - "in": "query", - "name": "with_content", - "required": false, - "schema": { - "default": false, - "description": "Include content in the index", - "title": "With Content", - "type": "boolean" + "type": "string", + "title": "Tag Name" } } ], "responses": { - "200": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/Index" - } - } - }, + "204": { "description": "Successful Response" }, "422": { + "description": "Validation Error", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/HTTPValidationError" } } - }, - "description": "Validation Error" + } } - }, - "summary": "Get a minimized index file (crowdsec only)", + } + } + }, + "/engines/{engine_id}/log_processors": { + "get": { "tags": [ - "Hub" - ] - }, - "head": { - "description": "This endpoint returns cache-related headers for the index file without the full content.\nIt is useful for validating cache, checking resource freshness, and managing client-side\ncache expiration policies. No body content is returned.", - "operationId": "headIndex", + "Engines" + ], + "summary": "Get Engine Log Processors", + "description": "Get log processors for an engine", + "operationId": "getEngineLogProcessors", "parameters": [ { + "name": "engine_id", "in": "path", - "name": "branch", + "required": true, + "schema": { + "type": "string", + "title": "Engine Id" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "Page number", + "default": 1, + "title": "Page" + }, + "description": "Page number" + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "description": "Page size", + "default": 50, + "title": "Size" + }, + "description": "Page size" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/LogProcessorsGetResponsePage" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/engines/{engine_id}/remediation_components": { + "get": { + "tags": [ + "Engines" + ], + "summary": "Get Engine Remediation Components", + "description": "Get remediation components for an engine", + "operationId": "getEngineRemediationComponents", + "parameters": [ + { + "name": "engine_id", + "in": "path", + "required": true, + "schema": { + "type": "string", + "title": "Engine Id" + } + }, + { + "name": "page", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "minimum": 1, + "description": "Page number", + "default": 1, + "title": "Page" + }, + "description": "Page number" + }, + { + "name": "size", + "in": "query", + "required": false, + "schema": { + "type": "integer", + "maximum": 100, + "minimum": 1, + "description": "Page size", + "default": 50, + "title": "Size" + }, + "description": "Page size" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/RemediationComponentsGetResponsePage" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/info": { + "get": { + "tags": [ + "Info" + ], + "summary": "Get Me Info", + "description": "Get the current user and organization informations", + "operationId": "getInfo", + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/InfoResponse" + } + } + } + } + } + } + }, + "/metrics/remediation": { + "get": { + "tags": [ + "Metrics" + ], + "summary": "Get Metrics Remediation", + "description": "Get remediation metrics", + "operationId": "getMetricsRemediation", + "parameters": [ + { + "name": "start_date", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time", + "description": "Start date of the metrics, default to last day", + "examples": [ + "2025-03-14T09:30:00Z" + ], + "title": "Start Date" + }, + "description": "Start date of the metrics, default to last day" + }, + { + "name": "end_date", + "in": "query", + "required": false, + "schema": { + "type": "string", + "format": "date-time", + "description": "End date of the metrics", + "examples": [ + "2025-03-15T09:30:00Z" + ], + "title": "End Date" + }, + "description": "End date of the metrics" + }, + { + "name": "engine_ids", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of engine ids", + "examples": [ + [ + "engine_1", + "engine_2" + ] + ], + "default": [], + "title": "Engine Ids" + }, + "description": "List of engine ids" + }, + { + "name": "integration_ids", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of integration ids", + "examples": [ + [ + "integration_1", + "integration_2" + ] + ], + "default": [], + "title": "Integration Ids" + }, + "description": "List of integration ids" + }, + { + "name": "tags", + "in": "query", + "required": false, + "schema": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of tags", + "examples": [ + [ + "tag_1", + "tag_2" + ] + ], + "default": [], + "title": "Tags" + }, + "description": "List of tags" + } + ], + "responses": { + "200": { + "description": "Successful Response", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/GetRemediationMetricsResponse" + } + } + } + }, + "422": { + "description": "Validation Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + } + } + } + } + }, + "/hub/index/{tenant}/{branch}/.index.json": { + "get": { + "description": "Get a (minimized) index file for 'cscli hub update'. May or may not include unused fields\n(content, long descriptions, labels...) or redundant ones (author, name).", + "operationId": "getIndex", + "parameters": [ + { + "in": "path", + "name": "branch", + "required": true, + "schema": { + "title": "Branch", + "type": "string" + } + }, + { + "in": "path", + "name": "tenant", + "required": true, + "schema": { + "title": "Tenant", + "type": "string" + } + }, + { + "description": "Include content in the index", + "in": "query", + "name": "with_content", + "required": false, + "schema": { + "default": false, + "description": "Include content in the index", + "title": "With Content", + "type": "boolean" + } + } + ], + "responses": { + "200": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Index" + } + } + }, + "description": "Successful Response" + }, + "422": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/HTTPValidationError" + } + } + }, + "description": "Validation Error" + } + }, + "summary": "Get a minimized index file (crowdsec only)", + "tags": [ + "Hub" + ] + }, + "head": { + "description": "This endpoint returns cache-related headers for the index file without the full content.\nIt is useful for validating cache, checking resource freshness, and managing client-side\ncache expiration policies. No body content is returned.", + "operationId": "headIndex", + "parameters": [ + { + "in": "path", + "name": "branch", "required": true, "schema": { "title": "Branch", @@ -8037,12 +8251,6 @@ "title": "Tags", "description": "Classification tags", "default": [] - }, - "store_full_content_in_s3": { - "type": "boolean", - "title": "Store Full Content In S3", - "description": "Whether to store the full blocklist content in S3 or not", - "default": false } }, "additionalProperties": false, @@ -9328,6 +9536,45 @@ ], "title": "DecisionsSortOrder" }, + "EngineAssociateTagsRequest": { + "properties": { + "tags": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Tags", + "description": "List of tags to associate with the engine" + } + }, + "additionalProperties": false, + "type": "object", + "required": [ + "tags" + ], + "title": "EngineAssociateTagsRequest" + }, + "EngineAssociateTagsResponse": { + "properties": { + "modified_count": { + "type": "integer", + "title": "Modified Count", + "description": "Count of tags associated with the engine", + "default": 0 + }, + "errors": { + "additionalProperties": { + "type": "string" + }, + "type": "object", + "title": "Errors", + "description": "Tags that could not be associated with the engine with associated error", + "default": {} + } + }, + "type": "object", + "title": "EngineAssociateTagsResponse" + }, "EngineGetResponse": { "properties": { "id": { @@ -9348,7 +9595,7 @@ }, "entity_type": { "$ref": "#/components/schemas/EntityType", - "description": "Type of the entity", + "description": "Type of the entity, fixed to `engine`", "default": "engine" }, "blocklists": { @@ -9357,6 +9604,7 @@ }, "type": "array", "title": "Blocklists", + "description": "List of blocklist subscriptions for the engine", "default": [] }, "allowlists": { @@ -9365,6 +9613,7 @@ }, "type": "array", "title": "Allowlists", + "description": "List of allowlist subscriptions for the engine", "default": [] }, "version": { @@ -9376,7 +9625,8 @@ "type": "null" } ], - "title": "Version" + "title": "Version", + "description": "Version of the engine" }, "enrolled_at": { "anyOf": [ @@ -9388,15 +9638,18 @@ "type": "null" } ], - "title": "Enrolled At" + "title": "Enrolled At", + "description": "Time the engine was enrolled" }, "os": { - "$ref": "#/components/schemas/OperatingSystem" + "$ref": "#/components/schemas/OperatingSystem", + "description": "Operating system of the engine" }, "meta": { "additionalProperties": true, "type": "object", "title": "Meta", + "description": "Metadata for the engine, including feature flags, console options, and datasources", "default": {} }, "last_pull": { @@ -9417,6 +9670,18 @@ "title": "Last Login", "description": "Last time the engine logged in CAPI" }, + "last_ip": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last Ip", + "description": "Last IP address used by the engine" + }, "tags": { "items": { "type": "string" @@ -9425,6 +9690,21 @@ "title": "Tags", "description": "List of tags associated with the engine", "default": [] + }, + "scenarios": { + "anyOf": [ + { + "items": { + "type": "string" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Scenarios", + "description": "List of scenarios installed on the engine" } }, "type": "object", @@ -9444,129 +9724,282 @@ "type": "array", "title": "Items" }, - "total": { + "total": { + "anyOf": [ + { + "type": "integer", + "minimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Total" + }, + "page": { + "anyOf": [ + { + "type": "integer", + "minimum": 1.0 + }, + { + "type": "null" + } + ], + "title": "Page" + }, + "size": { + "anyOf": [ + { + "type": "integer", + "minimum": 1.0 + }, + { + "type": "null" + } + ], + "title": "Size" + }, + "pages": { + "anyOf": [ + { + "type": "integer", + "minimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Pages" + }, + "links": { + "$ref": "#/components/schemas/Links", + "readOnly": true + } + }, + "type": "object", + "required": [ + "items", + "page", + "size", + "links" + ], + "title": "EngineGetResponsePage" + }, + "EntityType": { + "type": "string", + "enum": [ + "org", + "tag", + "engine", + "firewall_integration", + "remediation_component_integration", + "remediation_component", + "log_processor" + ], + "title": "EntityType" + }, + "FingerprintSubscription": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "Fingerprint ID" + } + }, + "type": "object", + "required": [ + "id" + ], + "title": "FingerprintSubscription" + }, + "GetRemediationMetricsResponse": { + "properties": { + "raw": { + "$ref": "#/components/schemas/RawMetrics", + "description": "Raw metrics data" + }, + "computed": { + "$ref": "#/components/schemas/ComputedMetrics", + "description": "Computed metrics data" + }, + "stats": { + "$ref": "#/components/schemas/RemediationStats", + "description": "Aggregate stats computed over the time window" + } + }, + "type": "object", + "required": [ + "raw", + "computed" + ], + "title": "GetRemediationMetricsResponse" + }, + "HTTPValidationError": { + "properties": { + "detail": { + "items": { + "$ref": "#/components/schemas/ValidationError" + }, + "type": "array", + "title": "Detail" + } + }, + "type": "object", + "title": "HTTPValidationError" + }, + "HubItem": { + "properties": { + "name": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Name", + "description": "name of the item" + }, + "version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Version", + "description": "version of the item" + }, + "status": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Status", + "description": "status of the item" + } + }, + "type": "object", + "title": "HubItem" + }, + "HubItems": { + "properties": { + "scenarios": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/HubItem" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Scenarios", + "description": "scenarios" + }, + "parsers": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/HubItem" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Parsers", + "description": "parsers" + }, + "postoverflows": { "anyOf": [ { - "type": "integer", - "minimum": 0.0 + "items": { + "$ref": "#/components/schemas/HubItem" + }, + "type": "array" }, { "type": "null" } ], - "title": "Total" + "title": "Postoverflows", + "description": "postoverflows" }, - "page": { + "appsec-configs": { "anyOf": [ { - "type": "integer", - "minimum": 1.0 + "items": { + "$ref": "#/components/schemas/HubItem" + }, + "type": "array" }, { "type": "null" } ], - "title": "Page" + "title": "Appsec-Configs", + "description": "appsec configs" }, - "size": { + "appsec-rules": { "anyOf": [ { - "type": "integer", - "minimum": 1.0 + "items": { + "$ref": "#/components/schemas/HubItem" + }, + "type": "array" }, { "type": "null" } ], - "title": "Size" + "title": "Appsec-Rules", + "description": "appsec rules" }, - "pages": { + "collections": { "anyOf": [ { - "type": "integer", - "minimum": 0.0 + "items": { + "$ref": "#/components/schemas/HubItem" + }, + "type": "array" }, { "type": "null" } ], - "title": "Pages" - }, - "links": { - "$ref": "#/components/schemas/Links", - "readOnly": true - } - }, - "type": "object", - "required": [ - "items", - "page", - "size", - "links" - ], - "title": "EngineGetResponsePage" - }, - "EntityType": { - "type": "string", - "enum": [ - "org", - "tag", - "engine", - "firewall_integration", - "remediation_component_integration", - "remediation_component", - "log_processor" - ], - "title": "EntityType" - }, - "FingerprintSubscription": { - "properties": { - "id": { - "type": "string", - "title": "Id", - "description": "Fingerprint ID" - } - }, - "type": "object", - "required": [ - "id" - ], - "title": "FingerprintSubscription" - }, - "GetRemediationMetricsResponse": { - "properties": { - "raw": { - "$ref": "#/components/schemas/RawMetrics", - "description": "Raw metrics data" - }, - "computed": { - "$ref": "#/components/schemas/ComputedMetrics", - "description": "Computed metrics data" + "title": "Collections", + "description": "collections" }, - "stats": { - "$ref": "#/components/schemas/RemediationStats", - "description": "Aggregate stats computed over the time window" - } - }, - "type": "object", - "required": [ - "raw", - "computed" - ], - "title": "GetRemediationMetricsResponse" - }, - "HTTPValidationError": { - "properties": { - "detail": { - "items": { - "$ref": "#/components/schemas/ValidationError" - }, - "type": "array", - "title": "Detail" + "contexts": { + "anyOf": [ + { + "items": { + "$ref": "#/components/schemas/HubItem" + }, + "type": "array" + }, + { + "type": "null" + } + ], + "title": "Contexts", + "description": "contexts" } }, "type": "object", - "title": "HTTPValidationError" + "title": "HubItems" }, "InfoResponse": { "properties": { @@ -10199,120 +10632,283 @@ "title": "Pull Limit", "description": "Maximum number of items to pull" }, - "enable_ip_aggregation": { - "type": "boolean", - "title": "Enable Ip Aggregation", - "description": "Whether to enable IP aggregation into ranges", - "default": false + "enable_ip_aggregation": { + "type": "boolean", + "title": "Enable Ip Aggregation", + "description": "Whether to enable IP aggregation into ranges", + "default": false + }, + "credentials": { + "anyOf": [ + { + "$ref": "#/components/schemas/ApiKeyCredentials" + }, + { + "$ref": "#/components/schemas/BasicAuthCredentials" + }, + { + "type": "null" + } + ], + "title": "Credentials", + "description": "Credentials for the integration" + } + }, + "type": "object", + "required": [ + "id", + "name", + "organization_id", + "created_at", + "updated_at", + "entity_type", + "output_format", + "blocklists", + "cves", + "fingerprints", + "vendors", + "endpoint" + ], + "title": "IntegrationUpdateResponse" + }, + "Links": { + "properties": { + "first": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "First", + "examples": [ + "/api/v1/users?limit=1&offset1" + ] + }, + "last": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Last", + "examples": [ + "/api/v1/users?limit=1&offset1" + ] + }, + "self": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Self", + "examples": [ + "/api/v1/users?limit=1&offset1" + ] + }, + "next": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Next", + "examples": [ + "/api/v1/users?limit=1&offset1" + ] + }, + "prev": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Prev", + "examples": [ + "/api/v1/users?limit=1&offset1" + ] + } + }, + "type": "object", + "title": "Links" + }, + "LogProcessorGetResponse": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "ID of the log processor" + }, + "organization_id": { + "type": "string", + "title": "Organization Id", + "description": "ID of the owner organization" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "Time the log processor was created" + }, + "entity_type": { + "$ref": "#/components/schemas/EntityType", + "description": "Type of the entity", + "default": "log_processor" + }, + "name": { + "type": "string", + "title": "Name", + "description": "Name of the log processor" }, - "credentials": { + "version": { "anyOf": [ { - "$ref": "#/components/schemas/ApiKeyCredentials" - }, - { - "$ref": "#/components/schemas/BasicAuthCredentials" + "type": "string" }, { "type": "null" } ], - "title": "Credentials", - "description": "Credentials for the integration" + "title": "Version", + "description": "Version of the log processor" + }, + "last_push": { + "type": "string", + "format": "date-time", + "title": "Last Push", + "description": "Last time the log processor pushed to CAPI" + }, + "last_update": { + "type": "string", + "format": "date-time", + "title": "Last Update", + "description": "Last time the log processor was updated in CAPI" + }, + "last_heartbeat": { + "type": "string", + "format": "date-time", + "title": "Last Heartbeat", + "description": "Last time the log processor sent a heartbeat to CAPI" + }, + "feature_flags": { + "items": { + "type": "string" + }, + "type": "array", + "title": "Feature Flags", + "description": "Feature flags associated with the log processor", + "default": [] + }, + "hub_items": { + "$ref": "#/components/schemas/HubItems", + "description": "Hub items associated with the log processor" + }, + "os": { + "$ref": "#/components/schemas/OperatingSystem" + }, + "datasources": { + "additionalProperties": { + "type": "integer" + }, + "type": "object", + "title": "Datasources", + "description": "Datasources associated with the log processor" } }, "type": "object", "required": [ "id", - "name", "organization_id", "created_at", - "updated_at", - "entity_type", - "output_format", - "blocklists", - "cves", - "fingerprints", - "vendors", - "endpoint" + "name" ], - "title": "IntegrationUpdateResponse" + "title": "LogProcessorGetResponse" }, - "Links": { + "LogProcessorsGetResponsePage": { "properties": { - "first": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "title": "First", - "examples": [ - "/api/v1/users?limit=1&offset1" - ] + "items": { + "items": { + "$ref": "#/components/schemas/LogProcessorGetResponse" + }, + "type": "array", + "title": "Items" }, - "last": { + "total": { "anyOf": [ { - "type": "string" + "type": "integer", + "minimum": 0.0 }, { "type": "null" } ], - "title": "Last", - "examples": [ - "/api/v1/users?limit=1&offset1" - ] + "title": "Total" }, - "self": { + "page": { "anyOf": [ { - "type": "string" + "type": "integer", + "minimum": 1.0 }, { "type": "null" } ], - "title": "Self", - "examples": [ - "/api/v1/users?limit=1&offset1" - ] + "title": "Page" }, - "next": { + "size": { "anyOf": [ { - "type": "string" + "type": "integer", + "minimum": 1.0 }, { "type": "null" } ], - "title": "Next", - "examples": [ - "/api/v1/users?limit=1&offset1" - ] + "title": "Size" }, - "prev": { + "pages": { "anyOf": [ { - "type": "string" + "type": "integer", + "minimum": 0.0 }, { "type": "null" } ], - "title": "Prev", - "examples": [ - "/api/v1/users?limit=1&offset1" - ] + "title": "Pages" + }, + "links": { + "$ref": "#/components/schemas/Links", + "readOnly": true } }, "type": "object", - "title": "Links" + "required": [ + "items", + "page", + "size", + "links" + ], + "title": "LogProcessorsGetResponsePage" }, "MetricUnits": { "type": "string", @@ -10665,6 +11261,148 @@ "type": "object", "title": "RawMetrics" }, + "RemediationComponentGetResponse": { + "properties": { + "id": { + "type": "string", + "title": "Id", + "description": "ID of the remediation component" + }, + "organization_id": { + "type": "string", + "title": "Organization Id", + "description": "ID of the owner organization" + }, + "created_at": { + "type": "string", + "format": "date-time", + "title": "Created At", + "description": "Time the remediation component was created" + }, + "entity_type": { + "$ref": "#/components/schemas/EntityType", + "description": "Type of the entity", + "default": "remediation_component" + }, + "name": { + "type": "string", + "title": "Name", + "description": "Name of the remediation component" + }, + "version": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Version", + "description": "Version of the remediation component" + }, + "type": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "title": "Type", + "description": "Type of the remediation component" + }, + "last_pull": { + "type": "string", + "format": "date-time", + "title": "Last Pull", + "description": "Last time the remediation component pulled from CAPI" + }, + "os": { + "$ref": "#/components/schemas/OperatingSystem" + } + }, + "type": "object", + "required": [ + "id", + "organization_id", + "created_at", + "name" + ], + "title": "RemediationComponentGetResponse" + }, + "RemediationComponentsGetResponsePage": { + "properties": { + "items": { + "items": { + "$ref": "#/components/schemas/RemediationComponentGetResponse" + }, + "type": "array", + "title": "Items" + }, + "total": { + "anyOf": [ + { + "type": "integer", + "minimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Total" + }, + "page": { + "anyOf": [ + { + "type": "integer", + "minimum": 1.0 + }, + { + "type": "null" + } + ], + "title": "Page" + }, + "size": { + "anyOf": [ + { + "type": "integer", + "minimum": 1.0 + }, + { + "type": "null" + } + ], + "title": "Size" + }, + "pages": { + "anyOf": [ + { + "type": "integer", + "minimum": 0.0 + }, + { + "type": "null" + } + ], + "title": "Pages" + }, + "links": { + "$ref": "#/components/schemas/Links", + "readOnly": true + } + }, + "type": "object", + "required": [ + "items", + "page", + "size", + "links" + ], + "title": "RemediationComponentsGetResponsePage" + }, "RemediationMetrics": { "properties": { "total": { diff --git a/pyproject.toml b/pyproject.toml index 49fe460..0954a1e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "crowdsec_service_api" -version = "1.135.0" +version = "v0.19.2" license = { text = "MIT" } authors = [ { name="crowdsec", email="info@crowdsec.net" } diff --git a/uv.lock b/uv.lock index f73b80b..ee2ca30 100644 --- a/uv.lock +++ b/uv.lock @@ -1,5 +1,5 @@ version = 1 -revision = 3 +revision = 5 requires-python = ">=3.11" [[package]] @@ -13,43 +13,43 @@ wheels = [ [[package]] name = "anyio" -version = "4.14.2" +version = "4.16.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "idna" }, - { name = "typing-extensions", marker = "python_full_version < '3.13'" }, + { name = "typing-extensions", marker = "python_full_version < '3.15'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/61/cc/a381afa6efea9f496eff839d4a6a1aed3bfafc7b3ab4b0d1b243a12573dd/anyio-4.14.2.tar.gz", hash = "sha256:cfa139f3ed1a23ee8f88a145ddb5ac7605b8bbfd8592baacd7ce3d8bb4313c7f", size = 260176, upload-time = "2026-07-12T20:29:07.082Z" } +sdist = { url = "https://files.pythonhosted.org/packages/a1/98/7e457a3b014976887a050561955c0b76e1e7e2d6e27b78ecef2ef80518f2/anyio-4.16.0.tar.gz", hash = "sha256:59bb03251907983d1603d27c3087ddb1e93299ea2163adcdba37899a4fb12ffb", size = 310971, upload-time = "2026-11-01T11:20:07.282Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/da/35/f2287558c17e29fafc8ef3daf819bb9834061cfa43bff8014f7df7f63bdc/anyio-4.14.2-py3-none-any.whl", hash = "sha256:9f505dda5ac9f0c8309b5e8bd445a8c2bf7246f3ce950121e45ea15bc41d1494", size = 125813, upload-time = "2026-07-12T20:29:05.763Z" }, + { url = "https://files.pythonhosted.org/packages/a9/16/7757fb84c819accc7d7e9af5291b261e4abb8627ee040f99e7d35ef2457a/anyio-4.16.0-py3-none-any.whl", hash = "sha256:c66ae634e0b8228396b801741beb3294326d4b6102f7bba4041c0dfb58c29026", size = 134521, upload-time = "2026-11-01T11:20:05.59Z" }, ] [[package]] name = "botocore" -version = "1.43.70" +version = "1.43.123" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "jmespath" }, { name = "python-dateutil" }, { name = "urllib3" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/2f/1a/ad4ff28cd0caa8ff4f39f18491169dc9ff4b2e359589be1f7108048e1915/botocore-1.43.70.tar.gz", hash = "sha256:a7bebdd0b1c8265e72759a4f7f61e9e43d57968b2c2a5e1e7b350d0a1e3ce81c", size = 15936837, upload-time = "2026-08-12T19:23:30.58Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/de/011fc2a47fb066c47064b122498d2fd21f55bc90ea514acbddc37ca0f8c1/botocore-1.43.123.tar.gz", hash = "sha256:80948cb9b1cdf1a1a25809089a42e3a1bc4af0258d198222db6e97dcc660dd0c", size = 16486269, upload-time = "2026-10-30T19:18:44.609Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/69/b2/c16b4e2e7ccab1f0887c22fbe2d9859ceb4d35fb637cce8a380d51b52b06/botocore-1.43.70-py3-none-any.whl", hash = "sha256:95bc23a6472f8876349ae334b526e66006f6cf3c87bf39d3e9f057dc8c2eb85f", size = 15628519, upload-time = "2026-08-12T19:23:27.38Z" }, + { url = "https://files.pythonhosted.org/packages/db/96/4f2dffd304425c07160ab2c12cb13322d852fd956fe9d4386228c93f02ea/botocore-1.43.123-py3-none-any.whl", hash = "sha256:e30580f9c1282c321529238ff8ff75066096a2adbd0a293c8ae592c21d1733a3", size = 16185987, upload-time = "2026-10-30T19:18:39.794Z" }, ] [[package]] name = "certifi" -version = "2026.7.22" +version = "2026.10.23" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/a3/c2/24167ea9858356b47a87a50d39908bfdb72ceeefe0041586e704e5376b3a/certifi-2026.7.22.tar.gz", hash = "sha256:741e2c3b351ddf169a738da9f2c048608ff7f2c5cc02f1ebc6b118bb090d5d55", size = 138112, upload-time = "2026-07-22T03:35:12.644Z" } +sdist = { url = "https://files.pythonhosted.org/packages/fd/11/b524cbd9bbdaca58608e4cf4053fd463417549e1959fa8d3aa18319f9555/certifi-2026.10.23.tar.gz", hash = "sha256:a9895e6e2758b371e0545e321a3a8fd1fcfd9829ada8824a936dfb16aaaf36cd", size = 136225, upload-time = "2026-10-23T11:36:16.478Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/0b/a7/71ac2cff56fec219ed242bb11b8efb69fcc4bec75db06fb7bfe35de520e6/certifi-2026.7.22-py3-none-any.whl", hash = "sha256:62f22742b58a1a33014a2b6b706588a8d7e2a88ae7bd1a6ebe8c992928483775", size = 136983, upload-time = "2026-07-22T03:35:11.276Z" }, + { url = "https://files.pythonhosted.org/packages/32/d1/a3652fe2c19134d0d15922177821d863cbd7e842d53a21bbe7e8e3a1b5ac/certifi-2026.10.23-py3-none-any.whl", hash = "sha256:e9b54de76e530bb6cf0ccd036787103acb58fd42ba930ea8bf948ddbaa2f61d1", size = 135082, upload-time = "2026-10-23T11:36:14.763Z" }, ] [[package]] name = "crowdsec-service-api" -version = "1.135.0" +version = "0.19.2" source = { editable = "." } dependencies = [ { name = "botocore" }, @@ -66,11 +66,11 @@ requires-dist = [ [[package]] name = "dnspython" -version = "2.8.0" +version = "2.9.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8c/8b/57666417c0f90f08bcafa776861060426765fdb422eb10212086fb811d26/dnspython-2.8.0.tar.gz", hash = "sha256:181d3c6996452cb1189c4046c61599b84a5a86e099562ffde77d26984ff26d0f", size = 368251, upload-time = "2025-09-07T18:58:00.022Z" } +sdist = { url = "https://files.pythonhosted.org/packages/91/21/7fcd6780f61e9756aafaea760560509bb4111375daa2e23c1be7a89f33f1/dnspython-2.9.1.tar.gz", hash = "sha256:9a6d30e55f8dc63e6052597666112bff0586b95a2474a9deda03afbbf820d37a", size = 455302, upload-time = "2026-10-29T18:05:12.156Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/ba/5a/18ad964b0086c6e62e2e7500f7edc89e3faa45033c71c1893d34eed2b2de/dnspython-2.8.0-py3-none-any.whl", hash = "sha256:01d9bbc4a2d76bf0db7c1f729812ded6d912bd318d3b1cf81d30c0f845dbf3af", size = 331094, upload-time = "2025-09-07T18:57:58.071Z" }, + { url = "https://files.pythonhosted.org/packages/61/55/f90405bbbbd3dd8f788e92cec2d39964f5c09783f0570fc35f3bb3381485/dnspython-2.9.1-py3-none-any.whl", hash = "sha256:7c81caf8de1ed57b8cfc7e0ad4f528a0b8ceace473c7eb946df195dc9def751f", size = 360364, upload-time = "2026-10-29T18:05:10.206Z" }, ] [[package]] @@ -126,11 +126,11 @@ wheels = [ [[package]] name = "idna" -version = "3.18" +version = "3.20" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/cd/63/9496c57188a2ee585e0f1db071d75089a11e98aa86eb99d9d7618fc1edce/idna-3.18.tar.gz", hash = "sha256:ffb385a7e039654cef1ab9ef32c6fafe283c0c0467bba1d9029738ce4a14a848", size = 196711, upload-time = "2026-06-02T14:34:07.794Z" } +sdist = { url = "https://files.pythonhosted.org/packages/f5/08/8eea9d4b8302028f3abb2c0813953f7aec26d33b7a8960ed760e65ff29fa/idna-3.20.tar.gz", hash = "sha256:a7db850025b95ded1eae8a46181a1a6c56c92c96f0e2b005d9ff8dc0210cab44", size = 216463, upload-time = "2026-09-17T14:11:04.752Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/1e/5e/d4e9f1a599fb8e573b7b87160658329fbf28d19eac2718f51fc3def3aa5a/idna-3.18-py3-none-any.whl", hash = "sha256:7f952cbe720b688055e3f87de14f5c3e5fdaa8bc3928985c4077ca689de849a2", size = 65455, upload-time = "2026-06-02T14:34:06.319Z" }, + { url = "https://files.pythonhosted.org/packages/58/a2/bb081bab032533a855d44de1d56f8e8426114ff1ba5d1f07a438a0a654f8/idna-3.20-py3-none-any.whl", hash = "sha256:ab7ae7122974553370f0bdb919e1a960b2cd1bc1ef0276416d896db81c14582c", size = 69583, upload-time = "2026-09-17T14:11:03.168Z" }, ] [[package]] @@ -144,7 +144,7 @@ wheels = [ [[package]] name = "pydantic" -version = "2.13.4" +version = "2.14.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, @@ -152,9 +152,9 @@ dependencies = [ { name = "typing-extensions" }, { name = "typing-inspection" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" } +sdist = { url = "https://files.pythonhosted.org/packages/9f/d5/b4867fa7c7f04c34997d7d8aad744f64d210bb99d67cf18bf3fb1eea1aed/pydantic-2.14.2.tar.gz", hash = "sha256:fb7b2db6cefe8414dd612edeede49c4c433acb0432b0f92b95024e45f66c505d", size = 911596, upload-time = "2026-10-29T16:37:12.476Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" }, + { url = "https://files.pythonhosted.org/packages/97/01/c71a71258b58659c72504e5fd65b451f6e36e34dc931d0b237ded213c814/pydantic-2.14.2-py3-none-any.whl", hash = "sha256:7efbf7507b937931cd32a5755acb00ea1cf5ccb1d4e8067a5850d5069e382118", size = 490403, upload-time = "2026-10-29T16:37:10.181Z" }, ] [package.optional-dependencies] @@ -167,104 +167,139 @@ timezone = [ [[package]] name = "pydantic-core" -version = "2.46.4" +version = "2.50.2" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" } +sdist = { url = "https://files.pythonhosted.org/packages/af/8e/23ec1021834e35041fbb2f10946141e6acdfd39379c45cc4d65a4e8a1d98/pydantic_core-2.50.2.tar.gz", hash = "sha256:1b0e8dc3932cf4e9ed5727570325cacc716b9409ffc794a221c0ccc72e8eb775", size = 518711, upload-time = "2026-10-29T16:34:57.465Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/5c/fa/6d7708d2cfc1a832acb6aeb0cd16e801902df8a0f583bb3b4b527fde022e/pydantic_core-2.46.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:0e96592440881c74a213e5ad528e2b24d3d4f940de2766bed9010ab1d9e51594", size = 2111872, upload-time = "2026-05-06T13:40:27.596Z" }, - { url = "https://files.pythonhosted.org/packages/ae/6f/aa064a3e74b5745afbdf250594f38e7ead05e2d651bcb35994b9417a0d4d/pydantic_core-2.46.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e0d65b8c354be7fb5f720c3caa8bc940bc2d20ce749c8e06135f07f8ed95dd7c", size = 1948255, upload-time = "2026-05-06T13:39:12.574Z" }, - { url = "https://files.pythonhosted.org/packages/43/3a/41114a9f7569b84b4d84e7a018c57c56347dac30c0d4a872946ec4e36c46/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bfb192b3f4b9e8a89b6277b6ce787564f62cfd272055f6e685726b111dc7826", size = 1972827, upload-time = "2026-05-06T13:38:19.841Z" }, - { url = "https://files.pythonhosted.org/packages/ef/25/1ab42e8048fe551934d9884e8d64daa7e990ad386f310a15981aeb6a5b08/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9037063db01f09b09e237c282b6792bd4da634b5402c4e7f0c61effed7701a04", size = 2041051, upload-time = "2026-05-06T13:38:10.447Z" }, - { url = "https://files.pythonhosted.org/packages/94/c2/1a934597ddf08da410385b3b7aae91956a5a76c635effef456074fad7e88/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fc010ab034c8c7452522748bf937df58020d256ccae0874463d1f4d01758af8e", size = 2221314, upload-time = "2026-05-06T13:40:13.089Z" }, - { url = "https://files.pythonhosted.org/packages/02/6d/9e8ad178c9c4df27ad3c8f25d1fe2a7ab0d2ba0559fad4aee5d3d1f16771/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8c5dac79fa1614d1e06ca695109c6105923bd9c7d1d6c918d4e637b7e6b32fd3", size = 2285146, upload-time = "2026-05-06T13:38:59.224Z" }, - { url = "https://files.pythonhosted.org/packages/80/50/540cd3aeefc041beb111125c4bff779831a2111fc6b15a9138cda277d32c/pydantic_core-2.46.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fa868638bf362d3d138ea55829cefb3d5f4b0d7f142234382a15e2485dbec4", size = 2089685, upload-time = "2026-05-06T13:38:17.762Z" }, - { url = "https://files.pythonhosted.org/packages/6b/a4/b440ad35f05f6a38f89fa0f149accb3f0e02be94ca5e15f3c449a61b4bc9/pydantic_core-2.46.4-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:17299feefe090f2caa5b8e37222bb5f663e4935a8bfa6931d4102e5df1a9f398", size = 2115420, upload-time = "2026-05-06T13:37:58.195Z" }, - { url = "https://files.pythonhosted.org/packages/99/61/de4f55db8dfd57bfdfa9a12ec90fe1b57c4f41062f7ca86f08586b3e0ac0/pydantic_core-2.46.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4c63ebc82684aa89d9a3bcbd13d515b3be44250dc68dd3bd81526c1cb31286c3", size = 2165122, upload-time = "2026-05-06T13:37:01.167Z" }, - { url = "https://files.pythonhosted.org/packages/f7/52/7c529d7bdb2d1068bd52f51fe32572c8301f9a4febf1948f10639f1436f5/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:aaa2a54443eff1950ba5ddc6b6ccda0d9c84a364276a62f969bdf2a390650848", size = 2182573, upload-time = "2026-05-06T13:38:45.04Z" }, - { url = "https://files.pythonhosted.org/packages/37/b3/7c40325848ba78247f2812dcf9c7274e38cd801820ca6dd9fe63bcfb0eb4/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:18e5ceec2ab67e6d5f1a9085e5a24c9c4e2ac4545730bfe668680bca05e555f3", size = 2317139, upload-time = "2026-05-06T13:37:15.539Z" }, - { url = "https://files.pythonhosted.org/packages/d9/37/f913f81a657c865b75da6c0dbed79876073c2a43b5bd9edbe8da785e4d49/pydantic_core-2.46.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:a0f62d0a58f4e7da165457e995725421e0064f2255d8eccebc49f41bbc23b109", size = 2360433, upload-time = "2026-05-06T13:37:30.099Z" }, - { url = "https://files.pythonhosted.org/packages/c4/67/6acaa1be2567f9256b056d8477158cac7240813956ce86e49deae8e173b4/pydantic_core-2.46.4-cp311-cp311-win32.whl", hash = "sha256:041bde0a48fd37cf71cab1c9d56d3e8625a3793fef1f7dd232b3ff37e978ecda", size = 1985513, upload-time = "2026-05-06T13:38:15.669Z" }, - { url = "https://files.pythonhosted.org/packages/aa/e6/c505f83dfeda9a2e5c995cfd872949e4d05e12f7feb3dca72f633daefa94/pydantic_core-2.46.4-cp311-cp311-win_amd64.whl", hash = "sha256:6f2eeda33a839975441c86a4119e1383c50b47faf0cbb5176985565c6bb02c33", size = 2071114, upload-time = "2026-05-06T13:40:35.416Z" }, - { url = "https://files.pythonhosted.org/packages/0f/da/7a263a96d965d9d0df5e8de8a475f33495451117035b09acb110288c381f/pydantic_core-2.46.4-cp311-cp311-win_arm64.whl", hash = "sha256:14f4c5d6db102bd796a627bbb3a17b4cf4574b9ae861d8b7c9a9661c6dd3362d", size = 2044298, upload-time = "2026-05-06T13:38:29.754Z" }, - { url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" }, - { url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" }, - { url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" }, - { url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" }, - { url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" }, - { url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" }, - { url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" }, - { url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" }, - { url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" }, - { url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" }, - { url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" }, - { url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" }, - { url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" }, - { url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" }, - { url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" }, - { url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" }, - { url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" }, - { url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" }, - { url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" }, - { url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" }, - { url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" }, - { url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" }, - { url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" }, - { url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" }, - { url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" }, - { url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" }, - { url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" }, - { url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" }, - { url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" }, - { url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" }, - { url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" }, - { url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" }, - { url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" }, - { url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" }, - { url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" }, - { url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" }, - { url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" }, - { url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" }, - { url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" }, - { url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" }, - { url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" }, - { url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" }, - { url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" }, - { url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" }, - { url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" }, - { url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" }, - { url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" }, - { url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" }, - { url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" }, - { url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" }, - { url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" }, - { url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" }, - { url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" }, - { url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" }, - { url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" }, - { url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" }, - { url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" }, - { url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" }, - { url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" }, - { url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" }, - { url = "https://files.pythonhosted.org/packages/ee/a4/73995fd4ebbb46ba0ee51e6fa049b8f02c40daebb762208feda8a6b7894d/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:14d4edf427bdcf950a8a02d7cb44a08614388dd6e1bdcbf4f67504fa7887da9c", size = 2111589, upload-time = "2026-05-06T13:37:10.817Z" }, - { url = "https://files.pythonhosted.org/packages/fb/7f/f37d3a5e8bfcc2e403f5c57a730f2d815693fb42119e8ea48b3789335af1/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:0ce40cd7b21210e99342afafbd4d0f76d784eb5b1d60f3bdc566be4983c6c73b", size = 1944552, upload-time = "2026-05-06T13:36:56.717Z" }, - { url = "https://files.pythonhosted.org/packages/15/3c/d7eb777b3ff43e8433a4efb39a17aa8fd98a4ee8561a24a67ef5db07b2d6/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:90884113d8b48f760e9587002789ddd741e76ab9f89518cd1e43b1f1a52ec44b", size = 1982984, upload-time = "2026-05-06T13:39:06.207Z" }, - { url = "https://files.pythonhosted.org/packages/63/87/70b9f40170a81afd55ca26c9b2acb25c20d64bcfbf888fafecb3ba077d4c/pydantic_core-2.46.4-graalpy311-graalpy242_311_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:66ce7632c22d837c95301830e111ad0128a32b8207533b60896a96c4915192ea", size = 2138417, upload-time = "2026-05-06T13:39:45.476Z" }, - { url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" }, - { url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" }, - { url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" }, - { url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" }, - { url = "https://files.pythonhosted.org/packages/11/cb/428de0385b6c8d44b716feba566abfacfbd23ee3c4439faa789a1456242f/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:0c563b08bca408dc7f65f700633d8442fffb2421fc47b8101377e9fd65051ff0", size = 2112782, upload-time = "2026-05-06T13:37:04.016Z" }, - { url = "https://files.pythonhosted.org/packages/0b/b5/6a17bdadd0fc1f170adfd05a20d37c832f52b117b4d9131da1f41bb097ce/pydantic_core-2.46.4-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:db06ffe51636ffe9ca531fe9023dd64bdd794be8754cb5df57c5498ae5b518a7", size = 1952146, upload-time = "2026-05-06T13:39:43.092Z" }, - { url = "https://files.pythonhosted.org/packages/2a/dc/03734d80e362cd43ef65428e9de77c730ce7f2f11c60d2b1e1b39f0fbf99/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:133878133d271ade3d41d1bfb2a45ec38dbdbda40bc065921c6b04e4630127e2", size = 2134492, upload-time = "2026-05-06T13:36:58.124Z" }, - { url = "https://files.pythonhosted.org/packages/de/df/5e5ffc085ed07cc22d298134d3d911c63e91f6a0eb91fe646750a3209910/pydantic_core-2.46.4-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9bc519fbf2b7578398853d815009ae5e4d4603d12f4e3f91da8c06852d3da3e9", size = 2156604, upload-time = "2026-05-06T13:37:49.88Z" }, - { url = "https://files.pythonhosted.org/packages/81/44/6e112a4253e56f5705467cbab7ab5e91ee7398ba3d56d358635958893d3e/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c7a7bd4e39e8e4c12c39cd480356842b6a8a06e41b23a55a5e3e191718838ddf", size = 2183828, upload-time = "2026-05-06T13:37:43.053Z" }, - { url = "https://files.pythonhosted.org/packages/ac/ad/5565071e937d8e752842ac241463944c9eb14c87e2d269f2658a5bd05e98/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:d396ec2b979760aaf3218e76c24e65bd0aca24983298653b3a9d7a45f9e47b30", size = 2310000, upload-time = "2026-05-06T13:37:56.694Z" }, - { url = "https://files.pythonhosted.org/packages/4f/c3/66883a5cec183e7fba4d024b4cbbe61851a63750ef606b0afecc46d1f2bf/pydantic_core-2.46.4-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:86e1a4418c6cd97d60c95c71164158eaf7324fae7b0923264016baa993eba6fc", size = 2361286, upload-time = "2026-05-06T13:40:05.667Z" }, - { url = "https://files.pythonhosted.org/packages/4b/2d/69abac8f838090bbecd5df894befb2c2619e7996a98ddb949db9f3b93225/pydantic_core-2.46.4-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:d51026d73fcfd93610abc7b27789c26b313920fcfb20e27462d74a7f8b06e983", size = 2193071, upload-time = "2026-05-06T13:38:08.682Z" }, + { url = "https://files.pythonhosted.org/packages/8d/0f/1043d3840b7859cc19abede795e058a785ebc1fa011b022b0a69514dd5c5/pydantic_core-2.50.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2115d7ca6d58554af8a14da3dd32d361a4fe999fae52f115a6155679b5b00e72", size = 2160886, upload-time = "2026-10-29T16:31:48.009Z" }, + { url = "https://files.pythonhosted.org/packages/d8/95/6211dfe1794bde5ce14f3de2212551196784c67411ac5249d8aa627e3e23/pydantic_core-2.50.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:b2dd65864aad38dbcc57c3d0e2c978d4286e063378137d8fc0c9fcd558943285", size = 2115730, upload-time = "2026-10-29T16:31:49.449Z" }, + { url = "https://files.pythonhosted.org/packages/67/42/50a1a9721cfc21d360916754096c90467fa21386ef16875445ea06a4cf6e/pydantic_core-2.50.2-cp311-cp311-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:26b778d4ebb75f181d36220ff0f54a513fc46f053d9b09ce79993c2f00bc45cc", size = 2274234, upload-time = "2026-10-29T16:31:50.668Z" }, + { url = "https://files.pythonhosted.org/packages/69/0b/22349c3114a3b3c400333ba6ec1d2e127fc9a4e4682440d8e23d954df0d1/pydantic_core-2.50.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e80c47314c7233e7105a7efcfffd89d56e479e558189d1959eeeaf2639a27680", size = 2116001, upload-time = "2026-10-29T16:31:51.887Z" }, + { url = "https://files.pythonhosted.org/packages/d8/2e/3b88612239e87cfddd370362e93b18a50d5075883817d6b35e8e3871af75/pydantic_core-2.50.2-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:3bfe12243b3ded517c6734d91f127489e2f51bf95cb533b53130fe360333db80", size = 2204318, upload-time = "2026-10-29T16:31:53.342Z" }, + { url = "https://files.pythonhosted.org/packages/3b/3b/a735bf3967d0fd73b512705d6f80fbe179d3b6208779721e86613cdf736d/pydantic_core-2.50.2-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:01eb0282d0b3a065d55956d1be9ce398c46db3dd6d277a6cb2358c8aa8c53179", size = 2392365, upload-time = "2026-10-29T16:31:54.721Z" }, + { url = "https://files.pythonhosted.org/packages/9d/16/0a0febc06b311d6ca43dd7fa068273d2c4d3c4ad86ac4a6c2f2cbe924c23/pydantic_core-2.50.2-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:196b87b48b2695426920e8470d20f9e99f019ebd86f15808aa018b68086840cd", size = 2443963, upload-time = "2026-10-29T16:31:56.455Z" }, + { url = "https://files.pythonhosted.org/packages/70/7d/22bd04c22adae266ae5e99e4c34bd882daf6c93c35bda2f9674421c1e7c3/pydantic_core-2.50.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:86e7abd24a67f61a4bfe8df059b67a2bdd8bf33705178e98463195d140bd3780", size = 2236349, upload-time = "2026-10-29T16:31:57.837Z" }, + { url = "https://files.pythonhosted.org/packages/2b/c4/77b12031179047a292128eee12cd7aad899d82391157356a581117e232e7/pydantic_core-2.50.2-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:aff31602e8518594e6f6bc670cdb27e37cb7dbeb2d5d0b76a7707b70fe951ddf", size = 2272702, upload-time = "2026-10-29T16:31:59.287Z" }, + { url = "https://files.pythonhosted.org/packages/98/58/41f674077b08b79bf2f2ae3c777a5b7b8758647433c6c621580b612e8c1e/pydantic_core-2.50.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:a88851e8e332588cb8cced8b5318d1163c7d0bb87830aa8dcafbc4ae9602b73c", size = 2311296, upload-time = "2026-10-29T16:32:00.722Z" }, + { url = "https://files.pythonhosted.org/packages/61/af/527d1d29cfb8efc7c7f9ed9f35ab5b16a33b1837b186c6e42ecbca699817/pydantic_core-2.50.2-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:3b1bb3950e0794a795c9344d818d5b476189b0c9c9755e8eb8fde87c3acee17a", size = 2481042, upload-time = "2026-10-29T16:32:02.423Z" }, + { url = "https://files.pythonhosted.org/packages/57/35/79877aaf083424e67c870ba07c0b5ed36a2096a0cfc8b058c1d921797723/pydantic_core-2.50.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:928a44ad1e21a7e923eb924d601605f0694cd187d2ce5d40bf7ad76650f4627d", size = 2488007, upload-time = "2026-10-29T16:32:03.819Z" }, + { url = "https://files.pythonhosted.org/packages/aa/45/5a627e40690c21be388c4abfddaefbf589e359614456156c90432ac0a76a/pydantic_core-2.50.2-cp311-cp311-win32.whl", hash = "sha256:9a87744e683d9a13f60b7fa5242c17f8d283ffa94ad727cb19063b48c3d34960", size = 2121376, upload-time = "2026-10-29T16:32:05.053Z" }, + { url = "https://files.pythonhosted.org/packages/1f/9b/d21478003682505aad9619ff9e086bd29aced2615b23d5315cb37de14cad/pydantic_core-2.50.2-cp311-cp311-win_amd64.whl", hash = "sha256:b958c217c6e56bef261f516e4caf5d490b079ad6a428752afada5a764cca6c71", size = 2238388, upload-time = "2026-10-29T16:32:06.811Z" }, + { url = "https://files.pythonhosted.org/packages/e7/26/670a52ea740fd60f5e0a873b74505714c4bfd04c4344f789310005c4cbbd/pydantic_core-2.50.2-cp311-cp311-win_arm64.whl", hash = "sha256:b0e6a2152706d84f7da8b9d34dcecc7e9bde678af32c40bd5b405f427ae0fbdb", size = 2185763, upload-time = "2026-10-29T16:32:08.441Z" }, + { url = "https://files.pythonhosted.org/packages/d6/65/6609a66cda909d414c58438f9bd70b1e947fe12c25f6bd40c93121afd7ef/pydantic_core-2.50.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e3d824b6152e1c0fd58dc6266f2de470eb7b2286135294f5f7cd26a0f0693738", size = 2220341, upload-time = "2026-10-29T16:32:10.193Z" }, + { url = "https://files.pythonhosted.org/packages/f9/0b/92463ae7be78d73885487f72c4599902c2cc190378bccaad5718b7495250/pydantic_core-2.50.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:596921489390a002d6a5e303384a0f1f98384f8bb550fbf38a1aafa6093da0f9", size = 2093701, upload-time = "2026-10-29T16:32:11.502Z" }, + { url = "https://files.pythonhosted.org/packages/62/d3/24147a1aa22f7eade546172750e1110fd7b2793998057809800d3ebeae4e/pydantic_core-2.50.2-cp312-cp312-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:36d8b9725684ca3bf658b90a101d335fc8cae405bb22196b7b5ef41344913756", size = 2253622, upload-time = "2026-10-29T16:32:13.051Z" }, + { url = "https://files.pythonhosted.org/packages/f6/50/2628ca3c83a0d9a6fda3305fe59b1b28e40c0221e8f234cd1ef86fb64745/pydantic_core-2.50.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:43a8fd56f3c681f3cda2d5c842ad28e88241df742dfcbe8fd1dd437a3056e1f6", size = 2114101, upload-time = "2026-10-29T16:32:14.702Z" }, + { url = "https://files.pythonhosted.org/packages/21/c8/cc6d7304a93f91f5e06260ccad71cc7d882489663a37dec009532379fc46/pydantic_core-2.50.2-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:6f5a432c6c1ef18a1a02a04b3616b8d3f2f88b13faa46caae1ac6559ab202234", size = 2199541, upload-time = "2026-10-29T16:32:16.153Z" }, + { url = "https://files.pythonhosted.org/packages/65/d9/18f44ac5696b3e2b2384cb89c9fbe6ed69860f528e232b9fb46cc5b45a17/pydantic_core-2.50.2-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5d3cd8be71c4da3c9b42cc92f17e5e3036bdca98bf18555a0e072c3fe87abbb4", size = 2368597, upload-time = "2026-10-29T16:32:17.544Z" }, + { url = "https://files.pythonhosted.org/packages/1d/22/5f2a48ef819a7e1b74fb003a85d27576ad2f9ddf3901b88998ac63ce1e00/pydantic_core-2.50.2-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6a438cb8a3f87f2c49e82e43fb19511d4d5043f53e0787dc4df937ccb904373a", size = 2451701, upload-time = "2026-10-29T16:32:18.956Z" }, + { url = "https://files.pythonhosted.org/packages/08/93/2a6556bbdb8e918175af9d849a5d0b367b5644e41939d040f3a7215b1339/pydantic_core-2.50.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9667637665acba166a7dbbc786f14c50512d3a01f7199e0e1a13b929e92d7c7a", size = 2242782, upload-time = "2026-10-29T16:32:20.381Z" }, + { url = "https://files.pythonhosted.org/packages/90/ed/dd9f29a92257f32eb5b99d5120826186ee0632ecc3aaf6c23e2fab89ed6d/pydantic_core-2.50.2-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:b3e681208e2d39fde13fbea449ef2736a85ec1ea2afa41e9193a8c536e71dafe", size = 2253706, upload-time = "2026-10-29T16:32:22.293Z" }, + { url = "https://files.pythonhosted.org/packages/11/19/1ccf3bf38eb4ed97d8aeefc558458834ae0ad53fdbb1edf61af7228ea500/pydantic_core-2.50.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:6eb6ff07964f39e33c6f57fefe939514e76b8c0d4a694e5663e2e04e80cc1798", size = 2288603, upload-time = "2026-10-29T16:32:23.465Z" }, + { url = "https://files.pythonhosted.org/packages/ea/cd/bae2320fc89a65bcd87bf66ec83aac51b3b43b970a2edece15feb8af64dd/pydantic_core-2.50.2-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:4eb54c25e3463d73e1e4ed439ffc45d1d7e590df40bc7bb06f11a906afd996c3", size = 2476597, upload-time = "2026-10-29T16:32:24.824Z" }, + { url = "https://files.pythonhosted.org/packages/db/35/1bdb8d52c8e562e95c5e6ebb5784792af568ac6a81470dd546d95f392b60/pydantic_core-2.50.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:91238117cd296352f54f24117ff5a227bdea428865dba1244aa0cdd1424c0bc2", size = 2478664, upload-time = "2026-10-29T16:32:26.197Z" }, + { url = "https://files.pythonhosted.org/packages/12/72/0179b40ac6a6b0899c61826f2e3e80f88063f6d821e0dd9641927de46700/pydantic_core-2.50.2-cp312-cp312-win32.whl", hash = "sha256:98722314e12a8e4fa346e0afd3fff2098b5732875ff45592b450a7b589b43c4f", size = 2108820, upload-time = "2026-10-29T16:32:27.736Z" }, + { url = "https://files.pythonhosted.org/packages/b4/fb/679144362d7e5162519d9f6631ec982521417de3196351c6c56485f5b29f/pydantic_core-2.50.2-cp312-cp312-win_amd64.whl", hash = "sha256:b381574614245f18fdb2d6d1aa8f149e225869c47b5ee7f81812de8977817314", size = 2252238, upload-time = "2026-10-29T16:32:29.572Z" }, + { url = "https://files.pythonhosted.org/packages/0f/68/e3ccc885c3e2086ff84d7ca496f45b974a9f0a49ce2da8973aaa3a369a4b/pydantic_core-2.50.2-cp312-cp312-win_arm64.whl", hash = "sha256:f07c965a8aa6d62145f122641f292129984f39a3e3697585b19298a1488287db", size = 2162565, upload-time = "2026-10-29T16:32:30.853Z" }, + { url = "https://files.pythonhosted.org/packages/c2/fc/ac3ae9d934932ce3c380e7fe53e01372b49ef5dcb49db56f1a1f005b4d8c/pydantic_core-2.50.2-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:93eb41d626d9a2749a678823c70bba8c25033cef474ae8001fd7621adbbd8437", size = 2222463, upload-time = "2026-10-29T16:32:32.125Z" }, + { url = "https://files.pythonhosted.org/packages/f7/0b/7605223654ed4e777d05668e914d32b476b1fa2bb756bff9820fe270456b/pydantic_core-2.50.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7c539d452cba22f250103c7d1c00cbe9038eb705e657476e701c43374efd9f2e", size = 2093995, upload-time = "2026-10-29T16:32:33.496Z" }, + { url = "https://files.pythonhosted.org/packages/b4/29/4a1a653cfedd3f5e1ccd3b1e919fe324fb45607d12c30fdd7ca5af16ba8d/pydantic_core-2.50.2-cp313-cp313-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:53bd25e8ab54c02bb4c55d4848c1d36f75f3b9a7356e83179fe27794d9e9e6c4", size = 2253178, upload-time = "2026-10-29T16:32:34.77Z" }, + { url = "https://files.pythonhosted.org/packages/6c/f5/03ce5ed01c98b60272cdee8ac1abb819b64ef347717c11d96215e32d9952/pydantic_core-2.50.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f142cd663d1148ed32993ed9a58e5c67ea312f446a01a6c13a956945aafc9f23", size = 2113894, upload-time = "2026-10-29T16:32:39.241Z" }, + { url = "https://files.pythonhosted.org/packages/d3/bc/f7644474ac0faad9a7fdf5179239893b21339169b8b4f89e3075c4be16b2/pydantic_core-2.50.2-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:126f158474346f457c0759c29c1a6334acd5f7f99dd272bb27d19314f3d81b4d", size = 2198248, upload-time = "2026-10-29T16:32:42.357Z" }, + { url = "https://files.pythonhosted.org/packages/c2/8f/3d3a1c1d313e02774f6c034eb1910eb6e795922e66e81f0f053f98afe866/pydantic_core-2.50.2-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:0b94a515f44f1ebcb25395bcdba506c4cdaf6d3fcb0466b9658521b41e5ff057", size = 2368505, upload-time = "2026-10-29T16:32:43.755Z" }, + { url = "https://files.pythonhosted.org/packages/03/33/38fb4545c00ce2bfebc2a0ffd99f7f580f1e1efb8db3b2faf88def640435/pydantic_core-2.50.2-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:a55c1163e829a08707b4a92c8ee02a5a3a3847ced74aa4da94e3e975ffe1ec63", size = 2451704, upload-time = "2026-10-29T16:32:45.075Z" }, + { url = "https://files.pythonhosted.org/packages/79/be/b559a1ceaff8b1d4581733d47d2ffa785635ac05716eae4c964466aac6e8/pydantic_core-2.50.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:31a1fb3ffbd1195b24490f671d12623dd4c9bfa56d6af0a299fa43b516134f5b", size = 2241760, upload-time = "2026-10-29T16:32:46.382Z" }, + { url = "https://files.pythonhosted.org/packages/2d/7c/3c8ab7cb45e4dc7687a4f16a953fee14d2eca18dd90d6be8bd470ef06962/pydantic_core-2.50.2-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:83d6f42ae6eba44548a1a3d4f900a5b1500fdd14f09f04754a8800ab0d544432", size = 2254115, upload-time = "2026-10-29T16:32:47.818Z" }, + { url = "https://files.pythonhosted.org/packages/5c/ad/3f3471206224cdac2af3492a3f7c724c47a82f5f8850ff364c2e36023497/pydantic_core-2.50.2-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:9fcde11462e0faab4c2a2ae8cd4516f7dd8239eec583bd88c5524d8064ad2d0c", size = 2288598, upload-time = "2026-10-29T16:32:49.404Z" }, + { url = "https://files.pythonhosted.org/packages/a9/1e/2070b388b1d8633cfb72e3964ac3c95aaeb195c240209894ff386847b494/pydantic_core-2.50.2-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:848984e231190ae49bc8b5229e64d2a6fba4231dc6046e1b6b28ddc060bc7601", size = 2475116, upload-time = "2026-10-29T16:32:51.414Z" }, + { url = "https://files.pythonhosted.org/packages/3d/96/e96ff19527c73b9aaddce2a4424006dc15439fd89ef2d39641048c5ee85a/pydantic_core-2.50.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:8772c2c0091e6fc2d0499151793d31bf811826986b0727052935a95104845544", size = 2478926, upload-time = "2026-10-29T16:32:52.856Z" }, + { url = "https://files.pythonhosted.org/packages/35/10/2fefc082eb46f959e80735e859161305c0c2fbb3d5d20ac5547c49a84a3b/pydantic_core-2.50.2-cp313-cp313-win32.whl", hash = "sha256:bd6ecae08c0d871cf93b6f0d4ee76b06c65be44ea22311981a022b2f1948cf9d", size = 2108354, upload-time = "2026-10-29T16:32:54.276Z" }, + { url = "https://files.pythonhosted.org/packages/6f/dd/14eeec394ec1422f9c4e9743cd746f4502232a7c65eb235d1a03729d94ab/pydantic_core-2.50.2-cp313-cp313-win_amd64.whl", hash = "sha256:e5c801bdf3cc92274b8fc2c7023c8751e5ae81260c009ac558ff55ce712a2d45", size = 2250556, upload-time = "2026-10-29T16:32:55.396Z" }, + { url = "https://files.pythonhosted.org/packages/75/b7/a014acf1ae4b4aa7d32ff957e2250698637daa3a29448444180360b92284/pydantic_core-2.50.2-cp313-cp313-win_arm64.whl", hash = "sha256:fd9aa71a800c87c0f7ab53fa38009169a23a82c685989626ca74a4bd483e1b67", size = 2162633, upload-time = "2026-10-29T16:32:56.792Z" }, + { url = "https://files.pythonhosted.org/packages/f2/64/fc525bb981a9f287cfa34346e7ed1d5ef7c043c2b9b517f54c6136032d10/pydantic_core-2.50.2-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:efad0bdc67d3b119c3bab6b94d341a27333c2bb89ed75dfa182a4a06cd0ea329", size = 2226414, upload-time = "2026-10-29T16:32:58.559Z" }, + { url = "https://files.pythonhosted.org/packages/db/68/315701095f25687938ab79d263a6d939337456c2840fe69038fd38000338/pydantic_core-2.50.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6ffb4dce3ecb2cd563aa30f9eb5088a1cf1f4f688b90cbb374fa96e49fc50b02", size = 2095041, upload-time = "2026-10-29T16:32:59.873Z" }, + { url = "https://files.pythonhosted.org/packages/b8/4b/efd3abf31aa24bc97b311735f418886f947b4f193df02a1977643963b03e/pydantic_core-2.50.2-cp314-cp314-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:150f6e101f575c21a4ecfed1be1c05bb89a0ad49cb9c846ed377583bd71b32c2", size = 2257635, upload-time = "2026-10-29T16:33:01.096Z" }, + { url = "https://files.pythonhosted.org/packages/2d/6c/146b36eed4de8115a0fda76840703e75f5f8b36aeb3af86976bf094d1a17/pydantic_core-2.50.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1db9cab6197e797824f0479dd2ae5fd2e272aa61c61b7faa5a6e450ca7a0d3b7", size = 2116807, upload-time = "2026-10-29T16:33:02.692Z" }, + { url = "https://files.pythonhosted.org/packages/fb/94/db006ea79bbe405cc38b25899319c7d461ff1813cbdfe6aa90a65ed1dfff/pydantic_core-2.50.2-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:1b9f652e17a13bbc09b45f74c3c326cca72059ce4dcdef687fcb04389db413a9", size = 2201037, upload-time = "2026-10-29T16:33:03.942Z" }, + { url = "https://files.pythonhosted.org/packages/41/f9/ea2bc1ec13a67af4a63c9a887fa0aa6ef4ade9018e2bb412d4fc80110e19/pydantic_core-2.50.2-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:823b222c4fc861a82c650998a6117ecbd150cc71bf8b78f9a31bf3f48c456108", size = 2374904, upload-time = "2026-10-29T16:33:05.458Z" }, + { url = "https://files.pythonhosted.org/packages/44/8e/26a6a075301f0e563646037ea69bef8c63911d38fbd257f94cec69cdf985/pydantic_core-2.50.2-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:783abdfac21247d33bec40aa683d26bba30d61655c40de38b2decc4797aabf92", size = 2457626, upload-time = "2026-10-29T16:33:07.271Z" }, + { url = "https://files.pythonhosted.org/packages/9d/a2/8eeabaf1d394f0d3b9a27129ac21556eabee6f2ddcb418069ef4037e00b0/pydantic_core-2.50.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b29b7c5adf4b2be7c941f7f76432aa3269cd5052ff8610376b8ece24d7b02c51", size = 2245505, upload-time = "2026-10-29T16:33:08.824Z" }, + { url = "https://files.pythonhosted.org/packages/bd/54/449778cd397e2682b30d1bcfab0872f6ac36702b59cc326296b7f4f14928/pydantic_core-2.50.2-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:4ac996e42a93d80122a23edce44e02c6b9c4913f5c6198a077da31475341a39a", size = 2259563, upload-time = "2026-10-29T16:33:10.107Z" }, + { url = "https://files.pythonhosted.org/packages/26/c2/2f65691d25488ee0f3c17861d079e8ccb7817955522d07cd3c3970d30af5/pydantic_core-2.50.2-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:99e1d482138a71902415ba375bb4627679a5fefd3bd07803c3a8f37632f4981d", size = 2290470, upload-time = "2026-10-29T16:33:11.273Z" }, + { url = "https://files.pythonhosted.org/packages/9f/32/aa7c40234cd24536afa0895ff1d26f9f15638004e25242c5193ce053b96b/pydantic_core-2.50.2-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:a53d5f11cd6d15569ba3e53f3498077f0d5e633f6ec604d2ea613e895017ebee", size = 2477272, upload-time = "2026-10-29T16:33:12.771Z" }, + { url = "https://files.pythonhosted.org/packages/c4/43/c347c68e040cf93d8487a8f4fc28f2768312834c7d21c301538f416f9955/pydantic_core-2.50.2-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:23385c4626f8b5a7792aa381ea573d9432cfbf4c21375a0a5eed2a4fb64e0e58", size = 2484352, upload-time = "2026-10-29T16:33:14.485Z" }, + { url = "https://files.pythonhosted.org/packages/b8/8e/72556126c8b6154fe7acaf757b96b2daa37aeffc3a517deb76e272f5ad09/pydantic_core-2.50.2-cp314-cp314-pyemscripten_2026_0_wasm32.whl", hash = "sha256:9a8a62281fd9c6a373b3fd3d473685e6838d43341eecde5f47729748e2c11ee3", size = 1491226, upload-time = "2026-10-29T16:33:15.603Z" }, + { url = "https://files.pythonhosted.org/packages/5b/66/004c85511812964a36b3535af022c5c0dfcb760a31e4905b96310e8dd6c8/pydantic_core-2.50.2-cp314-cp314-win32.whl", hash = "sha256:18f008ef58cd30782f81b6e0119e20b7e884edcefbc2d370162ebe033f6e5c99", size = 2113134, upload-time = "2026-10-29T16:33:16.87Z" }, + { url = "https://files.pythonhosted.org/packages/a3/5f/dcd3df20ab2a7279d42a8415fc184e8e77bcf9aa3c9ac3e938c1300a242c/pydantic_core-2.50.2-cp314-cp314-win_amd64.whl", hash = "sha256:b62c89545d21d930c333208fd548e7b4f262228ba3a322fd75c987a75ab11f31", size = 2253407, upload-time = "2026-10-29T16:33:18.47Z" }, + { url = "https://files.pythonhosted.org/packages/4e/fb/0685895f5d199b215011dc4eb8ccea032a64ec23dfa88eeb5acca939c2d2/pydantic_core-2.50.2-cp314-cp314-win_arm64.whl", hash = "sha256:6e731bf5a5e8e25398544d7709e39068ec4230b0177e4db7fa955692fd415ba3", size = 2160456, upload-time = "2026-10-29T16:33:19.782Z" }, + { url = "https://files.pythonhosted.org/packages/84/2f/4c8f67efe62837a508b74cf910904f73029cb211371351c5ceb36d56e85e/pydantic_core-2.50.2-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:33c6800ab9563adaa0d7893e9cd8f5b972ef1e6a23df70498e05c24f3fcec5e1", size = 2217558, upload-time = "2026-10-29T16:33:21.323Z" }, + { url = "https://files.pythonhosted.org/packages/ce/73/e0ef88cfbcca5409f57751289bc20be63a58af596a36e94b8cd795e59747/pydantic_core-2.50.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f81df206b937d0dca5efb38c25fc99037d82dbcd3740e34c3f81997d2322ac1c", size = 2074335, upload-time = "2026-10-29T16:33:22.658Z" }, + { url = "https://files.pythonhosted.org/packages/7b/cc/47844a3179ebce27064e13619594b3fc1a9b4509d8dec1e3960c5f87f5bb/pydantic_core-2.50.2-cp314-cp314t-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:21ea3b00f1e87c66f3f9e92f9f6fec20495ac0e60d7d2e68ba1fc49739d7cf40", size = 2264201, upload-time = "2026-10-29T16:33:24.953Z" }, + { url = "https://files.pythonhosted.org/packages/bc/d1/30e9d3c86d81884ee3199560ddfa2c1a66a8dc0736441748eae43064abbc/pydantic_core-2.50.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9eff570402175c7d5fff8497d5a9c05580664a79bb66c07b8f205d17f69e580b", size = 2094353, upload-time = "2026-10-29T16:33:26.739Z" }, + { url = "https://files.pythonhosted.org/packages/d4/8f/392a5999480d0bcab4539db0dafa93265152396fd63e87be4d24e13d6d82/pydantic_core-2.50.2-cp314-cp314t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:240fec32a74af0979f7253532859b3fd209ad5eea822416bb010929dba445c3d", size = 2203119, upload-time = "2026-10-29T16:33:28.154Z" }, + { url = "https://files.pythonhosted.org/packages/cb/80/6e4e276a3fde5500224a39150e06a4f134f136165908be69402720718a36/pydantic_core-2.50.2-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92acf02c770b9d5c4e9a3e8d64e9d95ae26456a86ebb7b7cf64a97f899e5871b", size = 2392881, upload-time = "2026-10-29T16:33:29.305Z" }, + { url = "https://files.pythonhosted.org/packages/70/d5/5eb56c6317ab4abf33ef9519a50bfac0c96f7f408bad1bc36da6f27d43e4/pydantic_core-2.50.2-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:1ac5b99bc7b0a68ec64f5f75a6828a7bab5535c8df0cdc07901deb50e0815910", size = 2457290, upload-time = "2026-10-29T16:33:30.587Z" }, + { url = "https://files.pythonhosted.org/packages/7b/9e/f1fe9384bb37e4e728c51c79151808deacf7b2502e245f50b57c85eeb199/pydantic_core-2.50.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:713d7c33c0e231e3786eb0ec95885814dd65d5f3a09754399b6acbf5e9365f11", size = 2241568, upload-time = "2026-10-29T16:33:32.04Z" }, + { url = "https://files.pythonhosted.org/packages/9d/f1/cffc4f8456c35690bcb65a8f2304afbf2f519766345a28aba553d5a55cc8/pydantic_core-2.50.2-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:61e13100b30d8d25fc0d1f0297014b32941bf0975a3584bd08f3adebb68d1ead", size = 2257185, upload-time = "2026-10-29T16:33:33.36Z" }, + { url = "https://files.pythonhosted.org/packages/84/34/ccd4df1cc39cb1e42fb7ec86a0dc0a23e8479de04d3012ca6b0bf2279a03/pydantic_core-2.50.2-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:523fe6574aea50f456cbc301c1cdddcbf237939f7657f9af99b4f0f71942b59c", size = 2299384, upload-time = "2026-10-29T16:33:34.799Z" }, + { url = "https://files.pythonhosted.org/packages/83/60/404b4b0c416a61867ee642cdc1450bca4d8a9a10e5f5f21e1ecaad05fdc8/pydantic_core-2.50.2-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:6c25b8826be85714b27dafe908d3461e1b09e3e31c0279a7029040c832c781ef", size = 2479384, upload-time = "2026-10-29T16:33:36.106Z" }, + { url = "https://files.pythonhosted.org/packages/ca/0d/57c81418a2fdfde0578c71396df773965adebd4421d9985a0f8dcbe9ec4d/pydantic_core-2.50.2-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:a59db03b80a156a6fbeae41096866d1cb89cdf31031ba44c768a804538880636", size = 2504616, upload-time = "2026-10-29T16:33:37.423Z" }, + { url = "https://files.pythonhosted.org/packages/08/66/dec78e28a604f3f4985f5a795d4da3e5fef78b0921aeb7f614ed7c780a32/pydantic_core-2.50.2-cp314-cp314t-win32.whl", hash = "sha256:0d090ae76d5b09c003600c7779b3adcf3d1b49268f616c5c51d844e54c8e318d", size = 2093179, upload-time = "2026-10-29T16:33:38.705Z" }, + { url = "https://files.pythonhosted.org/packages/d2/ea/79d9ee60648463804145d44b08f1e7e2474427d9704e3331d814483908b3/pydantic_core-2.50.2-cp314-cp314t-win_amd64.whl", hash = "sha256:9b01a092955c1c7530196ad526755cff4f2d11f37ca9a6fc9ebe37ca49a48977", size = 2220575, upload-time = "2026-10-29T16:33:39.929Z" }, + { url = "https://files.pythonhosted.org/packages/eb/01/aa6a7bd017c3228a41942da4fd788b86fb4aad9677212a4737a0c157fe74/pydantic_core-2.50.2-cp314-cp314t-win_arm64.whl", hash = "sha256:4ea01f30e119f1ec7a2034e85c40f491d469896aef02cd6436fd9292fe1be3fb", size = 2160866, upload-time = "2026-10-29T16:33:41.237Z" }, + { url = "https://files.pythonhosted.org/packages/4b/7f/ec2974015b4be5e50266ce732b8942d3d0b3bff751ace8900999c6577bce/pydantic_core-2.50.2-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:a3317630e2791f56071b82f89bb71624146125e4311e6643f708c6ba744b5ac5", size = 2230936, upload-time = "2026-10-29T16:33:43.656Z" }, + { url = "https://files.pythonhosted.org/packages/ae/ff/af99a09eddc348c1d0744c0df28dfcd4839ca497067f0fa2168208b41b1b/pydantic_core-2.50.2-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:f73930dacad5e611fe019e18df6f53c30629b1843d038d303b8dec86a32493bd", size = 2100409, upload-time = "2026-10-29T16:33:44.946Z" }, + { url = "https://files.pythonhosted.org/packages/84/75/8db3c46f02d6005277e5c2ff5933c85e7e1eb8798aa334c676c828650c3f/pydantic_core-2.50.2-cp315-cp315-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:e2e6240a0a5ad847017b3d65187877fdb7a11d5a58d43c30736f9f523478913b", size = 2259728, upload-time = "2026-10-29T16:33:46.461Z" }, + { url = "https://files.pythonhosted.org/packages/ee/9d/98c8d524921ca24e5c8a81a4b8f12209ac6ab05d0dd58b374e357da0ffc5/pydantic_core-2.50.2-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1fdf5b52ed22f1404c2433d0b46df2d86d9befb742d0b9b4042a2325c43cdb97", size = 2121771, upload-time = "2026-10-29T16:33:47.952Z" }, + { url = "https://files.pythonhosted.org/packages/c4/ea/68c3b1fa919946012c940dea88e94e33e7dde46abe3e3d57053793c9bab8/pydantic_core-2.50.2-cp315-cp315-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:4e9392ddf67fe97ab9889f796d468c9908a8754b8b6c7520eb03a65012b9a1e7", size = 2196328, upload-time = "2026-10-29T16:33:49.131Z" }, + { url = "https://files.pythonhosted.org/packages/eb/9b/cfb6312a5b65b02eab6bc00fb0d258d0e2e49468dab29b430e7cb49b2ceb/pydantic_core-2.50.2-cp315-cp315-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:48e944091b7bff233920bed8a60b0ed6c96c73d3c5836bf51c4b9a4bfb58e4ca", size = 2380152, upload-time = "2026-10-29T16:33:50.503Z" }, + { url = "https://files.pythonhosted.org/packages/41/5a/7fcced1d84ea294200abfa93e488f36d00732101d17bf5e1f1389e66de26/pydantic_core-2.50.2-cp315-cp315-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:91c92856b846aa690ea6239ffd6c5003c5e3e296a69095570bf4efee5bfa0bdc", size = 2462299, upload-time = "2026-10-29T16:33:51.884Z" }, + { url = "https://files.pythonhosted.org/packages/e6/d0/dd0e355694094f0045922f4da60ac9bc7a314babc494e46089fb00640fd3/pydantic_core-2.50.2-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5299296ff5cafcb69851fd652de8f9268a0bb036bcbedbfcaa94cf743baf3986", size = 2249999, upload-time = "2026-10-29T16:33:53.333Z" }, + { url = "https://files.pythonhosted.org/packages/3a/79/f5f4b36434604d22aacb7152667f87a470e68847c89b136c68a278cf409d/pydantic_core-2.50.2-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:d3d049b557875f9d15230eec8a731749a7a873d8ed6a051903b05bdf46e0e65f", size = 2262745, upload-time = "2026-10-29T16:33:54.79Z" }, + { url = "https://files.pythonhosted.org/packages/14/21/a4c47a286745857758a4bb8d4d5e260c736a7bd6fab5da618f5711d1a3f1/pydantic_core-2.50.2-cp315-cp315-musllinux_1_1_aarch64.whl", hash = "sha256:b0b25d647036972c2951059046cb498f72b7af5a2def27bf8e5f44c3067ab7dd", size = 2293663, upload-time = "2026-10-29T16:33:56.132Z" }, + { url = "https://files.pythonhosted.org/packages/0d/db/25330e609fd219ce16d0a089af1b4b62095f01595dbe6972f7a7dfc313b9/pydantic_core-2.50.2-cp315-cp315-musllinux_1_1_armv7l.whl", hash = "sha256:8835566b3e94026da3ce2249f9ee35c9d2ebe4cd131f6a39bfc82708d3010a46", size = 2473247, upload-time = "2026-10-29T16:33:57.607Z" }, + { url = "https://files.pythonhosted.org/packages/53/16/704ca88b82156dc485da2dfb11d5d52a10b9ef15a294639c0aa5ebd1643e/pydantic_core-2.50.2-cp315-cp315-musllinux_1_1_x86_64.whl", hash = "sha256:3fbcd402e4b607d4b8de5d4591215f31f042af03f9d09e58f693a6221e32833f", size = 2490536, upload-time = "2026-10-29T16:33:59.297Z" }, + { url = "https://files.pythonhosted.org/packages/50/34/1fdd0eebee9f8b6c4ec3c2490f49dc59a652c8c5a7fa0cbcaada0d91cda9/pydantic_core-2.50.2-cp315-cp315-win32.whl", hash = "sha256:8431ecb131489cbdaf6f51f7ade47475f73aff4f1912552f75ba19a6cfe233a8", size = 2117204, upload-time = "2026-10-29T16:34:00.514Z" }, + { url = "https://files.pythonhosted.org/packages/24/6b/702adc91486fb96ba55675d58ee15ddc38fb48553fb35e26fd005e303206/pydantic_core-2.50.2-cp315-cp315-win_amd64.whl", hash = "sha256:04cf672960b8c4fc28bb159c8cdd101fbd311c520237a5c0360448b851adfb41", size = 2261064, upload-time = "2026-10-29T16:34:01.773Z" }, + { url = "https://files.pythonhosted.org/packages/36/0d/7f117432b8614526aa0d96fadd2b7fb7393156ddf2caf26a6fe606e6cfb6/pydantic_core-2.50.2-cp315-cp315-win_arm64.whl", hash = "sha256:36917e29c0b815d6b940bc91560fcf453b5b85d55c579796373f0ea11d1c111a", size = 2161783, upload-time = "2026-10-29T16:34:02.966Z" }, + { url = "https://files.pythonhosted.org/packages/45/1c/2ba7a34fe8da4c83ec200fb9f85ab4d54b961be08367922743623f987849/pydantic_core-2.50.2-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:bd1fe69056a19c377a6c6de2c1240fb8676ba0512a969965efb486510c5e0f1f", size = 2223184, upload-time = "2026-10-29T16:34:04.214Z" }, + { url = "https://files.pythonhosted.org/packages/47/01/f71a8da1f53a5be1787d2a97ba6fd9adba115305c7f15ea0bf733ed8336c/pydantic_core-2.50.2-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:9b2383933b1dd7a8c93e02f99ebfd305f1286057172483b8e6898bed3fef69d3", size = 2078174, upload-time = "2026-10-29T16:34:05.426Z" }, + { url = "https://files.pythonhosted.org/packages/f6/0a/847e1f5427372692f6eb5c38261fed6b8cedf379e37d9f6134d48b9c8ee9/pydantic_core-2.50.2-cp315-cp315t-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:a1b4d60bad57d6e0e7cd30cc4d1dc646d258dd6dfb7935ce76c7dd72dd1e98b0", size = 2268813, upload-time = "2026-10-29T16:34:06.733Z" }, + { url = "https://files.pythonhosted.org/packages/f5/bb/12966dc82b5e9c347981658b52e24349b6242902b644725c00ee7bdf4267/pydantic_core-2.50.2-cp315-cp315t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:93bedc68c4138088ea3c042189c01d2945f530f0dcc36e1ea02df8418bd4f1cd", size = 2098331, upload-time = "2026-10-29T16:34:08.69Z" }, + { url = "https://files.pythonhosted.org/packages/d9/fe/340416b7ebe664524e7ada16ad2e3e069888b168010d75bda6a502bf2bf8/pydantic_core-2.50.2-cp315-cp315t-manylinux2014_armv7l.manylinux_2_17_armv7l.whl", hash = "sha256:d684ff87d00de2f6abcbbfa9b0fdce8b513dd799a900809dcfa7eb62ad69832a", size = 2197432, upload-time = "2026-10-29T16:34:10.091Z" }, + { url = "https://files.pythonhosted.org/packages/c9/4d/425162c3d88af0d190c4dc4f940402cc6dd44d934359a37f50da6b7e4672/pydantic_core-2.50.2-cp315-cp315t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bb6d49f00e2babd40af4889d6b9f4bf50879f522dd4e2e22cb705cac5e0c5e8e", size = 2399300, upload-time = "2026-10-29T16:34:11.462Z" }, + { url = "https://files.pythonhosted.org/packages/2b/fe/2882bddf2e2038c8f41fa69f16ddeb6eeb1c002cc0cc0eb2157f73bb34e9/pydantic_core-2.50.2-cp315-cp315t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:6d47b2d0e00e030e0ebdb08115a37da7294e7a6d196d134a77ed7ee6c142284b", size = 2462672, upload-time = "2026-10-29T16:34:12.79Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ac/d7e6bfc6a95573647d1a699e19228dd99914ae6aab79a2bec293a038e980/pydantic_core-2.50.2-cp315-cp315t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:95838be125133fa314753f8cc5168f7c41e3a9dd5eef5383dbbbeed511bd4853", size = 2246293, upload-time = "2026-10-29T16:34:14.065Z" }, + { url = "https://files.pythonhosted.org/packages/74/64/97473ccaeb4ae5eb338162bd8479af121484e67f7078499730e3ee0a5592/pydantic_core-2.50.2-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:2d4a043c820363359e40ac96270e1915e5376e116be1f59cee0701775de3e376", size = 2259507, upload-time = "2026-10-29T16:34:15.391Z" }, + { url = "https://files.pythonhosted.org/packages/48/15/78a9b7a6a0d0679ce1e46cdd38ff95afd18dd2d6a01ed87c80a01bc003f7/pydantic_core-2.50.2-cp315-cp315t-musllinux_1_1_aarch64.whl", hash = "sha256:57bccd3e1128736c792094da1feac6da46ec3feb1957ef649a9b3e4f8de6fa04", size = 2303550, upload-time = "2026-10-29T16:34:17.162Z" }, + { url = "https://files.pythonhosted.org/packages/39/ba/b697173f82e99cdcf5ec6654b2edb66a00f2f92ef9d9a168861fca3fcded/pydantic_core-2.50.2-cp315-cp315t-musllinux_1_1_armv7l.whl", hash = "sha256:24120c644322a35b5eb765416ac8442214c45689e255f5fc6e761e7e7c743c8b", size = 2474919, upload-time = "2026-10-29T16:34:18.841Z" }, + { url = "https://files.pythonhosted.org/packages/71/10/986be76723784ae87f9664658fae39df340eaa21681cea95b6339d2e1b3e/pydantic_core-2.50.2-cp315-cp315t-musllinux_1_1_x86_64.whl", hash = "sha256:b1adf2f37521b578c438f6ec61d1c1d0c20b076863ddd5d8b6f3ab658857db3f", size = 2509095, upload-time = "2026-10-29T16:34:20.16Z" }, + { url = "https://files.pythonhosted.org/packages/5f/0b/38dbd38c67de7642f87348da70122b89ca4c5fe8227cfdd5cc00c1cdb454/pydantic_core-2.50.2-cp315-cp315t-win32.whl", hash = "sha256:d79aaa468193c1bed6b0560d3c5c9f9e369e3efb0b128b38a2537e2d51d42773", size = 2096972, upload-time = "2026-10-29T16:34:21.715Z" }, + { url = "https://files.pythonhosted.org/packages/7a/df/154baf8413b08d6daf2f5dec211c303ec6bed50c032717f354f8dd85c994/pydantic_core-2.50.2-cp315-cp315t-win_amd64.whl", hash = "sha256:cc488daac19e6f5292180fac5e0ef7efffabeef4e096af9a17a75a7d3d6781f6", size = 2226659, upload-time = "2026-10-29T16:34:23.177Z" }, + { url = "https://files.pythonhosted.org/packages/b5/17/eea7a1e7d98a79ef11b6d31748b70c58f8723f87d7ee42edbb6a101f6245/pydantic_core-2.50.2-cp315-cp315t-win_arm64.whl", hash = "sha256:91315aea7adb51821d4a3378ede953bfdd76e3bf71551de4a82d7638cef7dc02", size = 2166387, upload-time = "2026-10-29T16:34:24.433Z" }, + { url = "https://files.pythonhosted.org/packages/f6/82/ec0384d2a74415aeef7fcd032d29af84a98da0ca25cfb4937b10a2ac78eb/pydantic_core-2.50.2-graalpy311-graalpy242_311_native-macosx_10_12_x86_64.whl", hash = "sha256:adec010c824290d4ca87047e8d8bfa4f85ac29f545f326cd5321696805d311ed", size = 2154528, upload-time = "2026-10-29T16:34:28.022Z" }, + { url = "https://files.pythonhosted.org/packages/8c/b4/46483477921934aa31eec9cb86ba95d2f620f4c71da749024c2e3b6e8203/pydantic_core-2.50.2-graalpy311-graalpy242_311_native-macosx_11_0_arm64.whl", hash = "sha256:f47c1349c3b4274aeb18459d54244881a5c0dee0fdccedffca45704ba5c9e0a0", size = 2072173, upload-time = "2026-10-29T16:34:29.771Z" }, + { url = "https://files.pythonhosted.org/packages/4a/16/c1eb6bdd67c9d5f42b290abb86948d8de288bdf4aeca06c588c3cfe6100b/pydantic_core-2.50.2-graalpy311-graalpy242_311_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4ee64baeab403b9de9c92846c5c1abec28ffb046cbc023bfae059897841f88af", size = 2116695, upload-time = "2026-10-29T16:34:31.103Z" }, + { url = "https://files.pythonhosted.org/packages/ae/67/ccd8294730d9335c687facbdfd77515fa3b323e9bbb042c5d63addc6f5f8/pydantic_core-2.50.2-graalpy311-graalpy242_311_native-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:16ec8e07c37f02dcf68939cc7f202ba9a148cc155ee2acf22d337e10b24c2cb7", size = 2263561, upload-time = "2026-10-29T16:34:32.901Z" }, + { url = "https://files.pythonhosted.org/packages/64/4d/23560b11366b547e3e68a3b8f9c02557cee707effa54fd39dbb3c4fff1fa/pydantic_core-2.50.2-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:d18d56c1ec63b304f4bb3c7db7e0d311e61cca1b1c944590a4b13ac39b2ca92b", size = 2204868, upload-time = "2026-10-29T16:34:34.745Z" }, + { url = "https://files.pythonhosted.org/packages/06/58/b9ddfaad189143d6568627166a730b6624ca90bd9a9a4af4854df88d444b/pydantic_core-2.50.2-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:41ed8abeffda6a880207fdc0cd1343a448cec3cc6b38b53f730c0745f745292d", size = 2049162, upload-time = "2026-10-29T16:34:36.186Z" }, + { url = "https://files.pythonhosted.org/packages/8b/20/99d259bf7835b2f13c6d0b3eb7bcf669fb6349986736fa7a8308a9e620b0/pydantic_core-2.50.2-graalpy312-graalpy250_312_native-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b7abcfaf66c1dc14c5ed928c349614f223c972a8b021b4be9548dbea6c817371", size = 2112135, upload-time = "2026-10-29T16:34:37.777Z" }, + { url = "https://files.pythonhosted.org/packages/9b/ca/652c8fe599abacafd852479059d209e608596ad3de82f1bff22e9f0f02fe/pydantic_core-2.50.2-graalpy312-graalpy250_312_native-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9e7460abce637f90e37f8c443559fbd687c38884d05cb69ef265e634945f4324", size = 2270339, upload-time = "2026-10-29T16:34:39.039Z" }, + { url = "https://files.pythonhosted.org/packages/18/9b/d240307fd6882a93a88bf038ff07e1a6dcac0e88f41951fe92c9b614f0b6/pydantic_core-2.50.2-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b583ddeee6a6bb5bbc04462167c68034913221139d52d9f155ca6d1637a2fdcf", size = 2157909, upload-time = "2026-10-29T16:34:40.355Z" }, + { url = "https://files.pythonhosted.org/packages/30/e5/d336fb654f8f1584b4a20d71f92c2a966419bc5eafffd36848d8cb1a916d/pydantic_core-2.50.2-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:5ab5738c39b25b5dc5a721270e2269a2f5e86e614375e6c07ee6caab8cbc0f2f", size = 2075773, upload-time = "2026-10-29T16:34:41.761Z" }, + { url = "https://files.pythonhosted.org/packages/38/08/18203f64a405f11c3e4d569c9f49ad7a0b5901cd5fa2dff2436d28531c60/pydantic_core-2.50.2-pp311-pypy311_pp73-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:21a902e546032c82b7275552345a2342d862e0541aea7226c91067c396e68b3f", size = 2277290, upload-time = "2026-10-29T16:34:42.952Z" }, + { url = "https://files.pythonhosted.org/packages/9e/c4/a4e0ae45ad1554c38caa93e200fdd08e74d2c0149b4242c78b2475903379/pydantic_core-2.50.2-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:92ada606285dab054e40848a951f583c537cde1e54701ea1305ec0096877012d", size = 2265597, upload-time = "2026-10-29T16:34:44.244Z" }, + { url = "https://files.pythonhosted.org/packages/99/20/304baf7724ac137b921ce793e4b686cf4cddc431da4888e5419e7bc7374f/pydantic_core-2.50.2-pp311-pypy311_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:c1b65a42afc73b39e6ae908ec7b9c3b9898676a7b15ce4c66d4965f7071007c8", size = 2289092, upload-time = "2026-10-29T16:34:45.55Z" }, + { url = "https://files.pythonhosted.org/packages/77/6f/0fe5ac160718d75f2f9729bb31aa9a349dadd0d32886b8c0ecc253629c46/pydantic_core-2.50.2-pp311-pypy311_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:c324a7e0c0012e3974053f81a270d8f1aa23227571f4ddd3254c911bb356459b", size = 2458417, upload-time = "2026-10-29T16:34:46.827Z" }, + { url = "https://files.pythonhosted.org/packages/43/44/042cbd7e46f00f45aea36496ca8bdb6b1136c2ec4063875a25286c2ba8fc/pydantic_core-2.50.2-pp311-pypy311_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:cb8d2d7b07cbe2d7488de7e53671f836c4f4a8032dcda079df33dc1b7e2397c0", size = 2492296, upload-time = "2026-10-29T16:34:48.374Z" }, + { url = "https://files.pythonhosted.org/packages/cb/8e/e8aef16e587215a1795dbe991e41006003aef1f1b6f554361f3a6edd585a/pydantic_core-2.50.2-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:7c6e1bd6cadae13958e52897ef020e85c9916a95917149fca463bb0c0421a7c6", size = 2323090, upload-time = "2026-10-29T16:34:50.008Z" }, + { url = "https://files.pythonhosted.org/packages/21/36/d083f973e28c5718f9d9d819c0b8171df1526124e8c3709bd55ddf1d4244/pydantic_core-2.50.2-pp311-pypy311_pp80-macosx_10_12_x86_64.whl", hash = "sha256:f078e276848bc23d1f92f46fc88d5b9cbb824b9acc60d9e07116620e502e16a9", size = 2157909, upload-time = "2026-10-29T16:34:51.579Z" }, + { url = "https://files.pythonhosted.org/packages/0c/4b/e2eb5b51f46411ceb80451a7bf4aee215fd84012eeba22a183b4699006b5/pydantic_core-2.50.2-pp311-pypy311_pp80-macosx_11_0_arm64.whl", hash = "sha256:3435c443da7510a6de1a30c68beae338852a11f0440cc8320ea756a162f38dbe", size = 2075771, upload-time = "2026-10-29T16:34:53.469Z" }, + { url = "https://files.pythonhosted.org/packages/d5/99/e9703785468d1e644f19d602985b722ff97cc8ca67389e2d79f8fb562cfa/pydantic_core-2.50.2-pp311-pypy311_pp80-manylinux_2_28_x86_64.whl", hash = "sha256:b5675a12a7b67063fe3ca187e735b0463cf13fabc10166ae4d4b2f775fd0632d", size = 2265708, upload-time = "2026-10-29T16:34:54.662Z" }, + { url = "https://files.pythonhosted.org/packages/bd/d7/079d3d36aa6ee0333847d968d91ff185837541741d3c58ed0316103309bf/pydantic_core-2.50.2-pp311-pypy311_pp80-win_amd64.whl", hash = "sha256:f5ba7ef10ce82737e173fa95cafa1c8210918f7e653715b2c7a7a31877a74848", size = 2323087, upload-time = "2026-10-29T16:34:56.176Z" }, ] [[package]] @@ -320,18 +355,18 @@ wheels = [ [[package]] name = "tzdata" -version = "2026.3" +version = "2026.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/92/ff/5a28bdfd8c3ebec42564ac7d0e54ca3db65044a9314a97f9564fa7a1e926/tzdata-2026.3.tar.gz", hash = "sha256:4a1518b8993086a7982523e071643f3c0e5f213e75b21318e78bcabfff9d1415", size = 198674, upload-time = "2026-07-10T08:50:37.887Z" } +sdist = { url = "https://files.pythonhosted.org/packages/7a/29/6a1391d31cd00ff9e927215a224a880e1e84e826b64ba80a499e51c074d8/tzdata-2026.6.tar.gz", hash = "sha256:85d2cd9c09f81f0bb29db27759fc83af4f1e620efb814f8c5bf8b4cc4feece6d", size = 201017, upload-time = "2026-10-28T09:57:09.137Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/e5/6d/b53b99a9f2766d095985947a5782f1702cabb129a34f7a802d7197af832f/tzdata-2026.3-py2.py3-none-any.whl", hash = "sha256:dc096730c87af6cab1b171c9d532be840741ff5d459015e7f6947bd7d7e54931", size = 348168, upload-time = "2026-07-10T08:50:36.46Z" }, + { url = "https://files.pythonhosted.org/packages/0a/66/9a06c2227fedfd4919f0eaaa8b94377d9730882a7e4f95823c9a331ab5e1/tzdata-2026.6-py2.py3-none-any.whl", hash = "sha256:0a10eec6e13ef16b627fabed9a5f2ba61a62b1c67f327305f4e7e412a70b4aec", size = 348210, upload-time = "2026-10-28T09:57:07.276Z" }, ] [[package]] name = "urllib3" -version = "2.7.0" +version = "2.8.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/05/b17359e1cefb4f909b5e40b1b90a496d987258916dbbf88e842c729f510e/urllib3-2.8.0.tar.gz", hash = "sha256:63bf2ead4c879426ebf22ef2a781eeb4aa3b4ae798a0435506f8687fd5bb9b63", size = 458972, upload-time = "2026-09-15T19:29:36.253Z" } wheels = [ - { url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" }, + { url = "https://files.pythonhosted.org/packages/92/9d/c4e665119135114480843e7ab388fa94d8480650450e6f8e26b70d323a4c/urllib3-2.8.0-py3-none-any.whl", hash = "sha256:0cf3cae568d36aa9576b28dfb35f11328f1cb974ca7647d9475ebb86c75ac6e3", size = 135717, upload-time = "2026-09-15T19:29:34.577Z" }, ]