Releases: SyntaxArc/ArchiPy
Releases · SyntaxArc/ArchiPy
Release list
4.17.0
Added
Adapters - Redis
- Vector Range Search - Added vector range queries via
RangeQueryDTOandSearchQueryDTO.from_range(), executed through sync and async RediSearch handles with optional metadata filters and score fields. - Vector Query Runtime Tuning - Added
VectorQueryRuntimeDTOfor per-query KNN, range, and hybrid tuning (ef_runtime,epsilon,batch_size,search_window_size,hybrid_policy,use_search_history,search_buffer_capacity, and cluster-onlyshard_k_ratio). - SVS-VAMANA Index Support - Extended vector index creation with
VectorAlgorithm.SVS_VAMANA, including compression, construction window, graph degree, search window, training threshold, and reduce attributes validated at schema time. - RediSearch Cluster Support - RediSearch handles now work on standalone and cluster clients; cluster index listing routes keyless admin commands to a target node, and hash-tagged key prefixes keep indexed documents in a single slot.
- Index Listing - Added
list_search_indexes()on sync and async Redis adapters, backed bylist_redis_search_indexes/list_redis_search_indexes_async.
Models - DTOs
- Vector Query DTOs - Added
VectorQueryRuntimeDTOandRangeQueryDTO; extendedKnnQueryDTOandSearchQueryDTOwithrange,runtime,is_range, andfrom_range()factory helpers.
Models - Types
- Vector Search Types - Added
VectorType(BFLOAT16,FLOAT16,FLOAT32,FLOAT64,INT8,UINT8),VectorCompression(LVQ and LeanVec variants),VectorHybridPolicy(BATCHES,ADHOC_BF), andUseSearchHistory(OFF,ON,AUTO); extendedVectorAlgorithmwithSVS_VAMANA.
Changed
Adapters - Redis
- Vector Field Schema Validation -
VectorFieldConfignow rejects algorithm-incompatible tuning attributes (FLAT vs HNSW vs SVS-VAMANA) and limits SVS-VAMANA toFLOAT16andFLOAT32vector types.
Models - DTOs
- Vector Field Configuration - Extended
VectorFieldConfigwithvector_type, HNSW tuning (m,ef_construction,ef_runtime,epsilon), and SVS-VAMANA tuning fields for index-time configuration.
Tests
Tests - Redis Adapter
- Vector Search Scenarios - Extended
features/redis_adapter.featureand step definitions with SVS-VAMANA index creation, vector range search, and runtime-tuning coverage for sync RediSearch operations.
Documentation
Tutorials - Redis
- Vector Search Guide - Expanded the Redis adapter tutorial with SVS-VAMANA and HNSW tuning, cluster index prefixes, vector range queries, hybrid search on cluster, and
VectorQueryRuntimeDTOexamples.
API Reference
- Updated mkdocstrings entries for Redis search DTOs and
redis_search_typesto cover new vector types, range queries, and runtime parameters.
Full Changelog: 4.16.0...4.17.0
4.16.0
Added
Adapters - Redis
- RediSearch Support - Added index-bound RediSearch operations to sync and async Redis adapters via
search_index(name), returningRedisSearchHandle/AsyncRedisSearchHandlebacked byredis.commands.search.- Index lifecycle:
create_index,drop_index,info,alter_schema_add, and alias management (add_alias,update_alias,delete_alias). - Document upsert for HASH and JSON indexes (
upsert_hash,upsert_json, and matching DTO helpers) with optional vector fields. - Query execution: full-text
search, vector KNN, hybrid text+KNN, andaggregatevia typed DTOs. - New ports:
RedisSearchHandlePortandAsyncRedisSearchHandlePortinsearch_ports.py; mock search handles updated for BDD coverage.
- Index lifecycle:
Configs
- FastAPI Middleware Settings - Added opt-in
FastAPIConfigflags for GZip, TrustedHost, and HTTPS redirect middleware, wired intoAppUtils.create_fastapi_appviaFastAPIUtils.setup_gzip,setup_trusted_host, andsetup_https_redirect.- New
.envvariables:FASTAPI__GZIP_MIDDLEWARE_IS_ENABLED,GZIP_MIDDLEWARE_MINIMUM_SIZE,GZIP_MIDDLEWARE_COMPRESSLEVEL,TRUSTED_HOST_MIDDLEWARE_IS_ENABLED,TRUSTED_HOST_MIDDLEWARE_ALLOWED_HOSTS,TRUSTED_HOST_MIDDLEWARE_WWW_REDIRECT,HTTPS_REDIRECT_MIDDLEWARE_IS_ENABLED. - TrustedHost middleware is skipped with a warning when enabled but
ALLOWED_HOSTSis empty.
- New
Models - DTOs
- RediSearch DTOs - Added typed DTOs under
archipy.models.dtos.redis.searchfor index schema (IndexSchemaDTO,IndexFieldConfig), document upsert (HashDocumentUpsertDTO,JsonDocumentUpsertDTO), search (SearchQueryDTO,KnnQueryDTO), aggregation (AggregationDTO), and results (SearchResultDTO).
Models - Types
- RediSearch Types - Added
VectorDistanceMetric(COSINE,L2,IP),VectorAlgorithm(FLAT,HNSW), andRedisIndexType(HASH,JSON) enums for index and vector field configuration.
Helpers - Utils
- FastAPI Middleware Setup - Added
FastAPIUtils.setup_gzip,setup_trusted_host, andsetup_https_redirect, registered increate_fastapi_appafter CORS and before metric/APM middleware.
Tests
Tests - App Utils
- FastAPI Middleware Scenarios - Extended
features/app_utils.featureandfeatures/steps/app_utils_steps.pywith opt-in GZip, TrustedHost, and HTTPS redirect middleware coverage.- GZip compresses responses above
minimum_sizeand skips small payloads. - TrustedHost allows configured hosts, rejects invalid
Hostheaders, and skips registration whenALLOWED_HOSTSis empty. - HTTPS redirect issues
307for HTTP requests when enabled; middleware absent when disabled.
- GZip compresses responses above
Tests - Redis Adapter
- RediSearch Feature Suite - Added sync and async BDD scenarios in
features/redis_adapter.feature(container/Redis Stack only) for index creation, HASH/JSON document upsert, KNN and hybrid search, aggregation, schema alteration, alias management, document deletion, and index drop.
Chore
- Release Workflow - Removed local
make bump-patch/bump-minor/bump-majortargets and related docs; releases are tagged onmaster(for example4.16.0) and publish is triggered by pushing the semver tag.
Dependencies
- Python Packages - Bumped
jdatetime5.3.0→6.0.1,boto31.43.46→1.43.48,httpx2[socks]2.5.0→2.7.0, andsentry-sdk2.64.0→2.65.0. - Dev Tools - Updated
ty0.0.58→0.0.59,boto3-stubs1.43.46→1.43.48,types-cachetools7.0.0.20260518→7.0.0.20260713, and pinnedtypes-protobuf>=7.34.1.20260518.
Documentation
Tutorials - Redis
- RediSearch Guide - Expanded the Redis adapter tutorial with index schema setup, HASH/JSON document upsert, full-text/KNN/hybrid search, aggregation, alias management, and Redis Stack requirements.
API Reference
- Added mkdocstrings entries for RediSearch ports/handles, search DTOs, and
redis_search_types.
Full Changelog: 4.15.0...4.16.0
4.15.0
Added
Configs
- FastAPI Rate Limit Settings - Added
FastAPIRateLimitConfigand theBaseConfig.FASTAPI_RATE_LIMITattribute, centralizing trusted-proxy resolution, Redis key layout, fail-open/closed behavior,X-RateLimit-*headers, and JWT-based identity forFastAPIRestRateLimitHandler.- New
.envvariables:FASTAPI_RATE_LIMIT__TRUSTED_PROXY_IPS,ALLOW_PRIVATE_IPS,KEY_PREFIX,FAIL_CLOSED,SKIP_METHODS,HASH_QUERY_PARAM_VALUES,REQUIRE_IDENTIFIER_FOR_QUERY_PARAMS,REJECT_UNKNOWN_CLIENT,RATE_LIMIT_HEADERS,IDENTITY_FROM_ACCESS_TOKEN.
- New
- gRPC Rate Limit Settings - Added
GrpcRateLimitConfigand theBaseConfig.GRPC_RATE_LIMITattribute, controlling Redis key layout, fail-open/closed behavior, skipped health-check methods, and JWT-based identity for the new gRPC rate-limit interceptors.- New
.envvariables:GRPC_RATE_LIMIT__IS_ENABLED,FAIL_CLOSED,IDENTITY_FROM_ACCESS_TOKEN. - When
IS_ENABLEDisTrue,AppUtils.create_grpc_appandAppUtils.create_async_grpc_appregister the matching interceptor automatically.
- New
Models - DTOs
- Rate Limit Window DTO - Added
RateLimitWindowDTO(calls_count,window_ms) with akey_suffixproperty producing a stable Redis key segment per tier. Shared by the FastAPI handler and both gRPC interceptors.
Helpers - Decorators
- gRPC Rate Limit Decorator - Added
grpc_rate_limit_decorator, attaching one or more rate-limit windows to a servicer method without wrapping it. Stacking the decorator declares independent burst and sustained tiers, all enforced in declaration order byGrpcServerRateLimitInterceptor.
Helpers - Utils
- Rate Limit Utils - Added
RateLimitUtilswithcompute_rate_limit_window(validatescalls_count >= 1and a positive combined window) andget_rate_limit_windows_from_callable(reads stacked windows off a function or bound method). - gRPC Interceptor Auto-Registration - Added
GrpcAPIUtils.setup_rate_limit_interceptorandAsyncGrpcAPIUtils.setup_rate_limit_interceptor, wired intoAppUtils.create_grpc_app/create_async_grpc_appto append the sync or async rate-limit interceptor whenGRPC_RATE_LIMIT.IS_ENABLEDisTrue.
Helpers - Interceptors
- gRPC Rate Limit Interceptors - Added
GrpcServerRateLimitInterceptorandAsyncGrpcServerRateLimitInterceptor, enforcing decorator-declared Redis-backed windows per RPC.- Uses atomic
INCREX(saturate=True,enx=True, millisecondpxexpiry) to avoid check-then-act races. - Identity resolution: custom
identifier_fn, JWTsubclaim from a Bearer token in invocation metadata (IDENTITY_FROM_ACCESS_TOKEN), falling back to parsed peer host (ipv4:/ipv6:/unix:prefixes handled). - Breached windows abort with
RESOURCE_EXHAUSTED(viaRateLimitExceededError) including a computedretry_after; Redis/identity failures abort withUNAVAILABLE(viaUnavailableError) whenFAIL_CLOSEDisTrue. SKIP_METHODSexcludes full gRPC method names (health checks by default) from rate limiting.
- Uses atomic
- gRPC Identity Helpers - Added
archipy.helpers.interceptors.grpc.rate_limit.identifierswithinvocation_metadata_to_dict,extract_bearer_token_from_metadata, andresolve_jwt_access_token_sub_from_metadata, verifying Bearer tokens viaJWTUtilsand returning thesubclaim. - FastAPI Identity Helpers - Added
archipy.helpers.interceptors.fastapi.rate_limit.identifierswithextract_bearer_tokenandresolve_jwt_access_token_sub, used byFastAPIRestRateLimitHandlerto bucket authenticated requests by user instead of IP.
Changed
Helpers - FastAPI Rate Limit
- Handler Rewrite -
FastAPIRestRateLimitHandlergained config-driven behavior sourced fromFastAPIRateLimitConfig, with per-instance overrides for every setting.- Trusted Proxy Chain Resolution - Client IP is only taken from forwarded headers (
Forwarded,X-Forwarded-For,X-Real-IP,CF-Connecting-IP,True-Client-IP) when the immediate peer is a configured trusted proxy (TRUSTED_PROXY_IPS, CIDR or exact match, or*to trust all peers).X-Forwarded-Foris walked right-to-left with nginxreal_ip_recursivesemantics, skipping trusted hops and stripping port suffixes. - JWT-Based Identity -
identity_from_access_token(defaultTrue) verifies a Bearer token viaJWTUtilsand buckets bysub, falling back to client IP when the token is missing or invalid. - Stacked Windows - New
additional_windowsparameter enforces extraRateLimitWindowDTOtiers alongside the primary window; all tiers must pass, and the most constrained remaining quota is reported in headers. - Rate Limit Headers -
rate_limit_headers(defaultTrue) attachesX-RateLimit-Limit/X-RateLimit-Remainingon allowed responses and addsRetry-Afteron429s. - Unknown Client Handling -
reject_unknown_client(defaultTrue) returns503when no client identity can be resolved instead of silently allowing the request. - Query Param Safety -
require_identifier_for_query_params(defaultTrue) raisesInvalidArgumentErrorat construction whenquery_paramsis set withoutidentifier_fnoridentity_from_access_token, preventing client-controlled per-user quota targeting. - Redis Failure Handling -
fail_closed(defaultTrue) returns503on Redis connection errors instead of allowing requests through.
- Trusted Proxy Chain Resolution - Client IP is only taken from forwarded headers (
Tests
Tests - gRPC Rate Limit
- New Feature Suite - Added
features/grpc_rate_limit.featureandfeatures/steps/grpc_rate_limit_steps.pycovering sync and async interceptor modes: within-limit success, over-limitRESOURCE_EXHAUSTEDrejection, undecorated methods bypassing limits, stacked burst/sustained windows, per-JWT-user isolation,UNAVAILABLEabort when Redis is down and fail-closed, andInvalidArgumentErroron invalid window construction.
Tests - FastAPI Rate Limit
- Expanded Scenario Coverage - Extended
features/fastapi_rate_limit.featureandfeatures/steps/fastapi_rate_limit_steps.py.X-RateLimit-Limit/X-RateLimit-Remainingheader assertions on allowed and rejected responses.- Spoofed
X-Real-IPis ignored without a configured trusted proxy; distinct clients are isolated only behind trusted proxies. - Multi-hop
X-Forwarded-Forchains, injected entries ahead of the real client, port-suffix stripping, and multipleX-Forwarded-Forheader fields combined per RFC 9110. X-Real-IPprecedence rules whenX-Forwarded-Foris also present.503on Redis unavailability withfail_closed;InvalidArgumentErrorwhenquery_paramsis set without an identifier.- JWT-based user isolation, fallback to client IP when a JWT is missing or invalid/expired.
Documentation
Tutorials - Decorators
- gRPC Rate Limit Decorator - Added usage guide for
grpc_rate_limit_decorator, including stacked burst/sustained window examples and interceptor registration.
Tutorials - Interceptors
- gRPC Rate Limiting - Added a
GrpcServerRateLimitInterceptor/AsyncGrpcServerRateLimitInterceptorguide coveringGRPC_RATE_LIMITconfig, automatic registration viaAppUtils, JWT-based identity, and health-check exclusions. - FastAPI Rate Limiting - Expanded the
FastAPIRestRateLimitHandlerguide with trusted-proxy configuration, JWT identity, stackedadditional_windows, and rate-limit header reference.
Getting Started
- Complete User Example / Project Structure - Updated to reference the new rate-limiting configuration and helper modules.
API Reference
- Added mkdocstrings entries for
FastAPIRateLimitConfig,GrpcRateLimitConfig,grpc_rate_limitdecorator,grpc.rate_limitinterceptors and identifiers,RateLimitUtils, andRateLimitWindowDTO.
Full Changelog: 4.14.0...4.15.0
4.14.0
Added
Adapters - Elasticsearch
- Document Scanning - Added
scan()toElasticsearchPortandasync scan()toAsyncElasticsearchPort, delegating toelasticsearch.helpers.scanandelasticsearch.helpers.async_scanfor scroll-based iteration over large result sets without manual scroll lifecycle management. - Bulk Action Types - Added
ElasticsearchBulkActionTypeandElasticsearchBulkResultTypealiases for helper-format bulk actions and(success_count, error_count_or_error_list)return tuples.
Adapters - Redis
- INCREX Window Counter - Added
incrextoRedisPortandAsyncRedisPort(and adapters/mocks), wrapping the Redis 8.8INCREXcommand for atomic counter increments with optional bounds (lbound,ubound,saturate), expiration (ex,px,exat,pxat,persist,enx), and float or integer step sizes (byfloat,byint). - Array Data Structure - Added Redis 8.8 array commands to sync and async ports and adapters.
arsetto write contiguous values at a starting index.argetto read a single index.arlento return the array length.ardelto delete one or more indices.arringto append into a fixed-size ring buffer.
- Sorted Set Aggregators - Added
zunionandzinterto sync and async ports and adapters, including support for the Redis 8.8COUNTaggregator that scores members by the number of input sets containing them (or weighted sum when per-set weights are provided). - Runtime Configuration - Added
config_setandconfig_getto sync and async ports and adapters for reading and updating Redis server parameters (for examplenotify-keyspace-eventsfor keyspace and subkey notifications).
Helpers - FastAPI Rate Limit
- Atomic Rate Limiting -
FastAPIRestRateLimitHandlernow uses RedisINCREXwithsaturate=True,enx=True, and millisecond expiry instead of separateGET/SET/INCRBY/PTTLcalls, eliminating check-then-act races under concurrent requests.
Changed
Adapters - Elasticsearch
- Bulk Helper Integration -
bulk()andasync bulk()now delegate toelasticsearch.helpers.bulkandelasticsearch.helpers.async_bulkinstead of the low-level clientbulkAPI.actionsaccepts anyIterable[ElasticsearchBulkActionType](generators supported) instead of requiring a materializedlist[dict[str, Any]].- Added
stats_onlyparameter to return only success and error counts. - Return type changed from
ElasticsearchResponseTypetoElasticsearchBulkResultType— a(success_count, error_count_or_error_list)tuple. Update callers that previously parsed the raw client response. - Failures raise
BulkIndexErrorwhenraise_on_erroris true (default helper behaviour).
Tests
Tests - Elasticsearch Adapter
- Bulk and Scan Scenarios - Added sync and async BDD scenarios for helper-format bulk operations (index, update, delete) and document scanning.
- Step Refactor - Updated Elasticsearch step definitions to assert helper bulk result tuples and scan hit counts.
Tests - Redis Adapter
- Redis 8.8 Feature Coverage - Added BDD scenarios for array operations (
arset,arget,arlen,ardel,arring),INCREXrate-limit semantics,ZUNION/ZINTERwithCOUNTaggregator, and hash subkey notifications viaconfig_set+PSUBSCRIBE. - Sync and Async Parity - New scenarios cover mock, container, and cluster adapter types for sync paths; container and cluster for async paths where applicable.
- Test Image - Bumped Redis test container image to
redis:8.8.0-alpinein.env.testto exercise Redis 8.8 commands.
Tests - FastAPI Rate Limit
- Rate Limit Feature Suite - Added
features/fastapi_rate_limit.featurewith scenarios for within-limit success, 429 rejection withRetry-After, window expiry reset, and per-client isolation usingX-Real-IP.
Documentation
Tutorials - Elasticsearch
- Bulk and Scan Guides - Expanded the Elasticsearch adapter tutorial with helper-format bulk action generators,
stats_onlyusage,scan()/async scan()examples,BulkIndexErrortroubleshooting, and performance guidance for batch writes and large result iteration.
Tutorials - Redis
- INCREX Window Counter - Added sync and async
increx()examples, parameter reference, Redis 8.8 requirement, and cross-link to the FastAPI rate limiting guide.
Tutorials - Interceptors
- FastAPI Rate Limiting - Added a
FastAPIRestRateLimitHandlerdependency guide covering installation,Dependsusage,INCREX-backed atomic limiting, client identification headers, and per-query-parameter buckets.
Dependencies
- Python Packages - Bumped anyio
4.14.1→4.14.2. - Dev Tools - Updated ty
0.0.58→0.0.59and types-boto3 stubs7.0.0.20260518→7.0.0.20260713.
Full Changelog: 4.13.2...4.14.0
4.13.2
Fixed
Interceptors - FastAPI Metric
- Nested Router Path Templates - Resolved metric path template resolution for nested routers in FastAPI 0.137+.
- Added
_flatten_routes()helper to expand_IncludedRouterentries before route matching. - Uses
iter_route_contexts()for FastAPI >= 0.137.2, falls back toeffective_route_contexts()for 0.137.0–0.137.1.
- Added
Changed
Configs - ScyllaDB
- Default Replication Strategy - Changed
ScyllaDBConfig.REPLICATION_STRATEGYdefault fromSimpleStrategytoNetworkTopologyStrategywith default replication config{"datacenter1": 1}. Update environment files if usingSimpleStrategy.
Decorators
- Tracing & Deprecation - Removed redundant
wrapper.__wrapped__ = funcassignments fromcapture_transaction,capture_span,async_capture_transaction,async_capture_span, andmethod_deprecation_warning.
Models - Email DTOs
- Frozen Model Mutation - Use
object.__setattr__inEmailAttachmentDTOto support Pydantic v2 frozen model semantics.
Documentation
Tutorials
- Updated adapter tutorials for Elasticsearch, Email, Kafka, Keycloak, MinIO, PostgreSQL, Redis, ScyllaDB, SQLite, StarRocks, and Temporal.
Dependencies
- Test Containers - Bumped Keycloak
26.6.4→26.7.0, Kafka4.3.0→4.3.1, ScyllaDB2026.1.5→2026.2. - Python Packages - Updated fastapi
0.138→0.139, grpcio1.81.1→1.82.1, protobuf6.33.6→7.35.1, confluent-kafka2.14.2→2.15.0, boto31.43.36→1.43.46, sentry-sdk2.63.0→2.64.0, temporalio1.29.0→1.30.0, and other minor bumps. - Dev Tools - Updated ruff
0.15.18→0.15.21, ty0.0.52→0.0.58.
Full Changelog: 4.13.1...4.13.2
4.13.1
Added
Configs - Temporal
- SDK 1.29 Client Settings - Expanded
TemporalConfigwith client connection options aligned totemporalio1.29.- Added
CLIENT_IDENTITY,API_KEY,LAZY_CONNECT, keep-alive intervals, and client RPC retry fields. - Added
RPC_METADATAfor custom RPC headers. - Added
RETRY_INITIAL_INTERVALandRETRY_NON_RETRYABLE_ERROR_TYPESfor workflow/activity retry policies.
- Added
Adapters - Temporal
- Worker Tuning Configuration - Wired new worker settings from
TemporalConfigintoTemporalWorkerManager.- Added
WORKER_GRACEFUL_SHUTDOWN_SECONDS,WORKER_MAX_CACHED_WORKFLOWS,WORKER_DEBUG_MODE,WORKER_MAX_CONCURRENT_LOCAL_ACTIVITIES, andWORKER_DISABLE_EAGER_ACTIVITY_EXECUTION. WorkerHandle.stop()now defaults to the configured graceful shutdown timeout.
- Added
Changed
Adapters - Temporal
- Client Connection Wiring -
TemporalAdapter.get_client()now passes keep-alive, RPC retry, identity, API key, and RPC metadata toClient.connect. - Retry Policy Defaults - Workflow start/execute and activity helpers now include
initial_intervalandnon_retryable_error_typesfrom config.
Documentation
- Temporal Tutorial - Fixed install extra to
archipy[temporalio]and documented newTEMPORAL__*environment variables.
Tests
Tests - Temporal Adapter
- Extended Config Scenario - Added BDD coverage verifying client identity and worker debug mode flow from config into adapters.
Dependencies
- temporalio - Requires
temporalio>=1.29.0for expanded client and worker configuration support.
Full Changelog: 4.13.0...4.13.1
4.12.1
Added
Chore - Agent Skills
- Caveman Skills Bundle - Vendored Cursor agent skills under
.agents/skills/for terse AI-assisted development workflows.caveman— response-style skill with lite, full, and ultra intensity levels.cavecrew— decision guide for delegating to caveman-style subagents (investigator, builder, reviewer).caveman-commit— Conventional Commits message generator.caveman-compress— memory-file compression with CLI scripts, validation, and benchmark tooling.caveman-help,caveman-review,caveman-stats— help, diff review, and token-stats utilities.
- Skills Lockfile - Added
skills-lock.jsonto pin skill sources and content hashes fromJuliusBrussee/caveman.
Changed
Dependencies - FastAPI Compatibility
- FastAPI Pin Lift - Raised the
fastapiextra from>=0.136,<0.137to>=0.138.0, removing the upper bound
introduced in 4.11.1 now that the codebase is compatible with FastAPI 0.138+.
Dependencies
- Optional extras - Updated optional adapter dependency pins.
elastic-apm:>=6.26.1→>=6.26.2fastapi:fastapi[all]>=0.136,<0.137→fastapi[all]>=0.138.0minio:boto3>=1.43.34→>=1.43.36
- Dev group - Updated development tooling pins.
boto3-stubs:>=1.43.34→>=1.43.36ty:>=0.0.51→>=0.0.52
- Docs group - Updated documentation tooling pins.
pymdown-extensions:>=10.21.3→>=11.0
- Lockfile - Regenerated
uv.lockto align with the updatedpyproject.tomlconstraints.
Full Changelog: 4.12.0...4.12.1
4.12.0
Added
Adapters - MinIO
- Object Existence Check - Added
object_existstoMinioPortandMinioAdapterfor lightweight presence checks without downloading object content.- Returns
Truewhen the object key exists andFalsewhen it does not. - Cached for five minutes via
@ttl_cache_decoratorto reduce repeated HEAD requests.
- Returns
- Batch Object Deletion - Added
remove_objectsfor deleting multiple object keys in a single S3DeleteObjectscall.- Clears object-related caches after a successful batch delete.
- Object Tag Operations - Added tag management methods for per-object metadata used with lifecycle-based expiration.
set_object_tagsreplaces all tags on an existing object.get_object_tagsreturns the current tag mapping (empty dict when none are set).remove_object_tagsclears all tags from an object.
- Upload-Time Tags - Extended
put_objectandput_object_streamwith an optionaltags: dict[str, str] | Noneparameter so tags can be applied at upload time. - Bucket Lifecycle / TTL - Added lifecycle configuration methods for automatic object expiration.
set_bucket_lifecycleaccepts S3-format lifecycle rule dicts (MinioLifecycleRuleType).get_bucket_lifecyclereturns configured rules or an empty list when none are set.delete_bucket_lifecycleremoves all lifecycle rules from a bucket.
- Object Versioning - Added bucket versioning and version-level delete support.
set_bucket_versioningenables or suspends versioning on a bucket.get_bucket_versioningreturnsEnabled,Suspended, or an empty string when never configured.list_object_versionslists version entries and delete markers with normalized metadata (MinioObjectVersionType).remove_object_versionpermanently deletes a specific version byversion_id.
Changed
Adapters - StarRocks
- Type Ignore Cleanup - Removed redundant
# type: ignore[invalid-assignment]comments from StarRocks SQLAlchemy compiler patches, keeping only thety: ignoredirectives.
Documentation - MinIO
- Tutorial Expansion - Extended
docs/tutorials/adapters/minio.mdwith examples for object existence checks, batch deletion, object tags, and versioning workflows. - API Reference Clarification - Updated the MinIO adapter API reference to state that the concrete adapter wraps boto3 for S3-compatible storage.
Tests
Tests - MinIO Adapter
- Tag Scenarios - Added BDD coverage for upload-time tags, setting tags on existing objects, and removing all tags.
- Lifecycle Scenarios - Added scenarios for setting, verifying, and deleting bucket lifecycle rules.
- Existence and Batch Delete - Added scenarios for
object_existsbefore and after deletion, and forremove_objectsbatch cleanup. - Versioning Scenarios - Added end-to-end coverage for enabling versioning, uploading multiple versions, listing versions, and permanently deleting the oldest version.
Dependencies
- Core dependencies - Updated base package pins in
pyproject.toml.pydantic-settings:>=2.14.1→>=2.14.2
- Optional extras - Updated optional adapter dependency pins.
dependency-injection:dependency-injector>=4.49.0→>=4.49.1minio:boto3>=1.43.32→>=1.43.34parsian-ipg/parsian-ipg-async:zeep>=4.3.2→>=4.3.3
- Dev group - Updated development tooling pins.
boto3-stubs:>=1.43.32→>=1.43.34ruff:>=0.15.17→>=0.15.18ty:>=0.0.50→>=0.0.51
- Docs group - Updated documentation tooling pins.
mkdocstrings-python:>=2.0.4→>=2.0.5
- Lockfile - Regenerated
uv.lockto align with the updatedpyproject.tomlconstraints.
Full Changelog: 4.11.1...4.12.0
4.11.1
Fixed
Dependencies - FastAPI Compatibility
- FastAPI Upper Bound — Pinned
fastapito>=0.136,<0.137to prevent breakage from FastAPI 0.137+
which introduced incompatible changes with the current codebase.
Refactored
Tooling - Testing Execution Model
- Removed Parallel Behave Settings — Deleted
parallel = 8andparallel_scheme = "multiprocessing"from
[tool.behave]inpyproject.toml. Tests now run sequentially by default, aligning with the BDD convention
of isolated scenarios. - Updated AGENTS.md — Refreshed quick commands and dev setup instructions.
- Documentation Alignment — Brought
docs/getting-started/project_structure.mdin sync with current layout.
Full Changelog: 4.11.0...4.11.1
4.11.0
Added
Adapters - MinIO
- Stream Upload and Download - Added
put_object_streamandget_object_streamtoMinioPortand
MinioAdapterfor in-memory and binary-stream object I/O without temporary files.put_object_streamacceptsbytes | BinaryIO, optionallength, andcontent_type, and clears the
list_objectscache after upload.get_object_streamreturns the full object body asbytes.
Models - Internet Payment Gateways
- Parsian and Saman IPG DTOs - Extracted payment gateway request/response models into the domain layer.
- Added
archipy/models/dtos/parsian_ipg_dtos.pywith payment, confirm, confirm-with-amount, and reverse DTOs. - Added
archipy/models/dtos/saman_ipg_dtos.pywith payment, verify, and reverse DTOs (including
PaymentResponseDTOstatus validation).
- Added
Changed
Adapters - Internet Payment Gateways
- DTO Import Refactor - Parsian and Saman Shaparak ports, adapters, and package
__init__modules now import
DTOs fromarchipy.models.dtosinstead of defining them inline inports.py.
Chore - Tooling
- Ruff Source Paths - Removed unused
[tool.pytest.ini_options]frompyproject.toml, narrowed Ruffsrcto
archipyandfeatures, and updated per-file ignores for thebase/sqlalchemyadapter path. - CI Lint Scope - Ruff check and format workflows now include
features/stepsandscriptsalongsidearchipy.
Tests
Tests - MinIO Adapter
- Stream Upload Scenarios - Extended
features/minio_adapter.featurewith outline scenarios for bytes and
BinaryIOuploads followed by streaming download verification. - Flexible Upload Steps - Refactored MinIO step definitions to support stream-based uploads via
put_object_stream.
Tests - FastAPI MinIO Upload
- Large File End-to-End Uploads - Added
features/fastapi_minio_upload.featureand step implementations covering
50 MB, 75 MB, and 100 MB multipart uploads through a FastAPI endpoint backed byput_object_stream.
Chore
Test Containers
- Image Pin Updates - Bumped test container images in
.env.test.- Temporal:
temporalio/temporal:1.5.1→temporalio/temporal:1.7.2 - Redis:
redis:8.6.3-alpine→redis:8.6.4-alpine - Keycloak:
keycloak/keycloak:26.6.2→keycloak/keycloak:26.6.3 - ScyllaDB:
scylladb/scylla:2026.1.2→scylladb/scylla:2026.1.5
- Temporal:
Dependencies
- Optional extras - Updated optional adapter and dev dependencies.
fakeredis:fakeredis>=2.36.1→fakeredis>=2.36.2fastapi:fastapi[all]>=0.137.0→fastapi[all]>=0.137.2minio:boto3>=1.43.29→boto3>=1.43.32scylladb:scylla-driver>=3.29.10→scylla-driver>=3.29.11sentry:sentry-sdk>=2.62.0→sentry-sdk>=2.63.0sqlalchemy/sqlalchemy-async:sqlalchemy>=2.0.50→sqlalchemy>=2.0.51
- Dev group - Updated development tooling pins.
boto3-stubs:boto3-stubs>=1.43.14→boto3-stubs>=1.43.32ruff:ruff>=0.15.14→ruff>=0.15.17ty:ty>=0.0.39→ty>=0.0.50types-grpcio:types-grpcio>=1.0.0.20260518→types-grpcio>=1.0.0.20260614mkdocstrings-python:mkdocstrings-python>=2.0.3→mkdocstrings-python>=2.0.4
Full Changelog: 4.10.2...4.11.0