Releases
Release notes for aerospike-py. See all releases on GitHub.
v0.14.0
Released: 2026-07-17
What's Changed
Features
- result_code 속성: 예외 객체에 구조화된
.result_code속성을 노출하여 에러 코드 기반 분기 처리 지원 (ADR-0027) (#413)
Bug Fixes
- RecordNotFound wire code:
remove()호출 시 발생하는RecordNotFound예외에 wire code 2가 누락되던 문제 수정 (#417) - list_sort sort_flags 검증:
list_sort에 알 수 없는sort_flags전달 시 조용히 기본값으로 처리하던 동작을 에러로 변경 (#403)
Improvements
- profile.release / deprecation version:
profile.release설정 정리, deprecation 버전 업데이트 및 CI action 버전 고정 (#414)
Documentation
- quickstart 가이드에서 기본 포트를 사용하도록 수정 (#416)
- 가이드 문서를 평이한 문체로 재작성 (#415)
- aerospike-py 브랜드 시스템 적용 (#412)
Dependencies
- PyO3를 0.29로 업그레이드하여 보안 취약점 해결 (RUSTSEC-2026-0176, RUSTSEC-2026-0177) (#411)
CI/CD
actions/checkout를 v6에서 v7로 업데이트 (#410)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.13.0...v0.14.0
v0.13.0
Released: 2026-06-10
Added
LazyBatchRecords.to_list()— positional bulk conversion returninglist[bins_dict | None]aligned 1:1 with the request key order, materialised in a single Rust pass (same cost shape asto_dict(), no per-record lazyBatchRecord.recordconversion). Slots are identified purely by position, so batches that read the sameuser_keyfrom multiple sets do not collide, and successful digest-only reads return their bins. On a 720-key batch the conversion cost drops from 2.86 ms (batch_recordsloop) to 0.51 ms. (#405)
Fixed
- OTel client spans no longer detach into orphan root traces when the calling Python context carries a W3C Trace Context Level 2
traceparent(trace-flags0x03 = SAMPLED | RANDOM, emitted by recent opentelemetry-python). The bundled opentelemetry-rust (≤ 0.31) propagator rejects version-00 flags >0x02; the injectedtraceparentis now masked to the SAMPLED bit before extraction. (#406, #407)
Changed
- Batch key conversion is now a two-pass pipeline: Python-object extraction runs once under the GIL with
(namespace, set)pointer memoisation, and RIPEMD-160 digest computation for the whole batch runs with the GIL released (Python::detach). On a 720-key batch thekey_parsestage drops ~70% (0.63 ms → 0.19 ms). Validation behaviour is unchanged. (#408)
v0.12.4
Released: 2026-05-31
What's Changed
Bug Fixes
- bit overflow action 검증: bit add/subtract 연산에서 알 수 없는 overflow action 코드를 클라이언트 측에서 즉시 거부하도록 개선 (#402)
- CDT return_type 검증: list/map CDT 연산에서 유효하지 않은 return_type 값을 클라이언트 측에서 사전 검증하여 거부 (#401)
- expression cond/let 검증: cond/let expression에서 잘못된 operand 개수를 클라이언트 측에서 감지하여 명확한 에러 반환 (#400)
- host/port 파싱 강화: 빈 tuple, IPv6 telemetry 주소, default-port 일관성 등 host/port 파싱 edge case 처리 강화 (#399)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.12.3...v0.12.4
v0.12.3
Released: 2026-05-30
What's Changed
Bug Fixes
- operate:
OP_INCR연산에 숫자가 아닌 값 전달 시 서버의 불명확한 에러 대신 클라이언트에서 명확한 에러 반환 (#398) - query: equals predicate에 인덱싱 불가능한 값 전달 시 panic 대신 명확한 에러 반환 (#397)
- query: predicates, select, expressions에서 빈 bin name 전달 시 사전 검증 추가 (#396)
- query:
contains()에 잘못된 collectionindex_type전달 시 명확한 에러 반환 (#395) - bin: 빈 bin name을 클라이언트 측에서 사전 검증하여 거부 (#394)
- exp: variadic expression에 빈 operand 리스트 전달 시 명확한 에러 반환 (#393)
- query:
between()predicate에 정수가 아닌 bound 전달 시 명확한 에러 메시지 제공 (#392) - misc: metrics-server 재시작 안정화, log-level 유효성 검증, numpy batch 에러 경로 개선 (#391)
- policy:
parse_ttl에서TTL_CLIENT_DEFAULT(-3) sentinel 값 허용 (#390) - value:
py_to_value변환에서bytearray타입 지원 추가 (#389)
CI/CD
- MSRV 검사를 Rust 1.85로 상향 (edition-2024 dependency 대응) (#388)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.12.2...v0.12.3
v0.12.2
Released: 2026-05-29
What's Changed
Bug Fixes
- observability: TRACE 로그 레벨(5) 이름을
logging.addLevelName으로 등록하여 "Level 5" 대신 "TRACE"로 표시되도록 수정,set_log_level에 유효하지 않은 값 전달 시ValueError를 발생시키도록 입력 검증 추가 (#387) - list/map operations:
policy or _UNSET대신policy if policy is not None else _UNSET를 사용하여 빈{}policy가 "unset"으로 잘못 처리되던 문제 수정 (#387) - bug report: gh-issue 제목 생성 시 개행 문자를 제거하고 80자로 truncate하도록 sanitize 로직 개선 (#387)
Docs
- stub:
AsyncClient의index_*_create메서드에IndexFoundError예외 문서를 추가하여 syncClient와 동일한Raises:섹션 제공 (#386)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.12.1...v0.12.2
v0.12.1
Released: 2026-05-28
What's Changed
Bug Fixes
- exception alias 기반 클래스 수정: deprecated exception alias의 base class가 올바르지 않은 문제 수정 및 누락된
aerospike_pyimport 추가 (#384) - batch_read partial-not-found 처리: feasibility FastAPI fixture에서 batch_read 시 일부 레코드가 존재하지 않는 경우의 처리 로직 개선 (#385)
Improvements
- unsafe cast().unwrap() 제거:
batch_remove/batch_apply에서 사용되던 unsafe한cast().unwrap()패턴을 안전한 코드로 리팩터링 (#383) - benchmark suite 전면 개편: 5개 시나리오 기반 uvicorn ASGI 비교 벤치마크 suite로 재작성 (#379)
- batch_apply stub 문서 보완:
batch_apply가 retry 파라미터를 지원하지 않는 점을 type stub에 명시 (#382) - FastAPI sample 기본값 동기화: FastAPI 예제의 기본 설정값을 최신 상태로 동기화 (#378)
- 한국어 번역 동기화: 현재 영문 소스 기준으로 한국어 번역 문서 재동기화 (#380)
CI/CD
- GitHub Actions를 최신 버전으로 업데이트 (#381)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.12.0...v0.12.1
v0.12.0
Released: 2026-05-26
What's Changed
Features
- free-threaded build 확장: Python 3.13t / 3.14t / 3.15t free-threaded 빌드를 공식 지원하며,
#[pymodule(gil_used = false)]선언의 안전성을 전체 매트릭스에서 검증 (#375) - batch_to_dict_py per-stage timing: 배치 결과 변환의 단계별 성능 측정 기능 추가 (#375)
- Python 3.15 지원: pyproject classifiers에 Python 3.15를 선언하고 CI 빌드 매트릭스에 추가 (experimental) (#375)
Bug Fixes
- CI MSRV 환경변수 스코프 수정:
env.MSRV를 workflow-level로 호이스트하여workflow_dispatch/push이벤트에서 422 에러로 CI가 실행되지 않던 문제 해결 (#375)
CI/CD
- free-threaded CI 매트릭스를
[3.13t, 3.14t, 3.15t]로 확장하고, 3.13t / 3.15t는 experimental로 마킹 - free-threaded 작업에서
sys._is_gil_enabled() is False사전 검증 추가 — GIL이 자동 활성화되면 즉시 실패 처리 - Rust 캐시를 python-version 기준으로 키 분리하여 cross-version 캐시 오염 방지
- tox에
py313t/py315t환경 추가 및 per-versionfreethreading-pyXt환경 지원
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.11.1...v0.12.0
v0.11.1
Released: 2026-05-25
What's Changed
Improvements
- feasibility test config: feasibility 테스트 설정이 환경변수(
AEROSPIKE_HOST,AEROSPIKE_PORT,AEROSPIKE_CLUSTER_NAME)를 참조하도록 정렬하여 CI 환경과의 호환성 개선 (#377)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.11.0...v0.11.1
v0.11.0
Released: 2026-05-24
What's Changed
Features
- LazyBatchRecords handle + GIL-detach
to_numpy(dtype):batch_read가 즉시 dict를 반환하는 대신LazyBatchRecords핸들을 반환하도록 변경하여,.to_dict()/.to_numpy(dtype)호출 시점까지 변환을 지연시킵니다. NumPy 변환 루프는py.detach()로 GIL을 해제한 상태에서 실행되어, aerospike → numpy → torch zero-copy 체인이 가능합니다. 벤치마크 결과 c=100 기준 RPS +43%, p50 레이턴시 −34% 개선되었습니다. (#374)
⚠️ Breaking Change:
batch_read의_dtypekwarg가 제거되고 반환 타입이LazyBatchRecords로 변경되었습니다. 기존 dict 스타일 코드는 Mapping 호환 레이어를 통해 계속 동작합니다.
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.11...v0.11.0
v0.10.11
Released: 2026-05-23
What's Changed
Bug Fixes
- list/map BY_VALUE 연산 val 필수화: list/map BY_VALUE 연산에서
val미지정 시 자동으로 Nil이 대입되는 문제를 방지하기 위해val파라미터를 필수로 변경 (#373) - HLL/map_put_items val 필수화: HLL 및
map_put_items연산에서val미지정 시 자동으로 Nil이 대입되는 문제를 방지하기 위해val파라미터를 필수로 변경 (#372) - bit 연산 val 필수화: bit 연산에서
val미지정 시 자동으로 Nil이 대입되는 문제를 방지하기 위해val파라미터를 필수로 변경 (#371) - list_trim count 필수화:
list_trim연산에서count미지정 시 리스트가 자동으로 잘리는 문제를 방지하기 위해count파라미터를 필수로 변경 (#370) - connect() 취소 교착 및 에러 매핑 개선:
connect()취소 시 발생하는 교착 상태(wedge) 수정,result_code테이블 완성, batch 에러 매핑 개선 (#369)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.10...v0.10.11
v0.10.10
Released: 2026-05-22
What's Changed
Bug Fixes
- increment offset validation:
increment()에 숫자가 아닌 offset(문자열, 리스트, bool 등)을 전달하면 서버로 전송되기 전에TypeError를 발생시키도록 수정 (#368) - server-timeout error mapping: 서버 측
ResultCode::Timeout(코드 9)과ResultCode::QueryTimeout(코드 212)이ServerError대신AerospikeTimeoutError로 정확히 매핑되도록 수정 (#368) - bit_resize flag guard:
BitwiseResizeFlags에 OR 조합된 플래그(예:GROW_ONLY | FROM_FRONT)가 조용히Default로 무시되던 문제를ValueError로 거부하도록 수정 (#368) - map index/rank range ops:
count를 생략한map_get_by_index_range,map_get_by_rank_range등이 전체 범위 대신 1개만 반환하던 버그 수정 — open-ended*_range_fromvariant 사용 (#367) - explicit key digest validation: 4-element key tuple의 digest가 20바이트가 아닐 때 조용히 무시하고 digest를 재계산하던 문제를
ValueError로 거부하도록 수정 (#366) - BatchRecord.record mutex poisoning: poisoned mutex에서 조용히 복구하던
BatchRecord.recordgetter가 이제RustPanicError를 발생시켜 데이터 손상 가능성을 명확히 알림 (#365) - sleep_between_retries 정책 누락:
WritePolicy,BatchPolicy,QueryPolicy에서sleep_between_retries필드가 파싱되지 않아 재시도 간 대기 없이 즉시 재시도하던 문제 수정 (#364) - list_increment 타입 검증: 정수가 아닌
val(float, string 등)이 조용히 +1로 변환되던 문제를ValueError로 거부하도록 수정 (#363) - batch keys() 오류 전파:
BatchReadHandle.keys()에서 key 변환 실패가 조용히 무시되어 반환 리스트 길이가 배치와 불일치하던 문제 수정 (#363) - uint64 정수 지원: 공식 C 클라이언트가 기록한
[2^63, 2^64-1]범위의 큰 부호 없는 정수가OverflowError를 발생시키던 문제 수정 (#363) - numpy sub-array 데이터 손실: structured-dtype sub-array 필드(예:
('vec','(4,)f8'))가 batch read 시base_itemsize만큼만 읽혀 나머지 바이트가 손실되던 문제 수정 (#362)
CI/CD
cargo test를 CI lint job에 추가하고test-rustMakefile target 신설 (#362)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.9...v0.10.10
v0.10.9
Released: 2026-05-21
What's Changed
Bug Fixes
- maintenance docs alignment: Improve consistency and accuracy of public maintenance docs (#361)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.8...v0.10.9
v0.10.8
Released: 2026-05-20
What's Changed
Bug Fixes
- bug_report UTF-8 handling: Truncate at character boundaries when generating GitHub issue titles so multi-byte UTF-8 text no longer triggers a panic (#360)
- query OTel span timing: Start the OTel span before the operation so query latency is reflected accurately (previously the span was created after completion and duration was ~0) (#360)
- query OTel span panic path: Ensure the OTel span is properly closed even on the catch_panic path (#360)
- client_policy auth_mode validation: Reject unknown
auth_modevalues instead of silently falling back, and addAUTH_PKI (2) → AuthMode::PKImapping (#360) - partition_filter range validation: Reject
begin >= 4096even whencount == 0, matching the documented[0, 4096)contract (#360) - runtime consistency: Unify the async Tokio runtime to use
enable_io() + enable_time(), matching the syncRUNTIMEconfiguration (#360) - type stub bit_operations missing: Re-export the
bit_operationssubmodule in__init__.pyi(present at runtime but missing from the type stub) (#360) - docs constants value errors: Correct
POLICY_EXISTS_*constant values in the docs to match the actual code (#360)
Docs
- performance docs readability: Use Tabs components and ASCII bar charts to significantly improve readability of the benchmarks, free-threaded-python, bottleneck-analysis, and overview pages (#359)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.7...v0.10.8
v0.10.7
Released: 2026-05-17
What's Changed
Bug Fixes
- batch_to_dict_py: Drop errored records from the batch result dict and tighten the retry merge logic so only accurate results are returned (#358)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.6...v0.10.7
v0.10.6
Released: 2026-05-15
What's Changed
Bug Fixes
- panic-safety hardening: Update the panic-safe wrapper module docs to match actual coverage, and add C-contiguous layout validation for NumPy arrays plus a compile-time layout guard for
BatchRecordMirror(#357)
CI/CD
- Change the daily release schedule from UTC 00:00 to UTC 22:00 (KST 07:00) (#356)
- Fix
docs: freeze versioncommits cascading into empty releases (#343) - Switch release-target change detection from commit-message matching to a path-based allowlist (
rust/,src/,pyproject.toml, etc.) to avoid unnecessary releases for CI/docs-only commits (#344)
Documentation
- Add a Throughput (TPS) section to the Free-Threaded Python performance docs — includes k6 iterations/s and server-side Prometheus metric comparisons (#346)
- Overhaul the performance docs based on benchmark results — restructured into four pages: overview, benchmarks, free-threaded-python, bottleneck-analysis (EN + KO) (#345)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.5...v0.10.6
v0.10.5
Released: 2026-05-08
What's Changed
Documentation
- Freeze v0.10.4 documentation (docs freeze)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.4...v0.10.5
v0.10.4
Released: 2026-05-07
What's Changed
Documentation
- version freeze: Freeze v0.10.3 documentation
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.3...v0.10.4
v0.10.3
Released: 2026-05-06
What's Changed
CI/CD
- daily-release auto-bump: The daily-release workflow now only auto-bumps minor/patch versions. Major version bumps must be tagged manually by a maintainer.
feat!:/BREAKING CHANGEmarkers still appear in release notes but no longer trigger an automatic major bump. (#342)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.2...v0.10.3
v0.10.2
Released: 2026-05-06
What's Changed
Documentation
- v0.10.1 docs snapshot: Freeze v0.10.1 docs in Docusaurus
versioned_docsto add a per-version documentation archive
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.1...v0.10.2
v0.10.1
Released: 2026-05-05
What's Changed
Documentation
- v0.10.0 docs snapshot: Freeze the v0.10.0 API docs and guides for Docusaurus versioning
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.10.0...v0.10.1
v0.10.0
Released: 2026-05-04
What's Changed
Features
- REGEX_ flag constants*: Expose and document
REGEX_*flag constants usable with PK regex scans in expression filters (#338)
Improvements
- PK regex scan tests and docs: Add edge-case tests for PK regex scan and expand docs around the
flags=0default (#340) - README Repository Automation section: Add a Repository Automation section to the README describing the automation workflows (#337)
CI/CD
- Improve the workflow to idempotently create the tracking label before opening an issue when the label does not yet exist (#341)
Dependencies
- Bump
actions/upload-pages-artifact(gha-deps group) (#330)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.9.2...v0.10.0
v0.9.2
Released: 2026-05-04
What's Changed
Documentation
- version freeze: Freeze v0.9.1 documentation
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.9.1...v0.9.2
v0.9.1
Released: 2026-05-03
What's Changed
Documentation
- version freeze: Freeze v0.9.0 documentation
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.9.0...v0.9.1
v0.9.0
Released: 2026-05-02
What's Changed
Features
- batch_apply(): Add a
batch_apply()method andBatchUDFPolicyfor running UDFs in batch (#334) - ScanPolicy: Add a
ScanPolicyTypedDict for Python type definitions (#333) - BatchPolicy.concurrency: Expose the
concurrencyoption (Sequential/Parallel) onBatchPolicy(#331) - BasePolicy.timeout_delay: Expose the
timeout_delayfield across read/write/batch/query policies (#332)
Docs
- Reflect the follow-up policy fields and
batch_applyin the docs (#336)
CI/CD
- Add a workflow that automatically creates follow-up issues at PR time for ACE plugins (#335)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.8.0...v0.9.0
v0.8.0
Released: 2026-05-01
What's Changed
Features
- admin privilege string support:
grant_privileges/revoke_privilegesnow accept standard string privilege names like"read"and"write"in addition to integer codes (#327) - BatchReadPolicy / BatchDeletePolicy split: Split the previous single
BatchPolicyintoBatchReadPolicyandBatchDeletePolicy, enabling finer-grained policy configuration per batch operation (#314) - QueryPolicy field expansion: Add
expected_duration,replica,include_bin_data, andpartition_filterfields toQueryPolicy(#313) - ReadPolicy read-path field expansion: Add
replica,read_mode_ap, andread_touch_ttl_percentfields to the read-path policy (#312)
Improvements
- Type stub hardening: Significantly expand
.pyistubs for policy constants and numpy batch APIs to improve IDE autocomplete and type-checker accuracy (#324) - Remove legacy expressions alias: Clean up the unused legacy
expressionsalias on policyTypedDicts (#311)
Documentation
- API reference policy fields: Reflect the new policy fields in the API docs (#321)
- SECURITY.md and performance tuning guide: Add a security policy doc, a concurrency performance tuning guide, and a NumPy usage example to the README (#325)
- QueryPolicy default fixes: Fix incorrect
QueryPolicydefaults and restore the sync/async tabs forbatch_remove(#322) - Repository URL normalization: Replace fork URLs with canonical org URLs across the repo (#328)
CI/CD
- Apply
cargo fmt+clippychecks automatically in pre-commit and CI (#323) - Add a performance hot-path review gate at PR creation time (#329)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.7.1...v0.8.0
v0.7.1
Released: 2026-04-30
What's Changed
Improvements
- batch_write API docs: Reflect
batch_writepolicy fields (key,exists,gen,commit_level,durable_delete,ttl, etc.) in the API reference, and add a write-field precedence table along with usage examples (#310)
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.7.0...v0.7.1
v0.7.0
Released: 2026-04-29
What's Changed
Features
- Full batch_write policy field exposure:
batch_write()now supports every write field ofaerospike-core 2.0'sBatchWritePolicyat both the batch level and per-record (WriteMeta) level. Addskey(send_key),exists,gen,commit_level,durable_delete, andfilter_expression, while preserving the existingttl/genprecedence where per-record meta overrides batch-level policy. Resolves issue #303. (#304)
Improvements
- Extract POLICY enum mapping helpers: Extract
parse_record_exists_action/parse_generation_policy/parse_commit_levelintorust/src/policy/mod.rssowrite_policy.rsandbatch_policy.rsshare the same mapping logic. (#304) - BatchPolicy TypedDict accuracy: Declare
allow_inline,allow_inline_ssd, andrespond_all_keysfields in the stub — Rust was already parsing them but they were missing from the stub. (#304)
Behavior change (non-breaking)
- Previously
batch_write(records, policy={"gen": N})was silently ignored; starting with this release thegenkey is interpreted as aPOLICY_GEN_*enum index. Since the prior behavior was a no-op there is no compatibility impact, but any pattern that placedgenerationdirectly at the batch level should move to per-recordWriteMeta.
Follow-up backlog
Additional missing fields on ReadPolicy / QueryPolicy / BasePolicy surfaced during this analysis are tracked separately:
- #305 ReadPolicy:
replica,read_mode_ap,read_mode_sc - #306 QueryPolicy:
expected_duration,replica,partition_filter, etc. - #307 Split BatchReadPolicy / BatchApplyPolicy / BatchRemovePolicy
- #308 Clean up legacy
expressionsalias - #309 BasePolicy.consistency_level / read_touch_ttl
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.6.7...v0.7.0
v0.6.7
Released: 2026-04-29
What's Changed
Docs
- Version docs snapshot: Freeze v0.6.6 docs into Docusaurus
versioned_docs
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.6.6...v0.6.7
v0.6.6
Released: 2026-04-28
What's Changed
Documentation
- version freeze: Freeze v0.6.5 documentation
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.6.5...v0.6.6
v0.6.5
Released: 2026-04-26
What's Changed
Documentation
- v0.6.4 docs snapshot: Freeze v0.6.4 docs in Docusaurus
versioned_docsto support browsing previous versions
Full Changelog: https://github.com/aerospike-ce-ecosystem/aerospike-py/compare/v0.6.4...v0.6.5