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.
Files changed (2062) hide show
  1. ekbatan-0.1.0/.agents/skills/ekbatan-py-examples/SKILL.md +96 -0
  2. ekbatan-0.1.0/.agents/skills/ekbatan-py-examples/references/example-matrix.md +86 -0
  3. ekbatan-0.1.0/.agents/skills/ekbatan-py-maintainer/SKILL.md +88 -0
  4. ekbatan-0.1.0/.agents/skills/ekbatan-py-maintainer/references/architecture-map.md +76 -0
  5. ekbatan-0.1.0/.agents/skills/ekbatan-py-verification/SKILL.md +73 -0
  6. ekbatan-0.1.0/.agents/skills/ekbatan-py-verification/references/test-matrix.md +68 -0
  7. ekbatan-0.1.0/.claude/skills/ekbatan-py-examples/SKILL.md +96 -0
  8. ekbatan-0.1.0/.claude/skills/ekbatan-py-examples/references/example-matrix.md +86 -0
  9. ekbatan-0.1.0/.claude/skills/ekbatan-py-maintainer/SKILL.md +88 -0
  10. ekbatan-0.1.0/.claude/skills/ekbatan-py-maintainer/references/architecture-map.md +76 -0
  11. ekbatan-0.1.0/.claude/skills/ekbatan-py-verification/SKILL.md +73 -0
  12. ekbatan-0.1.0/.claude/skills/ekbatan-py-verification/references/test-matrix.md +68 -0
  13. ekbatan-0.1.0/.github/workflows/ci.yml +144 -0
  14. ekbatan-0.1.0/.github/workflows/db-scheduler.yml +80 -0
  15. ekbatan-0.1.0/.github/workflows/deploy-website.yml +90 -0
  16. ekbatan-0.1.0/.github/workflows/heavy-verification.yml +163 -0
  17. ekbatan-0.1.0/.github/workflows/release.yml +134 -0
  18. ekbatan-0.1.0/.gitignore +60 -0
  19. ekbatan-0.1.0/AGENTS.md +589 -0
  20. ekbatan-0.1.0/CLAUDE.md +3 -0
  21. ekbatan-0.1.0/DIVERGENCE.md +1828 -0
  22. ekbatan-0.1.0/LICENSE +201 -0
  23. ekbatan-0.1.0/Makefile +191 -0
  24. ekbatan-0.1.0/PKG-INFO +348 -0
  25. ekbatan-0.1.0/README.md +300 -0
  26. ekbatan-0.1.0/RELEASE.md +212 -0
  27. ekbatan-0.1.0/agent-skills/README.md +21 -0
  28. ekbatan-0.1.0/agent-skills/ekbatan-py-examples/SKILL.md +96 -0
  29. ekbatan-0.1.0/agent-skills/ekbatan-py-examples/references/example-matrix.md +86 -0
  30. ekbatan-0.1.0/agent-skills/ekbatan-py-maintainer/SKILL.md +88 -0
  31. ekbatan-0.1.0/agent-skills/ekbatan-py-maintainer/references/architecture-map.md +76 -0
  32. ekbatan-0.1.0/agent-skills/ekbatan-py-verification/SKILL.md +73 -0
  33. ekbatan-0.1.0/agent-skills/ekbatan-py-verification/references/test-matrix.md +68 -0
  34. ekbatan-0.1.0/agent-skills/scripts/sync.sh +22 -0
  35. ekbatan-0.1.0/db-scheduler/.gitignore +6 -0
  36. ekbatan-0.1.0/db-scheduler/LICENSE +201 -0
  37. ekbatan-0.1.0/db-scheduler/README.md +213 -0
  38. ekbatan-0.1.0/db-scheduler/docs/FILE-LEDGER.md +193 -0
  39. ekbatan-0.1.0/db-scheduler/docs/PORTING.md +110 -0
  40. ekbatan-0.1.0/db-scheduler/docs/QUARTZ-CONVERTER-LEDGER.md +138 -0
  41. ekbatan-0.1.0/db-scheduler/docs/java-api-inventory.md +1383 -0
  42. ekbatan-0.1.0/db-scheduler/docs/java-test-inventory.md +436 -0
  43. ekbatan-0.1.0/db-scheduler/pyproject.toml +85 -0
  44. ekbatan-0.1.0/db-scheduler/scripts/ledger.py +57 -0
  45. ekbatan-0.1.0/db-scheduler/scripts/quartz-oracle/.gitignore +1 -0
  46. ekbatan-0.1.0/db-scheduler/scripts/quartz-oracle/QuartzOracle.java +81 -0
  47. ekbatan-0.1.0/db-scheduler/scripts/quartz-oracle/generate_fixtures.py +389 -0
  48. ekbatan-0.1.0/db-scheduler/scripts/quartz-oracle/run.sh +22 -0
  49. ekbatan-0.1.0/db-scheduler/src/db_scheduler/__init__.py +0 -0
  50. ekbatan-0.1.0/db-scheduler/src/db_scheduler/builder.py +386 -0
  51. ekbatan-0.1.0/db-scheduler/src/db_scheduler/client.py +542 -0
  52. ekbatan-0.1.0/db-scheduler/src/db_scheduler/clock.py +73 -0
  53. ekbatan-0.1.0/db-scheduler/src/db_scheduler/event/__init__.py +273 -0
  54. ekbatan-0.1.0/db-scheduler/src/db_scheduler/exceptions.py +136 -0
  55. ekbatan-0.1.0/db-scheduler/src/db_scheduler/executor.py +531 -0
  56. ekbatan-0.1.0/db-scheduler/src/db_scheduler/jdbc/__init__.py +47 -0
  57. ekbatan-0.1.0/db-scheduler/src/db_scheduler/jdbc/customization.py +359 -0
  58. ekbatan-0.1.0/db-scheduler/src/db_scheduler/jdbc/execution_update.py +133 -0
  59. ekbatan-0.1.0/db-scheduler/src/db_scheduler/jdbc/repository.py +832 -0
  60. ekbatan-0.1.0/db-scheduler/src/db_scheduler/jdbc/schema.py +112 -0
  61. ekbatan-0.1.0/db-scheduler/src/db_scheduler/logging.py +89 -0
  62. ekbatan-0.1.0/db-scheduler/src/db_scheduler/poll.py +313 -0
  63. ekbatan-0.1.0/db-scheduler/src/db_scheduler/pool.py +228 -0
  64. ekbatan-0.1.0/db-scheduler/src/db_scheduler/py.typed +0 -0
  65. ekbatan-0.1.0/db-scheduler/src/db_scheduler/resolver.py +171 -0
  66. ekbatan-0.1.0/db-scheduler/src/db_scheduler/scheduled_execution.py +263 -0
  67. ekbatan-0.1.0/db-scheduler/src/db_scheduler/scheduler.py +610 -0
  68. ekbatan-0.1.0/db-scheduler/src/db_scheduler/scheduler_name.py +89 -0
  69. ekbatan-0.1.0/db-scheduler/src/db_scheduler/serializer/__init__.py +228 -0
  70. ekbatan-0.1.0/db-scheduler/src/db_scheduler/state.py +225 -0
  71. ekbatan-0.1.0/db-scheduler/src/db_scheduler/stats/__init__.py +88 -0
  72. ekbatan-0.1.0/db-scheduler/src/db_scheduler/stats/adapter.py +61 -0
  73. ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/__init__.py +738 -0
  74. ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/handlers.py +517 -0
  75. ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/helper.py +1165 -0
  76. ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/operations.py +128 -0
  77. ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/schedule/__init__.py +650 -0
  78. ekbatan-0.1.0/db-scheduler/src/db_scheduler/task/schedule/_quartz.py +879 -0
  79. ekbatan-0.1.0/db-scheduler/src/db_scheduler/testhelper/__init__.py +189 -0
  80. ekbatan-0.1.0/db-scheduler/src/db_scheduler/util.py +40 -0
  81. ekbatan-0.1.0/db-scheduler/tests/conftest.py +264 -0
  82. ekbatan-0.1.0/db-scheduler/tests/integration/test_client.py +501 -0
  83. ekbatan-0.1.0/db-scheduler/tests/integration/test_repository.py +36 -0
  84. ekbatan-0.1.0/db-scheduler/tests/integration/test_scheduler.py +1110 -0
  85. ekbatan-0.1.0/db-scheduler/tests/integration/test_shutdown_exit.py +88 -0
  86. ekbatan-0.1.0/db-scheduler/tests/integration/test_testhelper.py +292 -0
  87. ekbatan-0.1.0/db-scheduler/tests/integration/test_time_as_is.py +114 -0
  88. ekbatan-0.1.0/db-scheduler/tests/repository_contract.py +730 -0
  89. ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/calendar.jsonl.gz +0 -0
  90. ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/catalogue.jsonl.gz +0 -0
  91. ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/catalogue.txt +374 -0
  92. ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/fuzz.jsonl.gz +0 -0
  93. ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/probes.jsonl.gz +0 -0
  94. ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/sweeps.jsonl.gz +0 -0
  95. ekbatan-0.1.0/db-scheduler/tests/unit/quartz_cases/zones.jsonl.gz +0 -0
  96. ekbatan-0.1.0/db-scheduler/tests/unit/test_cron.py +278 -0
  97. ekbatan-0.1.0/db-scheduler/tests/unit/test_customization.py +173 -0
  98. ekbatan-0.1.0/db-scheduler/tests/unit/test_events.py +261 -0
  99. ekbatan-0.1.0/db-scheduler/tests/unit/test_exceptions.py +118 -0
  100. ekbatan-0.1.0/db-scheduler/tests/unit/test_executor.py +551 -0
  101. ekbatan-0.1.0/db-scheduler/tests/unit/test_handlers.py +442 -0
  102. ekbatan-0.1.0/db-scheduler/tests/unit/test_import_side_effects.py +20 -0
  103. ekbatan-0.1.0/db-scheduler/tests/unit/test_pool.py +413 -0
  104. ekbatan-0.1.0/db-scheduler/tests/unit/test_quartz.py +416 -0
  105. ekbatan-0.1.0/db-scheduler/tests/unit/test_quartz_oracle.py +174 -0
  106. ekbatan-0.1.0/db-scheduler/tests/unit/test_resolver.py +156 -0
  107. ekbatan-0.1.0/db-scheduler/tests/unit/test_schedule_on_startup.py +261 -0
  108. ekbatan-0.1.0/db-scheduler/tests/unit/test_scheduled_execution.py +209 -0
  109. ekbatan-0.1.0/db-scheduler/tests/unit/test_scheduler_loop.py +246 -0
  110. ekbatan-0.1.0/db-scheduler/tests/unit/test_schedules.py +213 -0
  111. ekbatan-0.1.0/db-scheduler/tests/unit/test_serializer.py +195 -0
  112. ekbatan-0.1.0/db-scheduler/tests/unit/test_state.py +313 -0
  113. ekbatan-0.1.0/db-scheduler/tests/unit/test_task_instance.py +183 -0
  114. ekbatan-0.1.0/db-scheduler/tests/unit/test_tasks.py +437 -0
  115. ekbatan-0.1.0/db-scheduler/tests/unit/test_time_kept_as_given.py +92 -0
  116. ekbatan-0.1.0/db-scheduler/uv.lock +959 -0
  117. ekbatan-0.1.0/docs/ASYNC-DRACULAS-FIX-LEDGER.md +93 -0
  118. ekbatan-0.1.0/docs/ASYNC-DRACULAS.md +87 -0
  119. ekbatan-0.1.0/docs/ASYNC-LEDGER.md +483 -0
  120. ekbatan-0.1.0/docs/BEHAVIOUR-PARITY-LEDGER.md +66 -0
  121. ekbatan-0.1.0/docs/BEYOND-CODE-LEDGER.md +176 -0
  122. ekbatan-0.1.0/docs/CONFIG-FILES-LEDGER.md +58 -0
  123. ekbatan-0.1.0/docs/CONVERTER-AND-WEBSITE-LEDGER.md +172 -0
  124. ekbatan-0.1.0/docs/DATASOURCE-LEDGER.md +77 -0
  125. ekbatan-0.1.0/docs/DATASOURCE-LOGIN-LEDGER.md +56 -0
  126. ekbatan-0.1.0/docs/DECISIONS-TO-REVIEW.md +1566 -0
  127. ekbatan-0.1.0/docs/DOCS-PARITY.md +85 -0
  128. ekbatan-0.1.0/docs/DRACULA-LEDGER.md +22 -0
  129. ekbatan-0.1.0/docs/DRACULAS.md +185 -0
  130. ekbatan-0.1.0/docs/DRIVER-SURVEY.md +181 -0
  131. ekbatan-0.1.0/docs/EVENTLOG-JAVA-WAY-LEDGER.md +81 -0
  132. ekbatan-0.1.0/docs/EVENTLOG-LEDGER.md +72 -0
  133. ekbatan-0.1.0/docs/EXAMPLES-CONFIG-FILES-LEDGER.md +67 -0
  134. ekbatan-0.1.0/docs/EXAMPLES-MATRIX-LEDGER.md +52 -0
  135. ekbatan-0.1.0/docs/EXECUTE-ORDER-LEDGER.md +63 -0
  136. ekbatan-0.1.0/docs/GOLDEN-PATH-LEDGER.md +70 -0
  137. ekbatan-0.1.0/docs/HANDLER-BASE-LEDGER.md +73 -0
  138. ekbatan-0.1.0/docs/JAVA-MODEL-LEDGER.md +82 -0
  139. ekbatan-0.1.0/docs/JAVA-PARITY-LEDGER.md +816 -0
  140. ekbatan-0.1.0/docs/MIGRATOR-LEDGER.md +181 -0
  141. ekbatan-0.1.0/docs/PARITY-FIX-LEDGER.md +73 -0
  142. ekbatan-0.1.0/docs/PARITY-ROUND-2-LEDGER.md +49 -0
  143. ekbatan-0.1.0/docs/README.md +48 -0
  144. ekbatan-0.1.0/docs/RECORDS-DICT-LEDGER.md +85 -0
  145. ekbatan-0.1.0/docs/REPO-KEYS-LEDGER.md +65 -0
  146. ekbatan-0.1.0/docs/REPO-NAMES-LEDGER.md +73 -0
  147. ekbatan-0.1.0/docs/REVIEW-FIXES-LEDGER.md +49 -0
  148. ekbatan-0.1.0/docs/SCHEMAGEN-COMPLETENESS-LEDGER.md +239 -0
  149. ekbatan-0.1.0/docs/SCHEMAGEN-LEDGER.md +125 -0
  150. ekbatan-0.1.0/docs/SCHEMAGEN-TEST-LEDGER.md +232 -0
  151. ekbatan-0.1.0/docs/SETUP-GUIDE-LEDGER.md +113 -0
  152. ekbatan-0.1.0/docs/SHORTCOMINGS.md +100 -0
  153. ekbatan-0.1.0/docs/SHUTDOWN-HOOK-LEDGER.md +68 -0
  154. ekbatan-0.1.0/docs/SYNC-ASYNC-DOCS-LEDGER.md +209 -0
  155. ekbatan-0.1.0/docs/TIME-AS-IS-LEDGER.md +123 -0
  156. ekbatan-0.1.0/docs/TIME-KINDS-LEDGER.md +66 -0
  157. ekbatan-0.1.0/docs/TYPED-RECORDS-LEDGER.md +95 -0
  158. ekbatan-0.1.0/docs/VALIDATE-LEDGER.md +67 -0
  159. ekbatan-0.1.0/docs/behaviour-parity/A-repository.md +173 -0
  160. ekbatan-0.1.0/docs/behaviour-parity/B-actions.md +172 -0
  161. ekbatan-0.1.0/docs/behaviour-parity/C-transactions-sharding-config.md +249 -0
  162. ekbatan-0.1.0/docs/behaviour-parity/D-events.md +157 -0
  163. ekbatan-0.1.0/docs/behaviour-parity/E-jobs-locks.md +171 -0
  164. ekbatan-0.1.0/docs/behaviour-parity/F-migrations.md +184 -0
  165. ekbatan-0.1.0/docs/behaviour-parity/G-domain-model.md +237 -0
  166. ekbatan-0.1.0/docs/beside-java.md +161 -0
  167. ekbatan-0.1.0/docs/concepts/README.md +21 -0
  168. ekbatan-0.1.0/docs/concepts/actions.md +274 -0
  169. ekbatan-0.1.0/docs/concepts/models-and-entities.md +541 -0
  170. ekbatan-0.1.0/docs/concepts/outbox.md +149 -0
  171. ekbatan-0.1.0/docs/concepts/sagas.md +272 -0
  172. ekbatan-0.1.0/docs/concepts/sharding.md +157 -0
  173. ekbatan-0.1.0/docs/concepts/the-dual-write-trap.md +83 -0
  174. ekbatan-0.1.0/docs/database/README.md +32 -0
  175. ekbatan-0.1.0/docs/database/config-files.md +243 -0
  176. ekbatan-0.1.0/docs/database/keyed-locks.md +421 -0
  177. ekbatan-0.1.0/docs/database/mariadb.md +149 -0
  178. ekbatan-0.1.0/docs/database/migrations.md +407 -0
  179. ekbatan-0.1.0/docs/database/multi-database.md +328 -0
  180. ekbatan-0.1.0/docs/database/mysql.md +143 -0
  181. ekbatan-0.1.0/docs/database/postgresql.md +125 -0
  182. ekbatan-0.1.0/docs/database/repositories.md +577 -0
  183. ekbatan-0.1.0/docs/database/schemagen.md +908 -0
  184. ekbatan-0.1.0/docs/database/sharding.md +495 -0
  185. ekbatan-0.1.0/docs/database/sqlite.md +138 -0
  186. ekbatan-0.1.0/docs/database/tables/event-notifications.md +191 -0
  187. ekbatan-0.1.0/docs/database/tables/events.md +184 -0
  188. ekbatan-0.1.0/docs/database/tables/scheduled-tasks.md +179 -0
  189. ekbatan-0.1.0/docs/database/tables.md +121 -0
  190. ekbatan-0.1.0/docs/database/transaction-manager.md +289 -0
  191. ekbatan-0.1.0/docs/dracula/A-domain-persistence.md +446 -0
  192. ekbatan-0.1.0/docs/dracula/B-actions-events.md +318 -0
  193. ekbatan-0.1.0/docs/dracula/C-config-migrations.md +281 -0
  194. ekbatan-0.1.0/docs/dracula/D-jobs-locks.md +213 -0
  195. ekbatan-0.1.0/docs/dracula/E-using-it.md +338 -0
  196. ekbatan-0.1.0/docs/driver-survey/logins.md +1162 -0
  197. ekbatan-0.1.0/docs/driver-survey/mysql-mariadb.md +713 -0
  198. ekbatan-0.1.0/docs/driver-survey/postgresql.md +672 -0
  199. ekbatan-0.1.0/docs/driver-survey/sqlite.md +215 -0
  200. ekbatan-0.1.0/docs/events/README.md +24 -0
  201. ekbatan-0.1.0/docs/events/event-streaming.md +531 -0
  202. ekbatan-0.1.0/docs/events/local-event-handler.md +533 -0
  203. ekbatan-0.1.0/docs/getting-started.md +383 -0
  204. ekbatan-0.1.0/docs/going-async.md +246 -0
  205. ekbatan-0.1.0/docs/jobs/README.md +11 -0
  206. ekbatan-0.1.0/docs/jobs/distributed-jobs.md +370 -0
  207. ekbatan-0.1.0/docs/parity-fix/E-events.md +26 -0
  208. ekbatan-0.1.0/docs/parity-fix/J-json-domain.md +30 -0
  209. ekbatan-0.1.0/docs/parity-fix/L-locks-jobs.md +42 -0
  210. ekbatan-0.1.0/docs/parity-fix/T-transactions-config.md +22 -0
  211. ekbatan-0.1.0/docs/parity-round-2/N1-config-wiring.md +63 -0
  212. ekbatan-0.1.0/docs/parity-round-2/N2-codegen.md +110 -0
  213. ekbatan-0.1.0/docs/parity-round-2/N3-observability.md +103 -0
  214. ekbatan-0.1.0/docs/parity-round-2/N4-api-errors-testing.md +122 -0
  215. ekbatan-0.1.0/docs/parity-round-2/N5-combinations.md +90 -0
  216. ekbatan-0.1.0/docs/parity-round-2/N6-docs-claims.md +127 -0
  217. ekbatan-0.1.0/docs/parity-round-2/R0-rerun.md +90 -0
  218. ekbatan-0.1.0/docs/runtime/README.md +13 -0
  219. ekbatan-0.1.0/docs/runtime/async.md +416 -0
  220. ekbatan-0.1.0/docs/runtime/concurrency.md +316 -0
  221. ekbatan-0.1.0/docs/runtime/observability.md +204 -0
  222. ekbatan-0.1.0/docs/startup-and-shutdown.md +1308 -0
  223. ekbatan-0.1.0/docs/sync-or-async.md +105 -0
  224. ekbatan-0.1.0/docs/website-nojava-inventory.md +715 -0
  225. ekbatan-0.1.0/docs/wiring-fastapi.md +331 -0
  226. ekbatan-0.1.0/docs/wiring.md +550 -0
  227. ekbatan-0.1.0/ekbatan-py-examples/README.md +190 -0
  228. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/.gitignore +6 -0
  229. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/Makefile +55 -0
  230. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/README.md +102 -0
  231. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/compose.yaml +30 -0
  232. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/pyproject.toml +38 -0
  233. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__init__.py +0 -0
  234. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__main__.py +41 -0
  235. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/actions.py +115 -0
  236. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/api.py +149 -0
  237. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/app.py +273 -0
  238. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/builders.py +78 -0
  239. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/converters.py +24 -0
  240. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/ekbatan.yaml +108 -0
  241. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/handlers.py +61 -0
  242. 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
  243. 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
  244. 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
  245. 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
  246. 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
  247. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/model.py +191 -0
  248. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mariadb/src/fastapi_wallet_rest_async_mariadb/repository.py +122 -0
  249. 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
  250. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/.gitignore +6 -0
  251. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/Makefile +55 -0
  252. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/README.md +102 -0
  253. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/compose.yaml +30 -0
  254. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/pyproject.toml +38 -0
  255. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/__init__.py +0 -0
  256. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/__main__.py +41 -0
  257. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/actions.py +115 -0
  258. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/api.py +149 -0
  259. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/app.py +273 -0
  260. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/builders.py +78 -0
  261. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/converters.py +24 -0
  262. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/ekbatan.yaml +108 -0
  263. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/handlers.py +61 -0
  264. 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
  265. 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
  266. 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
  267. 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
  268. 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
  269. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/model.py +191 -0
  270. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-mysql/src/fastapi_wallet_rest_async_mysql/repository.py +122 -0
  271. 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
  272. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/.gitignore +6 -0
  273. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/Makefile +55 -0
  274. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/README.md +94 -0
  275. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/compose.yaml +32 -0
  276. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/pyproject.toml +32 -0
  277. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/__init__.py +0 -0
  278. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/__main__.py +41 -0
  279. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/actions.py +115 -0
  280. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/api.py +149 -0
  281. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/app.py +273 -0
  282. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/builders.py +78 -0
  283. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/converters.py +24 -0
  284. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/ekbatan.yaml +109 -0
  285. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/handlers.py +61 -0
  286. 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
  287. 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
  288. 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
  289. 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
  290. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/model.py +191 -0
  291. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-pg/src/fastapi_wallet_rest_async_pg/repository.py +122 -0
  292. 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
  293. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/.gitignore +6 -0
  294. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/Makefile +55 -0
  295. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/README.md +94 -0
  296. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/compose.yaml +32 -0
  297. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-async-sharded-pg/pyproject.toml +32 -0
  298. 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
  299. 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
  300. 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
  301. 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
  302. 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
  303. 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
  304. 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
  305. 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
  306. 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
  307. 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
  308. 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
  309. 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
  310. 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
  311. 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
  312. 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
  313. 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
  314. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/.gitignore +6 -0
  315. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/Makefile +55 -0
  316. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/README.md +92 -0
  317. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/compose.yaml +30 -0
  318. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/pyproject.toml +38 -0
  319. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/__init__.py +0 -0
  320. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/__main__.py +41 -0
  321. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/actions.py +114 -0
  322. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/api.py +149 -0
  323. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/app.py +205 -0
  324. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/builders.py +78 -0
  325. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/converters.py +24 -0
  326. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/ekbatan.yaml +100 -0
  327. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/handlers.py +60 -0
  328. 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
  329. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0001__eventlog.sql +53 -0
  330. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0002__scheduled_tasks.sql +28 -0
  331. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0003__wallets.sql +16 -0
  332. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0004__notifications.sql +17 -0
  333. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/model.py +191 -0
  334. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mariadb/src/fastapi_wallet_rest_mariadb/repository.py +121 -0
  335. 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
  336. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/.gitignore +6 -0
  337. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/Makefile +55 -0
  338. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/README.md +92 -0
  339. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/compose.yaml +30 -0
  340. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/pyproject.toml +38 -0
  341. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/__init__.py +0 -0
  342. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/__main__.py +41 -0
  343. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/actions.py +114 -0
  344. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/api.py +149 -0
  345. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/app.py +205 -0
  346. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/builders.py +78 -0
  347. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/converters.py +24 -0
  348. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/ekbatan.yaml +100 -0
  349. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/handlers.py +60 -0
  350. 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
  351. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/migrations/V0001__eventlog.sql +53 -0
  352. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/migrations/V0002__scheduled_tasks.sql +28 -0
  353. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/migrations/V0003__wallets.sql +16 -0
  354. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/migrations/V0004__notifications.sql +17 -0
  355. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/model.py +191 -0
  356. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-mysql/src/fastapi_wallet_rest_mysql/repository.py +121 -0
  357. 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
  358. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/.gitignore +6 -0
  359. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/Makefile +55 -0
  360. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/README.md +84 -0
  361. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/compose.yaml +32 -0
  362. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/pyproject.toml +32 -0
  363. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/__init__.py +0 -0
  364. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/__main__.py +41 -0
  365. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/actions.py +114 -0
  366. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/api.py +149 -0
  367. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/app.py +205 -0
  368. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/builders.py +78 -0
  369. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/converters.py +24 -0
  370. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/ekbatan.yaml +100 -0
  371. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/handlers.py +60 -0
  372. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/migrations/V0001__eventlog.sql +56 -0
  373. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  374. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/migrations/V0003__wallets.sql +16 -0
  375. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/migrations/V0004__notifications.sql +17 -0
  376. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/model.py +191 -0
  377. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-pg/src/fastapi_wallet_rest_pg/repository.py +121 -0
  378. 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
  379. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/.gitignore +6 -0
  380. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/Makefile +55 -0
  381. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/README.md +84 -0
  382. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/compose.yaml +32 -0
  383. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/pyproject.toml +32 -0
  384. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__init__.py +0 -0
  385. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__main__.py +41 -0
  386. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/actions.py +114 -0
  387. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/api.py +149 -0
  388. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/app.py +205 -0
  389. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/builders.py +78 -0
  390. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/converters.py +24 -0
  391. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/ekbatan.yaml +100 -0
  392. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/handlers.py +60 -0
  393. 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
  394. 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
  395. 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
  396. 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
  397. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/model.py +191 -0
  398. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-pip-sharded-pg/src/fastapi_wallet_rest_sharded_pg/repository.py +121 -0
  399. 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
  400. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/.gitignore +5 -0
  401. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/Makefile +45 -0
  402. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/README.md +102 -0
  403. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/compose.yaml +30 -0
  404. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/poetry.toml +2 -0
  405. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/pyproject.toml +59 -0
  406. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__init__.py +0 -0
  407. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__main__.py +41 -0
  408. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/actions.py +115 -0
  409. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/api.py +149 -0
  410. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/app.py +273 -0
  411. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/builders.py +78 -0
  412. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/converters.py +24 -0
  413. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/ekbatan.yaml +108 -0
  414. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/handlers.py +61 -0
  415. 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
  416. 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
  417. 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
  418. 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
  419. 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
  420. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/model.py +191 -0
  421. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mariadb/src/fastapi_wallet_rest_async_mariadb/repository.py +122 -0
  422. 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
  423. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/.gitignore +5 -0
  424. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/Makefile +45 -0
  425. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/README.md +102 -0
  426. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/compose.yaml +30 -0
  427. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/poetry.toml +2 -0
  428. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/pyproject.toml +59 -0
  429. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/__init__.py +0 -0
  430. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/__main__.py +41 -0
  431. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/actions.py +115 -0
  432. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/api.py +149 -0
  433. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/app.py +273 -0
  434. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/builders.py +78 -0
  435. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/converters.py +24 -0
  436. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/ekbatan.yaml +108 -0
  437. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/handlers.py +61 -0
  438. 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
  439. 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
  440. 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
  441. 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
  442. 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
  443. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/model.py +191 -0
  444. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-mysql/src/fastapi_wallet_rest_async_mysql/repository.py +122 -0
  445. 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
  446. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/.gitignore +5 -0
  447. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/Makefile +45 -0
  448. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/README.md +94 -0
  449. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/compose.yaml +32 -0
  450. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/poetry.toml +2 -0
  451. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/pyproject.toml +53 -0
  452. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/__init__.py +0 -0
  453. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/__main__.py +41 -0
  454. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/actions.py +115 -0
  455. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/api.py +149 -0
  456. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/app.py +273 -0
  457. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/builders.py +78 -0
  458. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/converters.py +24 -0
  459. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/ekbatan.yaml +109 -0
  460. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/handlers.py +61 -0
  461. 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
  462. 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
  463. 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
  464. 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
  465. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/model.py +191 -0
  466. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-pg/src/fastapi_wallet_rest_async_pg/repository.py +122 -0
  467. 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
  468. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/.gitignore +5 -0
  469. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/Makefile +45 -0
  470. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/README.md +94 -0
  471. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/compose.yaml +32 -0
  472. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/poetry.toml +2 -0
  473. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-async-sharded-pg/pyproject.toml +53 -0
  474. 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
  475. 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
  476. 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
  477. 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
  478. 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
  479. 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
  480. 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
  481. 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
  482. 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
  483. 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
  484. 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
  485. 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
  486. 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
  487. 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
  488. 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
  489. 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
  490. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/.gitignore +5 -0
  491. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/Makefile +45 -0
  492. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/README.md +92 -0
  493. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/compose.yaml +30 -0
  494. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/poetry.toml +2 -0
  495. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/pyproject.toml +59 -0
  496. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/__init__.py +0 -0
  497. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/__main__.py +41 -0
  498. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/actions.py +114 -0
  499. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/api.py +149 -0
  500. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/app.py +205 -0
  501. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/builders.py +78 -0
  502. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/converters.py +24 -0
  503. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/ekbatan.yaml +100 -0
  504. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/handlers.py +60 -0
  505. 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
  506. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0001__eventlog.sql +53 -0
  507. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0002__scheduled_tasks.sql +28 -0
  508. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0003__wallets.sql +16 -0
  509. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0004__notifications.sql +17 -0
  510. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/model.py +191 -0
  511. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mariadb/src/fastapi_wallet_rest_mariadb/repository.py +121 -0
  512. 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
  513. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/.gitignore +5 -0
  514. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/Makefile +45 -0
  515. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/README.md +92 -0
  516. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/compose.yaml +30 -0
  517. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/poetry.toml +2 -0
  518. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/pyproject.toml +59 -0
  519. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/__init__.py +0 -0
  520. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/__main__.py +41 -0
  521. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/actions.py +114 -0
  522. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/api.py +149 -0
  523. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/app.py +205 -0
  524. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/builders.py +78 -0
  525. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/converters.py +24 -0
  526. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/ekbatan.yaml +100 -0
  527. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/handlers.py +60 -0
  528. 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
  529. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/migrations/V0001__eventlog.sql +53 -0
  530. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/migrations/V0002__scheduled_tasks.sql +28 -0
  531. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/migrations/V0003__wallets.sql +16 -0
  532. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/migrations/V0004__notifications.sql +17 -0
  533. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/model.py +191 -0
  534. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-mysql/src/fastapi_wallet_rest_mysql/repository.py +121 -0
  535. 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
  536. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/.gitignore +5 -0
  537. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/Makefile +45 -0
  538. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/README.md +84 -0
  539. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/compose.yaml +32 -0
  540. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/poetry.toml +2 -0
  541. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/pyproject.toml +53 -0
  542. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/__init__.py +0 -0
  543. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/__main__.py +41 -0
  544. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/actions.py +114 -0
  545. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/api.py +149 -0
  546. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/app.py +205 -0
  547. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/builders.py +78 -0
  548. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/converters.py +24 -0
  549. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/ekbatan.yaml +100 -0
  550. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/handlers.py +60 -0
  551. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/migrations/V0001__eventlog.sql +56 -0
  552. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  553. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/migrations/V0003__wallets.sql +16 -0
  554. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/migrations/V0004__notifications.sql +17 -0
  555. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/model.py +191 -0
  556. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-pg/src/fastapi_wallet_rest_pg/repository.py +121 -0
  557. 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
  558. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/.gitignore +5 -0
  559. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/Makefile +45 -0
  560. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/README.md +84 -0
  561. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/compose.yaml +32 -0
  562. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/poetry.toml +2 -0
  563. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/pyproject.toml +53 -0
  564. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__init__.py +0 -0
  565. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__main__.py +41 -0
  566. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/actions.py +114 -0
  567. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/api.py +149 -0
  568. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/app.py +205 -0
  569. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/builders.py +78 -0
  570. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/converters.py +24 -0
  571. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/ekbatan.yaml +100 -0
  572. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/handlers.py +60 -0
  573. 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
  574. 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
  575. 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
  576. 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
  577. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/model.py +191 -0
  578. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-poetry-sharded-pg/src/fastapi_wallet_rest_sharded_pg/repository.py +121 -0
  579. 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
  580. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/.gitignore +5 -0
  581. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/Makefile +44 -0
  582. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/README.md +100 -0
  583. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/compose.yaml +30 -0
  584. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/pyproject.toml +40 -0
  585. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__init__.py +0 -0
  586. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/__main__.py +41 -0
  587. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/actions.py +115 -0
  588. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/api.py +149 -0
  589. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/app.py +273 -0
  590. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/builders.py +78 -0
  591. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/converters.py +24 -0
  592. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/ekbatan.yaml +108 -0
  593. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/handlers.py +61 -0
  594. 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
  595. 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
  596. 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
  597. 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
  598. 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
  599. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/model.py +191 -0
  600. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mariadb/src/fastapi_wallet_rest_async_mariadb/repository.py +122 -0
  601. 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
  602. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/.gitignore +5 -0
  603. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/Makefile +44 -0
  604. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/README.md +100 -0
  605. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/compose.yaml +30 -0
  606. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/pyproject.toml +40 -0
  607. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/__init__.py +0 -0
  608. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/__main__.py +41 -0
  609. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/actions.py +115 -0
  610. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/api.py +149 -0
  611. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/app.py +273 -0
  612. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/builders.py +78 -0
  613. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/converters.py +24 -0
  614. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/ekbatan.yaml +108 -0
  615. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/handlers.py +61 -0
  616. 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
  617. 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
  618. 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
  619. 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
  620. 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
  621. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/model.py +191 -0
  622. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-mysql/src/fastapi_wallet_rest_async_mysql/repository.py +122 -0
  623. 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
  624. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/.gitignore +5 -0
  625. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/Makefile +44 -0
  626. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/README.md +92 -0
  627. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/compose.yaml +32 -0
  628. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/pyproject.toml +34 -0
  629. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/__init__.py +0 -0
  630. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/__main__.py +41 -0
  631. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/actions.py +115 -0
  632. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/api.py +149 -0
  633. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/app.py +273 -0
  634. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/builders.py +78 -0
  635. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/converters.py +24 -0
  636. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/ekbatan.yaml +109 -0
  637. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/handlers.py +61 -0
  638. 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
  639. 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
  640. 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
  641. 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
  642. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/model.py +191 -0
  643. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-pg/src/fastapi_wallet_rest_async_pg/repository.py +122 -0
  644. 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
  645. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/.gitignore +5 -0
  646. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/Makefile +44 -0
  647. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/README.md +92 -0
  648. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/compose.yaml +32 -0
  649. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-async-sharded-pg/pyproject.toml +34 -0
  650. 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
  651. 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
  652. 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
  653. 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
  654. 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
  655. 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
  656. 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
  657. 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
  658. 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
  659. 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
  660. 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
  661. 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
  662. 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
  663. 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
  664. 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
  665. 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
  666. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/.gitignore +5 -0
  667. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/Makefile +44 -0
  668. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/README.md +90 -0
  669. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/compose.yaml +30 -0
  670. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/pyproject.toml +40 -0
  671. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/__init__.py +0 -0
  672. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/__main__.py +41 -0
  673. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/actions.py +114 -0
  674. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/api.py +149 -0
  675. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/app.py +205 -0
  676. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/builders.py +78 -0
  677. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/converters.py +24 -0
  678. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/ekbatan.yaml +100 -0
  679. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/handlers.py +60 -0
  680. 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
  681. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0001__eventlog.sql +53 -0
  682. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0002__scheduled_tasks.sql +28 -0
  683. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0003__wallets.sql +16 -0
  684. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/migrations/V0004__notifications.sql +17 -0
  685. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/model.py +191 -0
  686. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mariadb/src/fastapi_wallet_rest_mariadb/repository.py +121 -0
  687. 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
  688. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/.gitignore +5 -0
  689. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/Makefile +44 -0
  690. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/README.md +90 -0
  691. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/compose.yaml +30 -0
  692. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/pyproject.toml +40 -0
  693. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/__init__.py +0 -0
  694. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/__main__.py +41 -0
  695. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/actions.py +114 -0
  696. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/api.py +149 -0
  697. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/app.py +205 -0
  698. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/builders.py +78 -0
  699. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/converters.py +24 -0
  700. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/ekbatan.yaml +100 -0
  701. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/handlers.py +60 -0
  702. 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
  703. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/migrations/V0001__eventlog.sql +53 -0
  704. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/migrations/V0002__scheduled_tasks.sql +28 -0
  705. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/migrations/V0003__wallets.sql +16 -0
  706. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/migrations/V0004__notifications.sql +17 -0
  707. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/model.py +191 -0
  708. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-mysql/src/fastapi_wallet_rest_mysql/repository.py +121 -0
  709. 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
  710. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/.gitignore +5 -0
  711. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/Makefile +44 -0
  712. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/README.md +82 -0
  713. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/compose.yaml +32 -0
  714. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/pyproject.toml +34 -0
  715. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/__init__.py +0 -0
  716. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/__main__.py +41 -0
  717. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/actions.py +114 -0
  718. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/api.py +149 -0
  719. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/app.py +205 -0
  720. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/builders.py +78 -0
  721. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/converters.py +24 -0
  722. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/ekbatan.yaml +100 -0
  723. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/handlers.py +60 -0
  724. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/migrations/V0001__eventlog.sql +56 -0
  725. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  726. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/migrations/V0003__wallets.sql +16 -0
  727. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/migrations/V0004__notifications.sql +17 -0
  728. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/model.py +191 -0
  729. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-pg/src/fastapi_wallet_rest_pg/repository.py +121 -0
  730. 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
  731. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/.gitignore +5 -0
  732. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/Makefile +44 -0
  733. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/README.md +82 -0
  734. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/compose.yaml +32 -0
  735. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/pyproject.toml +34 -0
  736. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__init__.py +0 -0
  737. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/__main__.py +41 -0
  738. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/actions.py +114 -0
  739. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/api.py +149 -0
  740. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/app.py +205 -0
  741. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/builders.py +78 -0
  742. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/converters.py +24 -0
  743. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/ekbatan.yaml +100 -0
  744. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/handlers.py +60 -0
  745. 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
  746. 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
  747. 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
  748. 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
  749. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/model.py +191 -0
  750. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-rest-uv-sharded-pg/src/fastapi_wallet_rest_sharded_pg/repository.py +121 -0
  751. 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
  752. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/.gitignore +6 -0
  753. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/Makefile +55 -0
  754. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/README.md +80 -0
  755. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/compose.yaml +18 -0
  756. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/pyproject.toml +37 -0
  757. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/__init__.py +0 -0
  758. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/__main__.py +36 -0
  759. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/actions.py +202 -0
  760. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/api.py +163 -0
  761. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/app.py +258 -0
  762. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/builders.py +66 -0
  763. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/converters.py +36 -0
  764. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/ekbatan.yaml +63 -0
  765. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/handlers.py +76 -0
  766. 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
  767. 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
  768. 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
  769. 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
  770. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/model.py +293 -0
  771. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-async-pg/src/fastapi_wallet_saga_async_pg/repository.py +80 -0
  772. 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
  773. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/.gitignore +6 -0
  774. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/Makefile +55 -0
  775. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/README.md +74 -0
  776. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/compose.yaml +18 -0
  777. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/pyproject.toml +37 -0
  778. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/__init__.py +0 -0
  779. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/__main__.py +36 -0
  780. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/actions.py +199 -0
  781. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/api.py +164 -0
  782. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/app.py +177 -0
  783. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/builders.py +66 -0
  784. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/converters.py +36 -0
  785. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/ekbatan.yaml +54 -0
  786. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/handlers.py +76 -0
  787. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/migrations/V0001__eventlog.sql +56 -0
  788. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  789. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/migrations/V0003__wallets.sql +16 -0
  790. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/migrations/V0004__transfer_steps.sql +15 -0
  791. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/model.py +293 -0
  792. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-pip-pg/src/fastapi_wallet_saga_pg/repository.py +80 -0
  793. 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
  794. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/.gitignore +5 -0
  795. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/Makefile +45 -0
  796. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/README.md +80 -0
  797. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/compose.yaml +18 -0
  798. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/poetry.toml +2 -0
  799. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/pyproject.toml +58 -0
  800. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/__init__.py +0 -0
  801. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/__main__.py +36 -0
  802. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/actions.py +202 -0
  803. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/api.py +163 -0
  804. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/app.py +258 -0
  805. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/builders.py +66 -0
  806. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/converters.py +36 -0
  807. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/ekbatan.yaml +63 -0
  808. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/handlers.py +76 -0
  809. 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
  810. 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
  811. 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
  812. 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
  813. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/model.py +293 -0
  814. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-async-pg/src/fastapi_wallet_saga_async_pg/repository.py +80 -0
  815. 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
  816. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/.gitignore +5 -0
  817. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/Makefile +45 -0
  818. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/README.md +74 -0
  819. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/compose.yaml +18 -0
  820. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/poetry.toml +2 -0
  821. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/pyproject.toml +58 -0
  822. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/__init__.py +0 -0
  823. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/__main__.py +36 -0
  824. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/actions.py +199 -0
  825. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/api.py +164 -0
  826. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/app.py +177 -0
  827. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/builders.py +66 -0
  828. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/converters.py +36 -0
  829. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/ekbatan.yaml +54 -0
  830. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/handlers.py +76 -0
  831. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/migrations/V0001__eventlog.sql +56 -0
  832. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  833. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/migrations/V0003__wallets.sql +16 -0
  834. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/migrations/V0004__transfer_steps.sql +15 -0
  835. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/model.py +293 -0
  836. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-poetry-pg/src/fastapi_wallet_saga_pg/repository.py +80 -0
  837. 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
  838. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/.gitignore +5 -0
  839. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/Makefile +44 -0
  840. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/README.md +78 -0
  841. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/compose.yaml +18 -0
  842. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/pyproject.toml +39 -0
  843. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/__init__.py +0 -0
  844. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/__main__.py +36 -0
  845. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/actions.py +202 -0
  846. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/api.py +163 -0
  847. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/app.py +258 -0
  848. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/builders.py +66 -0
  849. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/converters.py +36 -0
  850. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/ekbatan.yaml +63 -0
  851. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/handlers.py +76 -0
  852. 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
  853. 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
  854. 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
  855. 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
  856. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/model.py +293 -0
  857. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-async-pg/src/fastapi_wallet_saga_async_pg/repository.py +80 -0
  858. 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
  859. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/.gitignore +5 -0
  860. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/Makefile +44 -0
  861. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/README.md +72 -0
  862. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/compose.yaml +18 -0
  863. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/pyproject.toml +39 -0
  864. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/__init__.py +0 -0
  865. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/__main__.py +36 -0
  866. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/actions.py +199 -0
  867. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/api.py +164 -0
  868. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/app.py +177 -0
  869. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/builders.py +66 -0
  870. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/converters.py +36 -0
  871. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/ekbatan.yaml +54 -0
  872. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/handlers.py +76 -0
  873. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/migrations/V0001__eventlog.sql +56 -0
  874. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  875. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/migrations/V0003__wallets.sql +16 -0
  876. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/migrations/V0004__transfer_steps.sql +15 -0
  877. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/model.py +293 -0
  878. ekbatan-0.1.0/ekbatan-py-examples/fastapi-wallet-saga-uv-pg/src/fastapi_wallet_saga_pg/repository.py +80 -0
  879. 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
  880. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/.gitignore +6 -0
  881. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/Makefile +55 -0
  882. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/README.md +75 -0
  883. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/compose.yaml +32 -0
  884. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/pyproject.toml +32 -0
  885. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/__init__.py +0 -0
  886. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/__main__.py +47 -0
  887. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/actions.py +115 -0
  888. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/app.py +218 -0
  889. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/builders.py +78 -0
  890. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/converters.py +24 -0
  891. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/ekbatan.yaml +102 -0
  892. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/handlers.py +61 -0
  893. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/jobs.py +118 -0
  894. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/migrations/V0001__eventlog.sql +56 -0
  895. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  896. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/migrations/V0003__wallets.sql +16 -0
  897. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/migrations/V0004__notifications.sql +17 -0
  898. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/model.py +191 -0
  899. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-async-pg/src/job_worker_async_pg/repository.py +122 -0
  900. 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
  901. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/.gitignore +6 -0
  902. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/Makefile +55 -0
  903. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/README.md +67 -0
  904. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/compose.yaml +32 -0
  905. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/pyproject.toml +32 -0
  906. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/__init__.py +0 -0
  907. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/__main__.py +47 -0
  908. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/actions.py +114 -0
  909. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/app.py +176 -0
  910. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/builders.py +78 -0
  911. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/converters.py +24 -0
  912. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/ekbatan.yaml +102 -0
  913. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/handlers.py +60 -0
  914. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/jobs.py +103 -0
  915. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/migrations/V0001__eventlog.sql +56 -0
  916. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  917. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/migrations/V0003__wallets.sql +16 -0
  918. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/migrations/V0004__notifications.sql +17 -0
  919. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/model.py +191 -0
  920. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/repository.py +121 -0
  921. ekbatan-0.1.0/ekbatan-py-examples/job-worker-pip-pg/src/job_worker_pg/test_job_worker_pg.py +189 -0
  922. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/.gitignore +5 -0
  923. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/Makefile +45 -0
  924. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/README.md +75 -0
  925. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/compose.yaml +32 -0
  926. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/poetry.toml +2 -0
  927. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/pyproject.toml +50 -0
  928. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/__init__.py +0 -0
  929. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/__main__.py +47 -0
  930. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/actions.py +115 -0
  931. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/app.py +218 -0
  932. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/builders.py +78 -0
  933. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/converters.py +24 -0
  934. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/ekbatan.yaml +102 -0
  935. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/handlers.py +61 -0
  936. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/jobs.py +118 -0
  937. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/migrations/V0001__eventlog.sql +56 -0
  938. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  939. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/migrations/V0003__wallets.sql +16 -0
  940. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/migrations/V0004__notifications.sql +17 -0
  941. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/model.py +191 -0
  942. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-async-pg/src/job_worker_async_pg/repository.py +122 -0
  943. 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
  944. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/.gitignore +5 -0
  945. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/Makefile +45 -0
  946. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/README.md +67 -0
  947. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/compose.yaml +32 -0
  948. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/poetry.toml +2 -0
  949. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/pyproject.toml +50 -0
  950. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/__init__.py +0 -0
  951. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/__main__.py +47 -0
  952. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/actions.py +114 -0
  953. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/app.py +176 -0
  954. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/builders.py +78 -0
  955. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/converters.py +24 -0
  956. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/ekbatan.yaml +102 -0
  957. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/handlers.py +60 -0
  958. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/jobs.py +103 -0
  959. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/migrations/V0001__eventlog.sql +56 -0
  960. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  961. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/migrations/V0003__wallets.sql +16 -0
  962. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/migrations/V0004__notifications.sql +17 -0
  963. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/model.py +191 -0
  964. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/repository.py +121 -0
  965. ekbatan-0.1.0/ekbatan-py-examples/job-worker-poetry-pg/src/job_worker_pg/test_job_worker_pg.py +189 -0
  966. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/.gitignore +5 -0
  967. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/Makefile +44 -0
  968. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/README.md +73 -0
  969. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/compose.yaml +32 -0
  970. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/pyproject.toml +34 -0
  971. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/__init__.py +0 -0
  972. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/__main__.py +47 -0
  973. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/actions.py +115 -0
  974. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/app.py +218 -0
  975. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/builders.py +78 -0
  976. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/converters.py +24 -0
  977. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/ekbatan.yaml +102 -0
  978. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/handlers.py +61 -0
  979. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/jobs.py +118 -0
  980. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/migrations/V0001__eventlog.sql +56 -0
  981. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  982. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/migrations/V0003__wallets.sql +16 -0
  983. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/migrations/V0004__notifications.sql +17 -0
  984. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/model.py +191 -0
  985. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-async-pg/src/job_worker_async_pg/repository.py +122 -0
  986. 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
  987. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/.gitignore +5 -0
  988. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/Makefile +44 -0
  989. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/README.md +65 -0
  990. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/compose.yaml +32 -0
  991. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/pyproject.toml +34 -0
  992. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/__init__.py +0 -0
  993. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/__main__.py +47 -0
  994. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/actions.py +114 -0
  995. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/app.py +176 -0
  996. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/builders.py +78 -0
  997. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/converters.py +24 -0
  998. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/ekbatan.yaml +102 -0
  999. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/handlers.py +60 -0
  1000. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/jobs.py +103 -0
  1001. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/migrations/V0001__eventlog.sql +56 -0
  1002. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/migrations/V0002__scheduled_tasks.sql +28 -0
  1003. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/migrations/V0003__wallets.sql +16 -0
  1004. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/migrations/V0004__notifications.sql +17 -0
  1005. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/model.py +191 -0
  1006. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/repository.py +121 -0
  1007. ekbatan-0.1.0/ekbatan-py-examples/job-worker-uv-pg/src/job_worker_pg/test_job_worker_pg.py +189 -0
  1008. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/.gitignore +4 -0
  1009. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/Makefile +41 -0
  1010. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/README.md +47 -0
  1011. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/pyproject.toml +20 -0
  1012. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/__init__.py +1 -0
  1013. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/__main__.py +127 -0
  1014. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/actions.py +115 -0
  1015. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/app.py +188 -0
  1016. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/builders.py +78 -0
  1017. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/converters.py +24 -0
  1018. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/ekbatan.yaml +33 -0
  1019. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/handlers.py +61 -0
  1020. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/model.py +191 -0
  1021. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/repository.py +122 -0
  1022. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-async-sqlite/src/wallet_service_async_sqlite/schema.py +227 -0
  1023. 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
  1024. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/.gitignore +4 -0
  1025. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/Makefile +41 -0
  1026. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/README.md +47 -0
  1027. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/pyproject.toml +20 -0
  1028. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/__init__.py +1 -0
  1029. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/__main__.py +119 -0
  1030. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/actions.py +114 -0
  1031. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/app.py +129 -0
  1032. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/builders.py +78 -0
  1033. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/converters.py +24 -0
  1034. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/ekbatan.yaml +33 -0
  1035. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/handlers.py +60 -0
  1036. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/model.py +191 -0
  1037. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/repository.py +121 -0
  1038. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/schema.py +227 -0
  1039. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-pip-sqlite/src/wallet_service_sqlite/test_wallet_service_sqlite.py +124 -0
  1040. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/.gitignore +3 -0
  1041. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/Makefile +31 -0
  1042. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/README.md +47 -0
  1043. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/poetry.toml +2 -0
  1044. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/pyproject.toml +30 -0
  1045. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/__init__.py +1 -0
  1046. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/__main__.py +127 -0
  1047. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/actions.py +115 -0
  1048. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/app.py +188 -0
  1049. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/builders.py +78 -0
  1050. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/converters.py +24 -0
  1051. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/ekbatan.yaml +33 -0
  1052. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/handlers.py +61 -0
  1053. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/model.py +191 -0
  1054. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/repository.py +122 -0
  1055. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-async-sqlite/src/wallet_service_async_sqlite/schema.py +227 -0
  1056. 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
  1057. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/.gitignore +3 -0
  1058. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/Makefile +31 -0
  1059. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/README.md +47 -0
  1060. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/poetry.toml +2 -0
  1061. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/pyproject.toml +30 -0
  1062. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/__init__.py +1 -0
  1063. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/__main__.py +119 -0
  1064. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/actions.py +114 -0
  1065. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/app.py +129 -0
  1066. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/builders.py +78 -0
  1067. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/converters.py +24 -0
  1068. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/ekbatan.yaml +33 -0
  1069. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/handlers.py +60 -0
  1070. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/model.py +191 -0
  1071. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/repository.py +121 -0
  1072. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/schema.py +227 -0
  1073. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-poetry-sqlite/src/wallet_service_sqlite/test_wallet_service_sqlite.py +124 -0
  1074. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/.gitignore +3 -0
  1075. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/Makefile +31 -0
  1076. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/README.md +45 -0
  1077. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/pyproject.toml +22 -0
  1078. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/__init__.py +1 -0
  1079. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/__main__.py +127 -0
  1080. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/actions.py +115 -0
  1081. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/app.py +188 -0
  1082. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/builders.py +78 -0
  1083. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/converters.py +24 -0
  1084. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/ekbatan.yaml +33 -0
  1085. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/handlers.py +61 -0
  1086. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/model.py +191 -0
  1087. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/repository.py +122 -0
  1088. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-async-sqlite/src/wallet_service_async_sqlite/schema.py +227 -0
  1089. 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
  1090. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/.gitignore +3 -0
  1091. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/Makefile +31 -0
  1092. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/README.md +45 -0
  1093. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/pyproject.toml +22 -0
  1094. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/__init__.py +1 -0
  1095. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/__main__.py +119 -0
  1096. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/actions.py +114 -0
  1097. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/app.py +129 -0
  1098. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/builders.py +78 -0
  1099. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/converters.py +24 -0
  1100. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/ekbatan.yaml +33 -0
  1101. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/handlers.py +60 -0
  1102. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/model.py +191 -0
  1103. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/repository.py +121 -0
  1104. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/schema.py +227 -0
  1105. ekbatan-0.1.0/ekbatan-py-examples/wallet-service-uv-sqlite/src/wallet_service_sqlite/test_wallet_service_sqlite.py +124 -0
  1106. ekbatan-0.1.0/openspec/README.md +39 -0
  1107. ekbatan-0.1.0/openspec/changes/archive/.gitkeep +0 -0
  1108. ekbatan-0.1.0/openspec/config.yaml +32 -0
  1109. ekbatan-0.1.0/parity-probes/A-repository/ProbeRegistryTest.java +92 -0
  1110. ekbatan-0.1.0/parity-probes/A-repository/ProbeRepoBase.java +370 -0
  1111. ekbatan-0.1.0/parity-probes/A-repository/ProbeRepoMariadbTest.java +77 -0
  1112. ekbatan-0.1.0/parity-probes/A-repository/ProbeRepoMysqlTest.java +77 -0
  1113. ekbatan-0.1.0/parity-probes/A-repository/ProbeRepoPgTest.java +77 -0
  1114. ekbatan-0.1.0/parity-probes/A-repository/ProbeShardedPgTest.java +276 -0
  1115. ekbatan-0.1.0/parity-probes/A-repository/common.py +158 -0
  1116. ekbatan-0.1.0/parity-probes/A-repository/java-vs-python.diff +483 -0
  1117. ekbatan-0.1.0/parity-probes/A-repository/java.out +409 -0
  1118. ekbatan-0.1.0/parity-probes/A-repository/probe_registry.py +45 -0
  1119. ekbatan-0.1.0/parity-probes/A-repository/probe_repo.py +284 -0
  1120. ekbatan-0.1.0/parity-probes/A-repository/probe_sharded.py +162 -0
  1121. ekbatan-0.1.0/parity-probes/A-repository/python.out +412 -0
  1122. ekbatan-0.1.0/parity-probes/B-actions/ParityBActionsProbeTest.java +1181 -0
  1123. ekbatan-0.1.0/parity-probes/B-actions/java.out +200 -0
  1124. ekbatan-0.1.0/parity-probes/B-actions/probe_actions.py +993 -0
  1125. ekbatan-0.1.0/parity-probes/B-actions/python.out +202 -0
  1126. ekbatan-0.1.0/parity-probes/B-actions/python.rerun-2026-10-22.out +202 -0
  1127. ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/ParityCPureProbeTest.java +490 -0
  1128. ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/ParityCTxProbeTest.java +606 -0
  1129. ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/java-ids.txt +7 -0
  1130. ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/pure.java.out +153 -0
  1131. ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/pure.python.out +153 -0
  1132. ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/pure_probe.py +557 -0
  1133. ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/py-ids.txt +7 -0
  1134. ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/tx.java.out +67 -0
  1135. ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/tx.python.out +67 -0
  1136. ekbatan-0.1.0/parity-probes/C-transactions-sharding-config/tx_probe.py +496 -0
  1137. ekbatan-0.1.0/parity-probes/D-events/ParityDProbeTest.java +863 -0
  1138. ekbatan-0.1.0/parity-probes/D-events/java.out +144 -0
  1139. ekbatan-0.1.0/parity-probes/D-events/probe_events.py +839 -0
  1140. ekbatan-0.1.0/parity-probes/D-events/python.out +144 -0
  1141. ekbatan-0.1.0/parity-probes/E-jobs-locks/ParityECrossPortTest.java +182 -0
  1142. ekbatan-0.1.0/parity-probes/E-jobs-locks/ParityEJobsProbeTest.java +378 -0
  1143. ekbatan-0.1.0/parity-probes/E-jobs-locks/ParityELocksProbeTest.java +550 -0
  1144. ekbatan-0.1.0/parity-probes/E-jobs-locks/ParityEWaitProbeTest.java +34 -0
  1145. ekbatan-0.1.0/parity-probes/E-jobs-locks/crossport.java.out +16 -0
  1146. ekbatan-0.1.0/parity-probes/E-jobs-locks/crossport.python.out +20 -0
  1147. ekbatan-0.1.0/parity-probes/E-jobs-locks/crossport_probe.py +167 -0
  1148. ekbatan-0.1.0/parity-probes/E-jobs-locks/java-build.gradle.kts.diff +16 -0
  1149. ekbatan-0.1.0/parity-probes/E-jobs-locks/jobs.java.out +48 -0
  1150. ekbatan-0.1.0/parity-probes/E-jobs-locks/jobs.python.out +48 -0
  1151. ekbatan-0.1.0/parity-probes/E-jobs-locks/jobs_probe.py +330 -0
  1152. ekbatan-0.1.0/parity-probes/E-jobs-locks/locks.java.out +245 -0
  1153. ekbatan-0.1.0/parity-probes/E-jobs-locks/locks.python.out +246 -0
  1154. ekbatan-0.1.0/parity-probes/E-jobs-locks/locks_probe.py +451 -0
  1155. ekbatan-0.1.0/parity-probes/E-jobs-locks/wait.java.out +12 -0
  1156. ekbatan-0.1.0/parity-probes/E-jobs-locks/wait.python.out +12 -0
  1157. ekbatan-0.1.0/parity-probes/E-jobs-locks/wait_probe.py +19 -0
  1158. ekbatan-0.1.0/parity-probes/F-migrations/common.py +191 -0
  1159. ekbatan-0.1.0/parity-probes/F-migrations/compare.py +26 -0
  1160. ekbatan-0.1.0/parity-probes/F-migrations/cross.sh +28 -0
  1161. ekbatan-0.1.0/parity-probes/F-migrations/f1_naming.compare.txt +403 -0
  1162. ekbatan-0.1.0/parity-probes/F-migrations/f1_naming.java.out +179 -0
  1163. ekbatan-0.1.0/parity-probes/F-migrations/f1_naming.py +60 -0
  1164. ekbatan-0.1.0/parity-probes/F-migrations/f1_naming.python.out +164 -0
  1165. ekbatan-0.1.0/parity-probes/F-migrations/f2_lifecycle.compare.txt +516 -0
  1166. ekbatan-0.1.0/parity-probes/F-migrations/f2_lifecycle.java.out +240 -0
  1167. ekbatan-0.1.0/parity-probes/F-migrations/f2_lifecycle.py +139 -0
  1168. ekbatan-0.1.0/parity-probes/F-migrations/f2_lifecycle.python.out +237 -0
  1169. ekbatan-0.1.0/parity-probes/F-migrations/f3_lock.compare.txt +32 -0
  1170. ekbatan-0.1.0/parity-probes/F-migrations/f3_lock.java.out +16 -0
  1171. ekbatan-0.1.0/parity-probes/F-migrations/f3_lock.py +112 -0
  1172. ekbatan-0.1.0/parity-probes/F-migrations/f3_lock.python.out +16 -0
  1173. ekbatan-0.1.0/parity-probes/F-migrations/f4_shards.compare.txt +50 -0
  1174. ekbatan-0.1.0/parity-probes/F-migrations/f4_shards.java.out +22 -0
  1175. ekbatan-0.1.0/parity-probes/F-migrations/f4_shards.py +106 -0
  1176. ekbatan-0.1.0/parity-probes/F-migrations/f4_shards.python.out +22 -0
  1177. ekbatan-0.1.0/parity-probes/F-migrations/f5_locations.compare.txt +96 -0
  1178. ekbatan-0.1.0/parity-probes/F-migrations/f5_locations.java.out +40 -0
  1179. ekbatan-0.1.0/parity-probes/F-migrations/f5_locations.py +120 -0
  1180. ekbatan-0.1.0/parity-probes/F-migrations/f5_locations.python.out +39 -0
  1181. ekbatan-0.1.0/parity-probes/F-migrations/f6_cross.compare.txt +210 -0
  1182. ekbatan-0.1.0/parity-probes/F-migrations/f6_cross.java.out +28 -0
  1183. ekbatan-0.1.0/parity-probes/F-migrations/f6_cross.py +74 -0
  1184. ekbatan-0.1.0/parity-probes/F-migrations/f6_cross.python.out +42 -0
  1185. ekbatan-0.1.0/parity-probes/F-migrations/java/ParityF.java +210 -0
  1186. ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFCrossProbeTest.java +72 -0
  1187. ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFLifecycleProbeTest.java +104 -0
  1188. ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFLocationsProbeTest.java +107 -0
  1189. ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFLockProbeTest.java +120 -0
  1190. ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFNamingProbeTest.java +73 -0
  1191. ekbatan-0.1.0/parity-probes/F-migrations/java/ParityFShardsProbeTest.java +121 -0
  1192. ekbatan-0.1.0/parity-probes/F-migrations/java/build.gradle.kts.diff +18 -0
  1193. ekbatan-0.1.0/parity-probes/F-migrations/make-sql.sh +79 -0
  1194. ekbatan-0.1.0/parity-probes/F-migrations/save.sh +9 -0
  1195. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/R__Z_capital.sql +1 -0
  1196. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/R__a_view.sql +1 -0
  1197. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/R__b_view.sql +1 -0
  1198. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V1.10__ten.sql +1 -0
  1199. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V1.9__nine.sql +1 -0
  1200. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V10__ten_major.sql +1 -0
  1201. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V1_5__underscore_version.sql +1 -0
  1202. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V1__first.sql +1 -0
  1203. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V20__gap_after_ten.sql +1 -0
  1204. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V2__two.sql +1 -0
  1205. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V4__capital_ext.SQL +1 -0
  1206. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/V5__.sql +1 -0
  1207. ekbatan-0.1.0/parity-probes/F-migrations/sql/accept/sub/V3__in_a_subfolder.sql +1 -0
  1208. ekbatan-0.1.0/parity-probes/F-migrations/sql/callback/V1__first.sql +1 -0
  1209. ekbatan-0.1.0/parity-probes/F-migrations/sql/callback/afterMigrate.sql +1 -0
  1210. ekbatan-0.1.0/parity-probes/F-migrations/sql/concurrent_index_pg/V1__table.sql +1 -0
  1211. ekbatan-0.1.0/parity-probes/F-migrations/sql/concurrent_index_pg/V2__index.sql +1 -0
  1212. ekbatan-0.1.0/parity-probes/F-migrations/sql/conf/V1__first.sql +1 -0
  1213. ekbatan-0.1.0/parity-probes/F-migrations/sql/conf/V1__first.sql.conf +1 -0
  1214. ekbatan-0.1.0/parity-probes/F-migrations/sql/delimiter_mysql/V1__proc.sql +3 -0
  1215. ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_repeatable/R__a b.sql +1 -0
  1216. ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_repeatable/R__a_b.sql +1 -0
  1217. ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_repeatable/V1__first.sql +1 -0
  1218. ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_v1_v01/V01__again.sql +1 -0
  1219. ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_v1_v01/V1__first.sql +1 -0
  1220. ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_v1_v1.0/V1.0__again.sql +1 -0
  1221. ekbatan-0.1.0/parity-probes/F-migrations/sql/dup_v1_v1.0/V1__first.sql +1 -0
  1222. ekbatan-0.1.0/parity-probes/F-migrations/sql/empty/README.txt +0 -0
  1223. ekbatan-0.1.0/parity-probes/F-migrations/sql/hidden/.hidden/V2__hidden.sql +1 -0
  1224. ekbatan-0.1.0/parity-probes/F-migrations/sql/hidden/V1__first.sql +1 -0
  1225. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/base/R__view.sql +1 -0
  1226. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/base/V1__create.sql +2 -0
  1227. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/base/V2__more.sql +1 -0
  1228. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/crlf_v1/R__view.sql +1 -0
  1229. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/crlf_v1/V1__create.sql +2 -0
  1230. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/crlf_v1/V2__more.sql +1 -0
  1231. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/edited_v1/R__view.sql +1 -0
  1232. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/edited_v1/V1__create.sql +2 -0
  1233. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/edited_v1/V2__more.sql +1 -0
  1234. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/failing/R__view.sql +1 -0
  1235. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/failing/V1__create.sql +2 -0
  1236. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/failing/V2__more.sql +1 -0
  1237. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/failing/V3__half.sql +2 -0
  1238. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/fixed/R__view.sql +1 -0
  1239. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/fixed/V1__create.sql +2 -0
  1240. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/fixed/V2__more.sql +1 -0
  1241. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/fixed/V3__half.sql +1 -0
  1242. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/future/R__view.sql +1 -0
  1243. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/future/V1__create.sql +2 -0
  1244. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/future/V2__more.sql +1 -0
  1245. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/future/V9__future.sql +1 -0
  1246. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/joined_v1/R__view.sql +1 -0
  1247. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/joined_v1/V1__create.sql +1 -0
  1248. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/joined_v1/V2__more.sql +1 -0
  1249. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/missing_v2/R__view.sql +1 -0
  1250. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/missing_v2/V1__create.sql +2 -0
  1251. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/out_of_order/R__view.sql +1 -0
  1252. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/out_of_order/V1_5__late.sql +1 -0
  1253. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/out_of_order/V1__create.sql +2 -0
  1254. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/out_of_order/V2__more.sql +1 -0
  1255. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/renamed_v1/R__view.sql +1 -0
  1256. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/renamed_v1/V1__create_renamed.sql +2 -0
  1257. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/renamed_v1/V2__more.sql +1 -0
  1258. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/repeatable_changed/R__view.sql +1 -0
  1259. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/repeatable_changed/V1__create.sql +2 -0
  1260. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/repeatable_changed/V2__more.sql +1 -0
  1261. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/respelled_v1/R__view.sql +1 -0
  1262. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/respelled_v1/V001__create.sql +2 -0
  1263. ekbatan-0.1.0/parity-probes/F-migrations/sql/life/respelled_v1/V2__more.sql +1 -0
  1264. ekbatan-0.1.0/parity-probes/F-migrations/sql/lock_mysql/V1__slow.sql +2 -0
  1265. ekbatan-0.1.0/parity-probes/F-migrations/sql/lock_pg/V1__slow.sql +2 -0
  1266. ekbatan-0.1.0/parity-probes/F-migrations/sql/long_description/V1__first.sql +1 -0
  1267. ekbatan-0.1.0/parity-probes/F-migrations/sql/long_description/V2__dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddd.sql +1 -0
  1268. ekbatan-0.1.0/parity-probes/F-migrations/sql/lowercase_v/V1__first.sql +1 -0
  1269. ekbatan-0.1.0/parity-probes/F-migrations/sql/lowercase_v/v2__lower.sql +1 -0
  1270. ekbatan-0.1.0/parity-probes/F-migrations/sql/misnamed/V1__first.sql +1 -0
  1271. ekbatan-0.1.0/parity-probes/F-migrations/sql/misnamed/create_stuff.sql +1 -0
  1272. ekbatan-0.1.0/parity-probes/F-migrations/sql/non_utf8/V1__first.sql +1 -0
  1273. ekbatan-0.1.0/parity-probes/F-migrations/sql/non_utf8/V2__latin1.sql +1 -0
  1274. ekbatan-0.1.0/parity-probes/F-migrations/sql/placeholder/V1__first.sql +2 -0
  1275. ekbatan-0.1.0/parity-probes/F-migrations/sql/placeholder_builtin/V1__first.sql +2 -0
  1276. ekbatan-0.1.0/parity-probes/F-migrations/sql/post_apply/V1__first.sql +1 -0
  1277. ekbatan-0.1.0/parity-probes/F-migrations/sql/post_apply/post-apply.sql +1 -0
  1278. ekbatan-0.1.0/parity-probes/F-migrations/sql/python_file/V1__first.sql +1 -0
  1279. ekbatan-0.1.0/parity-probes/F-migrations/sql/python_file/V2__code.py +1 -0
  1280. ekbatan-0.1.0/parity-probes/F-migrations/sql/quick/V1__quick.sql +1 -0
  1281. ekbatan-0.1.0/parity-probes/F-migrations/sql/repeatable_with_version/R1__x.sql +1 -0
  1282. ekbatan-0.1.0/parity-probes/F-migrations/sql/repeatable_with_version/V1__first.sql +1 -0
  1283. ekbatan-0.1.0/parity-probes/F-migrations/sql/script_migration/V1__first.sql +1 -0
  1284. ekbatan-0.1.0/parity-probes/F-migrations/sql/script_migration/V2__touch.py +1 -0
  1285. ekbatan-0.1.0/parity-probes/F-migrations/sql/undo/U1__first.sql +1 -0
  1286. ekbatan-0.1.0/parity-probes/F-migrations/sql/undo/V1__first.sql +1 -0
  1287. ekbatan-0.1.0/parity-probes/G-domain-model/ClockParityProbeTest.java +99 -0
  1288. ekbatan-0.1.0/parity-probes/G-domain-model/CodegenParityProbe.java +95 -0
  1289. ekbatan-0.1.0/parity-probes/G-domain-model/IdsParityProbeTest.java +196 -0
  1290. ekbatan-0.1.0/parity-probes/G-domain-model/JsonFormatsParityProbeTest.java +97 -0
  1291. ekbatan-0.1.0/parity-probes/G-domain-model/JsonParityProbeTest.java +354 -0
  1292. ekbatan-0.1.0/parity-probes/G-domain-model/ModelParityProbeTest.java +311 -0
  1293. ekbatan-0.1.0/parity-probes/G-domain-model/clock.java.out +20 -0
  1294. ekbatan-0.1.0/parity-probes/G-domain-model/clock.python.out +20 -0
  1295. ekbatan-0.1.0/parity-probes/G-domain-model/clock.python.rerun-2026-10-22.out +20 -0
  1296. ekbatan-0.1.0/parity-probes/G-domain-model/clock_probe.py +84 -0
  1297. ekbatan-0.1.0/parity-probes/G-domain-model/codegen.java.out +9 -0
  1298. ekbatan-0.1.0/parity-probes/G-domain-model/codegen.python.out +9 -0
  1299. ekbatan-0.1.0/parity-probes/G-domain-model/codegen_probe.py +68 -0
  1300. ekbatan-0.1.0/parity-probes/G-domain-model/gpkg/__init__.py +0 -0
  1301. ekbatan-0.1.0/parity-probes/G-domain-model/gpkg/builders.py +40 -0
  1302. ekbatan-0.1.0/parity-probes/G-domain-model/gpkg/model.py +23 -0
  1303. ekbatan-0.1.0/parity-probes/G-domain-model/ids.java.out +64 -0
  1304. ekbatan-0.1.0/parity-probes/G-domain-model/ids.python.out +64 -0
  1305. ekbatan-0.1.0/parity-probes/G-domain-model/ids_probe.py +164 -0
  1306. ekbatan-0.1.0/parity-probes/G-domain-model/java_event.json +1 -0
  1307. ekbatan-0.1.0/parity-probes/G-domain-model/java_formats.txt.gz +0 -0
  1308. ekbatan-0.1.0/parity-probes/G-domain-model/java_ids.txt +4 -0
  1309. ekbatan-0.1.0/parity-probes/G-domain-model/java_params.json +1 -0
  1310. ekbatan-0.1.0/parity-probes/G-domain-model/json.java.out +50 -0
  1311. ekbatan-0.1.0/parity-probes/G-domain-model/json.python.out +49 -0
  1312. ekbatan-0.1.0/parity-probes/G-domain-model/json_formats.java.out +1 -0
  1313. ekbatan-0.1.0/parity-probes/G-domain-model/json_formats.python.out +23 -0
  1314. ekbatan-0.1.0/parity-probes/G-domain-model/json_formats_probe.py +104 -0
  1315. ekbatan-0.1.0/parity-probes/G-domain-model/json_probe.py +242 -0
  1316. ekbatan-0.1.0/parity-probes/G-domain-model/model.java.out +80 -0
  1317. ekbatan-0.1.0/parity-probes/G-domain-model/model.python.out +79 -0
  1318. ekbatan-0.1.0/parity-probes/G-domain-model/model_probe.py +204 -0
  1319. ekbatan-0.1.0/parity-probes/G-domain-model/python_event.json +1 -0
  1320. ekbatan-0.1.0/parity-probes/G-domain-model/python_event_snake.json +1 -0
  1321. ekbatan-0.1.0/parity-probes/G-domain-model/python_ids.txt +4 -0
  1322. ekbatan-0.1.0/parity-probes/G-domain-model/run-codegen-java.sh +10 -0
  1323. ekbatan-0.1.0/parity-probes/round2-N1/N1ConfigProbeTest.java.txt +139 -0
  1324. ekbatan-0.1.0/parity-probes/round2-N1/config.diff +181 -0
  1325. ekbatan-0.1.0/parity-probes/round2-N1/config.java.out +236 -0
  1326. ekbatan-0.1.0/parity-probes/round2-N1/config.python.out +115 -0
  1327. ekbatan-0.1.0/parity-probes/round2-N1/config_probe.py +94 -0
  1328. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s00_base.yaml +18 -0
  1329. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s01_duration_bare_quoted.yaml +19 -0
  1330. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s02_duration_bare_int.yaml +19 -0
  1331. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s03_duration_10s.yaml +19 -0
  1332. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s04_duration_iso_variants.yaml +21 -0
  1333. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s05_duration_zero.yaml +19 -0
  1334. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s06_duration_null.yaml +19 -0
  1335. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s07_namespace_null.yaml +18 -0
  1336. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s08_pool_quoted.yaml +18 -0
  1337. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s09_enabled_quoted.yaml +20 -0
  1338. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s10_enabled_upper.yaml +20 -0
  1339. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s11_enabled_yes.yaml +20 -0
  1340. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s12_nested_placeholder.yaml +18 -0
  1341. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s13_property_reference.yaml +18 -0
  1342. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s14_unresolved.yaml +18 -0
  1343. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s15_two_spellings.yaml +20 -0
  1344. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s16_snake_leaf.yaml +19 -0
  1345. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s17_snake_parent.yaml +20 -0
  1346. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s18_empty_jobs.yaml +18 -0
  1347. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s19_empty_leh.yaml +18 -0
  1348. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s20_dsp_nested.yaml +20 -0
  1349. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s21_batch_zero.yaml +19 -0
  1350. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s22_empty_default.yaml +18 -0
  1351. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s23_pool_float.yaml +18 -0
  1352. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s24_case_leaf.yaml +19 -0
  1353. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s25_escaped_placeholder.yaml +18 -0
  1354. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s26_dollar_dollar.yaml +18 -0
  1355. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s27_handling_off.yaml +22 -0
  1356. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s28_python_example.yaml +38 -0
  1357. ekbatan-0.1.0/parity-probes/round2-N1/scenarios/s29_java_example.yaml +50 -0
  1358. ekbatan-0.1.0/parity-probes/round2-N2/builder.java.out +23 -0
  1359. ekbatan-0.1.0/parity-probes/round2-N2/builder.python.out +16 -0
  1360. ekbatan-0.1.0/parity-probes/round2-N2/builder_probe.py +67 -0
  1361. ekbatan-0.1.0/parity-probes/round2-N2/codegen-check.python.out +2 -0
  1362. ekbatan-0.1.0/parity-probes/round2-N2/java/BuilderProbe.java +127 -0
  1363. ekbatan-0.1.0/parity-probes/round2-N2/java/SubclassProbe.java +29 -0
  1364. ekbatan-0.1.0/parity-probes/round2-N2/java/WalletBuilder.generated.java +69 -0
  1365. ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-mariadb.ProbeItems.generated.java +436 -0
  1366. ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-mariadb.build.gradle.kts +186 -0
  1367. ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-mysql.ProbeItems.generated.java +426 -0
  1368. ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-mysql.build.gradle.kts +193 -0
  1369. ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-pg.ProbeItems.generated.java +446 -0
  1370. ekbatan-0.1.0/parity-probes/round2-N2/java/jooq-pg.build.gradle.kts +154 -0
  1371. ekbatan-0.1.0/parity-probes/round2-N2/java/run.sh +13 -0
  1372. ekbatan-0.1.0/parity-probes/round2-N2/jooq-mariadb.java.out +27 -0
  1373. ekbatan-0.1.0/parity-probes/round2-N2/jooq-mysql.java.out +26 -0
  1374. ekbatan-0.1.0/parity-probes/round2-N2/jooq-pg.java.out +30 -0
  1375. ekbatan-0.1.0/parity-probes/round2-N2/migrations/mariadb/V0001__probe.sql +31 -0
  1376. ekbatan-0.1.0/parity-probes/round2-N2/migrations/mysql/V0001__probe.sql +30 -0
  1377. ekbatan-0.1.0/parity-probes/round2-N2/migrations/pg/V0001__probe.sql +37 -0
  1378. ekbatan-0.1.0/parity-probes/round2-N2/mypy.python.out +7 -0
  1379. ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/__init__.py +0 -0
  1380. ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/builders.py +66 -0
  1381. ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/generic_builders.py +32 -0
  1382. ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/generic_model.py +18 -0
  1383. ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/model.py +35 -0
  1384. ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/sub_builders.py +53 -0
  1385. ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/sub_model.py +12 -0
  1386. ekbatan-0.1.0/parity-probes/round2-N2/n2pkg/usage.py +15 -0
  1387. ekbatan-0.1.0/parity-probes/round2-N2/py-schema/mariadb/schema.py +57 -0
  1388. ekbatan-0.1.0/parity-probes/round2-N2/py-schema/mysql/schema.py +56 -0
  1389. ekbatan-0.1.0/parity-probes/round2-N2/py-schema/pg/schema.py +68 -0
  1390. ekbatan-0.1.0/parity-probes/round2-N2/py-schema-from-java/mariadb/schema.py +55 -0
  1391. ekbatan-0.1.0/parity-probes/round2-N2/py-schema-from-java/mysql/schema.py +55 -0
  1392. ekbatan-0.1.0/parity-probes/round2-N2/py-schema-from-java/pg/schema.py +55 -0
  1393. ekbatan-0.1.0/parity-probes/round2-N2/py-schema-from-java/run.out +22 -0
  1394. ekbatan-0.1.0/parity-probes/round2-N2/schemagen_import.python.out +13 -0
  1395. ekbatan-0.1.0/parity-probes/round2-N2/schemagen_import_probe.py +32 -0
  1396. ekbatan-0.1.0/parity-probes/round2-N2/schemagen_runtime.python.out +17 -0
  1397. ekbatan-0.1.0/parity-probes/round2-N2/schemagen_runtime_probe.py +109 -0
  1398. ekbatan-0.1.0/parity-probes/round2-N2/stale/migrations/V0001__t.sql +1 -0
  1399. ekbatan-0.1.0/parity-probes/round2-N2/stale/schema.py +35 -0
  1400. ekbatan-0.1.0/parity-probes/round2-N2/stale.java.out +4 -0
  1401. ekbatan-0.1.0/parity-probes/round2-N2/stale.python.out +3 -0
  1402. ekbatan-0.1.0/parity-probes/round2-N2/stale_probe.py +30 -0
  1403. ekbatan-0.1.0/parity-probes/round2-N3/ParityN3EventsProbeTest.java +403 -0
  1404. ekbatan-0.1.0/parity-probes/round2-N3/ParityN3ObsProbeTest.java +439 -0
  1405. ekbatan-0.1.0/parity-probes/round2-N3/events.java-vs-python.diff +96 -0
  1406. ekbatan-0.1.0/parity-probes/round2-N3/events.java.out +67 -0
  1407. ekbatan-0.1.0/parity-probes/round2-N3/events.python.out +56 -0
  1408. ekbatan-0.1.0/parity-probes/round2-N3/events_probe.py +346 -0
  1409. ekbatan-0.1.0/parity-probes/round2-N3/java-build.gradle.kts.diff +25 -0
  1410. ekbatan-0.1.0/parity-probes/round2-N3/obs.java-vs-python.diff +256 -0
  1411. ekbatan-0.1.0/parity-probes/round2-N3/obs.java.out +182 -0
  1412. ekbatan-0.1.0/parity-probes/round2-N3/obs.python.out +176 -0
  1413. ekbatan-0.1.0/parity-probes/round2-N3/obs_probe.py +411 -0
  1414. ekbatan-0.1.0/parity-probes/round2-N3/redis_metric.python.out +1 -0
  1415. ekbatan-0.1.0/parity-probes/round2-N3/redis_metric_probe.py +20 -0
  1416. ekbatan-0.1.0/parity-probes/round2-N4/ParityN4ProbeTest.java +437 -0
  1417. ekbatan-0.1.0/parity-probes/round2-N4/java.out +61 -0
  1418. ekbatan-0.1.0/parity-probes/round2-N4/probe_base_class.py +53 -0
  1419. ekbatan-0.1.0/parity-probes/round2-N4/probe_errors.py +392 -0
  1420. ekbatan-0.1.0/parity-probes/round2-N4/python-base-class.out +6 -0
  1421. ekbatan-0.1.0/parity-probes/round2-N4/python.out +61 -0
  1422. ekbatan-0.1.0/parity-probes/round2-N5/a.mariadb.java.out +40 -0
  1423. ekbatan-0.1.0/parity-probes/round2-N5/a.mariadb.python.out +40 -0
  1424. ekbatan-0.1.0/parity-probes/round2-N5/a.mysql.java.out +40 -0
  1425. ekbatan-0.1.0/parity-probes/round2-N5/a.mysql.python.out +40 -0
  1426. ekbatan-0.1.0/parity-probes/round2-N5/a.pg.java.out +44 -0
  1427. ekbatan-0.1.0/parity-probes/round2-N5/a.pg.python.out +44 -0
  1428. ekbatan-0.1.0/parity-probes/round2-N5/b.pg.java.out +20 -0
  1429. ekbatan-0.1.0/parity-probes/round2-N5/b.pg.python.out +20 -0
  1430. ekbatan-0.1.0/parity-probes/round2-N5/c.mariadb.java-read.out +22 -0
  1431. ekbatan-0.1.0/parity-probes/round2-N5/c.mariadb.java-write.out +4 -0
  1432. ekbatan-0.1.0/parity-probes/round2-N5/c.mariadb.python-read.out +22 -0
  1433. ekbatan-0.1.0/parity-probes/round2-N5/c.mariadb.python-write.out +4 -0
  1434. ekbatan-0.1.0/parity-probes/round2-N5/c.mysql.java-read.out +22 -0
  1435. ekbatan-0.1.0/parity-probes/round2-N5/c.mysql.java-write.out +4 -0
  1436. ekbatan-0.1.0/parity-probes/round2-N5/c.mysql.python-read.out +22 -0
  1437. ekbatan-0.1.0/parity-probes/round2-N5/c.mysql.python-write.out +4 -0
  1438. ekbatan-0.1.0/parity-probes/round2-N5/c.pg.java-read.out +22 -0
  1439. ekbatan-0.1.0/parity-probes/round2-N5/c.pg.java-write.out +4 -0
  1440. ekbatan-0.1.0/parity-probes/round2-N5/c.pg.python-read.out +22 -0
  1441. ekbatan-0.1.0/parity-probes/round2-N5/c.pg.python-write.out +4 -0
  1442. ekbatan-0.1.0/parity-probes/round2-N5/common.py +284 -0
  1443. ekbatan-0.1.0/parity-probes/round2-N5/containers.sh +14 -0
  1444. ekbatan-0.1.0/parity-probes/round2-N5/d.pg.java.out +16 -0
  1445. ekbatan-0.1.0/parity-probes/round2-N5/d.pg.python.full +785 -0
  1446. ekbatan-0.1.0/parity-probes/round2-N5/d.pg.python.out +16 -0
  1447. ekbatan-0.1.0/parity-probes/round2-N5/d3.pg.python.out +6 -0
  1448. ekbatan-0.1.0/parity-probes/round2-N5/d_stop_steps.py +18 -0
  1449. ekbatan-0.1.0/parity-probes/round2-N5/java/ParityN5ProbeTest.java.tmpl +516 -0
  1450. ekbatan-0.1.0/parity-probes/round2-N5/java/ParityN5ProbeTest.pg.java +988 -0
  1451. ekbatan-0.1.0/parity-probes/round2-N5/java/gen.sh +20 -0
  1452. ekbatan-0.1.0/parity-probes/round2-N5/java/more.java.part +473 -0
  1453. ekbatan-0.1.0/parity-probes/round2-N5/java/run.sh +8 -0
  1454. ekbatan-0.1.0/parity-probes/round2-N5/n5-d-java-2.out +16 -0
  1455. ekbatan-0.1.0/parity-probes/round2-N5/n5-d-java-3.out +16 -0
  1456. ekbatan-0.1.0/parity-probes/round2-N5/n5-d-py-2.out +16 -0
  1457. ekbatan-0.1.0/parity-probes/round2-N5/n5-d-py-3.out +16 -0
  1458. ekbatan-0.1.0/parity-probes/round2-N5/probe_a.py +306 -0
  1459. ekbatan-0.1.0/parity-probes/round2-N5/probe_b.py +140 -0
  1460. ekbatan-0.1.0/parity-probes/round2-N5/probe_c.py +228 -0
  1461. ekbatan-0.1.0/parity-probes/round2-N5/probe_d.py +180 -0
  1462. ekbatan-0.1.0/parity-probes/round2-N5/setup.py +77 -0
  1463. ekbatan-0.1.0/parity-probes/round2-N6/core/cfg/block0.yaml +21 -0
  1464. ekbatan-0.1.0/parity-probes/round2-N6/core/cfg/block1.toml +15 -0
  1465. ekbatan-0.1.0/parity-probes/round2-N6/core/cfg/block2.json +5 -0
  1466. ekbatan-0.1.0/parity-probes/round2-N6/core/cfg/block3.ini +19 -0
  1467. ekbatan-0.1.0/parity-probes/round2-N6/core/cfg/block4.yaml +9 -0
  1468. ekbatan-0.1.0/parity-probes/round2-N6/core/codegen_builders.out +63 -0
  1469. ekbatan-0.1.0/parity-probes/round2-N6/core/column_helpers.out +4 -0
  1470. ekbatan-0.1.0/parity-probes/round2-N6/core/column_helpers.py +16 -0
  1471. ekbatan-0.1.0/parity-probes/round2-N6/core/common.py +17 -0
  1472. ekbatan-0.1.0/parity-probes/round2-N6/core/config_files_claims.out +13 -0
  1473. ekbatan-0.1.0/parity-probes/round2-N6/core/config_files_claims.py +24 -0
  1474. ekbatan-0.1.0/parity-probes/round2-N6/core/executor_claims.out +15 -0
  1475. ekbatan-0.1.0/parity-probes/round2-N6/core/executor_claims.py +76 -0
  1476. ekbatan-0.1.0/parity-probes/round2-N6/core/fanout_threads.out +2 -0
  1477. ekbatan-0.1.0/parity-probes/round2-N6/core/fanout_threads.py +23 -0
  1478. ekbatan-0.1.0/parity-probes/round2-N6/core/getting_started.out +10 -0
  1479. ekbatan-0.1.0/parity-probes/round2-N6/core/getting_started.py +99 -0
  1480. ekbatan-0.1.0/parity-probes/round2-N6/core/model_claims.out +18 -0
  1481. ekbatan-0.1.0/parity-probes/round2-N6/core/model_claims.py +82 -0
  1482. ekbatan-0.1.0/parity-probes/round2-N6/core/outbox_row.out +3 -0
  1483. ekbatan-0.1.0/parity-probes/round2-N6/core/outbox_row.py +15 -0
  1484. ekbatan-0.1.0/parity-probes/round2-N6/core/pool_claims.out +6 -0
  1485. ekbatan-0.1.0/parity-probes/round2-N6/core/pool_claims.py +35 -0
  1486. ekbatan-0.1.0/parity-probes/round2-N6/core/pool_count.out +3 -0
  1487. ekbatan-0.1.0/parity-probes/round2-N6/core/pool_count.py +19 -0
  1488. ekbatan-0.1.0/parity-probes/round2-N6/core/pool_restart.py +28 -0
  1489. ekbatan-0.1.0/parity-probes/round2-N6/core/readme_counts.out +5 -0
  1490. ekbatan-0.1.0/parity-probes/round2-N6/core/repo_claims.out +15 -0
  1491. ekbatan-0.1.0/parity-probes/round2-N6/core/repo_claims.py +32 -0
  1492. ekbatan-0.1.0/parity-probes/round2-N6/core/sharding_claims.out +24 -0
  1493. ekbatan-0.1.0/parity-probes/round2-N6/core/sharding_claims.py +128 -0
  1494. ekbatan-0.1.0/parity-probes/round2-N6/core/tx_claims.out +10 -0
  1495. ekbatan-0.1.0/parity-probes/round2-N6/core/tx_claims.py +95 -0
  1496. ekbatan-0.1.0/parity-probes/round2-N6/core/wiring_claims.out +10 -0
  1497. ekbatan-0.1.0/parity-probes/round2-N6/core/wiring_claims.py +30 -0
  1498. ekbatan-0.1.0/parity-probes/round2-N6/events/e1_ddl.out +132 -0
  1499. ekbatan-0.1.0/parity-probes/round2-N6/events/e1_ddl.py +14 -0
  1500. ekbatan-0.1.0/parity-probes/round2-N6/events/e2_pipeline.out +45 -0
  1501. ekbatan-0.1.0/parity-probes/round2-N6/events/e2_pipeline.py +277 -0
  1502. ekbatan-0.1.0/parity-probes/round2-N6/events/e3_streaming.out +10 -0
  1503. ekbatan-0.1.0/parity-probes/round2-N6/events/e3_streaming.py +34 -0
  1504. ekbatan-0.1.0/parity-probes/round2-N6/events/e4_wiring.out +2 -0
  1505. ekbatan-0.1.0/parity-probes/round2-N6/events/e4_wiring.py +64 -0
  1506. ekbatan-0.1.0/parity-probes/round2-N6/links.out +11 -0
  1507. ekbatan-0.1.0/parity-probes/round2-N6/links.py +14 -0
  1508. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/dispatch_concurrent_test.out +1 -0
  1509. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/handling_job.out +5 -0
  1510. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/handling_job.py +26 -0
  1511. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/jobs_claims.out +17 -0
  1512. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/jobs_claims.py +83 -0
  1513. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/jobs_pg.out +10 -0
  1514. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/jobs_pg.py +55 -0
  1515. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/locks_claims.out +60 -0
  1516. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/locks_claims.py +125 -0
  1517. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_claims.out +7 -0
  1518. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_claims.py +40 -0
  1519. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_preping.out +16 -0
  1520. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_preping.py +27 -0
  1521. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_preping_one.out +10 -0
  1522. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_preping_one.py +27 -0
  1523. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_refill.out +3 -0
  1524. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/pool_refill.py +26 -0
  1525. ekbatan-0.1.0/parity-probes/round2-N6/locks-jobs/test_count.out +1 -0
  1526. ekbatan-0.1.0/parity-probes/round2-N6/migrations/m1_sqlite_claims.out +90 -0
  1527. ekbatan-0.1.0/parity-probes/round2-N6/migrations/m1_sqlite_claims.py +179 -0
  1528. ekbatan-0.1.0/parity-probes/round2-N6/migrations/m2_lineendings_gone.out +4 -0
  1529. ekbatan-0.1.0/parity-probes/round2-N6/migrations/m2_lineendings_gone.py +26 -0
  1530. ekbatan-0.1.0/parity-probes/round2-N6/migrations/m3_pg_mysql.out +12 -0
  1531. ekbatan-0.1.0/parity-probes/round2-N6/migrations/m3_pg_mysql.py +91 -0
  1532. ekbatan-0.1.0/parity-probes/round2-N6/migrations/m4_shards.out +4 -0
  1533. ekbatan-0.1.0/parity-probes/round2-N6/migrations/m4_shards.py +28 -0
  1534. ekbatan-0.1.0/parity-probes/round2-N6/migrations/m5_snippets.out +11 -0
  1535. ekbatan-0.1.0/parity-probes/round2-N6/migrations/m5_snippets.py +56 -0
  1536. ekbatan-0.1.0/parity-probes/round2-N6/pair_docs_website.out +1549 -0
  1537. ekbatan-0.1.0/parity-probes/round2-N6/pair_docs_website.py +38 -0
  1538. ekbatan-0.1.0/parity-probes/round2-N6/readme_counts.out +6 -0
  1539. ekbatan-0.1.0/parity-probes/round2-N6/readme_counts.sh +10 -0
  1540. ekbatan-0.1.0/parity-probes/round2-N6/retry_match.out +3 -0
  1541. ekbatan-0.1.0/parity-probes/round2-N6/retry_match.py +9 -0
  1542. ekbatan-0.1.0/parity-probes/round2-N6/sentence_diff.out +603 -0
  1543. ekbatan-0.1.0/parity-probes/round2-N6/sentence_diff.py +30 -0
  1544. ekbatan-0.1.0/parity-probes/round2-N6/website_links.out +0 -0
  1545. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeRegistryTest.java +92 -0
  1546. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeRepoBase.java +370 -0
  1547. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeRepoMariadbTest.java +77 -0
  1548. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeRepoMysqlTest.java +77 -0
  1549. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeRepoPgTest.java +77 -0
  1550. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/ProbeShardedPgTest.java +276 -0
  1551. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/common.py +158 -0
  1552. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/java-vs-python.diff +483 -0
  1553. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/java.out +409 -0
  1554. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/now.out +412 -0
  1555. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/probe_registry.py +45 -0
  1556. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/probe_repo.py +284 -0
  1557. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/probe_sharded.py +162 -0
  1558. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/python.out +412 -0
  1559. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/registry.err +0 -0
  1560. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/registry.now.out +3 -0
  1561. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/repo.err +7 -0
  1562. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/repo.now.out +357 -0
  1563. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/sharded.err +8 -0
  1564. ekbatan-0.1.0/parity-probes/round2-R0/A-repository/sharded.now.out +52 -0
  1565. ekbatan-0.1.0/parity-probes/round2-R0/A.cmp.txt +825 -0
  1566. ekbatan-0.1.0/parity-probes/round2-R0/B-actions/ParityBActionsProbeTest.java +1181 -0
  1567. ekbatan-0.1.0/parity-probes/round2-R0/B-actions/err.txt +63 -0
  1568. ekbatan-0.1.0/parity-probes/round2-R0/B-actions/java.out +200 -0
  1569. ekbatan-0.1.0/parity-probes/round2-R0/B-actions/now.out +202 -0
  1570. ekbatan-0.1.0/parity-probes/round2-R0/B-actions/probe_actions.py +989 -0
  1571. ekbatan-0.1.0/parity-probes/round2-R0/B-actions/python.out +202 -0
  1572. ekbatan-0.1.0/parity-probes/round2-R0/B.cmp.txt +189 -0
  1573. ekbatan-0.1.0/parity-probes/round2-R0/C-pure.cmp.txt +193 -0
  1574. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/ParityCPureProbeTest.java +490 -0
  1575. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/ParityCTxProbeTest.java +606 -0
  1576. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/java-ids.txt +7 -0
  1577. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/pure.err +0 -0
  1578. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/pure.java.out +153 -0
  1579. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/pure.now.out +153 -0
  1580. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/pure.python.out +153 -0
  1581. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/pure_probe.py +557 -0
  1582. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/py-ids.txt +7 -0
  1583. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/tx.err +0 -0
  1584. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/tx.java.out +67 -0
  1585. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/tx.now.out +67 -0
  1586. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/tx.python.out +67 -0
  1587. ekbatan-0.1.0/parity-probes/round2-R0/C-transactions-sharding-config/tx_probe.py +496 -0
  1588. ekbatan-0.1.0/parity-probes/round2-R0/C-tx.cmp.txt +73 -0
  1589. ekbatan-0.1.0/parity-probes/round2-R0/D-events/ParityDProbeTest.java +863 -0
  1590. ekbatan-0.1.0/parity-probes/round2-R0/D-events/err.txt +63 -0
  1591. ekbatan-0.1.0/parity-probes/round2-R0/D-events/java.out +144 -0
  1592. ekbatan-0.1.0/parity-probes/round2-R0/D-events/now.out +144 -0
  1593. ekbatan-0.1.0/parity-probes/round2-R0/D-events/probe_events.py +839 -0
  1594. ekbatan-0.1.0/parity-probes/round2-R0/D-events/python.out +144 -0
  1595. ekbatan-0.1.0/parity-probes/round2-R0/D.cmp.txt +217 -0
  1596. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/ParityECrossPortTest.java +182 -0
  1597. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/ParityEJobsProbeTest.java +378 -0
  1598. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/ParityELocksProbeTest.java +550 -0
  1599. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/ParityEWaitProbeTest.java +34 -0
  1600. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/crossport.java.out +16 -0
  1601. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/crossport.now.java.out +16 -0
  1602. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/crossport.now.out +20 -0
  1603. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/crossport.python.out +20 -0
  1604. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/crossport_probe.py +167 -0
  1605. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/java-build.gradle.kts.diff +16 -0
  1606. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/jobs.err +483 -0
  1607. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/jobs.java.out +48 -0
  1608. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/jobs.now.out +48 -0
  1609. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/jobs.python.out +48 -0
  1610. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/jobs_probe.py +330 -0
  1611. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/locks.err +308 -0
  1612. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/locks.java.out +245 -0
  1613. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/locks.now.out +246 -0
  1614. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/locks.python.out +246 -0
  1615. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/locks_probe.py +451 -0
  1616. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/py-holds.err +0 -0
  1617. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/py-jobs.err +0 -0
  1618. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/py-tries.err +0 -0
  1619. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/wait.err +0 -0
  1620. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/wait.java.out +12 -0
  1621. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/wait.now.out +12 -0
  1622. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/wait.python.out +12 -0
  1623. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs-locks/wait_probe.py +19 -0
  1624. ekbatan-0.1.0/parity-probes/round2-R0/E-jobs.cmp.txt +17 -0
  1625. ekbatan-0.1.0/parity-probes/round2-R0/E-locks.cmp.txt +165 -0
  1626. ekbatan-0.1.0/parity-probes/round2-R0/E-wait.cmp.txt +5 -0
  1627. ekbatan-0.1.0/parity-probes/round2-R0/E-xport.head.sorted +35 -0
  1628. ekbatan-0.1.0/parity-probes/round2-R0/E-xport.now.sorted +35 -0
  1629. ekbatan-0.1.0/parity-probes/round2-R0/E-xport.r1.sorted +31 -0
  1630. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ClockParityProbeTest.java +99 -0
  1631. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/CodegenParityProbe.java +95 -0
  1632. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/IdsParityProbeTest.java +196 -0
  1633. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/JsonFormatsParityProbeTest.java +97 -0
  1634. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/JsonParityProbeTest.java +354 -0
  1635. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ModelParityProbeTest.java +311 -0
  1636. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/clock.err +0 -0
  1637. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/clock.java.out +20 -0
  1638. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/clock.now.out +20 -0
  1639. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/clock.python.out +20 -0
  1640. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/clock_probe.py +68 -0
  1641. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/codegen.err +0 -0
  1642. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/codegen.java.out +9 -0
  1643. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/codegen.now.out +9 -0
  1644. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/codegen.python.out +9 -0
  1645. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/codegen_probe.py +68 -0
  1646. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/gpkg/__init__.py +0 -0
  1647. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/gpkg/builders.py +40 -0
  1648. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/gpkg/model.py +23 -0
  1649. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ids.err +0 -0
  1650. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ids.java.out +64 -0
  1651. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ids.now.out +64 -0
  1652. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ids.python.out +64 -0
  1653. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/ids_probe.py +164 -0
  1654. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/java_event.json +1 -0
  1655. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/java_formats.txt.gz +0 -0
  1656. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/java_ids.txt +4 -0
  1657. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/java_params.json +1 -0
  1658. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json.err +0 -0
  1659. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json.java.out +50 -0
  1660. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json.now.out +49 -0
  1661. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json.python.out +49 -0
  1662. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_formats.err +0 -0
  1663. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_formats.java.out +1 -0
  1664. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_formats.now.out +26 -0
  1665. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_formats.python.out +23 -0
  1666. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_formats_probe.py +101 -0
  1667. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/json_probe.py +242 -0
  1668. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/model.err +0 -0
  1669. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/model.java.out +80 -0
  1670. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/model.now.out +79 -0
  1671. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/model.python.out +79 -0
  1672. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/model_probe.py +204 -0
  1673. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/python_event.json +1 -0
  1674. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/python_event_snake.json +1 -0
  1675. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/python_ids.txt +4 -0
  1676. ekbatan-0.1.0/parity-probes/round2-R0/G-domain-model/run-codegen-java.sh +10 -0
  1677. ekbatan-0.1.0/parity-probes/round2-R0/G.cmp.txt +528 -0
  1678. ekbatan-0.1.0/parity-probes/round2-R0/compare.py +47 -0
  1679. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/A-repository/java.out +409 -0
  1680. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/A-repository/python.out +403 -0
  1681. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/B-actions/java.out +200 -0
  1682. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/B-actions/python.out +202 -0
  1683. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/C-transactions-sharding-config/pure.java.out +153 -0
  1684. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/C-transactions-sharding-config/pure.python.out +153 -0
  1685. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/C-transactions-sharding-config/tx.java.out +67 -0
  1686. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/C-transactions-sharding-config/tx.python.out +67 -0
  1687. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/D-events/java.out +144 -0
  1688. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/D-events/python.out +145 -0
  1689. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/crossport.java.out +16 -0
  1690. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/crossport.python.out +18 -0
  1691. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/jobs.java.out +48 -0
  1692. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/jobs.python.out +48 -0
  1693. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/locks.java.out +245 -0
  1694. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/locks.python.out +246 -0
  1695. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/wait.java.out +12 -0
  1696. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/E-jobs-locks/wait.python.out +12 -0
  1697. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/clock.java.out +20 -0
  1698. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/clock.python.out +20 -0
  1699. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/codegen.java.out +9 -0
  1700. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/codegen.python.out +9 -0
  1701. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/ids.java.out +64 -0
  1702. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/ids.python.out +64 -0
  1703. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/json.java.out +49 -0
  1704. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/json.python.out +49 -0
  1705. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/json_formats.java.out +0 -0
  1706. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/json_formats.python.out +0 -0
  1707. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/model.java.out +80 -0
  1708. ekbatan-0.1.0/parity-probes/round2-R0/r1-python-out/G-domain-model/model.python.out +79 -0
  1709. ekbatan-0.1.0/pyproject.toml +191 -0
  1710. ekbatan-0.1.0/scripts/bench-async.py +271 -0
  1711. ekbatan-0.1.0/scripts/check-api.py +168 -0
  1712. ekbatan-0.1.0/scripts/check-builders.py +124 -0
  1713. ekbatan-0.1.0/scripts/check-setup-guide.py +402 -0
  1714. ekbatan-0.1.0/scripts/divergence.py +79 -0
  1715. ekbatan-0.1.0/scripts/docs-parity.py +250 -0
  1716. ekbatan-0.1.0/scripts/docs-website-sync.py +187 -0
  1717. ekbatan-0.1.0/scripts/flyway-parity.py +1226 -0
  1718. ekbatan-0.1.0/scripts/ledger.py +94 -0
  1719. ekbatan-0.1.0/scripts/links.py +90 -0
  1720. ekbatan-0.1.0/scripts/sync-examples.py +663 -0
  1721. ekbatan-0.1.0/src/ekbatan/__init__.py +262 -0
  1722. ekbatan-0.1.0/src/ekbatan/_builder.py +41 -0
  1723. ekbatan-0.1.0/src/ekbatan/_credentials.py +162 -0
  1724. ekbatan-0.1.0/src/ekbatan/_guards.py +64 -0
  1725. ekbatan-0.1.0/src/ekbatan/_json.py +839 -0
  1726. ekbatan-0.1.0/src/ekbatan/_logtext.py +36 -0
  1727. ekbatan-0.1.0/src/ekbatan/_metrics.py +56 -0
  1728. ekbatan-0.1.0/src/ekbatan/_redact.py +77 -0
  1729. ekbatan-0.1.0/src/ekbatan/_tracing.py +80 -0
  1730. ekbatan-0.1.0/src/ekbatan/_yoyo.py +617 -0
  1731. ekbatan-0.1.0/src/ekbatan/accounting.py +103 -0
  1732. ekbatan-0.1.0/src/ekbatan/action/__init__.py +40 -0
  1733. ekbatan-0.1.0/src/ekbatan/action/action.py +129 -0
  1734. ekbatan-0.1.0/src/ekbatan/action/executor.py +714 -0
  1735. ekbatan-0.1.0/src/ekbatan/action/outbox.py +446 -0
  1736. ekbatan-0.1.0/src/ekbatan/action/persister.py +141 -0
  1737. ekbatan-0.1.0/src/ekbatan/action/plan.py +143 -0
  1738. ekbatan-0.1.0/src/ekbatan/action/registry.py +127 -0
  1739. ekbatan-0.1.0/src/ekbatan/aio/__init__.py +73 -0
  1740. ekbatan-0.1.0/src/ekbatan/aio/action.py +42 -0
  1741. ekbatan-0.1.0/src/ekbatan/aio/executor.py +166 -0
  1742. ekbatan-0.1.0/src/ekbatan/aio/locks/__init__.py +30 -0
  1743. ekbatan-0.1.0/src/ekbatan/aio/locks/base.py +198 -0
  1744. ekbatan-0.1.0/src/ekbatan/aio/locks/redis.py +244 -0
  1745. ekbatan-0.1.0/src/ekbatan/aio/locks/sql.py +280 -0
  1746. ekbatan-0.1.0/src/ekbatan/aio/outbox.py +120 -0
  1747. ekbatan-0.1.0/src/ekbatan/aio/persistence.py +460 -0
  1748. ekbatan-0.1.0/src/ekbatan/aio/persister.py +64 -0
  1749. ekbatan-0.1.0/src/ekbatan/aio/repository.py +443 -0
  1750. ekbatan-0.1.0/src/ekbatan/aio/testing.py +93 -0
  1751. ekbatan-0.1.0/src/ekbatan/clock.py +151 -0
  1752. ekbatan-0.1.0/src/ekbatan/codegen.py +343 -0
  1753. ekbatan-0.1.0/src/ekbatan/config.py +622 -0
  1754. ekbatan-0.1.0/src/ekbatan/config_files.py +683 -0
  1755. ekbatan-0.1.0/src/ekbatan/distributedjobs/__init__.py +696 -0
  1756. ekbatan-0.1.0/src/ekbatan/distributedjobs/_shutdown.py +111 -0
  1757. ekbatan-0.1.0/src/ekbatan/distributedjobs/config.py +103 -0
  1758. ekbatan-0.1.0/src/ekbatan/domain.py +881 -0
  1759. ekbatan-0.1.0/src/ekbatan/errors.py +151 -0
  1760. ekbatan-0.1.0/src/ekbatan/events/__init__.py +43 -0
  1761. ekbatan-0.1.0/src/ekbatan/events/_across.py +75 -0
  1762. ekbatan-0.1.0/src/ekbatan/events/config.py +133 -0
  1763. ekbatan-0.1.0/src/ekbatan/events/dispatch.py +386 -0
  1764. ekbatan-0.1.0/src/ekbatan/events/fanout.py +149 -0
  1765. ekbatan-0.1.0/src/ekbatan/events/handler.py +352 -0
  1766. ekbatan-0.1.0/src/ekbatan/events/jobs.py +331 -0
  1767. ekbatan-0.1.0/src/ekbatan/events/loop.py +159 -0
  1768. ekbatan-0.1.0/src/ekbatan/events/notification.py +237 -0
  1769. ekbatan-0.1.0/src/ekbatan/events/repository.py +226 -0
  1770. ekbatan-0.1.0/src/ekbatan/fetching.py +275 -0
  1771. ekbatan-0.1.0/src/ekbatan/ids.py +236 -0
  1772. ekbatan-0.1.0/src/ekbatan/locks/__init__.py +26 -0
  1773. ekbatan-0.1.0/src/ekbatan/locks/_deadlines.py +122 -0
  1774. ekbatan-0.1.0/src/ekbatan/locks/_holder.py +225 -0
  1775. ekbatan-0.1.0/src/ekbatan/locks/base.py +176 -0
  1776. ekbatan-0.1.0/src/ekbatan/locks/redis.py +334 -0
  1777. ekbatan-0.1.0/src/ekbatan/locks/sql.py +385 -0
  1778. ekbatan-0.1.0/src/ekbatan/migrations.py +1849 -0
  1779. ekbatan-0.1.0/src/ekbatan/persistence.py +772 -0
  1780. ekbatan-0.1.0/src/ekbatan/py.typed +0 -0
  1781. ekbatan-0.1.0/src/ekbatan/repository.py +1774 -0
  1782. ekbatan-0.1.0/src/ekbatan/schema.py +459 -0
  1783. ekbatan-0.1.0/src/ekbatan/schemagen/__init__.py +423 -0
  1784. ekbatan-0.1.0/src/ekbatan/schemagen/__main__.py +6 -0
  1785. ekbatan-0.1.0/src/ekbatan/schemagen/_config.py +400 -0
  1786. ekbatan-0.1.0/src/ekbatan/schemagen/_records.py +598 -0
  1787. ekbatan-0.1.0/src/ekbatan/schemagen/_reflect.py +1307 -0
  1788. ekbatan-0.1.0/src/ekbatan/schemagen/_render.py +1637 -0
  1789. ekbatan-0.1.0/src/ekbatan/schemagen/_types.py +596 -0
  1790. ekbatan-0.1.0/src/ekbatan/sharding.py +257 -0
  1791. ekbatan-0.1.0/src/ekbatan/streaming.py +201 -0
  1792. ekbatan-0.1.0/src/ekbatan/testing.py +411 -0
  1793. ekbatan-0.1.0/src/ekbatan/time.py +44 -0
  1794. ekbatan-0.1.0/tests/backends.py +340 -0
  1795. ekbatan-0.1.0/tests/conftest.py +503 -0
  1796. ekbatan-0.1.0/tests/driver_settings.tsv +156 -0
  1797. ekbatan-0.1.0/tests/fixtures/__init__.py +11 -0
  1798. ekbatan-0.1.0/tests/fixtures/actions.py +258 -0
  1799. ekbatan-0.1.0/tests/fixtures/builders.py +78 -0
  1800. ekbatan-0.1.0/tests/fixtures/config.py +34 -0
  1801. ekbatan-0.1.0/tests/fixtures/domain.py +206 -0
  1802. ekbatan-0.1.0/tests/fixtures/executing.py +46 -0
  1803. ekbatan-0.1.0/tests/fixtures/handlers.py +159 -0
  1804. ekbatan-0.1.0/tests/fixtures/jobs.py +73 -0
  1805. ekbatan-0.1.0/tests/fixtures/logins.py +23 -0
  1806. ekbatan-0.1.0/tests/fixtures/migrating.py +78 -0
  1807. ekbatan-0.1.0/tests/fixtures/redisson/RedissonRecordingTest.java +52 -0
  1808. ekbatan-0.1.0/tests/fixtures/redisson/java-3.39.0.monitor.log +95 -0
  1809. ekbatan-0.1.0/tests/fixtures/repositories.py +164 -0
  1810. ekbatan-0.1.0/tests/fixtures/schema.py +246 -0
  1811. ekbatan-0.1.0/tests/integration/test_accounting.py +116 -0
  1812. ekbatan-0.1.0/tests/integration/test_action_testing.py +65 -0
  1813. ekbatan-0.1.0/tests/integration/test_actions.py +745 -0
  1814. ekbatan-0.1.0/tests/integration/test_async.py +642 -0
  1815. ekbatan-0.1.0/tests/integration/test_async_handlers.py +295 -0
  1816. ekbatan-0.1.0/tests/integration/test_async_locks.py +168 -0
  1817. ekbatan-0.1.0/tests/integration/test_async_parity.py +692 -0
  1818. ekbatan-0.1.0/tests/integration/test_change_persister.py +150 -0
  1819. ekbatan-0.1.0/tests/integration/test_concurrency.py +222 -0
  1820. ekbatan-0.1.0/tests/integration/test_config_files_connect.py +133 -0
  1821. ekbatan-0.1.0/tests/integration/test_data_source_properties.py +84 -0
  1822. ekbatan-0.1.0/tests/integration/test_event_jobs.py +308 -0
  1823. ekbatan-0.1.0/tests/integration/test_event_persister.py +298 -0
  1824. ekbatan-0.1.0/tests/integration/test_event_repositories.py +301 -0
  1825. ekbatan-0.1.0/tests/integration/test_eventlog_location.py +86 -0
  1826. ekbatan-0.1.0/tests/integration/test_events.py +770 -0
  1827. ekbatan-0.1.0/tests/integration/test_execute_order.py +59 -0
  1828. ekbatan-0.1.0/tests/integration/test_executor.py +577 -0
  1829. ekbatan-0.1.0/tests/integration/test_fluent_reads.py +244 -0
  1830. ekbatan-0.1.0/tests/integration/test_id_persistence.py +271 -0
  1831. ekbatan-0.1.0/tests/integration/test_jobs.py +549 -0
  1832. ekbatan-0.1.0/tests/integration/test_jobs_at_exit.py +393 -0
  1833. ekbatan-0.1.0/tests/integration/test_json_columns.py +64 -0
  1834. ekbatan-0.1.0/tests/integration/test_locks.py +542 -0
  1835. ekbatan-0.1.0/tests/integration/test_migration_concurrency.py +308 -0
  1836. ekbatan-0.1.0/tests/integration/test_migrations.py +1450 -0
  1837. ekbatan-0.1.0/tests/integration/test_outbox.py +351 -0
  1838. ekbatan-0.1.0/tests/integration/test_performance.py +327 -0
  1839. ekbatan-0.1.0/tests/integration/test_persistence.py +228 -0
  1840. ekbatan-0.1.0/tests/integration/test_record_columns.py +522 -0
  1841. ekbatan-0.1.0/tests/integration/test_redis_locks.py +741 -0
  1842. ekbatan-0.1.0/tests/integration/test_refusals.py +962 -0
  1843. ekbatan-0.1.0/tests/integration/test_registries.py +235 -0
  1844. ekbatan-0.1.0/tests/integration/test_repository.py +769 -0
  1845. ekbatan-0.1.0/tests/integration/test_repository_mapping.py +93 -0
  1846. ekbatan-0.1.0/tests/integration/test_repository_raw_keys.py +231 -0
  1847. ekbatan-0.1.0/tests/integration/test_routing.py +758 -0
  1848. ekbatan-0.1.0/tests/integration/test_schema_indexes.py +85 -0
  1849. ekbatan-0.1.0/tests/integration/test_schemagen.py +1191 -0
  1850. ekbatan-0.1.0/tests/integration/test_schemagen_cli.py +530 -0
  1851. ekbatan-0.1.0/tests/integration/test_schemagen_converters.py +530 -0
  1852. ekbatan-0.1.0/tests/integration/test_schemagen_hardening.py +1115 -0
  1853. ekbatan-0.1.0/tests/integration/test_schemagen_round2.py +122 -0
  1854. ekbatan-0.1.0/tests/integration/test_schemagen_round_trip.py +784 -0
  1855. ekbatan-0.1.0/tests/integration/test_schemagen_table_names.py +234 -0
  1856. ekbatan-0.1.0/tests/integration/test_schemagen_time_kinds.py +239 -0
  1857. ekbatan-0.1.0/tests/integration/test_schemagen_types.py +378 -0
  1858. ekbatan-0.1.0/tests/integration/test_secrets_stay_secret.py +145 -0
  1859. ekbatan-0.1.0/tests/integration/test_sigterm_warning.py +161 -0
  1860. ekbatan-0.1.0/tests/integration/test_time_as_is_events.py +118 -0
  1861. ekbatan-0.1.0/tests/integration/test_time_kinds_events.py +161 -0
  1862. ekbatan-0.1.0/tests/integration/test_time_kinds_handlers.py +144 -0
  1863. ekbatan-0.1.0/tests/integration/test_timestamps.py +220 -0
  1864. ekbatan-0.1.0/tests/integration/test_transaction_threads.py +277 -0
  1865. ekbatan-0.1.0/tests/integration/test_update_writes_the_record.py +338 -0
  1866. ekbatan-0.1.0/tests/integration/test_validate_on_load.py +109 -0
  1867. ekbatan-0.1.0/tests/migrations/generate.py +145 -0
  1868. ekbatan-0.1.0/tests/migrations/mysql/V0001__schema.sql +49 -0
  1869. ekbatan-0.1.0/tests/migrations/mysql-eventlog/V0000__create_eventlog_database.sql +4 -0
  1870. ekbatan-0.1.0/tests/migrations/mysql-eventlog/V0001__eventlog.sql +49 -0
  1871. ekbatan-0.1.0/tests/migrations/postgres/V0001__schema.sql +98 -0
  1872. ekbatan-0.1.0/tests/migrations/sqlite/V0001__schema.sql +96 -0
  1873. ekbatan-0.1.0/tests/modes.py +727 -0
  1874. ekbatan-0.1.0/tests/records.py +71 -0
  1875. ekbatan-0.1.0/tests/schemagen_support.py +608 -0
  1876. ekbatan-0.1.0/tests/schemagen_type_cases.py +368 -0
  1877. ekbatan-0.1.0/tests/test_structure.py +218 -0
  1878. ekbatan-0.1.0/tests/unit/test_action_name.py +47 -0
  1879. ekbatan-0.1.0/tests/unit/test_action_spec.py +693 -0
  1880. ekbatan-0.1.0/tests/unit/test_action_testing.py +249 -0
  1881. ekbatan-0.1.0/tests/unit/test_async_action_spec.py +179 -0
  1882. ekbatan-0.1.0/tests/unit/test_async_engine.py +271 -0
  1883. ekbatan-0.1.0/tests/unit/test_builders.py +564 -0
  1884. ekbatan-0.1.0/tests/unit/test_clock.py +209 -0
  1885. ekbatan-0.1.0/tests/unit/test_codegen.py +303 -0
  1886. ekbatan-0.1.0/tests/unit/test_config.py +375 -0
  1887. ekbatan-0.1.0/tests/unit/test_config_files.py +687 -0
  1888. ekbatan-0.1.0/tests/unit/test_data_source.py +282 -0
  1889. ekbatan-0.1.0/tests/unit/test_data_source_login.py +325 -0
  1890. ekbatan-0.1.0/tests/unit/test_documented_defaults.py +61 -0
  1891. ekbatan-0.1.0/tests/unit/test_domain.py +986 -0
  1892. ekbatan-0.1.0/tests/unit/test_ekbatan_config_file.py +306 -0
  1893. ekbatan-0.1.0/tests/unit/test_errors.py +174 -0
  1894. ekbatan-0.1.0/tests/unit/test_event_handler_registry.py +277 -0
  1895. ekbatan-0.1.0/tests/unit/test_event_job_loop.py +100 -0
  1896. ekbatan-0.1.0/tests/unit/test_event_notification.py +69 -0
  1897. ekbatan-0.1.0/tests/unit/test_fetching.py +307 -0
  1898. ekbatan-0.1.0/tests/unit/test_ids.py +297 -0
  1899. ekbatan-0.1.0/tests/unit/test_java_log_names.py +132 -0
  1900. ekbatan-0.1.0/tests/unit/test_jobs.py +287 -0
  1901. ekbatan-0.1.0/tests/unit/test_json.py +358 -0
  1902. ekbatan-0.1.0/tests/unit/test_lock_deadlines.py +103 -0
  1903. ekbatan-0.1.0/tests/unit/test_locks.py +305 -0
  1904. ekbatan-0.1.0/tests/unit/test_locks_on_event_loop.py +76 -0
  1905. ekbatan-0.1.0/tests/unit/test_migration_model.py +421 -0
  1906. ekbatan-0.1.0/tests/unit/test_migration_scripts.py +776 -0
  1907. ekbatan-0.1.0/tests/unit/test_model_event_names_its_model.py +91 -0
  1908. ekbatan-0.1.0/tests/unit/test_outbox.py +229 -0
  1909. ekbatan-0.1.0/tests/unit/test_persistence.py +319 -0
  1910. ekbatan-0.1.0/tests/unit/test_policies.py +149 -0
  1911. ekbatan-0.1.0/tests/unit/test_refusals.py +154 -0
  1912. ekbatan-0.1.0/tests/unit/test_repository_read_names.py +85 -0
  1913. ekbatan-0.1.0/tests/unit/test_repository_record_type.py +75 -0
  1914. ekbatan-0.1.0/tests/unit/test_schema_converters.py +200 -0
  1915. ekbatan-0.1.0/tests/unit/test_schemagen_completeness.py +254 -0
  1916. ekbatan-0.1.0/tests/unit/test_schemagen_config.py +696 -0
  1917. ekbatan-0.1.0/tests/unit/test_schemagen_hardening.py +1139 -0
  1918. ekbatan-0.1.0/tests/unit/test_schemagen_records.py +703 -0
  1919. ekbatan-0.1.0/tests/unit/test_schemagen_table_names.py +312 -0
  1920. ekbatan-0.1.0/tests/unit/test_secrets_are_never_printed.py +267 -0
  1921. ekbatan-0.1.0/tests/unit/test_setup_guide.py +97 -0
  1922. ekbatan-0.1.0/tests/unit/test_shard_concurrency.py +108 -0
  1923. ekbatan-0.1.0/tests/unit/test_shutdown_hook.py +198 -0
  1924. ekbatan-0.1.0/tests/unit/test_sigterm_warning.py +218 -0
  1925. ekbatan-0.1.0/tests/unit/test_streaming.py +191 -0
  1926. ekbatan-0.1.0/tests/unit/test_suite_migrations.py +52 -0
  1927. ekbatan-0.1.0/tests/unit/test_time_as_is.py +72 -0
  1928. ekbatan-0.1.0/tests/unit/test_time_as_is_layers.py +153 -0
  1929. ekbatan-0.1.0/tests/unit/test_time_kinds_json.py +401 -0
  1930. ekbatan-0.1.0/tests/unit/test_time_kinds_mypy.py +226 -0
  1931. ekbatan-0.1.0/tests/unit/test_typed_records_mypy.py +409 -0
  1932. ekbatan-0.1.0/tests/unit/test_validate.py +538 -0
  1933. ekbatan-0.1.0/tests/unit/test_yoyo_contract.py +104 -0
  1934. ekbatan-0.1.0/uv.lock +1840 -0
  1935. ekbatan-0.1.0/website/.gitignore +3 -0
  1936. ekbatan-0.1.0/website/CONTENT-PARITY.md +177 -0
  1937. ekbatan-0.1.0/website/PALETTES.md +216 -0
  1938. ekbatan-0.1.0/website/PARITY.md +142 -0
  1939. ekbatan-0.1.0/website/README.md +104 -0
  1940. ekbatan-0.1.0/website/astro.config.mjs +36 -0
  1941. ekbatan-0.1.0/website/package-lock.json +6193 -0
  1942. ekbatan-0.1.0/website/package.json +19 -0
  1943. ekbatan-0.1.0/website/public/fonts/dmsans-v17-rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu0-K6z9mXg.woff2 +0 -0
  1944. ekbatan-0.1.0/website/public/fonts/dmsans-v17-rP2Yp2ywxg089UriI5-g4vlH9VoD8Cmcqbu6-K6z9mXgjU0.woff2 +0 -0
  1945. ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx3cwgknk-6nFg.woff2 +0 -0
  1946. ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx7cwgknk-6nFg.woff2 +0 -0
  1947. ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxDcwgknk-4.woff2 +0 -0
  1948. ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxPcwgknk-6nFg.woff2 +0 -0
  1949. ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPxTcwgknk-6nFg.woff2 +0 -0
  1950. ekbatan-0.1.0/website/public/fonts/jetbrainsmono-v24-tDbv2o-flEEny0FZhsfKu5WU4zr3E_BX0PnT8RD8yKwBNntkaToggR7BYRbKPx_cwgknk-6nFg.woff2 +0 -0
  1951. ekbatan-0.1.0/website/public/fonts/spacegrotesk-v22-V8mDoQDjQSkFtoMM3T6r8E7mPb54C_k3HqUtEw.woff2 +0 -0
  1952. ekbatan-0.1.0/website/public/fonts/spacegrotesk-v22-V8mDoQDjQSkFtoMM3T6r8E7mPb94C_k3HqUtEw.woff2 +0 -0
  1953. ekbatan-0.1.0/website/public/fonts/spacegrotesk-v22-V8mDoQDjQSkFtoMM3T6r8E7mPbF4C_k3HqU.woff2 +0 -0
  1954. ekbatan-0.1.0/website/scripts/check-classes.mjs +66 -0
  1955. ekbatan-0.1.0/website/scripts/check-links.mjs +90 -0
  1956. ekbatan-0.1.0/website/scripts/content-parity.py +255 -0
  1957. ekbatan-0.1.0/website/scripts/parity.mjs +17 -0
  1958. ekbatan-0.1.0/website/src/components/AliasRenameFlow.astro +640 -0
  1959. ekbatan-0.1.0/website/src/components/CodeBlock.astro +263 -0
  1960. ekbatan-0.1.0/website/src/components/DialectPicker.astro +158 -0
  1961. ekbatan-0.1.0/website/src/components/Footer.astro +110 -0
  1962. ekbatan-0.1.0/website/src/components/GuidedFlow.astro +426 -0
  1963. ekbatan-0.1.0/website/src/components/LearnPager.astro +122 -0
  1964. ekbatan-0.1.0/website/src/components/ModeTabs.astro +127 -0
  1965. ekbatan-0.1.0/website/src/components/Nav.astro +196 -0
  1966. ekbatan-0.1.0/website/src/components/RedirectPage.astro +26 -0
  1967. ekbatan-0.1.0/website/src/components/SectionCard.astro +78 -0
  1968. ekbatan-0.1.0/website/src/components/SetupPicker.astro +291 -0
  1969. ekbatan-0.1.0/website/src/layouts/BaseLayout.astro +69 -0
  1970. ekbatan-0.1.0/website/src/layouts/DocLayout.astro +346 -0
  1971. ekbatan-0.1.0/website/src/lib/learn.ts +26 -0
  1972. ekbatan-0.1.0/website/src/pages/concepts/actions.astro +5 -0
  1973. ekbatan-0.1.0/website/src/pages/concepts/index.astro +5 -0
  1974. ekbatan-0.1.0/website/src/pages/concepts/models-and-entities.astro +5 -0
  1975. ekbatan-0.1.0/website/src/pages/concepts/outbox.astro +5 -0
  1976. ekbatan-0.1.0/website/src/pages/concepts/sagas.astro +5 -0
  1977. ekbatan-0.1.0/website/src/pages/concepts/sharding.astro +5 -0
  1978. ekbatan-0.1.0/website/src/pages/concepts/the-dual-write-trap.astro +5 -0
  1979. ekbatan-0.1.0/website/src/pages/index.astro +344 -0
  1980. ekbatan-0.1.0/website/src/pages/learn/actions.mdx +350 -0
  1981. ekbatan-0.1.0/website/src/pages/learn/async.mdx +253 -0
  1982. ekbatan-0.1.0/website/src/pages/learn/complete-project-setup.mdx +2151 -0
  1983. ekbatan-0.1.0/website/src/pages/learn/consuming-events.mdx +444 -0
  1984. ekbatan-0.1.0/website/src/pages/learn/getting-started.mdx +278 -0
  1985. ekbatan-0.1.0/website/src/pages/learn/going-to-production.mdx +130 -0
  1986. ekbatan-0.1.0/website/src/pages/learn/index.astro +48 -0
  1987. ekbatan-0.1.0/website/src/pages/learn/install.mdx +125 -0
  1988. ekbatan-0.1.0/website/src/pages/learn/models-and-entities.mdx +445 -0
  1989. ekbatan-0.1.0/website/src/pages/learn/outbox.mdx +230 -0
  1990. ekbatan-0.1.0/website/src/pages/learn/sagas.mdx +281 -0
  1991. ekbatan-0.1.0/website/src/pages/learn/sharding-strategies.mdx +193 -0
  1992. ekbatan-0.1.0/website/src/pages/learn/sharding.mdx +330 -0
  1993. ekbatan-0.1.0/website/src/pages/learn/startup-and-shutdown.mdx +1328 -0
  1994. ekbatan-0.1.0/website/src/pages/learn/sync-or-async.mdx +116 -0
  1995. ekbatan-0.1.0/website/src/pages/learn/the-dual-write-trap.mdx +79 -0
  1996. ekbatan-0.1.0/website/src/pages/learn/wiring-a-service.mdx +241 -0
  1997. ekbatan-0.1.0/website/src/pages/learn/your-first-action.mdx +444 -0
  1998. ekbatan-0.1.0/website/src/pages/privacy.astro +114 -0
  1999. ekbatan-0.1.0/website/src/pages/reference/action-executor.mdx +259 -0
  2000. ekbatan-0.1.0/website/src/pages/reference/action-plan.mdx +108 -0
  2001. ekbatan-0.1.0/website/src/pages/reference/action.mdx +300 -0
  2002. ekbatan-0.1.0/website/src/pages/reference/beside-java.mdx +164 -0
  2003. ekbatan-0.1.0/website/src/pages/reference/config-files.mdx +260 -0
  2004. ekbatan-0.1.0/website/src/pages/reference/dialects/mariadb.mdx +151 -0
  2005. ekbatan-0.1.0/website/src/pages/reference/dialects/mysql.mdx +145 -0
  2006. ekbatan-0.1.0/website/src/pages/reference/dialects/postgresql.mdx +127 -0
  2007. ekbatan-0.1.0/website/src/pages/reference/dialects/sqlite.mdx +140 -0
  2008. ekbatan-0.1.0/website/src/pages/reference/entity.mdx +166 -0
  2009. ekbatan-0.1.0/website/src/pages/reference/events/local-event-handler.mdx +548 -0
  2010. ekbatan-0.1.0/website/src/pages/reference/events/streaming.mdx +536 -0
  2011. ekbatan-0.1.0/website/src/pages/reference/index.astro +132 -0
  2012. ekbatan-0.1.0/website/src/pages/reference/jobs/distributed-jobs.mdx +378 -0
  2013. ekbatan-0.1.0/website/src/pages/reference/keyed-locks.mdx +449 -0
  2014. ekbatan-0.1.0/website/src/pages/reference/migrations.mdx +410 -0
  2015. ekbatan-0.1.0/website/src/pages/reference/model-event.mdx +110 -0
  2016. ekbatan-0.1.0/website/src/pages/reference/model.mdx +256 -0
  2017. ekbatan-0.1.0/website/src/pages/reference/multi-database.mdx +340 -0
  2018. ekbatan-0.1.0/website/src/pages/reference/repository.mdx +635 -0
  2019. ekbatan-0.1.0/website/src/pages/reference/runtime/async.mdx +415 -0
  2020. ekbatan-0.1.0/website/src/pages/reference/runtime/concurrency.mdx +324 -0
  2021. ekbatan-0.1.0/website/src/pages/reference/runtime/observability.mdx +204 -0
  2022. ekbatan-0.1.0/website/src/pages/reference/schemagen.mdx +945 -0
  2023. ekbatan-0.1.0/website/src/pages/reference/sharding.mdx +524 -0
  2024. ekbatan-0.1.0/website/src/pages/reference/tables/event-notifications.mdx +192 -0
  2025. ekbatan-0.1.0/website/src/pages/reference/tables/events.mdx +185 -0
  2026. ekbatan-0.1.0/website/src/pages/reference/tables/index.mdx +124 -0
  2027. ekbatan-0.1.0/website/src/pages/reference/tables/scheduled-tasks.mdx +179 -0
  2028. ekbatan-0.1.0/website/src/pages/reference/transaction-manager.mdx +310 -0
  2029. ekbatan-0.1.0/website/src/pages/reference/wiring-fastapi.mdx +350 -0
  2030. ekbatan-0.1.0/website/src/pages/reference/wiring.mdx +593 -0
  2031. ekbatan-0.1.0/website/src/plugins/rehype-table-scroll.mjs +34 -0
  2032. ekbatan-0.1.0/website/src/plugins/remark-base-path.mjs +30 -0
  2033. ekbatan-0.1.0/website/src/plugins/remark-strip-lead.mjs +23 -0
  2034. ekbatan-0.1.0/website/src/setup-guide/async/actions.py +70 -0
  2035. ekbatan-0.1.0/website/src/setup-guide/async/api.py +91 -0
  2036. ekbatan-0.1.0/website/src/setup-guide/async/app.py +193 -0
  2037. ekbatan-0.1.0/website/src/setup-guide/async/handlers.py +61 -0
  2038. ekbatan-0.1.0/website/src/setup-guide/async/jobs.py +59 -0
  2039. ekbatan-0.1.0/website/src/setup-guide/async/repository.py +90 -0
  2040. ekbatan-0.1.0/website/src/setup-guide/converters.py +24 -0
  2041. ekbatan-0.1.0/website/src/setup-guide/mariadb/async/ekbatan.yaml +45 -0
  2042. ekbatan-0.1.0/website/src/setup-guide/mariadb/sync/ekbatan.yaml +37 -0
  2043. ekbatan-0.1.0/website/src/setup-guide/model.py +183 -0
  2044. ekbatan-0.1.0/website/src/setup-guide/mysql/async/ekbatan.yaml +45 -0
  2045. ekbatan-0.1.0/website/src/setup-guide/mysql/sync/ekbatan.yaml +37 -0
  2046. ekbatan-0.1.0/website/src/setup-guide/pg/async/ekbatan.yaml +48 -0
  2047. ekbatan-0.1.0/website/src/setup-guide/pg/sync/ekbatan.yaml +39 -0
  2048. ekbatan-0.1.0/website/src/setup-guide/sqlite/async/__main__.py +72 -0
  2049. ekbatan-0.1.0/website/src/setup-guide/sqlite/async/app.py +160 -0
  2050. ekbatan-0.1.0/website/src/setup-guide/sqlite/ekbatan.yaml +22 -0
  2051. ekbatan-0.1.0/website/src/setup-guide/sqlite/sync/__main__.py +65 -0
  2052. ekbatan-0.1.0/website/src/setup-guide/sqlite/sync/app.py +109 -0
  2053. ekbatan-0.1.0/website/src/setup-guide/sync/actions.py +69 -0
  2054. ekbatan-0.1.0/website/src/setup-guide/sync/api.py +91 -0
  2055. ekbatan-0.1.0/website/src/setup-guide/sync/app.py +134 -0
  2056. ekbatan-0.1.0/website/src/setup-guide/sync/handlers.py +60 -0
  2057. ekbatan-0.1.0/website/src/setup-guide/sync/jobs.py +48 -0
  2058. ekbatan-0.1.0/website/src/setup-guide/sync/repository.py +90 -0
  2059. ekbatan-0.1.0/website/src/styles/fonts.css +342 -0
  2060. ekbatan-0.1.0/website/src/styles/palette.css +237 -0
  2061. ekbatan-0.1.0/website/src/styles/styles.css +1 -0
  2062. 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.