v1.23.0b0
Pre-release1.23.0b0 - 2026-07-29
Added
- Added the Infrahub deployment ID to the
infrahubctl infocommand output and aget_server_information()method (returning the server version and deployment ID) on the async and sync clients. (#1017) - Added a
--dependenciesflag toinfrahubctl marketplace get. When downloading a schema or a collection, it now also resolves and downloads the schemas they depend on, via the marketplace API. Dependencies are grouped by the collection they belong to: prerequisite collections (and, for a single schema, dependencies that are members of a collection) are placed in their own<collection>/directory, while dependencies that belong to no collection land in the output root. Referenced kinds the marketplace cannot resolve are reported as unresolved dependencies. A schema that already exists in the output directory is reconciled to a single file rather than duplicated across directories — kept by default, or overwritten with the new-y/--yesflag. (#1117) - Added transparent retry of HTTP 429 (rate-limited) responses on both
InfrahubClientandInfrahubClientSync. Retries use jittered exponential backoff and honour a server-providedRetry-Afterheader (delta-seconds or HTTP-date). The behaviour is tunable through four newConfigfields (rate_limit_retry_enabled,rate_limit_max_retries,rate_limit_backoff_base,rate_limit_backoff_max), and a newRateLimitErrorexception is raised when retries are exhausted. (#1124) - Added support for tagging SDK requests with a priority via a new
X-Priorityheader. APriorityenum (high,medium,low) is available frominfrahub_sdk.constants; setConfig.priority(env varINFRAHUB_PRIORITY) for a client-wide default emitted on every request, or passpriority=to individual operations to override it per request. When unset, no header is sent. Works identically onInfrahubClientandInfrahubClientSync. (#1151) - Added
infrahubctl marketplace list,search, andshowcommands for browsing schemas and collections on the Infrahub Marketplace. - Added
retry()andcancel()methods to the task manager. TheTaskmodel now exposesavailable_actionsalong withcan_retry/can_cancelhelpers. - Added an opt-in
include_diagnosticsflag to the task manager'sall(),filter(), andget()methods. When enabled, tasks expose anerrorfield, andwebhook-sendtasks are returned asWebhookDeliveryTaskinstances carryinghttp_request/http_responsedelivery details. - Added support for the new
IPAddressattribute kind. Values are exposed as bareipaddress.IPv4Address/IPv6Addressobjects (no prefix) and serialized to a bare-address string when writing, alongside the existingIPHostandIPNetworkkinds. - The request priority (
X-Priorityheader) can now be carried on the client'sRequestContextvia a newpriorityfield, alongside the existing client-wideConfig.prioritydefault and per-callpriority=override. Resolution precedence is per-callpriority=>request_context.priority>Config.priority> no header. The priority is emitted as a header only and is never included in the mutation body. Works identically onInfrahubClientandInfrahubClientSync.
Changed
-
Paginated queries generated by
all(),filters(),get()and resource pool allocation lookups now passoffsetandlimitas GraphQL variables instead of inlining them in the query text. The query document stays identical across pages, allowing the Infrahub server to reuse its cached query analysis, and the query is now rendered once per call instead of once per page.generate_query_dataalso accepts variable placeholder strings (for example"$offset") for itsoffsetandlimitarguments. -
Raised the default
Config.rate_limit_max_retriesfrom 5 to 10, so a request shed with HTTP 429 keeps retrying (honouringRetry-After) for longer before raisingRateLimitError. This lets background work ride out a longer burst of server-side backpressure. Callers that prefer to give up sooner can lower the value. -
The hand-maintained schema models in
infrahub_sdk.schemaare now backed by the generated write/read contract (infrahub_sdk.schema.generated). Public names, import paths, and behavior methods are unchanged, but a few defaults and constraints now match the server contract:AttributeKind.STRINGhas been removed. It was deprecated andkind="String"was already rejected server-side; useAttributeKind.TEXTinstead.- Write and read models drop unknown fields silently (
extra="ignore"). A submitted field that is not part of the write contract — read-level, internal, or a typo — is dropped rather than rejected, and a read model tolerates additional fields returned by a newer server. - Write-model defaults now match the server contract: relationship
min_count/max_countdefault to0(wasNone), nodebranchdefaults to"aware",generate_profiledefaults toTrue, andgenerate_templatedefaults toFalse. This changes the round-trip output of programmatically-built schemas.
Constructing
AttributeSchema(name=..., kind=AttributeKind.TEXT, ...),NodeSchema,GenericSchema,RelationshipSchema,SchemaRoot, and the read-side*APImodels continues to work unchanged.
Fixed
- Fixed several cases where
InfrahubClientSynchad drifted fromInfrahubClient: syncbranch.mergenow applies the same 120-second minimum timeout floor as the async client, and synccreate(allow_upsert=True)now excludes thehfidfrom the mutation payload to avoid server-side upsert overhead. Also corrected an incorrect "feature not supported" message on async artifact fetch and a resource-pool error message typo. - Import
pyarrowlazily in the line-delimited JSON importer so thatinfrahubctlcommands other thanobject loadno longer require thectlextra (and its heavypyarrowdependency) to be installed.