Phase 2a — data layer: PynamoDB → pydantic + boto3#90
Closed
chrisbc wants to merge 1 commit into
Closed
Conversation
…r API) - BinaryLargeObjectModel(pynamodb.Model) -> pydantic BaseModel + thin boto3 DynamoDB CRUD; public BinaryLargeObject wrapper API unchanged so cli + composite_solution.cached are untouched - object_meta stored as a JSON string (JSONAttribute parity; ints not Decimals) - migrate()/drop_tables()/tables preserved (create_table wait -> boto3 waiter) - drop pynamodb dependency; uv re-locked (164 pkgs) - verified: moto contract 4/4, full suite 77 passed, ruff + mypy clean Refs #86
This was referenced Jun 24, 2026
Member
Author
|
Landed via the combined PR #95 (one merge → one test-stage deploy, per runbook G7). Per-phase detail preserved here. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked migration — PR 3 of N. Base =
migrate/strawberry-p1(Phase 1, #89). Retarget down the stack as each lands.Epic: GNS-Science/nshm-toshi-api#359 · Tracking: #86 · Log:
docs/MIGRATION_LOG.mdThe headline §A4 risk, done as its own reviewable unit. Converts the only PynamoDB usage; the next PR ports the schema.
Changes
BinaryLargeObjectModel(pynamodb.Model)→ apydantic.BaseModel(BinaryLargeObjectItem) + thinboto3DynamoDB CRUD.BinaryLargeObjectwrapper API is unchanged —cliandcomposite_solution.cached(the resolver path) are untouched.tables/migrate()/drop_tables()preserved (create_table(wait=True)→ boto3table_existswaiter).object_metastored as a JSON string to reproduce PynamoDB'sJSONAttributeexactly (values round-trip as ints, notDecimals — keepsto_json()byte-equal).get()shape as-is — no contract "improvements" mid-migration.pynamodbdependency removed;uvre-locked.Verification
data_store/test/test_model.py4/4 (create/exists/delete table, save+get blob, no-blob path)pynamodbimports; container entry/Dockerfile untouched (Phase 1 build proof still holds)