ekbatan 0.1.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ekbatan-0.1.0/.agents/skills/ekbatan-py-examples/SKILL.md +96 -0
- ekbatan-0.1.0/.agents/skills/ekbatan-py-examples/references/example-matrix.md +86 -0
- ekbatan-0.1.0/.agents/skills/ekbatan-py-maintainer/SKILL.md +88 -0
- ekbatan-0.1.0/.agents/skills/ekbatan-py-maintainer/references/architecture-map.md +76 -0
- ekbatan-0.1.0/.agents/skills/ekbatan-py-verification/SKILL.md +73 -0
- ekbatan-0.1.0/.agents/skills/ekbatan-py-verification/references/test-matrix.md +68 -0
- ekbatan-0.1.0/.claude/skills/ekbatan-py-examples/SKILL.md +96 -0
- ekbatan-0.1.0/.claude/skills/ekbatan-py-examples/references/example-matrix.md +86 -0
- ekbatan-0.1.0/.claude/skills/ekbatan-py-maintainer/SKILL.md +88 -0
- ekbatan-0.1.0/.claude/skills/ekbatan-py-maintainer/references/architecture-map.md +76 -0
- ekbatan-0.1.0/.claude/skills/ekbatan-py-verification/SKILL.md +73 -0
- ekbatan-0.1.0/.claude/skills/ekbatan-py-verification/references/test-matrix.md +68 -0
- ekbatan-0.1.0/.github/workflows/ci.yml +144 -0
- ekbatan-0.1.0/.github/workflows/db-scheduler.yml +80 -0
- ekbatan-0.1.0/.github/workflows/deploy-website.yml +90 -0
- ekbatan-0.1.0/.github/workflows/heavy-verification.yml +163 -0
- ekbatan-0.1.0/.github/workflows/release.yml +134 -0
- ekbatan-0.1.0/.gitignore +60 -0
- ekbatan-0.1.0/AGENTS.md +589 -0
- ekbatan-0.1.0/CLAUDE.md +3 -0
- ekbatan-0.1.0/DIVERGENCE.md +1828 -0
- ekbatan-0.1.0/LICENSE +201 -0
- ekbatan-0.1.0/Makefile +191 -0
- ekbatan-0.1.0/PKG-INFO +348 -0
- ekbatan-0.1.0/README.md +300 -0
- ekbatan-0.1.0/RELEASE.md +212 -0
- ekbatan-0.1.0/agent-skills/README.md +21 -0
- ekbatan-0.1.0/agent-skills/ekbatan-py-examples/SKILL.md +96 -0
- ekbatan-0.1.0/agent-skills/ekbatan-py-examples/references/example-matrix.md +86 -0
- ekbatan-0.1.0/agent-skills/ekbatan-py-maintainer/SKILL.md +88 -0
- ekbatan-0.1.0/agent-skills/ekbatan-py-maintainer/references/architecture-map.md +76 -0
- ekbatan-0.1.0/agent-skills/ekbatan-py-verification/SKILL.md +73 -0
- ekbatan-0.1.0/agent-skills/ekbatan-py-verification/references/test-matrix.md +68 -0
- ekbatan-0.1.0/agent-skills/scripts/sync.sh +22 -0
- ekbatan-0.1.0/db-scheduler/.gitignore +6 -0
- ekbatan-0.1.0/db-scheduler/LICENSE +201 -0
- ekbatan-0.1.0/db-scheduler/README.md +213 -0
- ekbatan-0.1.0/db-scheduler/docs/FILE-LEDGER.md +193 -0
- ekbatan-0.1.0/db-scheduler/docs/PORTING.md +110 -0
- ekbatan-0.1.0/db-scheduler/docs/QUARTZ-CONVERTER-LEDGER.md +138 -0
- ekbatan-0.1.0/db-scheduler/docs/java-api-inventory.md +1383 -0
- ekbatan-0.1.0/db-scheduler/docs/java-test-inventory.md +436 -0
- ekbatan-0.1.0/db-scheduler/pyproject.toml +85 -0
- ekbatan-0.1.0/db-scheduler/scripts/ledger.py +57 -0
- ekbatan-0.1.0/db-scheduler/scripts/quartz-oracle/.gitignore +1 -0
- ekbatan-0.1.0/db-scheduler/scripts/quartz-oracle/QuartzOracle.java +81 -0
- ekbatan-0.1.0/db-scheduler/scripts/quartz-oracle/generate_fixtures.py +389 -0
- ekbatan-0.1.0/db-scheduler/scripts/quartz-oracle/run.sh +22 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/__init__.py +0 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/builder.py +386 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/client.py +542 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/clock.py +73 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/event/__init__.py +273 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/exceptions.py +136 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/executor.py +531 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/jdbc/__init__.py +47 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/jdbc/customization.py +359 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/jdbc/execution_update.py +133 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/jdbc/repository.py +832 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/jdbc/schema.py +112 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/logging.py +89 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/poll.py +313 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/pool.py +228 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/py.typed +0 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/resolver.py +171 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/scheduled_execution.py +263 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/scheduler.py +610 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/scheduler_name.py +89 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/serializer/__init__.py +228 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/state.py +225 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/stats/__init__.py +88 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/stats/adapter.py +61 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/__init__.py +738 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/handlers.py +517 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/helper.py +1165 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/operations.py +128 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/schedule/__init__.py +650 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/schedule/_quartz.py +879 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/testhelper/__init__.py +189 -0
- ekbatan-0.1.0/db-scheduler/src/db_scheduler/util.py +40 -0
- ekbatan-0.1.0/db-scheduler/tests/conftest.py +264 -0
- ekbatan-0.1.0/db-scheduler/tests/integration/test_client.py +501 -0
- ekbatan-0.1.0/db-scheduler/tests/integration/test_repository.py +36 -0
- ekbatan-0.1.0/db-scheduler/tests/integration/test_scheduler.py +1110 -0
- ekbatan-0.1.0/db-scheduler/tests/integration/test_shutdown_exit.py +88 -0
- ekbatan-0.1.0/db-scheduler/tests/integration/test_testhelper.py +292 -0
- ekbatan-0.1.0/db-scheduler/tests/integration/test_time_as_is.py +114 -0
- ekbatan-0.1.0/db-scheduler/tests/repository_contract.py +730 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/calendar.jsonl.gz +0 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/catalogue.jsonl.gz +0 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/catalogue.txt +374 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/fuzz.jsonl.gz +0 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/probes.jsonl.gz +0 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/sweeps.jsonl.gz +0 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/zones.jsonl.gz +0 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_cron.py +278 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_customization.py +173 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_events.py +261 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_exceptions.py +118 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_executor.py +551 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_handlers.py +442 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_import_side_effects.py +20 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_pool.py +413 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_quartz.py +416 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_quartz_oracle.py +174 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_resolver.py +156 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_schedule_on_startup.py +261 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_scheduled_execution.py +209 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_scheduler_loop.py +246 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_schedules.py +213 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_serializer.py +195 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_state.py +313 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_task_instance.py +183 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_tasks.py +437 -0
- ekbatan-0.1.0/db-scheduler/tests/unit/test_time_kept_as_given.py +92 -0
- ekbatan-0.1.0/db-scheduler/uv.lock +959 -0
- ekbatan-0.1.0/docs/ASYNC-DRACULAS-FIX-LEDGER.md +93 -0
- ekbatan-0.1.0/docs/ASYNC-DRACULAS.md +87 -0
- ekbatan-0.1.0/docs/ASYNC-LEDGER.md +483 -0
- ekbatan-0.1.0/docs/BEHAVIOUR-PARITY-LEDGER.md +66 -0
- ekbatan-0.1.0/docs/BEYOND-CODE-LEDGER.md +176 -0
- ekbatan-0.1.0/docs/CONFIG-FILES-LEDGER.md +58 -0
- ekbatan-0.1.0/docs/CONVERTER-AND-WEBSITE-LEDGER.md +172 -0
- ekbatan-0.1.0/docs/DATASOURCE-LEDGER.md +77 -0
- ekbatan-0.1.0/docs/DATASOURCE-LOGIN-LEDGER.md +56 -0
- ekbatan-0.1.0/docs/DECISIONS-TO-REVIEW.md +1566 -0
- ekbatan-0.1.0/docs/DOCS-PARITY.md +85 -0
- ekbatan-0.1.0/docs/DRACULA-LEDGER.md +22 -0
- ekbatan-0.1.0/docs/DRACULAS.md +185 -0
- ekbatan-0.1.0/docs/DRIVER-SURVEY.md +181 -0
- ekbatan-0.1.0/docs/EVENTLOG-JAVA-WAY-LEDGER.md +81 -0
- ekbatan-0.1.0/docs/EVENTLOG-LEDGER.md +72 -0
- ekbatan-0.1.0/docs/EXAMPLES-CONFIG-FILES-LEDGER.md +67 -0
- ekbatan-0.1.0/docs/EXAMPLES-MATRIX-LEDGER.md +52 -0
- ekbatan-0.1.0/docs/EXECUTE-ORDER-LEDGER.md +63 -0
- ekbatan-0.1.0/docs/GOLDEN-PATH-LEDGER.md +70 -0
- ekbatan-0.1.0/docs/HANDLER-BASE-LEDGER.md +73 -0
- ekbatan-0.1.0/docs/JAVA-MODEL-LEDGER.md +82 -0
- ekbatan-0.1.0/docs/JAVA-PARITY-LEDGER.md +816 -0
- ekbatan-0.1.0/docs/MIGRATOR-LEDGER.md +181 -0
- ekbatan-0.1.0/docs/PARITY-FIX-LEDGER.md +73 -0
- ekbatan-0.1.0/docs/PARITY-ROUND-2-LEDGER.md +49 -0
- ekbatan-0.1.0/docs/README.md +48 -0
- ekbatan-0.1.0/docs/RECORDS-DICT-LEDGER.md +85 -0
- ekbatan-0.1.0/docs/REPO-KEYS-LEDGER.md +65 -0
- ekbatan-0.1.0/docs/REPO-NAMES-LEDGER.md +73 -0
- ekbatan-0.1.0/docs/REVIEW-FIXES-LEDGER.md +49 -0
- ekbatan-0.1.0/docs/SCHEMAGEN-COMPLETENESS-LEDGER.md +239 -0
- ekbatan-0.1.0/docs/SCHEMAGEN-LEDGER.md +125 -0
- ekbatan-0.1.0/docs/SCHEMAGEN-TEST-LEDGER.md +232 -0
- ekbatan-0.1.0/docs/SETUP-GUIDE-LEDGER.md +113 -0
- ekbatan-0.1.0/docs/SHORTCOMINGS.md +100 -0
- ekbatan-0.1.0/docs/SHUTDOWN-HOOK-LEDGER.md +68 -0
- ekbatan-0.1.0/docs/SYNC-ASYNC-DOCS-LEDGER.md +209 -0
- ekbatan-0.1.0/docs/TIME-AS-IS-LEDGER.md +123 -0
- ekbatan-0.1.0/docs/TIME-KINDS-LEDGER.md +66 -0
- ekbatan-0.1.0/docs/TYPED-RECORDS-LEDGER.md +95 -0
- ekbatan-0.1.0/docs/VALIDATE-LEDGER.md +67 -0
- ekbatan-0.1.0/docs/behaviour-parity/A-repository.md +173 -0
- ekbatan-0.1.0/docs/behaviour-parity/B-actions.md +172 -0
- ekbatan-0.1.0/docs/behaviour-parity/C-transactions-sharding-config.md +249 -0
- ekbatan-0.1.0/docs/behaviour-parity/D-events.md +157 -0
- ekbatan-0.1.0/docs/behaviour-parity/E-jobs-locks.md +171 -0
- ekbatan-0.1.0/docs/behaviour-parity/F-migrations.md +184 -0
- ekbatan-0.1.0/docs/behaviour-parity/G-domain-model.md +237 -0
- ekbatan-0.1.0/docs/beside-java.md +161 -0
- ekbatan-0.1.0/docs/concepts/README.md +21 -0
- ekbatan-0.1.0/docs/concepts/actions.md +274 -0
- ekbatan-0.1.0/docs/concepts/models-and-entities.md +541 -0
- ekbatan-0.1.0/docs/concepts/outbox.md +149 -0
- ekbatan-0.1.0/docs/concepts/sagas.md +272 -0
- ekbatan-0.1.0/docs/concepts/sharding.md +157 -0
- ekbatan-0.1.0/docs/concepts/the-dual-write-trap.md +83 -0
- ekbatan-0.1.0/docs/database/README.md +32 -0
- ekbatan-0.1.0/docs/database/config-files.md +243 -0
- ekbatan-0.1.0/docs/database/keyed-locks.md +421 -0
- ekbatan-0.1.0/docs/database/mariadb.md +149 -0
- ekbatan-0.1.0/docs/database/migrations.md +407 -0
- ekbatan-0.1.0/docs/database/multi-database.md +328 -0
- ekbatan-0.1.0/docs/database/mysql.md +143 -0
- ekbatan-0.1.0/docs/database/postgresql.md +125 -0
- ekbatan-0.1.0/docs/database/repositories.md +577 -0
- ekbatan-0.1.0/docs/database/schemagen.md +908 -0
- ekbatan-0.1.0/docs/database/sharding.md +495 -0
- ekbatan-0.1.0/docs/database/sqlite.md +138 -0
- ekbatan-0.1.0/docs/database/tables/event-notifications.md +191 -0
- ekbatan-0.1.0/docs/database/tables/events.md +184 -0
- ekbatan-0.1.0/docs/database/tables/scheduled-tasks.md +179 -0
- ekbatan-0.1.0/docs/database/tables.md +121 -0
- ekbatan-0.1.0/docs/database/transaction-manager.md +289 -0
- ekbatan-0.1.0/docs/dracula/A-domain-persistence.md +446 -0
- ekbatan-0.1.0/docs/dracula/B-actions-events.md +318 -0
- ekbatan-0.1.0/docs/dracula/C-config-migrations.md +281 -0
- ekbatan-0.1.0/docs/dracula/D-jobs-locks.md +213 -0
- ekbatan-0.1.0/docs/dracula/E-using-it.md +338 -0
- ekbatan-0.1.0/docs/driver-survey/logins.md +1162 -0
- ekbatan-0.1.0/docs/driver-survey/mysql-mariadb.md +713 -0
- ekbatan-0.1.0/docs/driver-survey/postgresql.md +672 -0
- ekbatan-0.1.0/docs/driver-survey/sqlite.md +215 -0
- ekbatan-0.1.0/docs/events/README.md +24 -0
- ekbatan-0.1.0/docs/events/event-streaming.md +531 -0
- ekbatan-0.1.0/docs/events/local-event-handler.md +533 -0
- ekbatan-0.1.0/docs/getting-started.md +383 -0
- ekbatan-0.1.0/docs/going-async.md +246 -0
- ekbatan-0.1.0/docs/jobs/README.md +11 -0
- ekbatan-0.1.0/docs/jobs/distributed-jobs.md +370 -0
- ekbatan-0.1.0/docs/parity-fix/E-events.md +26 -0
- ekbatan-0.1.0/docs/parity-fix/J-json-domain.md +30 -0
- ekbatan-0.1.0/docs/parity-fix/L-locks-jobs.md +42 -0
- ekbatan-0.1.0/docs/parity-fix/T-transactions-config.md +22 -0
- ekbatan-0.1.0/docs/parity-round-2/N1-config-wiring.md +63 -0
- ekbatan-0.1.0/docs/parity-round-2/N2-codegen.md +110 -0
- ekbatan-0.1.0/docs/parity-round-2/N3-observability.md +103 -0
- ekbatan-0.1.0/docs/parity-round-2/N4-api-errors-testing.md +122 -0
- ekbatan-0.1.0/docs/parity-round-2/N5-combinations.md +90 -0
- ekbatan-0.1.0/docs/parity-round-2/N6-docs-claims.md +127 -0
- ekbatan-0.1.0/docs/parity-round-2/R0-rerun.md +90 -0
- ekbatan-0.1.0/docs/runtime/README.md +13 -0
- ekbatan-0.1.0/docs/runtime/async.md +416 -0
- ekbatan-0.1.0/docs/runtime/concurrency.md +316 -0
- ekbatan-0.1.0/docs/runtime/observability.md +204 -0
- ekbatan-0.1.0/docs/startup-and-shutdown.md +1308 -0
- ekbatan-0.1.0/docs/sync-or-async.md +105 -0
- ekbatan-0.1.0/docs/website-nojava-inventory.md +715 -0
- ekbatan-0.1.0/docs/wiring-fastapi.md +331 -0
- ekbatan-0.1.0/docs/wiring.md +550 -0
- ekbatan-0.1.0/ekbatan-py-examples/README.md +190 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/README.md +102 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/pyproject.toml +38 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/ekbatan.yaml +108 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/test_fastapi_wallet_rest_async_mariadb.py +264 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/README.md +102 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/pyproject.toml +38 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/ekbatan.yaml +108 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/test_fastapi_wallet_rest_async_mysql.py +256 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/README.md +94 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/pyproject.toml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/ekbatan.yaml +109 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/test_fastapi_wallet_rest_async_pg.py +255 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/README.md +94 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/pyproject.toml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/ekbatan.yaml +109 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/test_fastapi_wallet_rest_async_sharded_pg.py +256 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/README.md +92 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/pyproject.toml +38 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/test_fastapi_wallet_rest_mariadb.py +230 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/README.md +92 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/pyproject.toml +38 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/test_fastapi_wallet_rest_mysql.py +222 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/README.md +84 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/pyproject.toml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/test_fastapi_wallet_rest_pg.py +221 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/README.md +84 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/pyproject.toml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/test_fastapi_wallet_rest_sharded_pg.py +222 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/README.md +102 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/pyproject.toml +59 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/ekbatan.yaml +108 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/test_fastapi_wallet_rest_async_mariadb.py +264 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/README.md +102 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/pyproject.toml +59 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/ekbatan.yaml +108 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/test_fastapi_wallet_rest_async_mysql.py +256 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/README.md +94 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/pyproject.toml +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/ekbatan.yaml +109 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/test_fastapi_wallet_rest_async_pg.py +255 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/README.md +94 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/pyproject.toml +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/ekbatan.yaml +109 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/test_fastapi_wallet_rest_async_sharded_pg.py +256 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/README.md +92 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/pyproject.toml +59 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/test_fastapi_wallet_rest_mariadb.py +230 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/README.md +92 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/pyproject.toml +59 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/test_fastapi_wallet_rest_mysql.py +222 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/README.md +84 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/pyproject.toml +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/test_fastapi_wallet_rest_pg.py +221 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/README.md +84 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/pyproject.toml +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/test_fastapi_wallet_rest_sharded_pg.py +222 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/README.md +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/pyproject.toml +40 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/ekbatan.yaml +108 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/test_fastapi_wallet_rest_async_mariadb.py +264 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/README.md +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/pyproject.toml +40 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/ekbatan.yaml +108 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/test_fastapi_wallet_rest_async_mysql.py +256 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/README.md +92 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/pyproject.toml +34 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/ekbatan.yaml +109 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/test_fastapi_wallet_rest_async_pg.py +255 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/README.md +92 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/pyproject.toml +34 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/app.py +273 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/ekbatan.yaml +109 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/src/fastapi_wallet_rest_async_sharded_pg/test_fastapi_wallet_rest_async_sharded_pg.py +256 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/README.md +90 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/pyproject.toml +40 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/test_fastapi_wallet_rest_mariadb.py +230 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/README.md +90 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/compose.yaml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/pyproject.toml +40 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/migrations/V0000__create_eventlog_database.sql +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/migrations/V0001__eventlog.sql +53 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/test_fastapi_wallet_rest_mysql.py +222 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/README.md +82 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/pyproject.toml +34 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/test_fastapi_wallet_rest_pg.py +221 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/README.md +82 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/pyproject.toml +34 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__main__.py +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/api.py +149 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/app.py +205 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/ekbatan.yaml +100 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/test_fastapi_wallet_rest_sharded_pg.py +222 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/README.md +80 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/compose.yaml +18 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/pyproject.toml +37 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/__main__.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/actions.py +202 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/api.py +163 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/app.py +258 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/builders.py +66 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/converters.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/ekbatan.yaml +63 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/handlers.py +76 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0004__transfer_steps.sql +15 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/model.py +293 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/repository.py +80 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/test_fastapi_wallet_saga_async_pg.py +271 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/README.md +74 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/compose.yaml +18 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/pyproject.toml +37 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/__main__.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/actions.py +199 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/api.py +164 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/app.py +177 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/builders.py +66 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/converters.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/ekbatan.yaml +54 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/handlers.py +76 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/migrations/V0004__transfer_steps.sql +15 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/model.py +293 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/repository.py +80 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/test_fastapi_wallet_saga_pg.py +240 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/README.md +80 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/compose.yaml +18 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/pyproject.toml +58 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/__main__.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/actions.py +202 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/api.py +163 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/app.py +258 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/builders.py +66 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/converters.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/ekbatan.yaml +63 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/handlers.py +76 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0004__transfer_steps.sql +15 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/model.py +293 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/repository.py +80 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/test_fastapi_wallet_saga_async_pg.py +271 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/README.md +74 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/compose.yaml +18 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/pyproject.toml +58 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/__main__.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/actions.py +199 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/api.py +164 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/app.py +177 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/builders.py +66 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/converters.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/ekbatan.yaml +54 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/handlers.py +76 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/migrations/V0004__transfer_steps.sql +15 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/model.py +293 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/repository.py +80 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/test_fastapi_wallet_saga_pg.py +240 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/README.md +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/compose.yaml +18 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/pyproject.toml +39 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/__main__.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/actions.py +202 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/api.py +163 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/app.py +258 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/builders.py +66 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/converters.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/ekbatan.yaml +63 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/handlers.py +76 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/migrations/V0004__transfer_steps.sql +15 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/model.py +293 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/repository.py +80 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/test_fastapi_wallet_saga_async_pg.py +271 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/README.md +72 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/compose.yaml +18 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/pyproject.toml +39 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/__main__.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/actions.py +199 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/api.py +164 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/app.py +177 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/builders.py +66 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/converters.py +36 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/ekbatan.yaml +54 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/handlers.py +76 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/migrations/V0004__transfer_steps.sql +15 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/model.py +293 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/repository.py +80 -0
- ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/test_fastapi_wallet_saga_pg.py +240 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/README.md +75 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/pyproject.toml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/__main__.py +47 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/app.py +218 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/ekbatan.yaml +102 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/jobs.py +118 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/test_job_worker_async_pg.py +208 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/.gitignore +6 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/Makefile +55 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/README.md +67 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/pyproject.toml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/__main__.py +47 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/app.py +176 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/ekbatan.yaml +102 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/jobs.py +103 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/test_job_worker_pg.py +189 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/README.md +75 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/pyproject.toml +50 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/__main__.py +47 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/app.py +218 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/ekbatan.yaml +102 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/jobs.py +118 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/test_job_worker_async_pg.py +208 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/Makefile +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/README.md +67 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/pyproject.toml +50 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/__main__.py +47 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/app.py +176 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/ekbatan.yaml +102 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/jobs.py +103 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/test_job_worker_pg.py +189 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/README.md +73 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/pyproject.toml +34 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/__main__.py +47 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/app.py +218 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/ekbatan.yaml +102 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/jobs.py +118 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/test_job_worker_async_pg.py +208 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/.gitignore +5 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/Makefile +44 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/README.md +65 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/compose.yaml +32 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/pyproject.toml +34 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/__init__.py +0 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/__main__.py +47 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/app.py +176 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/ekbatan.yaml +102 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/jobs.py +103 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/migrations/V0001__eventlog.sql +56 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/migrations/V0002__scheduled_tasks.sql +28 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/migrations/V0003__wallets.sql +16 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/migrations/V0004__notifications.sql +17 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/test_job_worker_pg.py +189 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/.gitignore +4 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/Makefile +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/README.md +47 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/pyproject.toml +20 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/__init__.py +1 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/__main__.py +127 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/app.py +188 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/ekbatan.yaml +33 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/schema.py +227 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/test_wallet_service_async_sqlite.py +154 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/.gitignore +4 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/Makefile +41 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/README.md +47 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/pyproject.toml +20 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/__init__.py +1 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/__main__.py +119 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/app.py +129 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/ekbatan.yaml +33 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/schema.py +227 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/test_wallet_service_sqlite.py +124 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/.gitignore +3 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/Makefile +31 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/README.md +47 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/pyproject.toml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/__init__.py +1 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/__main__.py +127 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/app.py +188 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/ekbatan.yaml +33 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/schema.py +227 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/test_wallet_service_async_sqlite.py +154 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/.gitignore +3 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/Makefile +31 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/README.md +47 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/poetry.toml +2 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/pyproject.toml +30 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/__init__.py +1 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/__main__.py +119 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/app.py +129 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/ekbatan.yaml +33 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/schema.py +227 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/test_wallet_service_sqlite.py +124 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/.gitignore +3 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/Makefile +31 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/README.md +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/pyproject.toml +22 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/__init__.py +1 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/__main__.py +127 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/actions.py +115 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/app.py +188 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/ekbatan.yaml +33 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/handlers.py +61 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/repository.py +122 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/schema.py +227 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/test_wallet_service_async_sqlite.py +154 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/.gitignore +3 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/Makefile +31 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/README.md +45 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/pyproject.toml +22 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/__init__.py +1 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/__main__.py +119 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/actions.py +114 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/app.py +129 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/builders.py +78 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/converters.py +24 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/ekbatan.yaml +33 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/handlers.py +60 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/model.py +191 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/repository.py +121 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/schema.py +227 -0
- ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/test_wallet_service_sqlite.py +124 -0
- ekbatan-0.1.0/openspec/README.md +39 -0
- ekbatan-0.1.0/openspec/changes/archive/.gitkeep +0 -0
- ekbatan-0.1.0/openspec/config.yaml +32 -0
- ekbatan-0.1.0/parity-probes/A-repository/ProbeRegistryTest.java +92 -0
- ekbatan-0.1.0/parity-probes/A-repository/ProbeRepoBase.java +370 -0
- ekbatan-0.1.0/parity-probes/A-repository/ProbeRepoMariadbTest.java +77 -0
- ekbatan-0.1.0/parity-probes/A-repository/ProbeRepoMysqlTest.java +77 -0
- ekbatan-0.1.0/parity-probes/A-repository/ProbeRepoPgTest.java +77 -0
- ekbatan-0.1.0/parity-probes/A-repository/ProbeShardedPgTest.java +276 -0
- ekbatan-0.1.0/parity-probes/A-repository/common.py +158 -0
- ekbatan-0.1.0/parity-probes/A-repository/java-vs-python.diff +483 -0
- ekbatan-0.1.0/parity-probes/A-repository/java.out +409 -0
- ekbatan-0.1.0/parity-probes/A-repository/probe_registry.py +45 -0
- ekbatan-0.1.0/parity-probes/A-repository/probe_repo.py +284 -0
- ekbatan-0.1.0/parity-probes/A-repository/probe_sharded.py +162 -0
- ekbatan-0.1.0/parity-probes/A-repository/python.out +412 -0
- ekbatan-0.1.0/parity-probes/B-actions/ParityBActionsProbeTest.java +1181 -0
- ekbatan-0.1.0/parity-probes/B-actions/java.out +200 -0
- ekbatan-0.1.0/parity-probes/B-actions/probe_actions.py +993 -0
- ekbatan-0.1.0/parity-probes/B-actions/python.out +202 -0
- ekbatan-0.1.0/parity-probes/B-actions/python.rerun-2026-10-22.out +202 -0
- ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/ParityCPureProbeTest.java +490 -0
- ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/ParityCTxProbeTest.java +606 -0
- ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/java-ids.txt +7 -0
- ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/pure.java.out +153 -0
- ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/pure.python.out +153 -0
- ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/pure_probe.py +557 -0
- ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/py-ids.txt +7 -0
- ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/tx.java.out +67 -0
- ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/tx.python.out +67 -0
- ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/tx_probe.py +496 -0
- ekbatan-0.1.0/parity-probes/D-events/ParityDProbeTest.java +863 -0
- ekbatan-0.1.0/parity-probes/D-events/java.out +144 -0
- ekbatan-0.1.0/parity-probes/D-events/probe_events.py +839 -0
- ekbatan-0.1.0/parity-probes/D-events/python.out +144 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/ParityECrossPortTest.java +182 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/ParityEJobsProbeTest.java +378 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/ParityELocksProbeTest.java +550 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/ParityEWaitProbeTest.java +34 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/crossport.java.out +16 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/crossport.python.out +20 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/crossport_probe.py +167 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/java-build.gradle.kts.diff +16 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/jobs.java.out +48 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/jobs.python.out +48 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/jobs_probe.py +330 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/locks.java.out +245 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/locks.python.out +246 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/locks_probe.py +451 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/wait.java.out +12 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/wait.python.out +12 -0
- ekbatan-0.1.0/parity-probes/E-jobs-locks/wait_probe.py +19 -0
- ekbatan-0.1.0/parity-probes/F-migrations/common.py +191 -0
- ekbatan-0.1.0/parity-probes/F-migrations/compare.py +26 -0
- ekbatan-0.1.0/parity-probes/F-migrations/cross.sh +28 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f1_naming.compare.txt +403 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f1_naming.java.out +179 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f1_naming.py +60 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f1_naming.python.out +164 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f2_lifecycle.compare.txt +516 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f2_lifecycle.java.out +240 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f2_lifecycle.py +139 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f2_lifecycle.python.out +237 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f3_lock.compare.txt +32 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f3_lock.java.out +16 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f3_lock.py +112 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f3_lock.python.out +16 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f4_shards.compare.txt +50 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f4_shards.java.out +22 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f4_shards.py +106 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f4_shards.python.out +22 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f5_locations.compare.txt +96 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f5_locations.java.out +40 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f5_locations.py +120 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f5_locations.python.out +39 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f6_cross.compare.txt +210 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f6_cross.java.out +28 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f6_cross.py +74 -0
- ekbatan-0.1.0/parity-probes/F-migrations/f6_cross.python.out +42 -0
- ekbatan-0.1.0/parity-probes/F-migrations/java/ParityF.java +210 -0
- ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFCrossProbeTest.java +72 -0
- ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFLifecycleProbeTest.java +104 -0
- ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFLocationsProbeTest.java +107 -0
- ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFLockProbeTest.java +120 -0
- ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFNamingProbeTest.java +73 -0
- ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFShardsProbeTest.java +121 -0
- ekbatan-0.1.0/parity-probes/F-migrations/java/build.gradle.kts.diff +18 -0
- ekbatan-0.1.0/parity-probes/F-migrations/make-sql.sh +79 -0
- ekbatan-0.1.0/parity-probes/F-migrations/save.sh +9 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/R__Z_capital.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/R__a_view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/R__b_view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V1.10__ten.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V1.9__nine.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V10__ten_major.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V1_5__underscore_version.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V20__gap_after_ten.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V2__two.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V4__capital_ext.SQL +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V5__.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/sub/V3__in_a_subfolder.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/callback/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/callback/afterMigrate.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/concurrent_index_pg/V1__table.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/concurrent_index_pg/V2__index.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/conf/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/conf/V1__first.sql.conf +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/delimiter_mysql/V1__proc.sql +3 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_repeatable/R__a b.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_repeatable/R__a_b.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_repeatable/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_v1_v01/V01__again.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_v1_v01/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_v1_v1.0/V1.0__again.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_v1_v1.0/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/empty/README.txt +0 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/hidden/.hidden/V2__hidden.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/hidden/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/base/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/base/V1__create.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/base/V2__more.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/crlf_v1/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/crlf_v1/V1__create.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/crlf_v1/V2__more.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/edited_v1/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/edited_v1/V1__create.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/edited_v1/V2__more.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/failing/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/failing/V1__create.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/failing/V2__more.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/failing/V3__half.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/fixed/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/fixed/V1__create.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/fixed/V2__more.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/fixed/V3__half.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/future/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/future/V1__create.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/future/V2__more.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/future/V9__future.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/joined_v1/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/joined_v1/V1__create.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/joined_v1/V2__more.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/missing_v2/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/missing_v2/V1__create.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/out_of_order/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/out_of_order/V1_5__late.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/out_of_order/V1__create.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/out_of_order/V2__more.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/renamed_v1/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/renamed_v1/V1__create_renamed.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/renamed_v1/V2__more.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/repeatable_changed/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/repeatable_changed/V1__create.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/repeatable_changed/V2__more.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/respelled_v1/R__view.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/respelled_v1/V001__create.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/life/respelled_v1/V2__more.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/lock_mysql/V1__slow.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/lock_pg/V1__slow.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/long_description/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/long_description/V2__dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/lowercase_v/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/lowercase_v/v2__lower.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/misnamed/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/misnamed/create_stuff.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/non_utf8/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/non_utf8/V2__latin1.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/placeholder/V1__first.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/placeholder_builtin/V1__first.sql +2 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/post_apply/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/post_apply/post-apply.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/python_file/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/python_file/V2__code.py +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/quick/V1__quick.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/repeatable_with_version/R1__x.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/repeatable_with_version/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/script_migration/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/script_migration/V2__touch.py +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/undo/U1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/F-migrations/sql/undo/V1__first.sql +1 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/ClockParityProbeTest.java +99 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/CodegenParityProbe.java +95 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/IdsParityProbeTest.java +196 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/JsonFormatsParityProbeTest.java +97 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/JsonParityProbeTest.java +354 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/ModelParityProbeTest.java +311 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/clock.java.out +20 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/clock.python.out +20 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/clock.python.rerun-2026-10-22.out +20 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/clock_probe.py +84 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/codegen.java.out +9 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/codegen.python.out +9 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/codegen_probe.py +68 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/gpkg/__init__.py +0 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/gpkg/builders.py +40 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/gpkg/model.py +23 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/ids.java.out +64 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/ids.python.out +64 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/ids_probe.py +164 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/java_event.json +1 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/java_formats.txt.gz +0 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/java_ids.txt +4 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/java_params.json +1 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/json.java.out +50 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/json.python.out +49 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/json_formats.java.out +1 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/json_formats.python.out +23 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/json_formats_probe.py +104 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/json_probe.py +242 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/model.java.out +80 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/model.python.out +79 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/model_probe.py +204 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/python_event.json +1 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/python_event_snake.json +1 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/python_ids.txt +4 -0
- ekbatan-0.1.0/parity-probes/G-domain-model/run-codegen-java.sh +10 -0
- ekbatan-0.1.0/parity-probes/round2-N1/N1ConfigProbeTest.java.txt +139 -0
- ekbatan-0.1.0/parity-probes/round2-N1/config.diff +181 -0
- ekbatan-0.1.0/parity-probes/round2-N1/config.java.out +236 -0
- ekbatan-0.1.0/parity-probes/round2-N1/config.python.out +115 -0
- ekbatan-0.1.0/parity-probes/round2-N1/config_probe.py +94 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s00_base.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s01_duration_bare_quoted.yaml +19 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s02_duration_bare_int.yaml +19 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s03_duration_10s.yaml +19 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s04_duration_iso_variants.yaml +21 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s05_duration_zero.yaml +19 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s06_duration_null.yaml +19 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s07_namespace_null.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s08_pool_quoted.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s09_enabled_quoted.yaml +20 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s10_enabled_upper.yaml +20 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s11_enabled_yes.yaml +20 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s12_nested_placeholder.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s13_property_reference.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s14_unresolved.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s15_two_spellings.yaml +20 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s16_snake_leaf.yaml +19 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s17_snake_parent.yaml +20 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s18_empty_jobs.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s19_empty_leh.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s20_dsp_nested.yaml +20 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s21_batch_zero.yaml +19 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s22_empty_default.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s23_pool_float.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s24_case_leaf.yaml +19 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s25_escaped_placeholder.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s26_dollar_dollar.yaml +18 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s27_handling_off.yaml +22 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s28_python_example.yaml +38 -0
- ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s29_java_example.yaml +50 -0
- ekbatan-0.1.0/parity-probes/round2-N2/builder.java.out +23 -0
- ekbatan-0.1.0/parity-probes/round2-N2/builder.python.out +16 -0
- ekbatan-0.1.0/parity-probes/round2-N2/builder_probe.py +67 -0
- ekbatan-0.1.0/parity-probes/round2-N2/codegen-check.python.out +2 -0
- ekbatan-0.1.0/parity-probes/round2-N2/java/BuilderProbe.java +127 -0
- ekbatan-0.1.0/parity-probes/round2-N2/java/SubclassProbe.java +29 -0
- ekbatan-0.1.0/parity-probes/round2-N2/java/WalletBuilder.generated.java +69 -0
- ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-mariadb.ProbeItems.generated.java +436 -0
- ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-mariadb.build.gradle.kts +186 -0
- ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-mysql.ProbeItems.generated.java +426 -0
- ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-mysql.build.gradle.kts +193 -0
- ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-pg.ProbeItems.generated.java +446 -0
- ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-pg.build.gradle.kts +154 -0
- ekbatan-0.1.0/parity-probes/round2-N2/java/run.sh +13 -0
- ekbatan-0.1.0/parity-probes/round2-N2/jooq-mariadb.java.out +27 -0
- ekbatan-0.1.0/parity-probes/round2-N2/jooq-mysql.java.out +26 -0
- ekbatan-0.1.0/parity-probes/round2-N2/jooq-pg.java.out +30 -0
- ekbatan-0.1.0/parity-probes/round2-N2/migrations/mariadb/V0001__probe.sql +31 -0
- ekbatan-0.1.0/parity-probes/round2-N2/migrations/mysql/V0001__probe.sql +30 -0
- ekbatan-0.1.0/parity-probes/round2-N2/migrations/pg/V0001__probe.sql +37 -0
- ekbatan-0.1.0/parity-probes/round2-N2/mypy.python.out +7 -0
- ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/__init__.py +0 -0
- ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/builders.py +66 -0
- ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/generic_builders.py +32 -0
- ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/generic_model.py +18 -0
- ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/model.py +35 -0
- ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/sub_builders.py +53 -0
- ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/sub_model.py +12 -0
- ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/usage.py +15 -0
- ekbatan-0.1.0/parity-probes/round2-N2/py-schema/mariadb/schema.py +57 -0
- ekbatan-0.1.0/parity-probes/round2-N2/py-schema/mysql/schema.py +56 -0
- ekbatan-0.1.0/parity-probes/round2-N2/py-schema/pg/schema.py +68 -0
- ekbatan-0.1.0/parity-probes/round2-N2/py-schema-from-java/mariadb/schema.py +55 -0
- ekbatan-0.1.0/parity-probes/round2-N2/py-schema-from-java/mysql/schema.py +55 -0
- ekbatan-0.1.0/parity-probes/round2-N2/py-schema-from-java/pg/schema.py +55 -0
- ekbatan-0.1.0/parity-probes/round2-N2/py-schema-from-java/run.out +22 -0
- ekbatan-0.1.0/parity-probes/round2-N2/schemagen_import.python.out +13 -0
- ekbatan-0.1.0/parity-probes/round2-N2/schemagen_import_probe.py +32 -0
- ekbatan-0.1.0/parity-probes/round2-N2/schemagen_runtime.python.out +17 -0
- ekbatan-0.1.0/parity-probes/round2-N2/schemagen_runtime_probe.py +109 -0
- ekbatan-0.1.0/parity-probes/round2-N2/stale/migrations/V0001__t.sql +1 -0
- ekbatan-0.1.0/parity-probes/round2-N2/stale/schema.py +35 -0
- ekbatan-0.1.0/parity-probes/round2-N2/stale.java.out +4 -0
- ekbatan-0.1.0/parity-probes/round2-N2/stale.python.out +3 -0
- ekbatan-0.1.0/parity-probes/round2-N2/stale_probe.py +30 -0
- ekbatan-0.1.0/parity-probes/round2-N3/ParityN3EventsProbeTest.java +403 -0
- ekbatan-0.1.0/parity-probes/round2-N3/ParityN3ObsProbeTest.java +439 -0
- ekbatan-0.1.0/parity-probes/round2-N3/events.java-vs-python.diff +96 -0
- ekbatan-0.1.0/parity-probes/round2-N3/events.java.out +67 -0
- ekbatan-0.1.0/parity-probes/round2-N3/events.python.out +56 -0
- ekbatan-0.1.0/parity-probes/round2-N3/events_probe.py +346 -0
- ekbatan-0.1.0/parity-probes/round2-N3/java-build.gradle.kts.diff +25 -0
- ekbatan-0.1.0/parity-probes/round2-N3/obs.java-vs-python.diff +256 -0
- ekbatan-0.1.0/parity-probes/round2-N3/obs.java.out +182 -0
- ekbatan-0.1.0/parity-probes/round2-N3/obs.python.out +176 -0
- ekbatan-0.1.0/parity-probes/round2-N3/obs_probe.py +411 -0
- ekbatan-0.1.0/parity-probes/round2-N3/redis_metric.python.out +1 -0
- ekbatan-0.1.0/parity-probes/round2-N3/redis_metric_probe.py +20 -0
- ekbatan-0.1.0/parity-probes/round2-N4/ParityN4ProbeTest.java +437 -0
- ekbatan-0.1.0/parity-probes/round2-N4/java.out +61 -0
- ekbatan-0.1.0/parity-probes/round2-N4/probe_base_class.py +53 -0
- ekbatan-0.1.0/parity-probes/round2-N4/probe_errors.py +392 -0
- ekbatan-0.1.0/parity-probes/round2-N4/python-base-class.out +6 -0
- ekbatan-0.1.0/parity-probes/round2-N4/python.out +61 -0
- ekbatan-0.1.0/parity-probes/round2-N5/a.mariadb.java.out +40 -0
- ekbatan-0.1.0/parity-probes/round2-N5/a.mariadb.python.out +40 -0
- ekbatan-0.1.0/parity-probes/round2-N5/a.mysql.java.out +40 -0
- ekbatan-0.1.0/parity-probes/round2-N5/a.mysql.python.out +40 -0
- ekbatan-0.1.0/parity-probes/round2-N5/a.pg.java.out +44 -0
- ekbatan-0.1.0/parity-probes/round2-N5/a.pg.python.out +44 -0
- ekbatan-0.1.0/parity-probes/round2-N5/b.pg.java.out +20 -0
- ekbatan-0.1.0/parity-probes/round2-N5/b.pg.python.out +20 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.mariadb.java-read.out +22 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.mariadb.java-write.out +4 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.mariadb.python-read.out +22 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.mariadb.python-write.out +4 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.mysql.java-read.out +22 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.mysql.java-write.out +4 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.mysql.python-read.out +22 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.mysql.python-write.out +4 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.pg.java-read.out +22 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.pg.java-write.out +4 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.pg.python-read.out +22 -0
- ekbatan-0.1.0/parity-probes/round2-N5/c.pg.python-write.out +4 -0
- ekbatan-0.1.0/parity-probes/round2-N5/common.py +284 -0
- ekbatan-0.1.0/parity-probes/round2-N5/containers.sh +14 -0
- ekbatan-0.1.0/parity-probes/round2-N5/d.pg.java.out +16 -0
- ekbatan-0.1.0/parity-probes/round2-N5/d.pg.python.full +785 -0
- ekbatan-0.1.0/parity-probes/round2-N5/d.pg.python.out +16 -0
- ekbatan-0.1.0/parity-probes/round2-N5/d3.pg.python.out +6 -0
- ekbatan-0.1.0/parity-probes/round2-N5/d_stop_steps.py +18 -0
- ekbatan-0.1.0/parity-probes/round2-N5/java/ParityN5ProbeTest.java.tmpl +516 -0
- ekbatan-0.1.0/parity-probes/round2-N5/java/ParityN5ProbeTest.pg.java +988 -0
- ekbatan-0.1.0/parity-probes/round2-N5/java/gen.sh +20 -0
- ekbatan-0.1.0/parity-probes/round2-N5/java/more.java.part +473 -0
- ekbatan-0.1.0/parity-probes/round2-N5/java/run.sh +8 -0
- ekbatan-0.1.0/parity-probes/round2-N5/n5-d-java-2.out +16 -0
- ekbatan-0.1.0/parity-probes/round2-N5/n5-d-java-3.out +16 -0
- ekbatan-0.1.0/parity-probes/round2-N5/n5-d-py-2.out +16 -0
- ekbatan-0.1.0/parity-probes/round2-N5/n5-d-py-3.out +16 -0
- ekbatan-0.1.0/parity-probes/round2-N5/probe_a.py +306 -0
- ekbatan-0.1.0/parity-probes/round2-N5/probe_b.py +140 -0
- ekbatan-0.1.0/parity-probes/round2-N5/probe_c.py +228 -0
- ekbatan-0.1.0/parity-probes/round2-N5/probe_d.py +180 -0
- ekbatan-0.1.0/parity-probes/round2-N5/setup.py +77 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/cfg/block0.yaml +21 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/cfg/block1.toml +15 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/cfg/block2.json +5 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/cfg/block3.ini +19 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/cfg/block4.yaml +9 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/codegen_builders.out +63 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/column_helpers.out +4 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/column_helpers.py +16 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/common.py +17 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/config_files_claims.out +13 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/config_files_claims.py +24 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/executor_claims.out +15 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/executor_claims.py +76 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/fanout_threads.out +2 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/fanout_threads.py +23 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/getting_started.out +10 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/getting_started.py +99 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/model_claims.out +18 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/model_claims.py +82 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/outbox_row.out +3 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/outbox_row.py +15 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/pool_claims.out +6 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/pool_claims.py +35 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/pool_count.out +3 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/pool_count.py +19 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/pool_restart.py +28 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/readme_counts.out +5 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/repo_claims.out +15 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/repo_claims.py +32 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/sharding_claims.out +24 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/sharding_claims.py +128 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/tx_claims.out +10 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/tx_claims.py +95 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/wiring_claims.out +10 -0
- ekbatan-0.1.0/parity-probes/round2-N6/core/wiring_claims.py +30 -0
- ekbatan-0.1.0/parity-probes/round2-N6/events/e1_ddl.out +132 -0
- ekbatan-0.1.0/parity-probes/round2-N6/events/e1_ddl.py +14 -0
- ekbatan-0.1.0/parity-probes/round2-N6/events/e2_pipeline.out +45 -0
- ekbatan-0.1.0/parity-probes/round2-N6/events/e2_pipeline.py +277 -0
- ekbatan-0.1.0/parity-probes/round2-N6/events/e3_streaming.out +10 -0
- ekbatan-0.1.0/parity-probes/round2-N6/events/e3_streaming.py +34 -0
- ekbatan-0.1.0/parity-probes/round2-N6/events/e4_wiring.out +2 -0
- ekbatan-0.1.0/parity-probes/round2-N6/events/e4_wiring.py +64 -0
- ekbatan-0.1.0/parity-probes/round2-N6/links.out +11 -0
- ekbatan-0.1.0/parity-probes/round2-N6/links.py +14 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/dispatch_concurrent_test.out +1 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/handling_job.out +5 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/handling_job.py +26 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/jobs_claims.out +17 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/jobs_claims.py +83 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/jobs_pg.out +10 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/jobs_pg.py +55 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/locks_claims.out +60 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/locks_claims.py +125 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_claims.out +7 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_claims.py +40 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_preping.out +16 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_preping.py +27 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_preping_one.out +10 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_preping_one.py +27 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_refill.out +3 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_refill.py +26 -0
- ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/test_count.out +1 -0
- ekbatan-0.1.0/parity-probes/round2-N6/migrations/m1_sqlite_claims.out +90 -0
- ekbatan-0.1.0/parity-probes/round2-N6/migrations/m1_sqlite_claims.py +179 -0
- ekbatan-0.1.0/parity-probes/round2-N6/migrations/m2_lineendings_gone.out +4 -0
- ekbatan-0.1.0/parity-probes/round2-N6/migrations/m2_lineendings_gone.py +26 -0
- ekbatan-0.1.0/parity-probes/round2-N6/migrations/m3_pg_mysql.out +12 -0
- ekbatan-0.1.0/parity-probes/round2-N6/migrations/m3_pg_mysql.py +91 -0
- ekbatan-0.1.0/parity-probes/round2-N6/migrations/m4_shards.out +4 -0
- ekbatan-0.1.0/parity-probes/round2-N6/migrations/m4_shards.py +28 -0
- ekbatan-0.1.0/parity-probes/round2-N6/migrations/m5_snippets.out +11 -0
- ekbatan-0.1.0/parity-probes/round2-N6/migrations/m5_snippets.py +56 -0
- ekbatan-0.1.0/parity-probes/round2-N6/pair_docs_website.out +1549 -0
- ekbatan-0.1.0/parity-probes/round2-N6/pair_docs_website.py +38 -0
- ekbatan-0.1.0/parity-probes/round2-N6/readme_counts.out +6 -0
- ekbatan-0.1.0/parity-probes/round2-N6/readme_counts.sh +10 -0
- ekbatan-0.1.0/parity-probes/round2-N6/retry_match.out +3 -0
- ekbatan-0.1.0/parity-probes/round2-N6/retry_match.py +9 -0
- ekbatan-0.1.0/parity-probes/round2-N6/sentence_diff.out +603 -0
- ekbatan-0.1.0/parity-probes/round2-N6/sentence_diff.py +30 -0
- ekbatan-0.1.0/parity-probes/round2-N6/website_links.out +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeRegistryTest.java +92 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeRepoBase.java +370 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeRepoMariadbTest.java +77 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeRepoMysqlTest.java +77 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeRepoPgTest.java +77 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeShardedPgTest.java +276 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/common.py +158 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/java-vs-python.diff +483 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/java.out +409 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/now.out +412 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/probe_registry.py +45 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/probe_repo.py +284 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/probe_sharded.py +162 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/python.out +412 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/registry.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/registry.now.out +3 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/repo.err +7 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/repo.now.out +357 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/sharded.err +8 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A-repository/sharded.now.out +52 -0
- ekbatan-0.1.0/parity-probes/round2-R0/A.cmp.txt +825 -0
- ekbatan-0.1.0/parity-probes/round2-R0/B-actions/ParityBActionsProbeTest.java +1181 -0
- ekbatan-0.1.0/parity-probes/round2-R0/B-actions/err.txt +63 -0
- ekbatan-0.1.0/parity-probes/round2-R0/B-actions/java.out +200 -0
- ekbatan-0.1.0/parity-probes/round2-R0/B-actions/now.out +202 -0
- ekbatan-0.1.0/parity-probes/round2-R0/B-actions/probe_actions.py +989 -0
- ekbatan-0.1.0/parity-probes/round2-R0/B-actions/python.out +202 -0
- ekbatan-0.1.0/parity-probes/round2-R0/B.cmp.txt +189 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-pure.cmp.txt +193 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/ParityCPureProbeTest.java +490 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/ParityCTxProbeTest.java +606 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/java-ids.txt +7 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/pure.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/pure.java.out +153 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/pure.now.out +153 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/pure.python.out +153 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/pure_probe.py +557 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/py-ids.txt +7 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/tx.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/tx.java.out +67 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/tx.now.out +67 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/tx.python.out +67 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/tx_probe.py +496 -0
- ekbatan-0.1.0/parity-probes/round2-R0/C-tx.cmp.txt +73 -0
- ekbatan-0.1.0/parity-probes/round2-R0/D-events/ParityDProbeTest.java +863 -0
- ekbatan-0.1.0/parity-probes/round2-R0/D-events/err.txt +63 -0
- ekbatan-0.1.0/parity-probes/round2-R0/D-events/java.out +144 -0
- ekbatan-0.1.0/parity-probes/round2-R0/D-events/now.out +144 -0
- ekbatan-0.1.0/parity-probes/round2-R0/D-events/probe_events.py +839 -0
- ekbatan-0.1.0/parity-probes/round2-R0/D-events/python.out +144 -0
- ekbatan-0.1.0/parity-probes/round2-R0/D.cmp.txt +217 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/ParityECrossPortTest.java +182 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/ParityEJobsProbeTest.java +378 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/ParityELocksProbeTest.java +550 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/ParityEWaitProbeTest.java +34 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/crossport.java.out +16 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/crossport.now.java.out +16 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/crossport.now.out +20 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/crossport.python.out +20 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/crossport_probe.py +167 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/java-build.gradle.kts.diff +16 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/jobs.err +483 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/jobs.java.out +48 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/jobs.now.out +48 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/jobs.python.out +48 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/jobs_probe.py +330 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/locks.err +308 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/locks.java.out +245 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/locks.now.out +246 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/locks.python.out +246 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/locks_probe.py +451 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/py-holds.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/py-jobs.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/py-tries.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/wait.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/wait.java.out +12 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/wait.now.out +12 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/wait.python.out +12 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/wait_probe.py +19 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-jobs.cmp.txt +17 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-locks.cmp.txt +165 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-wait.cmp.txt +5 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-xport.head.sorted +35 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-xport.now.sorted +35 -0
- ekbatan-0.1.0/parity-probes/round2-R0/E-xport.r1.sorted +31 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ClockParityProbeTest.java +99 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/CodegenParityProbe.java +95 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/IdsParityProbeTest.java +196 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/JsonFormatsParityProbeTest.java +97 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/JsonParityProbeTest.java +354 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ModelParityProbeTest.java +311 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/clock.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/clock.java.out +20 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/clock.now.out +20 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/clock.python.out +20 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/clock_probe.py +68 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/codegen.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/codegen.java.out +9 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/codegen.now.out +9 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/codegen.python.out +9 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/codegen_probe.py +68 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/gpkg/__init__.py +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/gpkg/builders.py +40 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/gpkg/model.py +23 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ids.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ids.java.out +64 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ids.now.out +64 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ids.python.out +64 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ids_probe.py +164 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/java_event.json +1 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/java_formats.txt.gz +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/java_ids.txt +4 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/java_params.json +1 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json.java.out +50 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json.now.out +49 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json.python.out +49 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_formats.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_formats.java.out +1 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_formats.now.out +26 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_formats.python.out +23 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_formats_probe.py +101 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_probe.py +242 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/model.err +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/model.java.out +80 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/model.now.out +79 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/model.python.out +79 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/model_probe.py +204 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/python_event.json +1 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/python_event_snake.json +1 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/python_ids.txt +4 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/run-codegen-java.sh +10 -0
- ekbatan-0.1.0/parity-probes/round2-R0/G.cmp.txt +528 -0
- ekbatan-0.1.0/parity-probes/round2-R0/compare.py +47 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/A-repository/java.out +409 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/A-repository/python.out +403 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/B-actions/java.out +200 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/B-actions/python.out +202 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/C-transactions-sharding-config/pure.java.out +153 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/C-transactions-sharding-config/pure.python.out +153 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/C-transactions-sharding-config/tx.java.out +67 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/C-transactions-sharding-config/tx.python.out +67 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/D-events/java.out +144 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/D-events/python.out +145 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/crossport.java.out +16 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/crossport.python.out +18 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/jobs.java.out +48 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/jobs.python.out +48 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/locks.java.out +245 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/locks.python.out +246 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/wait.java.out +12 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/wait.python.out +12 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/clock.java.out +20 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/clock.python.out +20 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/codegen.java.out +9 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/codegen.python.out +9 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/ids.java.out +64 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/ids.python.out +64 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/json.java.out +49 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/json.python.out +49 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/json_formats.java.out +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/json_formats.python.out +0 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/model.java.out +80 -0
- ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/model.python.out +79 -0
- ekbatan-0.1.0/pyproject.toml +191 -0
- ekbatan-0.1.0/scripts/bench-async.py +271 -0
- ekbatan-0.1.0/scripts/check-api.py +168 -0
- ekbatan-0.1.0/scripts/check-builders.py +124 -0
- ekbatan-0.1.0/scripts/check-setup-guide.py +402 -0
- ekbatan-0.1.0/scripts/divergence.py +79 -0
- ekbatan-0.1.0/scripts/docs-parity.py +250 -0
- ekbatan-0.1.0/scripts/docs-website-sync.py +187 -0
- ekbatan-0.1.0/scripts/flyway-parity.py +1226 -0
- ekbatan-0.1.0/scripts/ledger.py +94 -0
- ekbatan-0.1.0/scripts/links.py +90 -0
- ekbatan-0.1.0/scripts/sync-examples.py +663 -0
- ekbatan-0.1.0/src/ekbatan/__init__.py +262 -0
- ekbatan-0.1.0/src/ekbatan/_builder.py +41 -0
- ekbatan-0.1.0/src/ekbatan/_credentials.py +162 -0
- ekbatan-0.1.0/src/ekbatan/_guards.py +64 -0
- ekbatan-0.1.0/src/ekbatan/_json.py +839 -0
- ekbatan-0.1.0/src/ekbatan/_logtext.py +36 -0
- ekbatan-0.1.0/src/ekbatan/_metrics.py +56 -0
- ekbatan-0.1.0/src/ekbatan/_redact.py +77 -0
- ekbatan-0.1.0/src/ekbatan/_tracing.py +80 -0
- ekbatan-0.1.0/src/ekbatan/_yoyo.py +617 -0
- ekbatan-0.1.0/src/ekbatan/accounting.py +103 -0
- ekbatan-0.1.0/src/ekbatan/action/__init__.py +40 -0
- ekbatan-0.1.0/src/ekbatan/action/action.py +129 -0
- ekbatan-0.1.0/src/ekbatan/action/executor.py +714 -0
- ekbatan-0.1.0/src/ekbatan/action/outbox.py +446 -0
- ekbatan-0.1.0/src/ekbatan/action/persister.py +141 -0
- ekbatan-0.1.0/src/ekbatan/action/plan.py +143 -0
- ekbatan-0.1.0/src/ekbatan/action/registry.py +127 -0
- ekbatan-0.1.0/src/ekbatan/aio/__init__.py +73 -0
- ekbatan-0.1.0/src/ekbatan/aio/action.py +42 -0
- ekbatan-0.1.0/src/ekbatan/aio/executor.py +166 -0
- ekbatan-0.1.0/src/ekbatan/aio/locks/__init__.py +30 -0
- ekbatan-0.1.0/src/ekbatan/aio/locks/base.py +198 -0
- ekbatan-0.1.0/src/ekbatan/aio/locks/redis.py +244 -0
- ekbatan-0.1.0/src/ekbatan/aio/locks/sql.py +280 -0
- ekbatan-0.1.0/src/ekbatan/aio/outbox.py +120 -0
- ekbatan-0.1.0/src/ekbatan/aio/persistence.py +460 -0
- ekbatan-0.1.0/src/ekbatan/aio/persister.py +64 -0
- ekbatan-0.1.0/src/ekbatan/aio/repository.py +443 -0
- ekbatan-0.1.0/src/ekbatan/aio/testing.py +93 -0
- ekbatan-0.1.0/src/ekbatan/clock.py +151 -0
- ekbatan-0.1.0/src/ekbatan/codegen.py +343 -0
- ekbatan-0.1.0/src/ekbatan/config.py +622 -0
- ekbatan-0.1.0/src/ekbatan/config_files.py +683 -0
- ekbatan-0.1.0/src/ekbatan/distributedjobs/__init__.py +696 -0
- ekbatan-0.1.0/src/ekbatan/distributedjobs/_shutdown.py +111 -0
- ekbatan-0.1.0/src/ekbatan/distributedjobs/config.py +103 -0
- ekbatan-0.1.0/src/ekbatan/domain.py +881 -0
- ekbatan-0.1.0/src/ekbatan/errors.py +151 -0
- ekbatan-0.1.0/src/ekbatan/events/__init__.py +43 -0
- ekbatan-0.1.0/src/ekbatan/events/_across.py +75 -0
- ekbatan-0.1.0/src/ekbatan/events/config.py +133 -0
- ekbatan-0.1.0/src/ekbatan/events/dispatch.py +386 -0
- ekbatan-0.1.0/src/ekbatan/events/fanout.py +149 -0
- ekbatan-0.1.0/src/ekbatan/events/handler.py +352 -0
- ekbatan-0.1.0/src/ekbatan/events/jobs.py +331 -0
- ekbatan-0.1.0/src/ekbatan/events/loop.py +159 -0
- ekbatan-0.1.0/src/ekbatan/events/notification.py +237 -0
- ekbatan-0.1.0/src/ekbatan/events/repository.py +226 -0
- ekbatan-0.1.0/src/ekbatan/fetching.py +275 -0
- ekbatan-0.1.0/src/ekbatan/ids.py +236 -0
- ekbatan-0.1.0/src/ekbatan/locks/__init__.py +26 -0
- ekbatan-0.1.0/src/ekbatan/locks/_deadlines.py +122 -0
- ekbatan-0.1.0/src/ekbatan/locks/_holder.py +225 -0
- ekbatan-0.1.0/src/ekbatan/locks/base.py +176 -0
- ekbatan-0.1.0/src/ekbatan/locks/redis.py +334 -0
- ekbatan-0.1.0/src/ekbatan/locks/sql.py +385 -0
- ekbatan-0.1.0/src/ekbatan/migrations.py +1849 -0
- ekbatan-0.1.0/src/ekbatan/persistence.py +772 -0
- ekbatan-0.1.0/src/ekbatan/py.typed +0 -0
- ekbatan-0.1.0/src/ekbatan/repository.py +1774 -0
- ekbatan-0.1.0/src/ekbatan/schema.py +459 -0
- ekbatan-0.1.0/src/ekbatan/schemagen/__init__.py +423 -0
- ekbatan-0.1.0/src/ekbatan/schemagen/__main__.py +6 -0
- ekbatan-0.1.0/src/ekbatan/schemagen/_config.py +400 -0
- ekbatan-0.1.0/src/ekbatan/schemagen/_records.py +598 -0
- ekbatan-0.1.0/src/ekbatan/schemagen/_reflect.py +1307 -0
- ekbatan-0.1.0/src/ekbatan/schemagen/_render.py +1637 -0
- ekbatan-0.1.0/src/ekbatan/schemagen/_types.py +596 -0
- ekbatan-0.1.0/src/ekbatan/sharding.py +257 -0
- ekbatan-0.1.0/src/ekbatan/streaming.py +201 -0
- ekbatan-0.1.0/src/ekbatan/testing.py +411 -0
- ekbatan-0.1.0/src/ekbatan/time.py +44 -0
- ekbatan-0.1.0/tests/backends.py +340 -0
- ekbatan-0.1.0/tests/conftest.py +503 -0
- ekbatan-0.1.0/tests/driver_settings.tsv +156 -0
- ekbatan-0.1.0/tests/fixtures/__init__.py +11 -0
- ekbatan-0.1.0/tests/fixtures/actions.py +258 -0
- ekbatan-0.1.0/tests/fixtures/builders.py +78 -0
- ekbatan-0.1.0/tests/fixtures/config.py +34 -0
- ekbatan-0.1.0/tests/fixtures/domain.py +206 -0
- ekbatan-0.1.0/tests/fixtures/executing.py +46 -0
- ekbatan-0.1.0/tests/fixtures/handlers.py +159 -0
- ekbatan-0.1.0/tests/fixtures/jobs.py +73 -0
- ekbatan-0.1.0/tests/fixtures/logins.py +23 -0
- ekbatan-0.1.0/tests/fixtures/migrating.py +78 -0
- ekbatan-0.1.0/tests/fixtures/redisson/RedissonRecordingTest.java +52 -0
- ekbatan-0.1.0/tests/fixtures/redisson/java-3.39.0.monitor.log +95 -0
- ekbatan-0.1.0/tests/fixtures/repositories.py +164 -0
- ekbatan-0.1.0/tests/fixtures/schema.py +246 -0
- ekbatan-0.1.0/tests/integration/test_accounting.py +116 -0
- ekbatan-0.1.0/tests/integration/test_action_testing.py +65 -0
- ekbatan-0.1.0/tests/integration/test_actions.py +745 -0
- ekbatan-0.1.0/tests/integration/test_async.py +642 -0
- ekbatan-0.1.0/tests/integration/test_async_handlers.py +295 -0
- ekbatan-0.1.0/tests/integration/test_async_locks.py +168 -0
- ekbatan-0.1.0/tests/integration/test_async_parity.py +692 -0
- ekbatan-0.1.0/tests/integration/test_change_persister.py +150 -0
- ekbatan-0.1.0/tests/integration/test_concurrency.py +222 -0
- ekbatan-0.1.0/tests/integration/test_config_files_connect.py +133 -0
- ekbatan-0.1.0/tests/integration/test_data_source_properties.py +84 -0
- ekbatan-0.1.0/tests/integration/test_event_jobs.py +308 -0
- ekbatan-0.1.0/tests/integration/test_event_persister.py +298 -0
- ekbatan-0.1.0/tests/integration/test_event_repositories.py +301 -0
- ekbatan-0.1.0/tests/integration/test_eventlog_location.py +86 -0
- ekbatan-0.1.0/tests/integration/test_events.py +770 -0
- ekbatan-0.1.0/tests/integration/test_execute_order.py +59 -0
- ekbatan-0.1.0/tests/integration/test_executor.py +577 -0
- ekbatan-0.1.0/tests/integration/test_fluent_reads.py +244 -0
- ekbatan-0.1.0/tests/integration/test_id_persistence.py +271 -0
- ekbatan-0.1.0/tests/integration/test_jobs.py +549 -0
- ekbatan-0.1.0/tests/integration/test_jobs_at_exit.py +393 -0
- ekbatan-0.1.0/tests/integration/test_json_columns.py +64 -0
- ekbatan-0.1.0/tests/integration/test_locks.py +542 -0
- ekbatan-0.1.0/tests/integration/test_migration_concurrency.py +308 -0
- ekbatan-0.1.0/tests/integration/test_migrations.py +1450 -0
- ekbatan-0.1.0/tests/integration/test_outbox.py +351 -0
- ekbatan-0.1.0/tests/integration/test_performance.py +327 -0
- ekbatan-0.1.0/tests/integration/test_persistence.py +228 -0
- ekbatan-0.1.0/tests/integration/test_record_columns.py +522 -0
- ekbatan-0.1.0/tests/integration/test_redis_locks.py +741 -0
- ekbatan-0.1.0/tests/integration/test_refusals.py +962 -0
- ekbatan-0.1.0/tests/integration/test_registries.py +235 -0
- ekbatan-0.1.0/tests/integration/test_repository.py +769 -0
- ekbatan-0.1.0/tests/integration/test_repository_mapping.py +93 -0
- ekbatan-0.1.0/tests/integration/test_repository_raw_keys.py +231 -0
- ekbatan-0.1.0/tests/integration/test_routing.py +758 -0
- ekbatan-0.1.0/tests/integration/test_schema_indexes.py +85 -0
- ekbatan-0.1.0/tests/integration/test_schemagen.py +1191 -0
- ekbatan-0.1.0/tests/integration/test_schemagen_cli.py +530 -0
- ekbatan-0.1.0/tests/integration/test_schemagen_converters.py +530 -0
- ekbatan-0.1.0/tests/integration/test_schemagen_hardening.py +1115 -0
- ekbatan-0.1.0/tests/integration/test_schemagen_round2.py +122 -0
- ekbatan-0.1.0/tests/integration/test_schemagen_round_trip.py +784 -0
- ekbatan-0.1.0/tests/integration/test_schemagen_table_names.py +234 -0
- ekbatan-0.1.0/tests/integration/test_schemagen_time_kinds.py +239 -0
- ekbatan-0.1.0/tests/integration/test_schemagen_types.py +378 -0
- ekbatan-0.1.0/tests/integration/test_secrets_stay_secret.py +145 -0
- ekbatan-0.1.0/tests/integration/test_sigterm_warning.py +161 -0
- ekbatan-0.1.0/tests/integration/test_time_as_is_events.py +118 -0
- ekbatan-0.1.0/tests/integration/test_time_kinds_events.py +161 -0
- ekbatan-0.1.0/tests/integration/test_time_kinds_handlers.py +144 -0
- ekbatan-0.1.0/tests/integration/test_timestamps.py +220 -0
- ekbatan-0.1.0/tests/integration/test_transaction_threads.py +277 -0
- ekbatan-0.1.0/tests/integration/test_update_writes_the_record.py +338 -0
- ekbatan-0.1.0/tests/integration/test_validate_on_load.py +109 -0
- ekbatan-0.1.0/tests/migrations/generate.py +145 -0
- ekbatan-0.1.0/tests/migrations/mysql/V0001__schema.sql +49 -0
- ekbatan-0.1.0/tests/migrations/mysql-eventlog/V0000__create_eventlog_database.sql +4 -0
- ekbatan-0.1.0/tests/migrations/mysql-eventlog/V0001__eventlog.sql +49 -0
- ekbatan-0.1.0/tests/migrations/postgres/V0001__schema.sql +98 -0
- ekbatan-0.1.0/tests/migrations/sqlite/V0001__schema.sql +96 -0
- ekbatan-0.1.0/tests/modes.py +727 -0
- ekbatan-0.1.0/tests/records.py +71 -0
- ekbatan-0.1.0/tests/schemagen_support.py +608 -0
- ekbatan-0.1.0/tests/schemagen_type_cases.py +368 -0
- ekbatan-0.1.0/tests/test_structure.py +218 -0
- ekbatan-0.1.0/tests/unit/test_action_name.py +47 -0
- ekbatan-0.1.0/tests/unit/test_action_spec.py +693 -0
- ekbatan-0.1.0/tests/unit/test_action_testing.py +249 -0
- ekbatan-0.1.0/tests/unit/test_async_action_spec.py +179 -0
- ekbatan-0.1.0/tests/unit/test_async_engine.py +271 -0
- ekbatan-0.1.0/tests/unit/test_builders.py +564 -0
- ekbatan-0.1.0/tests/unit/test_clock.py +209 -0
- ekbatan-0.1.0/tests/unit/test_codegen.py +303 -0
- ekbatan-0.1.0/tests/unit/test_config.py +375 -0
- ekbatan-0.1.0/tests/unit/test_config_files.py +687 -0
- ekbatan-0.1.0/tests/unit/test_data_source.py +282 -0
- ekbatan-0.1.0/tests/unit/test_data_source_login.py +325 -0
- ekbatan-0.1.0/tests/unit/test_documented_defaults.py +61 -0
- ekbatan-0.1.0/tests/unit/test_domain.py +986 -0
- ekbatan-0.1.0/tests/unit/test_ekbatan_config_file.py +306 -0
- ekbatan-0.1.0/tests/unit/test_errors.py +174 -0
- ekbatan-0.1.0/tests/unit/test_event_handler_registry.py +277 -0
- ekbatan-0.1.0/tests/unit/test_event_job_loop.py +100 -0
- ekbatan-0.1.0/tests/unit/test_event_notification.py +69 -0
- ekbatan-0.1.0/tests/unit/test_fetching.py +307 -0
- ekbatan-0.1.0/tests/unit/test_ids.py +297 -0
- ekbatan-0.1.0/tests/unit/test_java_log_names.py +132 -0
- ekbatan-0.1.0/tests/unit/test_jobs.py +287 -0
- ekbatan-0.1.0/tests/unit/test_json.py +358 -0
- ekbatan-0.1.0/tests/unit/test_lock_deadlines.py +103 -0
- ekbatan-0.1.0/tests/unit/test_locks.py +305 -0
- ekbatan-0.1.0/tests/unit/test_locks_on_event_loop.py +76 -0
- ekbatan-0.1.0/tests/unit/test_migration_model.py +421 -0
- ekbatan-0.1.0/tests/unit/test_migration_scripts.py +776 -0
- ekbatan-0.1.0/tests/unit/test_model_event_names_its_model.py +91 -0
- ekbatan-0.1.0/tests/unit/test_outbox.py +229 -0
- ekbatan-0.1.0/tests/unit/test_persistence.py +319 -0
- ekbatan-0.1.0/tests/unit/test_policies.py +149 -0
- ekbatan-0.1.0/tests/unit/test_refusals.py +154 -0
- ekbatan-0.1.0/tests/unit/test_repository_read_names.py +85 -0
- ekbatan-0.1.0/tests/unit/test_repository_record_type.py +75 -0
- ekbatan-0.1.0/tests/unit/test_schema_converters.py +200 -0
- ekbatan-0.1.0/tests/unit/test_schemagen_completeness.py +254 -0
- ekbatan-0.1.0/tests/unit/test_schemagen_config.py +696 -0
- ekbatan-0.1.0/tests/unit/test_schemagen_hardening.py +1139 -0
- ekbatan-0.1.0/tests/unit/test_schemagen_records.py +703 -0
- ekbatan-0.1.0/tests/unit/test_schemagen_table_names.py +312 -0
- ekbatan-0.1.0/tests/unit/test_secrets_are_never_printed.py +267 -0
- ekbatan-0.1.0/tests/unit/test_setup_guide.py +97 -0
- ekbatan-0.1.0/tests/unit/test_shard_concurrency.py +108 -0
- ekbatan-0.1.0/tests/unit/test_shutdown_hook.py +198 -0
- ekbatan-0.1.0/tests/unit/test_sigterm_warning.py +218 -0
- ekbatan-0.1.0/tests/unit/test_streaming.py +191 -0
- ekbatan-0.1.0/tests/unit/test_suite_migrations.py +52 -0
- ekbatan-0.1.0/tests/unit/test_time_as_is.py +72 -0
- ekbatan-0.1.0/tests/unit/test_time_as_is_layers.py +153 -0
- ekbatan-0.1.0/tests/unit/test_time_kinds_json.py +401 -0
- ekbatan-0.1.0/tests/unit/test_time_kinds_mypy.py +226 -0
- ekbatan-0.1.0/tests/unit/test_typed_records_mypy.py +409 -0
- ekbatan-0.1.0/tests/unit/test_validate.py +538 -0
- ekbatan-0.1.0/tests/unit/test_yoyo_contract.py +104 -0
- ekbatan-0.1.0/uv.lock +1840 -0
- ekbatan-0.1.0/website/.gitignore +3 -0
- ekbatan-0.1.0/website/CONTENT-PARITY.md +177 -0
- ekbatan-0.1.0/website/PALETTES.md +216 -0
- ekbatan-0.1.0/website/PARITY.md +142 -0
- ekbatan-0.1.0/website/README.md +104 -0
- ekbatan-0.1.0/website/astro.config.mjs +36 -0
- ekbatan-0.1.0/website/package-lock.json +6193 -0
- ekbatan-0.1.0/website/package.json +19 -0
- ekbatan-0.1.0/website/public/fonts/dmsans-v17-rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K6z9mXg.woff2 +0 -0
- ekbatan-0.1.0/website/public/fonts/dmsans-v17-rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6z9mXgjU0.woff2 +0 -0
- ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwgknk-6nFg.woff2 +0 -0
- ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwgknk-6nFg.woff2 +0 -0
- ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwgknk-4.woff2 +0 -0
- ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwgknk-6nFg.woff2 +0 -0
- ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwgknk-6nFg.woff2 +0 -0
- ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwgknk-6nFg.woff2 +0 -0
- ekbatan-0.1.0/website/public/fonts/spacegrotesk-v22-V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2 +0 -0
- ekbatan-0.1.0/website/public/fonts/spacegrotesk-v22-V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2 +0 -0
- ekbatan-0.1.0/website/public/fonts/spacegrotesk-v22-V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2 +0 -0
- ekbatan-0.1.0/website/scripts/check-classes.mjs +66 -0
- ekbatan-0.1.0/website/scripts/check-links.mjs +90 -0
- ekbatan-0.1.0/website/scripts/content-parity.py +255 -0
- ekbatan-0.1.0/website/scripts/parity.mjs +17 -0
- ekbatan-0.1.0/website/src/components/AliasRenameFlow.astro +640 -0
- ekbatan-0.1.0/website/src/components/CodeBlock.astro +263 -0
- ekbatan-0.1.0/website/src/components/DialectPicker.astro +158 -0
- ekbatan-0.1.0/website/src/components/Footer.astro +110 -0
- ekbatan-0.1.0/website/src/components/GuidedFlow.astro +426 -0
- ekbatan-0.1.0/website/src/components/LearnPager.astro +122 -0
- ekbatan-0.1.0/website/src/components/ModeTabs.astro +127 -0
- ekbatan-0.1.0/website/src/components/Nav.astro +196 -0
- ekbatan-0.1.0/website/src/components/RedirectPage.astro +26 -0
- ekbatan-0.1.0/website/src/components/SectionCard.astro +78 -0
- ekbatan-0.1.0/website/src/components/SetupPicker.astro +291 -0
- ekbatan-0.1.0/website/src/layouts/BaseLayout.astro +69 -0
- ekbatan-0.1.0/website/src/layouts/DocLayout.astro +346 -0
- ekbatan-0.1.0/website/src/lib/learn.ts +26 -0
- ekbatan-0.1.0/website/src/pages/concepts/actions.astro +5 -0
- ekbatan-0.1.0/website/src/pages/concepts/index.astro +5 -0
- ekbatan-0.1.0/website/src/pages/concepts/models-and-entities.astro +5 -0
- ekbatan-0.1.0/website/src/pages/concepts/outbox.astro +5 -0
- ekbatan-0.1.0/website/src/pages/concepts/sagas.astro +5 -0
- ekbatan-0.1.0/website/src/pages/concepts/sharding.astro +5 -0
- ekbatan-0.1.0/website/src/pages/concepts/the-dual-write-trap.astro +5 -0
- ekbatan-0.1.0/website/src/pages/index.astro +344 -0
- ekbatan-0.1.0/website/src/pages/learn/actions.mdx +350 -0
- ekbatan-0.1.0/website/src/pages/learn/async.mdx +253 -0
- ekbatan-0.1.0/website/src/pages/learn/complete-project-setup.mdx +2151 -0
- ekbatan-0.1.0/website/src/pages/learn/consuming-events.mdx +444 -0
- ekbatan-0.1.0/website/src/pages/learn/getting-started.mdx +278 -0
- ekbatan-0.1.0/website/src/pages/learn/going-to-production.mdx +130 -0
- ekbatan-0.1.0/website/src/pages/learn/index.astro +48 -0
- ekbatan-0.1.0/website/src/pages/learn/install.mdx +125 -0
- ekbatan-0.1.0/website/src/pages/learn/models-and-entities.mdx +445 -0
- ekbatan-0.1.0/website/src/pages/learn/outbox.mdx +230 -0
- ekbatan-0.1.0/website/src/pages/learn/sagas.mdx +281 -0
- ekbatan-0.1.0/website/src/pages/learn/sharding-strategies.mdx +193 -0
- ekbatan-0.1.0/website/src/pages/learn/sharding.mdx +330 -0
- ekbatan-0.1.0/website/src/pages/learn/startup-and-shutdown.mdx +1328 -0
- ekbatan-0.1.0/website/src/pages/learn/sync-or-async.mdx +116 -0
- ekbatan-0.1.0/website/src/pages/learn/the-dual-write-trap.mdx +79 -0
- ekbatan-0.1.0/website/src/pages/learn/wiring-a-service.mdx +241 -0
- ekbatan-0.1.0/website/src/pages/learn/your-first-action.mdx +444 -0
- ekbatan-0.1.0/website/src/pages/privacy.astro +114 -0
- ekbatan-0.1.0/website/src/pages/reference/action-executor.mdx +259 -0
- ekbatan-0.1.0/website/src/pages/reference/action-plan.mdx +108 -0
- ekbatan-0.1.0/website/src/pages/reference/action.mdx +300 -0
- ekbatan-0.1.0/website/src/pages/reference/beside-java.mdx +164 -0
- ekbatan-0.1.0/website/src/pages/reference/config-files.mdx +260 -0
- ekbatan-0.1.0/website/src/pages/reference/dialects/mariadb.mdx +151 -0
- ekbatan-0.1.0/website/src/pages/reference/dialects/mysql.mdx +145 -0
- ekbatan-0.1.0/website/src/pages/reference/dialects/postgresql.mdx +127 -0
- ekbatan-0.1.0/website/src/pages/reference/dialects/sqlite.mdx +140 -0
- ekbatan-0.1.0/website/src/pages/reference/entity.mdx +166 -0
- ekbatan-0.1.0/website/src/pages/reference/events/local-event-handler.mdx +548 -0
- ekbatan-0.1.0/website/src/pages/reference/events/streaming.mdx +536 -0
- ekbatan-0.1.0/website/src/pages/reference/index.astro +132 -0
- ekbatan-0.1.0/website/src/pages/reference/jobs/distributed-jobs.mdx +378 -0
- ekbatan-0.1.0/website/src/pages/reference/keyed-locks.mdx +449 -0
- ekbatan-0.1.0/website/src/pages/reference/migrations.mdx +410 -0
- ekbatan-0.1.0/website/src/pages/reference/model-event.mdx +110 -0
- ekbatan-0.1.0/website/src/pages/reference/model.mdx +256 -0
- ekbatan-0.1.0/website/src/pages/reference/multi-database.mdx +340 -0
- ekbatan-0.1.0/website/src/pages/reference/repository.mdx +635 -0
- ekbatan-0.1.0/website/src/pages/reference/runtime/async.mdx +415 -0
- ekbatan-0.1.0/website/src/pages/reference/runtime/concurrency.mdx +324 -0
- ekbatan-0.1.0/website/src/pages/reference/runtime/observability.mdx +204 -0
- ekbatan-0.1.0/website/src/pages/reference/schemagen.mdx +945 -0
- ekbatan-0.1.0/website/src/pages/reference/sharding.mdx +524 -0
- ekbatan-0.1.0/website/src/pages/reference/tables/event-notifications.mdx +192 -0
- ekbatan-0.1.0/website/src/pages/reference/tables/events.mdx +185 -0
- ekbatan-0.1.0/website/src/pages/reference/tables/index.mdx +124 -0
- ekbatan-0.1.0/website/src/pages/reference/tables/scheduled-tasks.mdx +179 -0
- ekbatan-0.1.0/website/src/pages/reference/transaction-manager.mdx +310 -0
- ekbatan-0.1.0/website/src/pages/reference/wiring-fastapi.mdx +350 -0
- ekbatan-0.1.0/website/src/pages/reference/wiring.mdx +593 -0
- ekbatan-0.1.0/website/src/plugins/rehype-table-scroll.mjs +34 -0
- ekbatan-0.1.0/website/src/plugins/remark-base-path.mjs +30 -0
- ekbatan-0.1.0/website/src/plugins/remark-strip-lead.mjs +23 -0
- ekbatan-0.1.0/website/src/setup-guide/async/actions.py +70 -0
- ekbatan-0.1.0/website/src/setup-guide/async/api.py +91 -0
- ekbatan-0.1.0/website/src/setup-guide/async/app.py +193 -0
- ekbatan-0.1.0/website/src/setup-guide/async/handlers.py +61 -0
- ekbatan-0.1.0/website/src/setup-guide/async/jobs.py +59 -0
- ekbatan-0.1.0/website/src/setup-guide/async/repository.py +90 -0
- ekbatan-0.1.0/website/src/setup-guide/converters.py +24 -0
- ekbatan-0.1.0/website/src/setup-guide/mariadb/async/ekbatan.yaml +45 -0
- ekbatan-0.1.0/website/src/setup-guide/mariadb/sync/ekbatan.yaml +37 -0
- ekbatan-0.1.0/website/src/setup-guide/model.py +183 -0
- ekbatan-0.1.0/website/src/setup-guide/mysql/async/ekbatan.yaml +45 -0
- ekbatan-0.1.0/website/src/setup-guide/mysql/sync/ekbatan.yaml +37 -0
- ekbatan-0.1.0/website/src/setup-guide/pg/async/ekbatan.yaml +48 -0
- ekbatan-0.1.0/website/src/setup-guide/pg/sync/ekbatan.yaml +39 -0
- ekbatan-0.1.0/website/src/setup-guide/sqlite/async/__main__.py +72 -0
- ekbatan-0.1.0/website/src/setup-guide/sqlite/async/app.py +160 -0
- ekbatan-0.1.0/website/src/setup-guide/sqlite/ekbatan.yaml +22 -0
- ekbatan-0.1.0/website/src/setup-guide/sqlite/sync/__main__.py +65 -0
- ekbatan-0.1.0/website/src/setup-guide/sqlite/sync/app.py +109 -0
- ekbatan-0.1.0/website/src/setup-guide/sync/actions.py +69 -0
- ekbatan-0.1.0/website/src/setup-guide/sync/api.py +91 -0
- ekbatan-0.1.0/website/src/setup-guide/sync/app.py +134 -0
- ekbatan-0.1.0/website/src/setup-guide/sync/handlers.py +60 -0
- ekbatan-0.1.0/website/src/setup-guide/sync/jobs.py +48 -0
- ekbatan-0.1.0/website/src/setup-guide/sync/repository.py +90 -0
- ekbatan-0.1.0/website/src/styles/fonts.css +342 -0
- ekbatan-0.1.0/website/src/styles/palette.css +237 -0
- ekbatan-0.1.0/website/src/styles/styles.css +1 -0
- ekbatan-0.1.0/website/tsconfig.json +5 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ekbatan-py-examples
|
|
3
|
+
description: Maintain the ekbatan-py example applications. Use when adding, updating, auditing or verifying anything under ekbatan-py-examples across the PostgreSQL, MySQL, MariaDB, sharded, saga, job-worker and SQLite examples and their async twins, each built with uv, pip and Poetry.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ekbatan-py examples
|
|
7
|
+
|
|
8
|
+
Use this when a change affects an example application, its docs, its wiring, or consistency
|
|
9
|
+
across the matrix.
|
|
10
|
+
|
|
11
|
+
## First reads
|
|
12
|
+
|
|
13
|
+
- `ekbatan-py-examples/README.md`.
|
|
14
|
+
- The closest existing example for the same dialect.
|
|
15
|
+
- `references/example-matrix.md`.
|
|
16
|
+
- `docs/wiring.md` and `docs/wiring-fastapi.md`.
|
|
17
|
+
|
|
18
|
+
## Matrix discipline
|
|
19
|
+
|
|
20
|
+
Fourteen examples, **each carried three times** - `-uv-`, `-pip-`, `-poetry-` - as Java carries its
|
|
21
|
+
examples per Gradle and Maven: 42 projects. Only the REST example is replicated per database, and
|
|
22
|
+
every example has an async twin.
|
|
23
|
+
|
|
24
|
+
| | |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| per database | `fastapi-wallet-rest-{build}-pg`, `-mysql`, `-mariadb` |
|
|
27
|
+
| per database, async | `fastapi-wallet-rest-{build}-async-pg`, `-async-mysql`, `-async-mariadb`, `wallet-service-{build}-async-sqlite` |
|
|
28
|
+
| one of a kind | `fastapi-wallet-rest-{build}-sharded-pg`, `fastapi-wallet-saga-{build}-pg`, `job-worker-{build}-pg`, `wallet-service-{build}-sqlite` |
|
|
29
|
+
| one of a kind, async | `fastapi-wallet-rest-{build}-async-sharded-pg`, `fastapi-wallet-saga-{build}-async-pg`, `job-worker-{build}-async-pg` |
|
|
30
|
+
|
|
31
|
+
**Two modes.** Every example has an async twin on `ekbatan.aio`, with the same tests plus a
|
|
32
|
+
check that it really runs async (its drivers, its loop). The complete-project-setup page shows
|
|
33
|
+
both for each database, and `scripts/check-setup-guide.py` builds both. A change to a sync
|
|
34
|
+
example's behaviour goes into its async twin too, or the twin's README says why not; a new
|
|
35
|
+
example gets an async twin. In the job worker's twin the jobs stay sync (every distributed job
|
|
36
|
+
is) and their work runs on a `HandlerLoop` with `loop.run(...)`.
|
|
37
|
+
|
|
38
|
+
**Edit only the uv project**, then run `uv run python scripts/sync-examples.py`: it writes the
|
|
39
|
+
pip and Poetry twins (the same `src/`, byte for byte) and every project's `pyproject.toml`,
|
|
40
|
+
`Makefile`, `.gitignore` and README build section. Never hand-edit a twin - `make lint` runs
|
|
41
|
+
`sync-examples.py --check` and fails on any drift. When changing a base wallet behaviour, change
|
|
42
|
+
all three REST databases' uv projects; those are not generated from one another.
|
|
43
|
+
|
|
44
|
+
## An example is documentation
|
|
45
|
+
|
|
46
|
+
- **mypy `--strict` runs over the examples' uv projects** (their twins are the same code),
|
|
47
|
+
because documentation that would not type-check is documentation that is wrong.
|
|
48
|
+
- They import only the framework, the standard library and what each project's `pyproject.toml`
|
|
49
|
+
declares. `tests/test_structure.py` enforces it.
|
|
50
|
+
- They are **not** shared with `tests/fixtures/`. The suite's domain exists to exercise every
|
|
51
|
+
shape worth exercising; an example exists to show what good code looks like. Coupled, every
|
|
52
|
+
coverage change lands in the documentation.
|
|
53
|
+
- A claim in an example's README must be backed by its source. An example nobody runs rots -
|
|
54
|
+
and one did, silently, because this repository had no remote and CI had never executed.
|
|
55
|
+
|
|
56
|
+
## Conventions
|
|
57
|
+
|
|
58
|
+
- Actions are named exactly as Java names them: `WalletCreateAction`, `WalletDepositMoneyAction`, `WalletCloseAction`, `CreateNotificationAction`, `InitiateTransferAction` - no word-order rule, Java mixes model-first and verb-first. Each action's parameters are its nested `Params`.
|
|
59
|
+
Events are `WalletCreatedEvent`, `WalletMoneyDepositedEvent` - past tense, `Event` suffix. Handlers
|
|
60
|
+
end `EventHandler`, jobs end `Job`.
|
|
61
|
+
- In a sync example, endpoints are plain `def`, never `async def`. FastAPI runs a plain `def` in
|
|
62
|
+
a threadpool; an `async def` calling into the synchronous framework blocks the whole event
|
|
63
|
+
loop. In an async twin every endpoint is `async def` and awaits `ekbatan.aio`.
|
|
64
|
+
- Three pools per member - requests, jobs, locks - and the jobs pool is at least twice the worker
|
|
65
|
+
count.
|
|
66
|
+
- A keyed lock lease must span `executor.execute(...)`, not just the read.
|
|
67
|
+
- Generated `schema.py` is gitignored. Never commit one, and never edit one.
|
|
68
|
+
- Forced types are set in `scripts/sync-examples.py` (`WALLET_FORCED`, `SAGA_FORCED`), which
|
|
69
|
+
writes every `pyproject.toml`; see `references/example-matrix.md#forced-types`. A converter's
|
|
70
|
+
module must not import `schema.py` - schemagen imports it before `schema.py` exists.
|
|
71
|
+
|
|
72
|
+
- **UTC everywhere**, the framework's strong recommendation: an example takes time from the clock
|
|
73
|
+
(`self.clock.instant()`, `clock.instant()`), never `datetime.now()`; its migrations use `TIMESTAMP` (PostgreSQL)
|
|
74
|
+
or `DATETIME(6)` (MySQL, MariaDB), never `TIMESTAMPTZ`; its database runs in UTC. See
|
|
75
|
+
`docs/database/multi-database.md#always-utc`.
|
|
76
|
+
- **Every model and entity defines `validate()`**: `Wallet.validate()` has `pass` with a one-line
|
|
77
|
+
reason (nothing beyond its types, as Java's constructor checks only for null),
|
|
78
|
+
`Notification.validate()` refuses a blank recipient or message, `TransferStep` has `pass`.
|
|
79
|
+
- **Time kinds**: an event's time field is declared `Instant` (or `LocalDateTime` /
|
|
80
|
+
`OffsetDateTime`) from `ekbatan.time` - a plain `datetime` field is refused when the action
|
|
81
|
+
runs. The examples' events carry no time field, as Java's do not.
|
|
82
|
+
- **Repository variables** are Java's field names in snake_case - `wallet_repository`,
|
|
83
|
+
`notification_repository`, never `wallets` - and so are the other wiring objects:
|
|
84
|
+
`database_registry`, `lock_provider`, `job_registry`.
|
|
85
|
+
|
|
86
|
+
## Workflow
|
|
87
|
+
|
|
88
|
+
1. `ls ekbatan-py-examples` to see the matrix.
|
|
89
|
+
2. Read a known-good uv project for the dialect family before editing.
|
|
90
|
+
3. Make the smallest mechanical cross-matrix edit possible, in the uv projects.
|
|
91
|
+
4. `uv run python scripts/sync-examples.py` to carry it to the pip and Poetry twins.
|
|
92
|
+
5. `make examples` - every project builds its wheel and tests it installed, so a file a build
|
|
93
|
+
tool leaves out fails here. Needs Docker, `poetry` on the path, and a Python 3.13+ (found
|
|
94
|
+
through uv).
|
|
95
|
+
|
|
96
|
+
Use `ekbatan-py-verification` for the full matrix.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Example matrix
|
|
2
|
+
|
|
3
|
+
Fourteen examples, each built three ways - with uv, pip and Poetry - so 42 projects:
|
|
4
|
+
`<stack>-<domain>-<style>-<build>[-variant]-<db>`, Java's own naming. Only the REST example is
|
|
5
|
+
replicated per database, the same shape the Java port uses. Each follows the matching Java
|
|
6
|
+
example piece for piece - model, actions, handler, jobs, endpoints, test cases - under Java's
|
|
7
|
+
names; the REST examples and the job worker run two shards (global, Mexico) on two servers, as
|
|
8
|
+
Java's do, the saga one database.
|
|
9
|
+
|
|
10
|
+
| example (`{build}` = uv, pip, poetry) | dialect | shows | generates a schema |
|
|
11
|
+
| --- | --- | --- | :---: |
|
|
12
|
+
| `fastapi-wallet-rest-{build}-pg` | PostgreSQL x2 | the reference REST service, two shards | yes |
|
|
13
|
+
| `fastapi-wallet-rest-{build}-mysql` | MySQL x2 | the same service, one dialect over | yes |
|
|
14
|
+
| `fastapi-wallet-rest-{build}-mariadb` | MariaDB x2 | the same service again | yes |
|
|
15
|
+
| `fastapi-wallet-rest-{build}-sharded-pg` | PostgreSQL x2 | the same code as `-pg`, as Java's sharded example is; its test follows a Mexican wallet | yes |
|
|
16
|
+
| `fastapi-wallet-saga-{build}-pg` | PostgreSQL | choreography, compensation, and a 202 | yes |
|
|
17
|
+
| `job-worker-{build}-pg` | PostgreSQL x2 | cluster-exclusive jobs, no HTTP at all | yes |
|
|
18
|
+
| `wallet-service-{build}-sqlite` | SQLite x2 | the REST pieces run by a script. No container, no web stack | no |
|
|
19
|
+
| `fastapi-wallet-rest-{build}-async-pg` | PostgreSQL x2 | the REST service on `ekbatan.aio` (asyncpg) | yes |
|
|
20
|
+
| `fastapi-wallet-rest-{build}-async-mysql` | MySQL x2 | the same, on aiomysql | yes |
|
|
21
|
+
| `fastapi-wallet-rest-{build}-async-mariadb` | MariaDB x2 | the same, on aiomysql | yes |
|
|
22
|
+
| `wallet-service-{build}-async-sqlite` | SQLite x2 | the SQLite one on `ekbatan.aio` (aiosqlite) | no |
|
|
23
|
+
| `fastapi-wallet-rest-{build}-async-sharded-pg` | PostgreSQL x2 | the sharded one on `ekbatan.aio` | yes |
|
|
24
|
+
| `fastapi-wallet-saga-{build}-async-pg` | PostgreSQL | the saga, its later steps run by `async def` handlers on the handler loop | yes |
|
|
25
|
+
| `job-worker-{build}-async-pg` | PostgreSQL x2 | the job worker, its jobs' work run on a worker loop (`HandlerLoop`), awaited | yes |
|
|
26
|
+
|
|
27
|
+
Only the job worker has jobs of its own (`WalletStipendJob`, `WalletReportJob`), as in Java; the
|
|
28
|
+
REST, saga and SQLite examples run just the fan-out and handling jobs.
|
|
29
|
+
|
|
30
|
+
The uv project is the source; `scripts/sync-examples.py` writes the other two from it.
|
|
31
|
+
|
|
32
|
+
## What each carries
|
|
33
|
+
|
|
34
|
+
Every project is standalone - `cd` into it and `make` works, the way each Java example carries
|
|
35
|
+
its own Gradle wrapper.
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
pyproject.toml the build: uv_build, setuptools or poetry-core - and where ekbatan comes from;
|
|
39
|
+
[tool.ekbatan.schemagen]: migrations, out, image, and its forced types
|
|
40
|
+
Makefile env, schema (bare `python -m ekbatan.schemagen`), test (the wheel, installed), run, clean
|
|
41
|
+
.gitignore the environment, the wheel, the generated schema.py
|
|
42
|
+
README.md what this example shows, and what to look at first
|
|
43
|
+
src/<package>/ the package - the same name, and the same files, in all three builds:
|
|
44
|
+
app.py the wiring, all of it in one place
|
|
45
|
+
api.py the HTTP layer, and nothing else
|
|
46
|
+
model.py the domain, with the small value classes the forced types read into
|
|
47
|
+
converters.py the converters the forced types name; imports model.py, never schema.py
|
|
48
|
+
actions.py the units of work
|
|
49
|
+
repository.py the queries this application actually asks
|
|
50
|
+
handlers.py the in-process event handlers
|
|
51
|
+
jobs.py the distributed jobs (the job worker only)
|
|
52
|
+
ekbatan.yaml the settings, read at startup
|
|
53
|
+
migrations/ V<version>__<desc>.sql files - migrated at startup, and the input to schemagen
|
|
54
|
+
schema.py GENERATED, gitignored. Never commit or edit
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The SQLite examples are the exception: a hand-written `schema.py`, committed. They have no
|
|
58
|
+
migrations - `create_all` builds the tables from that file - so there is nothing for schemagen to
|
|
59
|
+
read; their `schema.py` wraps the currency column in `CurrencyConverter` by hand.
|
|
60
|
+
|
|
61
|
+
## Forced types
|
|
62
|
+
|
|
63
|
+
Every generating example reads `CHAR(3)` columns as the app's own `Currency`, picked by type;
|
|
64
|
+
the saga also reads its step column as an enum, picked by name:
|
|
65
|
+
|
|
66
|
+
| example | by type (`include-types`) | by name (`include-expression`) |
|
|
67
|
+
| --- | --- | --- |
|
|
68
|
+
| REST (pg, mysql, mariadb, sharded-pg, and their async twins), job worker (both) | `CHAR\(3\)` -> `Currency` | - |
|
|
69
|
+
| saga (both) | `CHAR\(3\)` -> `Currency` | `transfer_steps\.step` -> `TransferStepName` |
|
|
70
|
+
|
|
71
|
+
The rules live in `scripts/sync-examples.py` (`Forced`, `WALLET_FORCED`, `SAGA_FORCED`), which
|
|
72
|
+
writes every `pyproject.toml` - an edit to a project's own file is overwritten. Action parameters
|
|
73
|
+
and events keep the plain text (`"currency": "EUR"`), because they are outbox JSON; the
|
|
74
|
+
`state` columns are never converted, because the framework reads them as text.
|
|
75
|
+
|
|
76
|
+
## The axes that do not exist here
|
|
77
|
+
|
|
78
|
+
Java's matrix is 41 projects because it multiplies stack x build tool x dialect x runtime.
|
|
79
|
+
Two of those axes collapse:
|
|
80
|
+
|
|
81
|
+
- **stack** - there is no Spring/Quarkus/Micronaut split. FastAPI, or wire it yourself.
|
|
82
|
+
- **runtime** - no native image. CPython has no counterpart.
|
|
83
|
+
|
|
84
|
+
The **build tool** axis is kept: it decides what a wheel holds (Poetry drops a gitignored
|
|
85
|
+
`schema.py`, setuptools drops the migrations and `ekbatan.yaml`), which only a built, installed
|
|
86
|
+
wheel shows. The dialect axis is mirrored exactly, plus the four special cases.
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ekbatan-py-maintainer
|
|
3
|
+
description: Maintain and evolve the ekbatan-py persistence and action framework. Use for implementing or reviewing changes to the core, repositories, actions, outbox behaviour, sharding, keyed locks, distributed jobs, migrations, schemagen, docs that describe framework semantics, or release-facing library behaviour.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ekbatan-py maintainer
|
|
7
|
+
|
|
8
|
+
Use this when modifying the framework itself, not an application that depends on it.
|
|
9
|
+
|
|
10
|
+
## First reads
|
|
11
|
+
|
|
12
|
+
- `AGENTS.md` - architecture, conventions and the durable rules.
|
|
13
|
+
- `DIVERGENCE.md` before "fixing" something that looks wrong. It may be deliberate.
|
|
14
|
+
- `docs/SHORTCOMINGS.md` before claiming parity with the Java port.
|
|
15
|
+
- The relevant page under `docs/` when changing behaviour that is documented.
|
|
16
|
+
- `references/architecture-map.md` for a compact refresher.
|
|
17
|
+
|
|
18
|
+
## This is a port
|
|
19
|
+
|
|
20
|
+
`../ekbatan` is the reference implementation, and the two are expected to interoperate on the
|
|
21
|
+
same tables. **Read the Java file whole before changing the Python counterpart.** Every defect
|
|
22
|
+
this port found in its own code was found that way.
|
|
23
|
+
|
|
24
|
+
**Never commit in the Java repository.** Write the files and say what is ready. Defects found in
|
|
25
|
+
the Java while porting go in an openspec change, not a code change.
|
|
26
|
+
|
|
27
|
+
## Rules
|
|
28
|
+
|
|
29
|
+
- A library, not an application.
|
|
30
|
+
- Domain objects stay immutable. A mutation returns a new instance. This is load-bearing: the
|
|
31
|
+
plan holds references, and the executor writes them after `perform()` returns.
|
|
32
|
+
- Every concrete `Model` and `Entity` defines `validate(self) -> None` - its one place for rules
|
|
33
|
+
beyond its types, `pass` when it has none (AGENTS.md "Every model and entity defines
|
|
34
|
+
`validate()`"). It is abstract and refused at class definition; ekbatan runs its built-in
|
|
35
|
+
checks then `validate()` on every row made, and wraps a model's own `__post_init__`.
|
|
36
|
+
- `Action.perform()` declares intent. It stages on the plan; the executor persists afterwards.
|
|
37
|
+
- No nested or composable actions.
|
|
38
|
+
- Preserve optimistic locking. Every update carries `WHERE version = ?`.
|
|
39
|
+
- SQLAlchemy **Core**, used as a typed statement builder. Never introduce `Session`, an identity
|
|
40
|
+
map, autoflush or lazy loading - two units of work fighting over one transaction is the worst
|
|
41
|
+
thing that could happen to this design.
|
|
42
|
+
- Keep PostgreSQL, MySQL and MariaDB aligned unless a dialect difference is intentional and
|
|
43
|
+
documented. SQLite is not a production dialect and proves less than it looks like it proves.
|
|
44
|
+
- **The framework never converts time** (hard rule, AGENTS.md "Time: the framework never
|
|
45
|
+
converts it"): every time is written and read exactly as given; no `astimezone`/`tzinfo`
|
|
46
|
+
normalisation anywhere in `src/` (`tests/unit/test_time_as_is.py` guards it). The default
|
|
47
|
+
`SystemClock().instant()` is UTC with no zone attached. Changing this needs the user's OK.
|
|
48
|
+
- `timestamp_column()`, never a zoned type. `DATETIME(6)`, never bare `DATETIME`. It is only a
|
|
49
|
+
column type: zone-less, microseconds.
|
|
50
|
+
- **UTC everywhere is the strong recommendation** - the user's job, not the framework's - in
|
|
51
|
+
code, docs and examples alike: time from the clock (`clock.instant()`, `self.clock.instant()`), never
|
|
52
|
+
`datetime.now()` (local time); `TIMESTAMP`,
|
|
53
|
+
never `TIMESTAMPTZ`; the database in UTC or each session put on it via `data_source_properties`.
|
|
54
|
+
Say so wherever timestamps come up. Guide: `docs/database/multi-database.md#always-utc`.
|
|
55
|
+
- Params and payload JSON is the text Java's default Jackson 3 mapper writes, byte for byte
|
|
56
|
+
(camelCase keys, decimals as numbers); `ekbatan._json` and `parity-probes/G-domain-model/` hold it.
|
|
57
|
+
- **Time kinds** (`ekbatan.time`, AGENTS.md "Time kinds"): `Instant`, `LocalDateTime`,
|
|
58
|
+
`OffsetDateTime` are `NewType` labels over `datetime`. `clock.instant()` is the one clock
|
|
59
|
+
reading (no `now()`); models' dates and framework-written times are `Instant`; event and params
|
|
60
|
+
JSON is written by the declared label and a plain `datetime` field is refused; schemagen types
|
|
61
|
+
zone-less timestamps `Instant`, a forced `LocalDateTime` as such, `TIMESTAMPTZ` `OffsetDateTime`.
|
|
62
|
+
- Nothing in `src/` may import a web framework. `tests/test_structure.py` enforces it.
|
|
63
|
+
- The ambient transaction is a `ContextVar`. Work handed to a pool does not inherit it, and that
|
|
64
|
+
is correct.
|
|
65
|
+
- Migrations are `V<version>__<description>.sql` and `R__<description>.sql` files, run the way
|
|
66
|
+
Flyway runs them; `validate_scripts` checks them with no database. On MySQL and MariaDB keep
|
|
67
|
+
one schema change per file - each commits on its own, and a failure after one is recorded and
|
|
68
|
+
blocks until `repair()`. `docs/MIGRATOR-LEDGER.md` settles every behaviour against Flyway 12;
|
|
69
|
+
a change to the migrator updates it, and `scripts/flyway-parity.py` reruns the comparison.
|
|
70
|
+
|
|
71
|
+
## Workflow
|
|
72
|
+
|
|
73
|
+
1. Map the change to the owning module before editing.
|
|
74
|
+
2. Read nearby code and tests. Prefer local patterns over new abstractions.
|
|
75
|
+
3. Write the test so it **fails for the right reason** first. Reinstate the bug and watch it go
|
|
76
|
+
red before believing it - several "passing" tests here turned out to assert nothing.
|
|
77
|
+
4. Keep changes narrow. No unrelated refactors.
|
|
78
|
+
5. Update `docs/` when public semantics change, and record a new divergence in `DIVERGENCE.md`
|
|
79
|
+
or a step backwards in `docs/SHORTCOMINGS.md`.
|
|
80
|
+
6. Run focused tests, then the broader suite.
|
|
81
|
+
|
|
82
|
+
## Checks
|
|
83
|
+
|
|
84
|
+
- Fast loop: `make test`
|
|
85
|
+
- Anything touching SQL: `make test-all` - dialects disagree, and SQLite agrees with everyone.
|
|
86
|
+
- `make lint` covers ruff, mypy `--strict` over `src` *and* the examples, and the docs link
|
|
87
|
+
checker.
|
|
88
|
+
- Examples or generated schemas: `make examples`.
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Architecture map
|
|
2
|
+
|
|
3
|
+
A compact orientation. `AGENTS.md` remains the source of truth.
|
|
4
|
+
|
|
5
|
+
## The core idea
|
|
6
|
+
|
|
7
|
+
A persistence and action framework. It stores state changes and domain events atomically, so the
|
|
8
|
+
database can act as a reliable outbox.
|
|
9
|
+
|
|
10
|
+
An **action** declares intent. During `perform()` it reads repositories and stages immutable
|
|
11
|
+
snapshots on a **plan**. After `perform()` returns, the **executor** opens the transaction and
|
|
12
|
+
writes the domain rows and the event rows together.
|
|
13
|
+
|
|
14
|
+
## The layout
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
src/ekbatan/
|
|
18
|
+
domain.py Model, Entity, ModelEvent, the builders
|
|
19
|
+
ids.py Id, ShardedId, TypedValue
|
|
20
|
+
sharding.py ShardIdentifier, the strategies, the bit layout
|
|
21
|
+
repository.py Repository, ModelRepository, EntityRepository, RepositoryRegistry
|
|
22
|
+
persistence.py DatabaseRegistry, TransactionManager, Transaction
|
|
23
|
+
config.py DataSourceConfig, ShardConfig, ShardingConfig
|
|
24
|
+
schema.py the framework's tables, the column helpers, Converter/converted()/sql_type()
|
|
25
|
+
errors.py the exception hierarchy
|
|
26
|
+
clock.py Clock, SystemClock, VirtualClock
|
|
27
|
+
migrations.py SQL migrations on yoyo: files, checks, history, one call per layout
|
|
28
|
+
schemagen/ table definitions from a migrated database: _config (pyproject, forced
|
|
29
|
+
types: name, converter, sqlalchemy-type), _types (the type table; an
|
|
30
|
+
unknown type is sql_type("...")), _reflect, _render, _records (the
|
|
31
|
+
typed `<Table>Record` beside each table)
|
|
32
|
+
codegen.py typed builders, generated per model
|
|
33
|
+
streaming.py ActionEvent - the consumer-side view of an outbox row
|
|
34
|
+
accounting.py statement counting, so cost claims are checkable
|
|
35
|
+
action/ action, plan, executor, registry, persister, outbox
|
|
36
|
+
events/ handler, fanout, dispatch, jobs, notification, config
|
|
37
|
+
locks/ base, sql, redis, inprocess, _holder
|
|
38
|
+
distributedjobs/ DistributedJob, JobRegistry, JobsConfig
|
|
39
|
+
db-scheduler/ a separate distribution: the port of kagkarlsson/db-scheduler
|
|
40
|
+
ekbatan-py-examples/ seven examples x uv/pip/Poetry: 21 standalone projects
|
|
41
|
+
website/ Astro. The only part that does not run through uv
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Invariants
|
|
45
|
+
|
|
46
|
+
- Domain objects are frozen dataclasses. A mutation returns a new instance.
|
|
47
|
+
- Only a `Model` emits events. An `Entity` does not.
|
|
48
|
+
- Every persistable carries a `version`, and every update checks it.
|
|
49
|
+
- Reads filter soft-deleted rows once, in the framework.
|
|
50
|
+
- Every repository writes `to_record` / `from_record`, typed by the table's record - a `dict`
|
|
51
|
+
subclass schemagen writes beside the table (`WalletsRecord` beside `WALLETS`), with a
|
|
52
|
+
keyword `__init__`, `__getitem__` overloads for mypy only, and a `column_<name>()` method per
|
|
53
|
+
column (`EKB-0485`); repositories are `ModelRepository[Wallet, WalletsRecord,
|
|
54
|
+
UUID]` - the key is the type the id column holds, as Java's `DB_ID`: a read by id takes
|
|
55
|
+
`wallet.id.value`, and a forced type converting the id column makes the typed id the key
|
|
56
|
+
(`EKB-0541`). `columns_by_field_name` /
|
|
57
|
+
`model_by_field_name` are the by-name mapping, chosen in a line, never a default.
|
|
58
|
+
- `to_record` builds the record by keyword - `WalletsRecord(id=..., version=..., ...)`; a column
|
|
59
|
+
whose name is no Python name has a sanitized keyword (`class_=`, `order_date=`, `_2fa=`), and
|
|
60
|
+
one the database fills defaults to `UNSET` (left out of the record and the INSERT). The INSERT
|
|
61
|
+
is given that very dict. `from_record` reads `record.column_x()` (the preferred way;
|
|
62
|
+
`record["x"]` is fine too, equally type-checked); the framework hands it the record class on every read path.
|
|
63
|
+
- The ambient transaction is a `ContextVar`, so it is per-thread and per-task.
|
|
64
|
+
- Opening a transaction inside another one opens a **second** transaction on a second
|
|
65
|
+
connection, as Java's does (`EKB-0301`). Repository calls inside a block join it; nested blocks
|
|
66
|
+
do not. Do not nest.
|
|
67
|
+
- Cross-shard is refused unless asked for, because atomic-across-databases does not exist.
|
|
68
|
+
|
|
69
|
+
## Where the two ports differ
|
|
70
|
+
|
|
71
|
+
`DIVERGENCE.md` is the complete list. The ones that bite most often:
|
|
72
|
+
|
|
73
|
+
- no virtual threads, so fan-out, dispatch and the lock watchdog are sequential or thread-backed;
|
|
74
|
+
- the framework is synchronous, and blocking is not free under asyncio;
|
|
75
|
+
- retry matching is by `isinstance` here and exact by class in Java;
|
|
76
|
+
- this port has no graceful shutdown on a signal, and no pool leak detection.
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ekbatan-py-verification
|
|
3
|
+
description: Choose and run ekbatan-py verification. Use when asked to test, validate, run CI-equivalent checks, run the examples, run the dialect matrix, inspect the GitHub Actions workflows, or decide which commands prove a change.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ekbatan-py verification
|
|
7
|
+
|
|
8
|
+
Test planning and execution in this repository.
|
|
9
|
+
|
|
10
|
+
## First reads
|
|
11
|
+
|
|
12
|
+
- `references/test-matrix.md`.
|
|
13
|
+
- `.github/workflows/ci.yml` for what CI runs on every push, and `heavy-verification.yml` for
|
|
14
|
+
what runs nightly - the examples and the setup guide.
|
|
15
|
+
- `Makefile` - every command this repository has, in one place.
|
|
16
|
+
|
|
17
|
+
## Default strategy
|
|
18
|
+
|
|
19
|
+
1. **Focused tests first.** `uv run pytest tests/unit/test_plan.py -k stages`.
|
|
20
|
+
2. **The fast loop** when shared code changed:
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
make test # unit, then the whole suite on SQLite
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
3. **The dialect matrix** whenever the change touches SQL. Not optional - dialects disagree, and
|
|
27
|
+
SQLite agrees with everyone:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
make test-all # PostgreSQL, MySQL and MariaDB. Needs Docker
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
4. **The examples** when they or the generated schemas changed:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
make examples # all 21: each regenerates its schema, builds its wheel, tests it installed
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Reporting
|
|
40
|
+
|
|
41
|
+
Report exactly what ran and what did not. Distinguish:
|
|
42
|
+
|
|
43
|
+
- unit tests (no database at all);
|
|
44
|
+
- the SQLite suite;
|
|
45
|
+
- each of PostgreSQL, MySQL and MariaDB;
|
|
46
|
+
- the non-UTC PostgreSQL pass, which is where timestamp defects hide;
|
|
47
|
+
- the examples' own tests;
|
|
48
|
+
- lint, mypy and the docs link checker.
|
|
49
|
+
|
|
50
|
+
**Do not claim the suite passes when only SQLite ran.** SQLite's types are advisory, so a mapping
|
|
51
|
+
bug it accepts will fail in production. The claim that this framework works is a claim about the
|
|
52
|
+
three real dialects.
|
|
53
|
+
|
|
54
|
+
If a command fails on Docker, sandboxing or network access, say so rather than reporting a pass.
|
|
55
|
+
|
|
56
|
+
## Traps this suite has already fallen into
|
|
57
|
+
|
|
58
|
+
Each was a real bug in the tests, found by running:
|
|
59
|
+
|
|
60
|
+
- **MariaDB announcing itself as MySQL.** The container hands back a `mysql+pymysql` url. The
|
|
61
|
+
scheme must be rewritten to `mariadb+pymysql` or "the MariaDB suite" tests MySQL.
|
|
62
|
+
- **A frozen clock makes outbox rows tie.** `event_date` is the only ordering key, so under
|
|
63
|
+
`VirtualClock` every row of a run ties and order falls back to a random uuid. Assert on
|
|
64
|
+
`action_name` or `action_id`.
|
|
65
|
+
- **`str(engine.url)` masks the password**, so a "separate connection" built from it connects to
|
|
66
|
+
nothing.
|
|
67
|
+
- **A module-scoped container shares state between tests.** Truncate in the fixture.
|
|
68
|
+
|
|
69
|
+
## CI
|
|
70
|
+
|
|
71
|
+
Six jobs: lint and types, the fast suite, the examples, a tracing pass, the three dialects, and
|
|
72
|
+
PostgreSQL again under `TZ=America/New_York`. The website has its own workflow, triggered by
|
|
73
|
+
`docs/**` as well as `website/**`.
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Test matrix
|
|
2
|
+
|
|
3
|
+
## What exists
|
|
4
|
+
|
|
5
|
+
| | count | needs Docker |
|
|
6
|
+
| --- | ---: | :---: |
|
|
7
|
+
| `tests/unit/` | 250 | no |
|
|
8
|
+
| `tests/integration/`, on one dialect | 322 | for all but SQLite |
|
|
9
|
+
| the whole suite on SQLite | 578 | no |
|
|
10
|
+
| the whole suite on four dialects | 1,370 | yes |
|
|
11
|
+
| the examples' own tests | 78 | yes |
|
|
12
|
+
|
|
13
|
+
264 of the tests are parametrised over the dialect, which is why `--dialects=all` multiplies.
|
|
14
|
+
|
|
15
|
+
## Commands
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
uv run pytest tests/unit # no database at all, about a second
|
|
19
|
+
make test # unit, then everything on SQLite
|
|
20
|
+
uv run pytest --dialects=postgres # one dialect, in a container
|
|
21
|
+
make test-all # all four
|
|
22
|
+
make examples # regenerates schemas first
|
|
23
|
+
make lint # ruff, mypy --strict, and the docs link checker
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
`--dialects` takes `sqlite`, `postgres`, `mysql`, `mariadb` or `all`, comma-separated.
|
|
27
|
+
|
|
28
|
+
## What proves what
|
|
29
|
+
|
|
30
|
+
| the change touches | run |
|
|
31
|
+
| --- | --- |
|
|
32
|
+
| pure logic, a plan, a builder | `tests/unit` |
|
|
33
|
+
| any SQL | **`make test-all`.** Not optional |
|
|
34
|
+
| timestamps | `make test-all`, and note CI also runs PostgreSQL under a non-UTC process |
|
|
35
|
+
| `schemagen` | `pytest tests/unit/test_schemagen_config.py tests/unit/test_schema_converters.py tests/unit/test_schemagen_records.py tests/unit/test_typed_records_mypy.py`, `pytest tests/integration/test_schemagen*.py --dialects=all` (every type on every database; converters; the pgvector test pulls `pgvector/pgvector:pg17` and runs on PostgreSQL only), then `make examples` |
|
|
36
|
+
| an example | `make examples` |
|
|
37
|
+
| the docs | `make lint` - it checks every relative link |
|
|
38
|
+
| the website | `cd website && npm run build && npm run check` |
|
|
39
|
+
|
|
40
|
+
## Why SQLite is not enough
|
|
41
|
+
|
|
42
|
+
It is the default because a suite needing a daemon is a suite people stop running. It is **not a
|
|
43
|
+
production dialect**:
|
|
44
|
+
|
|
45
|
+
- no `SKIP LOCKED`, so the scheduler and the SQL keyed lock degrade to single-process behaviour;
|
|
46
|
+
- types are advisory, so a mapping bug PostgreSQL rejects loudly can pass here;
|
|
47
|
+
- no real write concurrency.
|
|
48
|
+
|
|
49
|
+
SQLite passing is necessary and not sufficient.
|
|
50
|
+
|
|
51
|
+
## CI
|
|
52
|
+
|
|
53
|
+
Three workflows on GitHub (`ekbatan-io/ekbatan-py`), each modelled on its Java twin:
|
|
54
|
+
|
|
55
|
+
- **CI** (`ci.yml`) on every push and pull request to main, except a push that only touches
|
|
56
|
+
`website/**`: lint and types, the fast suite, the whole suite under gevent, a tracing pass that
|
|
57
|
+
asserts the span names, the three real dialects in a matrix, PostgreSQL with `ekbatan.aio` on
|
|
58
|
+
psycopg's async mode, and PostgreSQL again under `TZ=America/New_York` - which is the job that
|
|
59
|
+
would catch a driver inferring a zoned type. Python is pinned to 3.14.
|
|
60
|
+
- **Website** (`deploy-website.yml`) on a push that touches `website/**` or `docs/**`: builds the
|
|
61
|
+
site for `/ekbatan-py/`, runs its checks and the Python ones that read it, and deploys it to
|
|
62
|
+
GitHub Pages.
|
|
63
|
+
- **Heavy Verification** (`heavy-verification.yml`) nightly, after midnight UTC, if main changed
|
|
64
|
+
the day before - or by hand, where `force` skips that test: every example, and the setup guide
|
|
65
|
+
followed as written for every database, installer and mode.
|
|
66
|
+
|
|
67
|
+
The tracing job is the only one that installs the OpenTelemetry SDK. Every other job proves the
|
|
68
|
+
framework runs without it.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ekbatan-py-examples
|
|
3
|
+
description: Maintain the ekbatan-py example applications. Use when adding, updating, auditing or verifying anything under ekbatan-py-examples across the PostgreSQL, MySQL, MariaDB, sharded, saga, job-worker and SQLite examples and their async twins, each built with uv, pip and Poetry.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# ekbatan-py examples
|
|
7
|
+
|
|
8
|
+
Use this when a change affects an example application, its docs, its wiring, or consistency
|
|
9
|
+
across the matrix.
|
|
10
|
+
|
|
11
|
+
## First reads
|
|
12
|
+
|
|
13
|
+
- `ekbatan-py-examples/README.md`.
|
|
14
|
+
- The closest existing example for the same dialect.
|
|
15
|
+
- `references/example-matrix.md`.
|
|
16
|
+
- `docs/wiring.md` and `docs/wiring-fastapi.md`.
|
|
17
|
+
|
|
18
|
+
## Matrix discipline
|
|
19
|
+
|
|
20
|
+
Fourteen examples, **each carried three times** - `-uv-`, `-pip-`, `-poetry-` - as Java carries its
|
|
21
|
+
examples per Gradle and Maven: 42 projects. Only the REST example is replicated per database, and
|
|
22
|
+
every example has an async twin.
|
|
23
|
+
|
|
24
|
+
| | |
|
|
25
|
+
| --- | --- |
|
|
26
|
+
| per database | `fastapi-wallet-rest-{build}-pg`, `-mysql`, `-mariadb` |
|
|
27
|
+
| per database, async | `fastapi-wallet-rest-{build}-async-pg`, `-async-mysql`, `-async-mariadb`, `wallet-service-{build}-async-sqlite` |
|
|
28
|
+
| one of a kind | `fastapi-wallet-rest-{build}-sharded-pg`, `fastapi-wallet-saga-{build}-pg`, `job-worker-{build}-pg`, `wallet-service-{build}-sqlite` |
|
|
29
|
+
| one of a kind, async | `fastapi-wallet-rest-{build}-async-sharded-pg`, `fastapi-wallet-saga-{build}-async-pg`, `job-worker-{build}-async-pg` |
|
|
30
|
+
|
|
31
|
+
**Two modes.** Every example has an async twin on `ekbatan.aio`, with the same tests plus a
|
|
32
|
+
check that it really runs async (its drivers, its loop). The complete-project-setup page shows
|
|
33
|
+
both for each database, and `scripts/check-setup-guide.py` builds both. A change to a sync
|
|
34
|
+
example's behaviour goes into its async twin too, or the twin's README says why not; a new
|
|
35
|
+
example gets an async twin. In the job worker's twin the jobs stay sync (every distributed job
|
|
36
|
+
is) and their work runs on a `HandlerLoop` with `loop.run(...)`.
|
|
37
|
+
|
|
38
|
+
**Edit only the uv project**, then run `uv run python scripts/sync-examples.py`: it writes the
|
|
39
|
+
pip and Poetry twins (the same `src/`, byte for byte) and every project's `pyproject.toml`,
|
|
40
|
+
`Makefile`, `.gitignore` and README build section. Never hand-edit a twin - `make lint` runs
|
|
41
|
+
`sync-examples.py --check` and fails on any drift. When changing a base wallet behaviour, change
|
|
42
|
+
all three REST databases' uv projects; those are not generated from one another.
|
|
43
|
+
|
|
44
|
+
## An example is documentation
|
|
45
|
+
|
|
46
|
+
- **mypy `--strict` runs over the examples' uv projects** (their twins are the same code),
|
|
47
|
+
because documentation that would not type-check is documentation that is wrong.
|
|
48
|
+
- They import only the framework, the standard library and what each project's `pyproject.toml`
|
|
49
|
+
declares. `tests/test_structure.py` enforces it.
|
|
50
|
+
- They are **not** shared with `tests/fixtures/`. The suite's domain exists to exercise every
|
|
51
|
+
shape worth exercising; an example exists to show what good code looks like. Coupled, every
|
|
52
|
+
coverage change lands in the documentation.
|
|
53
|
+
- A claim in an example's README must be backed by its source. An example nobody runs rots -
|
|
54
|
+
and one did, silently, because this repository had no remote and CI had never executed.
|
|
55
|
+
|
|
56
|
+
## Conventions
|
|
57
|
+
|
|
58
|
+
- Actions are named exactly as Java names them: `WalletCreateAction`, `WalletDepositMoneyAction`, `WalletCloseAction`, `CreateNotificationAction`, `InitiateTransferAction` - no word-order rule, Java mixes model-first and verb-first. Each action's parameters are its nested `Params`.
|
|
59
|
+
Events are `WalletCreatedEvent`, `WalletMoneyDepositedEvent` - past tense, `Event` suffix. Handlers
|
|
60
|
+
end `EventHandler`, jobs end `Job`.
|
|
61
|
+
- In a sync example, endpoints are plain `def`, never `async def`. FastAPI runs a plain `def` in
|
|
62
|
+
a threadpool; an `async def` calling into the synchronous framework blocks the whole event
|
|
63
|
+
loop. In an async twin every endpoint is `async def` and awaits `ekbatan.aio`.
|
|
64
|
+
- Three pools per member - requests, jobs, locks - and the jobs pool is at least twice the worker
|
|
65
|
+
count.
|
|
66
|
+
- A keyed lock lease must span `executor.execute(...)`, not just the read.
|
|
67
|
+
- Generated `schema.py` is gitignored. Never commit one, and never edit one.
|
|
68
|
+
- Forced types are set in `scripts/sync-examples.py` (`WALLET_FORCED`, `SAGA_FORCED`), which
|
|
69
|
+
writes every `pyproject.toml`; see `references/example-matrix.md#forced-types`. A converter's
|
|
70
|
+
module must not import `schema.py` - schemagen imports it before `schema.py` exists.
|
|
71
|
+
|
|
72
|
+
- **UTC everywhere**, the framework's strong recommendation: an example takes time from the clock
|
|
73
|
+
(`self.clock.instant()`, `clock.instant()`), never `datetime.now()`; its migrations use `TIMESTAMP` (PostgreSQL)
|
|
74
|
+
or `DATETIME(6)` (MySQL, MariaDB), never `TIMESTAMPTZ`; its database runs in UTC. See
|
|
75
|
+
`docs/database/multi-database.md#always-utc`.
|
|
76
|
+
- **Every model and entity defines `validate()`**: `Wallet.validate()` has `pass` with a one-line
|
|
77
|
+
reason (nothing beyond its types, as Java's constructor checks only for null),
|
|
78
|
+
`Notification.validate()` refuses a blank recipient or message, `TransferStep` has `pass`.
|
|
79
|
+
- **Time kinds**: an event's time field is declared `Instant` (or `LocalDateTime` /
|
|
80
|
+
`OffsetDateTime`) from `ekbatan.time` - a plain `datetime` field is refused when the action
|
|
81
|
+
runs. The examples' events carry no time field, as Java's do not.
|
|
82
|
+
- **Repository variables** are Java's field names in snake_case - `wallet_repository`,
|
|
83
|
+
`notification_repository`, never `wallets` - and so are the other wiring objects:
|
|
84
|
+
`database_registry`, `lock_provider`, `job_registry`.
|
|
85
|
+
|
|
86
|
+
## Workflow
|
|
87
|
+
|
|
88
|
+
1. `ls ekbatan-py-examples` to see the matrix.
|
|
89
|
+
2. Read a known-good uv project for the dialect family before editing.
|
|
90
|
+
3. Make the smallest mechanical cross-matrix edit possible, in the uv projects.
|
|
91
|
+
4. `uv run python scripts/sync-examples.py` to carry it to the pip and Poetry twins.
|
|
92
|
+
5. `make examples` - every project builds its wheel and tests it installed, so a file a build
|
|
93
|
+
tool leaves out fails here. Needs Docker, `poetry` on the path, and a Python 3.13+ (found
|
|
94
|
+
through uv).
|
|
95
|
+
|
|
96
|
+
Use `ekbatan-py-verification` for the full matrix.
|