py-serverless-kit 0.1.0__tar.gz → 0.1.3__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 (232) hide show
  1. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/.gitignore +29 -28
  2. py_serverless_kit-0.1.3/CHANGELOG.md +52 -0
  3. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/CONTRIBUTING.md +13 -13
  4. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/LICENSE +21 -21
  5. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/PKG-INFO +47 -41
  6. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/README.md +42 -36
  7. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/deploy_docs/CONTRIBUTING.md +158 -158
  8. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/README.md +22 -22
  9. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/cli.md +175 -175
  10. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/configuration.md +245 -245
  11. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/dashboard.md +44 -44
  12. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/events.md +213 -213
  13. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/getting-started.md +176 -176
  14. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/handlers.md +219 -219
  15. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/local-development.md +98 -98
  16. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/migrating-from-aws.md +98 -98
  17. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/providers.md +358 -354
  18. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/workflows.md +180 -180
  19. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/01-hello-http/README.md +53 -53
  20. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/01-hello-http/app/handlers.py +15 -15
  21. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/01-hello-http/requirements.txt +1 -1
  22. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/02-rest-api/README.md +77 -77
  23. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/02-rest-api/app/handlers.py +116 -116
  24. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/02-rest-api/app/store.py +50 -50
  25. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/02-rest-api/pskit.yml +82 -82
  26. {py_serverless_kit-0.1.0/examples/05-storage-events → py_serverless_kit-0.1.3/examples/02-rest-api}/requirements.txt +1 -1
  27. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/03-scheduled-jobs/README.md +56 -56
  28. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/03-scheduled-jobs/app/jobs.py +51 -51
  29. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/03-scheduled-jobs/pskit.yml +49 -49
  30. {py_serverless_kit-0.1.0/examples/02-rest-api → py_serverless_kit-0.1.3/examples/03-scheduled-jobs}/requirements.txt +1 -1
  31. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/04-queue-worker/README.md +80 -80
  32. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/04-queue-worker/app/worker.py +75 -75
  33. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/04-queue-worker/pskit.yml +39 -39
  34. {py_serverless_kit-0.1.0/examples/03-scheduled-jobs → py_serverless_kit-0.1.3/examples/04-queue-worker}/requirements.txt +1 -1
  35. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/05-storage-events/README.md +58 -58
  36. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/05-storage-events/app/files.py +51 -51
  37. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/05-storage-events/pskit.yml +54 -54
  38. {py_serverless_kit-0.1.0/examples/04-queue-worker → py_serverless_kit-0.1.3/examples/05-storage-events}/requirements.txt +1 -1
  39. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/06-pubsub-topic/README.md +62 -62
  40. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/06-pubsub-topic/app/subscribers.py +41 -41
  41. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/06-pubsub-topic/pskit.yml +27 -27
  42. py_serverless_kit-0.1.3/examples/06-pubsub-topic/requirements.txt +1 -0
  43. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/07-workflow-orders/README.md +110 -110
  44. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/07-workflow-orders/app/orders.py +84 -84
  45. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/07-workflow-orders/events/b2b.json +5 -5
  46. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/07-workflow-orders/events/declined.json +5 -5
  47. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/07-workflow-orders/events/happy.json +9 -9
  48. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/07-workflow-orders/pskit.yml +99 -99
  49. py_serverless_kit-0.1.3/examples/07-workflow-orders/requirements.txt +1 -0
  50. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/08-multi-cloud/README.md +71 -71
  51. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/08-multi-cloud/app/handlers.py +45 -45
  52. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/08-multi-cloud/pskit.aws.yml +15 -15
  53. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/08-multi-cloud/pskit.azure.yml +12 -12
  54. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/08-multi-cloud/pskit.gcp.yml +11 -11
  55. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/08-multi-cloud/pskit.yml +90 -90
  56. py_serverless_kit-0.1.3/examples/08-multi-cloud/requirements.txt +1 -0
  57. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/09-function-invoke/README.md +61 -61
  58. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/09-function-invoke/app/quotes.py +44 -44
  59. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/09-function-invoke/pskit.yml +41 -41
  60. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/09-function-invoke/requirements.txt +1 -1
  61. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/10-stages-and-config/.env.example +5 -5
  62. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/10-stages-and-config/README.md +78 -78
  63. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/10-stages-and-config/app/handlers.py +17 -17
  64. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/10-stages-and-config/app/settings.py +37 -37
  65. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/10-stages-and-config/config/limits.json +5 -5
  66. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/10-stages-and-config/pskit.yml +58 -58
  67. py_serverless_kit-0.1.3/examples/10-stages-and-config/requirements.txt +1 -0
  68. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/11-custom-terraform/README.md +83 -83
  69. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/11-custom-terraform/app/handlers.py +21 -21
  70. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/11-custom-terraform/app/repository.py +56 -56
  71. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/11-custom-terraform/pskit.yml +64 -64
  72. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/11-custom-terraform/requirements.txt +1 -1
  73. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/11-custom-terraform/scripts/smoke_test.py +26 -26
  74. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/11-custom-terraform/tests/test_orders.py +11 -11
  75. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/12-async-and-context/README.md +61 -61
  76. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/12-async-and-context/app/handlers.py +65 -65
  77. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/12-async-and-context/pskit.yml +30 -30
  78. py_serverless_kit-0.1.3/examples/12-async-and-context/requirements.txt +1 -0
  79. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/13-migrate-from-aws-lambda/README.md +120 -120
  80. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/13-migrate-from-aws-lambda/after/app/orders.py +57 -57
  81. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/13-migrate-from-aws-lambda/after/pskit.yml +55 -55
  82. py_serverless_kit-0.1.3/examples/13-migrate-from-aws-lambda/after/requirements.txt +1 -0
  83. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/13-migrate-from-aws-lambda/before/lambda_function.py +67 -67
  84. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/13-migrate-from-aws-lambda/before/state_machine.asl.json +25 -25
  85. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/13-migrate-from-aws-lambda/before/template.yaml +36 -36
  86. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/14-testing/README.md +45 -45
  87. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/14-testing/app/handlers.py +44 -44
  88. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/14-testing/ci.github-workflow.yml +43 -43
  89. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/14-testing/pskit.yml +39 -39
  90. py_serverless_kit-0.1.3/examples/14-testing/requirements.txt +1 -0
  91. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/14-testing/tests/conftest.py +20 -20
  92. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/14-testing/tests/test_handlers.py +62 -62
  93. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/14-testing/tests/test_workflow.py +31 -31
  94. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/15-ci-cd-deploy/README.md +64 -64
  95. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/15-ci-cd-deploy/app/handlers.py +12 -12
  96. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/15-ci-cd-deploy/deploy.github-workflow.yml +100 -100
  97. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/15-ci-cd-deploy/pskit.yml +50 -50
  98. py_serverless_kit-0.1.3/examples/15-ci-cd-deploy/requirements.txt +1 -0
  99. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/README.md +39 -39
  100. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/pyproject.toml +95 -95
  101. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/__main__.py +3 -3
  102. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/_version.py +1 -1
  103. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/cli/templates.py +212 -212
  104. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/config/__init__.py +12 -12
  105. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/core/deployer.py +180 -180
  106. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/core/describe.py +112 -112
  107. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/dashboard/__init__.py +3 -3
  108. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/dashboard/template.html +248 -248
  109. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/local/__init__.py +3 -3
  110. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/packaging/__init__.py +3 -3
  111. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/packaging/builder.py +252 -252
  112. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/__init__.py +15 -15
  113. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/aws.py +567 -508
  114. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/cloudflare.py +264 -264
  115. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/digitalocean.py +211 -211
  116. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/oracle.py +304 -304
  117. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/tencent.py +275 -275
  118. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/__init__.py +6 -6
  119. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/__init__.py +18 -18
  120. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/_httpfn.py +91 -91
  121. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/base.py +86 -86
  122. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/gcp.py +1 -1
  123. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/batch.py +47 -47
  124. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/context.py +45 -45
  125. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/errors.py +83 -83
  126. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/event.py +267 -267
  127. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/log.py +69 -69
  128. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/terraform/__init__.py +3 -3
  129. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/terraform/runner.py +104 -104
  130. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/workflows/__init__.py +35 -35
  131. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/workflows/asl.py +170 -170
  132. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/config/test_schema.py +79 -79
  133. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/conftest.py +129 -129
  134. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/local/test_server.py +110 -110
  135. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/test_alibaba.py +137 -137
  136. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/test_aws.py +218 -182
  137. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/test_azure.py +104 -104
  138. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/test_cloudflare.py +110 -110
  139. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/test_huawei.py +94 -94
  140. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/test_schedule.py +59 -59
  141. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_adapter_alibaba.py +142 -142
  142. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_adapter_aws.py +184 -184
  143. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_adapter_azure.py +146 -146
  144. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_adapter_digitalocean.py +82 -82
  145. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_adapter_gcp.py +165 -165
  146. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_adapter_huawei.py +146 -146
  147. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_adapter_tencent.py +134 -134
  148. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_dispatch.py +146 -146
  149. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_models.py +161 -161
  150. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_workflow_engine.py +174 -174
  151. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/test_cli.py +169 -169
  152. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/test_dashboard.py +37 -37
  153. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/test_examples.py +182 -182
  154. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/test_packaging.py +133 -133
  155. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/workflows/test_compilers.py +141 -141
  156. py_serverless_kit-0.1.0/CHANGELOG.md +0 -20
  157. py_serverless_kit-0.1.0/examples/06-pubsub-topic/requirements.txt +0 -1
  158. py_serverless_kit-0.1.0/examples/07-workflow-orders/requirements.txt +0 -1
  159. py_serverless_kit-0.1.0/examples/08-multi-cloud/requirements.txt +0 -1
  160. py_serverless_kit-0.1.0/examples/10-stages-and-config/requirements.txt +0 -1
  161. py_serverless_kit-0.1.0/examples/12-async-and-context/requirements.txt +0 -1
  162. py_serverless_kit-0.1.0/examples/13-migrate-from-aws-lambda/after/requirements.txt +0 -1
  163. py_serverless_kit-0.1.0/examples/14-testing/requirements.txt +0 -1
  164. py_serverless_kit-0.1.0/examples/15-ci-cd-deploy/requirements.txt +0 -1
  165. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/architecture.md +0 -0
  166. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/docs/troubleshooting.md +0 -0
  167. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/01-hello-http/app/__init__.py +0 -0
  168. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/01-hello-http/pskit.yml +0 -0
  169. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/02-rest-api/app/__init__.py +0 -0
  170. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/03-scheduled-jobs/app/__init__.py +0 -0
  171. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/04-queue-worker/app/__init__.py +0 -0
  172. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/05-storage-events/app/__init__.py +0 -0
  173. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/06-pubsub-topic/app/__init__.py +0 -0
  174. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/07-workflow-orders/app/__init__.py +0 -0
  175. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/08-multi-cloud/app/__init__.py +0 -0
  176. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/09-function-invoke/app/__init__.py +0 -0
  177. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/10-stages-and-config/app/__init__.py +0 -0
  178. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/11-custom-terraform/app/__init__.py +0 -0
  179. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/12-async-and-context/app/__init__.py +0 -0
  180. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/13-migrate-from-aws-lambda/after/app/__init__.py +0 -0
  181. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/14-testing/app/__init__.py +0 -0
  182. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/examples/15-ci-cd-deploy/app/__init__.py +0 -0
  183. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/__init__.py +0 -0
  184. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/cli/__init__.py +0 -0
  185. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/cli/main.py +0 -0
  186. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/config/loader.py +0 -0
  187. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/config/schema.py +0 -0
  188. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/core/__init__.py +0 -0
  189. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/core/project.py +0 -0
  190. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/dashboard/generator.py +0 -0
  191. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/local/runner.py +0 -0
  192. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/local/server.py +0 -0
  193. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/alibaba.py +0 -0
  194. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/azure.py +0 -0
  195. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/base.py +0 -0
  196. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/gcp.py +0 -0
  197. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/huawei.py +0 -0
  198. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/ibm.py +0 -0
  199. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/registry.py +0 -0
  200. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/schedule.py +0 -0
  201. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/providers/terraform_doc.py +0 -0
  202. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/alibaba.py +0 -0
  203. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/aws.py +0 -0
  204. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/azure.py +0 -0
  205. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/cloudflare.py +0 -0
  206. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/digitalocean.py +0 -0
  207. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/huawei.py +0 -0
  208. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/ibm.py +0 -0
  209. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/oracle.py +0 -0
  210. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/adapters/tencent.py +0 -0
  211. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/dispatch.py +0 -0
  212. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/invoke.py +0 -0
  213. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/manifest.py +0 -0
  214. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/response.py +0 -0
  215. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/routing.py +0 -0
  216. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/runtime/workflow.py +0 -0
  217. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/src/py_serverless_kit/workflows/gcp.py +0 -0
  218. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/__init__.py +0 -0
  219. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/config/__init__.py +0 -0
  220. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/config/test_loader.py +0 -0
  221. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/local/__init__.py +0 -0
  222. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/__init__.py +0 -0
  223. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/test_digitalocean.py +0 -0
  224. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/test_gcp.py +0 -0
  225. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/test_ibm.py +0 -0
  226. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/test_oracle.py +0 -0
  227. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/providers/test_tencent.py +0 -0
  228. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/__init__.py +0 -0
  229. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_adapter_cloudflare.py +0 -0
  230. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_adapter_ibm.py +0 -0
  231. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/runtime/test_adapter_oracle.py +0 -0
  232. {py_serverless_kit-0.1.0 → py_serverless_kit-0.1.3}/tests/workflows/__init__.py +0 -0
@@ -1,28 +1,29 @@
1
- # Python
2
- __pycache__/
3
- *.py[cod]
4
- *.egg-info/
5
- .venv/
6
- venv/
7
- build/
8
- dist/
9
- .pytest_cache/
10
- .mypy_cache/
11
- .ruff_cache/
12
- .coverage
13
- htmlcov/
14
- .pypirc
15
- # py-serverless-kit working dirs (local terraform state, artifacts)
16
- .pskit/
17
- .terraform/
18
- *.tfstate
19
- *.tfstate.*
20
-
21
- # Secrets
22
- .env
23
- .pypirc
24
-
25
- # Editors / OS
26
- .idea/
27
- .vscode/
28
- .DS_Store
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *.egg-info/
5
+ .venv/
6
+ venv/
7
+ CLAUDE.md
8
+ build/
9
+ dist/
10
+ .pytest_cache/
11
+ .mypy_cache/
12
+ .ruff_cache/
13
+ .coverage
14
+ htmlcov/
15
+ .pypirc
16
+ # py-serverless-kit working dirs (local terraform state, artifacts)
17
+ .pskit/
18
+ .terraform/
19
+ *.tfstate
20
+ *.tfstate.*
21
+
22
+ # Secrets
23
+ .env
24
+ .pypirc
25
+
26
+ # Editors / OS
27
+ .idea/
28
+ .vscode/
29
+ .DS_Store
@@ -0,0 +1,52 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented here. The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and the project uses [Semantic Versioning](https://semver.org/).
4
+
5
+ > The function runtime is bundled into every deployment. After upgrading `py-serverless-kit`, run `pskit deploy` again to pick up runtime fixes.
6
+
7
+ ## [Unreleased]
8
+
9
+ ## [0.1.3] - 2026-10-15
10
+
11
+ ### Fixed
12
+ - AWS: `pskit deploy` failed with `creating Lambda Function ...: decomposing request: bufio.Scanner: token too long` once the bundle (e.g. with vendored dependencies) got large, because the zip was sent inline in every `CreateFunction` request. The artifact is now uploaded once to S3 (`aws_s3_object`) and each Lambda function references it via `s3_bucket`/`s3_key`. This also lifts the 50 MB inline upload limit.
13
+
14
+ ### Added
15
+ - AWS options `artifact_bucket` (use an existing bucket for code uploads instead of the private `<service>-<stage>-code-*` bucket pskit creates) and `artifact_upload: s3 | direct` (`direct` restores the old inline upload).
16
+
17
+ No runtime changes. Existing AWS deployments get a new code bucket on the next `pskit deploy`; Lambda functions are updated in place.
18
+
19
+ ## [0.1.2] - 2026-10-15
20
+
21
+ ### Fixed
22
+ - Python 3.9 support: `pskit package`/`deploy` (and the Cloudflare provider) crashed with `TypeError: write_text() got an unexpected keyword argument 'newline'`, because `Path.write_text(newline=...)` only exists on Python 3.10+. Generated files are now written as UTF-8 bytes with `\n` line endings on every Python version.
23
+ - GCP adapter: the storage object `size` check now narrows `None` explicitly, so mypy passes on Python 3.9 CI. Runtime behavior is unchanged.
24
+
25
+ No runtime behavior changes: functions deployed with 0.1.1 don't need to be redeployed.
26
+
27
+ ## [0.1.1] - 2026-10-15
28
+
29
+ ### Changed
30
+ - Author and maintainer set to Asif Khan @ Kavion.ai (`py_serverless_kit.__author__`, package metadata, LICENSE).
31
+ - Project URLs (homepage, docs, issues, changelog) now point to https://github.com/ak9347128658/serverless_kit.
32
+ - README links are absolute so they work on the PyPI project page; added CI/PyPI/license badges.
33
+ - `scripts/validate_all_providers.py` explains that Terraform is optional instead of printing a traceback when it isn't installed.
34
+
35
+ ### Added
36
+ - `deploy_docs/How_to_deploy.md`: short PyPI release guide with PowerShell commands and troubleshooting (e.g. TestPyPI `403`).
37
+ - `deploy_docs/HOW_TO_INSTALL_TERRAFORM.md`: installing Terraform on Windows.
38
+
39
+ No runtime changes: functions deployed with 0.1.0 don't need to be redeployed.
40
+
41
+ ## [0.1.0] - 2026-10-15
42
+
43
+ ### Added
44
+ - Portable handler API: `Event`, `HttpRequest`, `Record`, `Headers`, `Context`, `Response`, HTTP error classes, `BatchResult`, `invoke()`.
45
+ - `pskit.yml` configuration with `extends:`, `providers:` and `stages:` overrides, and `${env:}`, `${opt:}`, `${self:}`, `${file()}` and `${tf:}` variables.
46
+ - Providers: AWS (stable), Google Cloud (stable), Azure (stable), Alibaba Cloud (beta), Huawei Cloud (beta), Tencent Cloud (beta), DigitalOcean (beta), IBM Cloud (beta), Oracle Cloud (experimental), Cloudflare Workers (experimental).
47
+ - Triggers: HTTP (path params, CORS, auth), schedule (rate/cron), queue, storage, topic.
48
+ - Workflows: native AWS Step Functions and Google Cloud Workflows compilers, plus an embedded engine for the other providers and local runs.
49
+ - CLI: `init`, `validate`, `package`, `plan`, `deploy`, `remove`, `info`, `dashboard`, `dev`, `invoke`, `workflow run|show`, `providers`, `tf`.
50
+ - Deployment dashboard (self-contained HTML).
51
+ - Local dev server with hot reload, and `LocalRunner` for tests.
52
+ - `scripts/validate_all_providers.py`, which runs `terraform validate` for every provider.
@@ -1,13 +1,13 @@
1
- # Contributing
2
-
3
- The full contributor guide lives in [deploy_docs/CONTRIBUTING.md](deploy_docs/CONTRIBUTING.md). It covers the project layout, dev setup, how to add providers and options, and how to verify Terraform.
4
-
5
- Maintainers releasing to PyPI: see [deploy_docs/PUBLISHING_TO_PYPI.md](deploy_docs/PUBLISHING_TO_PYPI.md).
6
-
7
- Quick start:
8
-
9
- ```bash
10
- python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\Activate.ps1
11
- pip install -e ".[dev]"
12
- pytest && ruff check src tests && mypy
13
- ```
1
+ # Contributing
2
+
3
+ The full contributor guide lives in [deploy_docs/CONTRIBUTING.md](deploy_docs/CONTRIBUTING.md). It covers the project layout, dev setup, how to add providers and options, and how to verify Terraform.
4
+
5
+ Maintainers releasing to PyPI: see [deploy_docs/PUBLISHING_TO_PYPI.md](deploy_docs/PUBLISHING_TO_PYPI.md).
6
+
7
+ Quick start:
8
+
9
+ ```bash
10
+ python -m venv .venv && source .venv/bin/activate # Windows: .venv\Scripts\Activate.ps1
11
+ pip install -e ".[dev]"
12
+ pytest && ruff check src tests && mypy
13
+ ```
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Asif Khan @ Kavion.ai
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Asif Khan @ Kavion.ai
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,11 +1,11 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: py-serverless-kit
3
- Version: 0.1.0
3
+ Version: 0.1.3
4
4
  Summary: Write a Python serverless function once and deploy it to AWS, Azure, GCP and 7 more clouds with one YAML file, powered by Terraform.
5
- Project-URL: Homepage, https://github.com/kavion-ai/py-serverless-kit
6
- Project-URL: Documentation, https://github.com/kavion-ai/py-serverless-kit/tree/main/docs
7
- Project-URL: Issues, https://github.com/kavion-ai/py-serverless-kit/issues
8
- Project-URL: Changelog, https://github.com/kavion-ai/py-serverless-kit/blob/main/CHANGELOG.md
5
+ Project-URL: Homepage, https://github.com/ak9347128658/serverless_kit
6
+ Project-URL: Documentation, https://github.com/ak9347128658/serverless_kit/tree/main/docs
7
+ Project-URL: Issues, https://github.com/ak9347128658/serverless_kit/issues
8
+ Project-URL: Changelog, https://github.com/ak9347128658/serverless_kit/blob/main/CHANGELOG.md
9
9
  Author: Asif Khan @ Kavion.ai
10
10
  Maintainer: Asif Khan @ Kavion.ai
11
11
  License: MIT
@@ -44,6 +44,10 @@ Description-Content-Type: text/markdown
44
44
 
45
45
  # py-serverless-kit
46
46
 
47
+ [![CI](https://github.com/ak9347128658/serverless_kit/actions/workflows/ci.yml/badge.svg)](https://github.com/ak9347128658/serverless_kit/actions/workflows/ci.yml)
48
+ [![PyPI](https://img.shields.io/pypi/v/py-serverless-kit.svg)](https://pypi.org/project/py-serverless-kit/)
49
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/ak9347128658/serverless_kit/blob/main/LICENSE)
50
+
47
51
  **Write your Python functions once. Deploy them to any of 10 clouds by changing one line of YAML.**
48
52
 
49
53
  `py-serverless-kit` (CLI: `pskit`) is a Serverless-Framework-style toolkit built on **Terraform**. Your handlers use one small, provider-neutral API (`Event`, `Context`, `Response`). A `pskit.yml` file says which cloud they run on and what triggers them: HTTP, schedules, queues, storage, topics. The same file can also define workflows in the style of Step Functions. `pskit deploy` generates Terraform for the chosen cloud, applies it, and builds an HTML dashboard of everything you deployed.
@@ -119,7 +123,7 @@ Teams that build on AWS Lambda and Step Functions end up with code full of API G
119
123
 
120
124
  Run `pskit providers` for the live matrix. If a config uses a trigger the target cloud can't support, **`pskit validate` fails with a clear message instead of deploying something half-working.**
121
125
 
122
- > **Maturity, honestly stated:** the Terraform generated for every provider is checked with `terraform validate` against the real provider plugins (in CI, too). The *stable* providers cover the most surface area. *beta* and *experimental* providers follow vendor docs for event payloads that `validate` can't check, so try them on a non-production account first. See [docs/providers.md](docs/providers.md) for each provider's details and limits.
126
+ > **Maturity, honestly stated:** the Terraform generated for every provider is checked with `terraform validate` against the real provider plugins (in CI, too). The *stable* providers cover the most surface area. *beta* and *experimental* providers follow vendor docs for event payloads that `validate` can't check, so try them on a non-production account first. See [docs/providers.md](https://github.com/ak9347128658/serverless_kit/blob/main/docs/providers.md) for each provider's details and limits.
123
127
 
124
128
  ## Install
125
129
 
@@ -127,7 +131,7 @@ Run `pskit providers` for the live matrix. If a config uses a trigger the target
127
131
  pip install py-serverless-kit
128
132
  ```
129
133
 
130
- You also need **Terraform ≥ 1.5** (or OpenTofu) on your `PATH`, plus credentials for your cloud. See [Getting started](docs/getting-started.md#cloud-credentials).
134
+ You also need **Terraform ≥ 1.5** (or OpenTofu) on your `PATH`, plus credentials for your cloud. See [Getting started](https://github.com/ak9347128658/serverless_kit/blob/main/docs/getting-started.md#cloud-credentials).
131
135
 
132
136
  ## Quick start
133
137
 
@@ -243,58 +247,60 @@ The same definition becomes **AWS Step Functions** on AWS, **Google Cloud Workfl
243
247
  your result ──► Response / raw value ──► adapter ──► native cloud response
244
248
  ```
245
249
 
246
- More: [docs/architecture.md](docs/architecture.md).
250
+ More: [docs/architecture.md](https://github.com/ak9347128658/serverless_kit/blob/main/docs/architecture.md).
247
251
 
248
252
  ## Examples
249
253
 
250
- Fifteen runnable scenarios live in [`examples/`](examples/). They are tested in CI.
254
+ Fifteen runnable scenarios live in [`examples/`](https://github.com/ak9347128658/serverless_kit/tree/main/examples/). They are tested in CI.
251
255
 
252
256
  | | |
253
257
  |---|---|
254
- | [01-hello-http](examples/01-hello-http) | Minimal HTTP function |
255
- | [02-rest-api](examples/02-rest-api) | CRUD, path params, validation errors, CORS, cookies, binary, JWT |
256
- | [03-scheduled-jobs](examples/03-scheduled-jobs) | rate/cron schedules with input and time zones |
257
- | [04-queue-worker](examples/04-queue-worker) | Queue consumer, partial batch failures, dead-letter queue |
258
- | [05-storage-events](examples/05-storage-events) | Object created/deleted with filters |
259
- | [06-pubsub-topic](examples/06-pubsub-topic) | Topic fan-out and filters |
260
- | [07-workflow-orders](examples/07-workflow-orders) | Every workflow state type, retry/catch |
261
- | [08-multi-cloud](examples/08-multi-cloud) | Same code, all 10 providers |
262
- | [09-function-invoke](examples/09-function-invoke) | Function-to-function `invoke()` |
263
- | [10-stages-and-config](examples/10-stages-and-config) | Stages, variables, secrets |
264
- | [11-custom-terraform](examples/11-custom-terraform) | `terraform.extra`, `${tf:...}`, remote state, hooks |
265
- | [12-async-and-context](examples/12-async-and-context) | async handlers, logging, deadlines |
266
- | [13-migrate-from-aws-lambda](examples/13-migrate-from-aws-lambda) | Before/after migration of Lambda + Step Functions |
267
- | [14-testing](examples/14-testing) | Unit-testing handlers and workflows with pytest |
268
- | [15-ci-cd-deploy](examples/15-ci-cd-deploy) | GitHub Actions deploys per stage |
258
+ | [01-hello-http](https://github.com/ak9347128658/serverless_kit/tree/main/examples/01-hello-http) | Minimal HTTP function |
259
+ | [02-rest-api](https://github.com/ak9347128658/serverless_kit/tree/main/examples/02-rest-api) | CRUD, path params, validation errors, CORS, cookies, binary, JWT |
260
+ | [03-scheduled-jobs](https://github.com/ak9347128658/serverless_kit/tree/main/examples/03-scheduled-jobs) | rate/cron schedules with input and time zones |
261
+ | [04-queue-worker](https://github.com/ak9347128658/serverless_kit/tree/main/examples/04-queue-worker) | Queue consumer, partial batch failures, dead-letter queue |
262
+ | [05-storage-events](https://github.com/ak9347128658/serverless_kit/tree/main/examples/05-storage-events) | Object created/deleted with filters |
263
+ | [06-pubsub-topic](https://github.com/ak9347128658/serverless_kit/tree/main/examples/06-pubsub-topic) | Topic fan-out and filters |
264
+ | [07-workflow-orders](https://github.com/ak9347128658/serverless_kit/tree/main/examples/07-workflow-orders) | Every workflow state type, retry/catch |
265
+ | [08-multi-cloud](https://github.com/ak9347128658/serverless_kit/tree/main/examples/08-multi-cloud) | Same code, all 10 providers |
266
+ | [09-function-invoke](https://github.com/ak9347128658/serverless_kit/tree/main/examples/09-function-invoke) | Function-to-function `invoke()` |
267
+ | [10-stages-and-config](https://github.com/ak9347128658/serverless_kit/tree/main/examples/10-stages-and-config) | Stages, variables, secrets |
268
+ | [11-custom-terraform](https://github.com/ak9347128658/serverless_kit/tree/main/examples/11-custom-terraform) | `terraform.extra`, `${tf:...}`, remote state, hooks |
269
+ | [12-async-and-context](https://github.com/ak9347128658/serverless_kit/tree/main/examples/12-async-and-context) | async handlers, logging, deadlines |
270
+ | [13-migrate-from-aws-lambda](https://github.com/ak9347128658/serverless_kit/tree/main/examples/13-migrate-from-aws-lambda) | Before/after migration of Lambda + Step Functions |
271
+ | [14-testing](https://github.com/ak9347128658/serverless_kit/tree/main/examples/14-testing) | Unit-testing handlers and workflows with pytest |
272
+ | [15-ci-cd-deploy](https://github.com/ak9347128658/serverless_kit/tree/main/examples/15-ci-cd-deploy) | GitHub Actions deploys per stage |
269
273
 
270
274
  ## Documentation
271
275
 
272
276
  | | |
273
277
  |---|---|
274
- | [Getting started](docs/getting-started.md) | Install, credentials, first deploy |
275
- | [Configuration reference](docs/configuration.md) | Every `pskit.yml` key, variables, `extends`, stages |
276
- | [Events](docs/events.md) | HTTP, schedule, queue, storage, topic, with a per-provider matrix |
277
- | [Handler API](docs/handlers.md) | `Event`, `Context`, `Response`, errors, `BatchResult`, `invoke()` |
278
- | [Workflows](docs/workflows.md) | State machine reference, engines, limitations |
279
- | [Providers](docs/providers.md) | Options, credentials, resources and limits per cloud |
280
- | [CLI](docs/cli.md) | Every command and flag |
281
- | [Local development](docs/local-development.md) | `pskit dev`, `invoke`, testing |
282
- | [Dashboard](docs/dashboard.md) | The deployment UI |
283
- | [Architecture](docs/architecture.md) | Internals and third-party providers |
284
- | [Migrating from AWS](docs/migrating-from-aws.md) | Lambda + Step Functions → pskit |
285
- | [Troubleshooting](docs/troubleshooting.md) | Common errors and fixes |
278
+ | [Getting started](https://github.com/ak9347128658/serverless_kit/blob/main/docs/getting-started.md) | Install, credentials, first deploy |
279
+ | [Configuration reference](https://github.com/ak9347128658/serverless_kit/blob/main/docs/configuration.md) | Every `pskit.yml` key, variables, `extends`, stages |
280
+ | [Events](https://github.com/ak9347128658/serverless_kit/blob/main/docs/events.md) | HTTP, schedule, queue, storage, topic, with a per-provider matrix |
281
+ | [Handler API](https://github.com/ak9347128658/serverless_kit/blob/main/docs/handlers.md) | `Event`, `Context`, `Response`, errors, `BatchResult`, `invoke()` |
282
+ | [Workflows](https://github.com/ak9347128658/serverless_kit/blob/main/docs/workflows.md) | State machine reference, engines, limitations |
283
+ | [Providers](https://github.com/ak9347128658/serverless_kit/blob/main/docs/providers.md) | Options, credentials, resources and limits per cloud |
284
+ | [CLI](https://github.com/ak9347128658/serverless_kit/blob/main/docs/cli.md) | Every command and flag |
285
+ | [Local development](https://github.com/ak9347128658/serverless_kit/blob/main/docs/local-development.md) | `pskit dev`, `invoke`, testing |
286
+ | [Dashboard](https://github.com/ak9347128658/serverless_kit/blob/main/docs/dashboard.md) | The deployment UI |
287
+ | [Architecture](https://github.com/ak9347128658/serverless_kit/blob/main/docs/architecture.md) | Internals and third-party providers |
288
+ | [Migrating from AWS](https://github.com/ak9347128658/serverless_kit/blob/main/docs/migrating-from-aws.md) | Lambda + Step Functions → pskit |
289
+ | [Troubleshooting](https://github.com/ak9347128658/serverless_kit/blob/main/docs/troubleshooting.md) | Common errors and fixes |
286
290
 
287
291
  ## Contributing & releasing
288
292
 
289
- - Contributor guide: [deploy_docs/CONTRIBUTING.md](deploy_docs/CONTRIBUTING.md)
290
- - Quick PyPI release guide: [deploy_docs/How_to_deploy.md](deploy_docs/How_to_deploy.md)
291
- - Publishing to PyPI (step by step): [deploy_docs/PUBLISHING_TO_PYPI.md](deploy_docs/PUBLISHING_TO_PYPI.md)
292
- - Security policy: [SECURITY.md](SECURITY.md)
293
+ - Contributor guide: [deploy_docs/CONTRIBUTING.md](https://github.com/ak9347128658/serverless_kit/blob/main/deploy_docs/CONTRIBUTING.md)
294
+ - Quick PyPI release guide: [deploy_docs/How_to_deploy.md](https://github.com/ak9347128658/serverless_kit/blob/main/deploy_docs/How_to_deploy.md)
295
+ - Publishing to PyPI (step by step): [deploy_docs/PUBLISHING_TO_PYPI.md](https://github.com/ak9347128658/serverless_kit/blob/main/deploy_docs/PUBLISHING_TO_PYPI.md)
296
+ - Security policy: [SECURITY.md](https://github.com/ak9347128658/serverless_kit/blob/main/SECURITY.md)
293
297
 
294
298
  ## Author
295
299
 
296
300
  Created and maintained by **Asif Khan @ [Kavion.ai](https://kavion.ai)**.
297
301
 
302
+ Source code, issues and releases: <https://github.com/ak9347128658/serverless_kit>
303
+
298
304
  ## License
299
305
 
300
- MIT, see [LICENSE](LICENSE).
306
+ MIT, see [LICENSE](https://github.com/ak9347128658/serverless_kit/blob/main/LICENSE).
@@ -1,5 +1,9 @@
1
1
  # py-serverless-kit
2
2
 
3
+ [![CI](https://github.com/ak9347128658/serverless_kit/actions/workflows/ci.yml/badge.svg)](https://github.com/ak9347128658/serverless_kit/actions/workflows/ci.yml)
4
+ [![PyPI](https://img.shields.io/pypi/v/py-serverless-kit.svg)](https://pypi.org/project/py-serverless-kit/)
5
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](https://github.com/ak9347128658/serverless_kit/blob/main/LICENSE)
6
+
3
7
  **Write your Python functions once. Deploy them to any of 10 clouds by changing one line of YAML.**
4
8
 
5
9
  `py-serverless-kit` (CLI: `pskit`) is a Serverless-Framework-style toolkit built on **Terraform**. Your handlers use one small, provider-neutral API (`Event`, `Context`, `Response`). A `pskit.yml` file says which cloud they run on and what triggers them: HTTP, schedules, queues, storage, topics. The same file can also define workflows in the style of Step Functions. `pskit deploy` generates Terraform for the chosen cloud, applies it, and builds an HTML dashboard of everything you deployed.
@@ -75,7 +79,7 @@ Teams that build on AWS Lambda and Step Functions end up with code full of API G
75
79
 
76
80
  Run `pskit providers` for the live matrix. If a config uses a trigger the target cloud can't support, **`pskit validate` fails with a clear message instead of deploying something half-working.**
77
81
 
78
- > **Maturity, honestly stated:** the Terraform generated for every provider is checked with `terraform validate` against the real provider plugins (in CI, too). The *stable* providers cover the most surface area. *beta* and *experimental* providers follow vendor docs for event payloads that `validate` can't check, so try them on a non-production account first. See [docs/providers.md](docs/providers.md) for each provider's details and limits.
82
+ > **Maturity, honestly stated:** the Terraform generated for every provider is checked with `terraform validate` against the real provider plugins (in CI, too). The *stable* providers cover the most surface area. *beta* and *experimental* providers follow vendor docs for event payloads that `validate` can't check, so try them on a non-production account first. See [docs/providers.md](https://github.com/ak9347128658/serverless_kit/blob/main/docs/providers.md) for each provider's details and limits.
79
83
 
80
84
  ## Install
81
85
 
@@ -83,7 +87,7 @@ Run `pskit providers` for the live matrix. If a config uses a trigger the target
83
87
  pip install py-serverless-kit
84
88
  ```
85
89
 
86
- You also need **Terraform ≥ 1.5** (or OpenTofu) on your `PATH`, plus credentials for your cloud. See [Getting started](docs/getting-started.md#cloud-credentials).
90
+ You also need **Terraform ≥ 1.5** (or OpenTofu) on your `PATH`, plus credentials for your cloud. See [Getting started](https://github.com/ak9347128658/serverless_kit/blob/main/docs/getting-started.md#cloud-credentials).
87
91
 
88
92
  ## Quick start
89
93
 
@@ -199,58 +203,60 @@ The same definition becomes **AWS Step Functions** on AWS, **Google Cloud Workfl
199
203
  your result ──► Response / raw value ──► adapter ──► native cloud response
200
204
  ```
201
205
 
202
- More: [docs/architecture.md](docs/architecture.md).
206
+ More: [docs/architecture.md](https://github.com/ak9347128658/serverless_kit/blob/main/docs/architecture.md).
203
207
 
204
208
  ## Examples
205
209
 
206
- Fifteen runnable scenarios live in [`examples/`](examples/). They are tested in CI.
210
+ Fifteen runnable scenarios live in [`examples/`](https://github.com/ak9347128658/serverless_kit/tree/main/examples/). They are tested in CI.
207
211
 
208
212
  | | |
209
213
  |---|---|
210
- | [01-hello-http](examples/01-hello-http) | Minimal HTTP function |
211
- | [02-rest-api](examples/02-rest-api) | CRUD, path params, validation errors, CORS, cookies, binary, JWT |
212
- | [03-scheduled-jobs](examples/03-scheduled-jobs) | rate/cron schedules with input and time zones |
213
- | [04-queue-worker](examples/04-queue-worker) | Queue consumer, partial batch failures, dead-letter queue |
214
- | [05-storage-events](examples/05-storage-events) | Object created/deleted with filters |
215
- | [06-pubsub-topic](examples/06-pubsub-topic) | Topic fan-out and filters |
216
- | [07-workflow-orders](examples/07-workflow-orders) | Every workflow state type, retry/catch |
217
- | [08-multi-cloud](examples/08-multi-cloud) | Same code, all 10 providers |
218
- | [09-function-invoke](examples/09-function-invoke) | Function-to-function `invoke()` |
219
- | [10-stages-and-config](examples/10-stages-and-config) | Stages, variables, secrets |
220
- | [11-custom-terraform](examples/11-custom-terraform) | `terraform.extra`, `${tf:...}`, remote state, hooks |
221
- | [12-async-and-context](examples/12-async-and-context) | async handlers, logging, deadlines |
222
- | [13-migrate-from-aws-lambda](examples/13-migrate-from-aws-lambda) | Before/after migration of Lambda + Step Functions |
223
- | [14-testing](examples/14-testing) | Unit-testing handlers and workflows with pytest |
224
- | [15-ci-cd-deploy](examples/15-ci-cd-deploy) | GitHub Actions deploys per stage |
214
+ | [01-hello-http](https://github.com/ak9347128658/serverless_kit/tree/main/examples/01-hello-http) | Minimal HTTP function |
215
+ | [02-rest-api](https://github.com/ak9347128658/serverless_kit/tree/main/examples/02-rest-api) | CRUD, path params, validation errors, CORS, cookies, binary, JWT |
216
+ | [03-scheduled-jobs](https://github.com/ak9347128658/serverless_kit/tree/main/examples/03-scheduled-jobs) | rate/cron schedules with input and time zones |
217
+ | [04-queue-worker](https://github.com/ak9347128658/serverless_kit/tree/main/examples/04-queue-worker) | Queue consumer, partial batch failures, dead-letter queue |
218
+ | [05-storage-events](https://github.com/ak9347128658/serverless_kit/tree/main/examples/05-storage-events) | Object created/deleted with filters |
219
+ | [06-pubsub-topic](https://github.com/ak9347128658/serverless_kit/tree/main/examples/06-pubsub-topic) | Topic fan-out and filters |
220
+ | [07-workflow-orders](https://github.com/ak9347128658/serverless_kit/tree/main/examples/07-workflow-orders) | Every workflow state type, retry/catch |
221
+ | [08-multi-cloud](https://github.com/ak9347128658/serverless_kit/tree/main/examples/08-multi-cloud) | Same code, all 10 providers |
222
+ | [09-function-invoke](https://github.com/ak9347128658/serverless_kit/tree/main/examples/09-function-invoke) | Function-to-function `invoke()` |
223
+ | [10-stages-and-config](https://github.com/ak9347128658/serverless_kit/tree/main/examples/10-stages-and-config) | Stages, variables, secrets |
224
+ | [11-custom-terraform](https://github.com/ak9347128658/serverless_kit/tree/main/examples/11-custom-terraform) | `terraform.extra`, `${tf:...}`, remote state, hooks |
225
+ | [12-async-and-context](https://github.com/ak9347128658/serverless_kit/tree/main/examples/12-async-and-context) | async handlers, logging, deadlines |
226
+ | [13-migrate-from-aws-lambda](https://github.com/ak9347128658/serverless_kit/tree/main/examples/13-migrate-from-aws-lambda) | Before/after migration of Lambda + Step Functions |
227
+ | [14-testing](https://github.com/ak9347128658/serverless_kit/tree/main/examples/14-testing) | Unit-testing handlers and workflows with pytest |
228
+ | [15-ci-cd-deploy](https://github.com/ak9347128658/serverless_kit/tree/main/examples/15-ci-cd-deploy) | GitHub Actions deploys per stage |
225
229
 
226
230
  ## Documentation
227
231
 
228
232
  | | |
229
233
  |---|---|
230
- | [Getting started](docs/getting-started.md) | Install, credentials, first deploy |
231
- | [Configuration reference](docs/configuration.md) | Every `pskit.yml` key, variables, `extends`, stages |
232
- | [Events](docs/events.md) | HTTP, schedule, queue, storage, topic, with a per-provider matrix |
233
- | [Handler API](docs/handlers.md) | `Event`, `Context`, `Response`, errors, `BatchResult`, `invoke()` |
234
- | [Workflows](docs/workflows.md) | State machine reference, engines, limitations |
235
- | [Providers](docs/providers.md) | Options, credentials, resources and limits per cloud |
236
- | [CLI](docs/cli.md) | Every command and flag |
237
- | [Local development](docs/local-development.md) | `pskit dev`, `invoke`, testing |
238
- | [Dashboard](docs/dashboard.md) | The deployment UI |
239
- | [Architecture](docs/architecture.md) | Internals and third-party providers |
240
- | [Migrating from AWS](docs/migrating-from-aws.md) | Lambda + Step Functions → pskit |
241
- | [Troubleshooting](docs/troubleshooting.md) | Common errors and fixes |
234
+ | [Getting started](https://github.com/ak9347128658/serverless_kit/blob/main/docs/getting-started.md) | Install, credentials, first deploy |
235
+ | [Configuration reference](https://github.com/ak9347128658/serverless_kit/blob/main/docs/configuration.md) | Every `pskit.yml` key, variables, `extends`, stages |
236
+ | [Events](https://github.com/ak9347128658/serverless_kit/blob/main/docs/events.md) | HTTP, schedule, queue, storage, topic, with a per-provider matrix |
237
+ | [Handler API](https://github.com/ak9347128658/serverless_kit/blob/main/docs/handlers.md) | `Event`, `Context`, `Response`, errors, `BatchResult`, `invoke()` |
238
+ | [Workflows](https://github.com/ak9347128658/serverless_kit/blob/main/docs/workflows.md) | State machine reference, engines, limitations |
239
+ | [Providers](https://github.com/ak9347128658/serverless_kit/blob/main/docs/providers.md) | Options, credentials, resources and limits per cloud |
240
+ | [CLI](https://github.com/ak9347128658/serverless_kit/blob/main/docs/cli.md) | Every command and flag |
241
+ | [Local development](https://github.com/ak9347128658/serverless_kit/blob/main/docs/local-development.md) | `pskit dev`, `invoke`, testing |
242
+ | [Dashboard](https://github.com/ak9347128658/serverless_kit/blob/main/docs/dashboard.md) | The deployment UI |
243
+ | [Architecture](https://github.com/ak9347128658/serverless_kit/blob/main/docs/architecture.md) | Internals and third-party providers |
244
+ | [Migrating from AWS](https://github.com/ak9347128658/serverless_kit/blob/main/docs/migrating-from-aws.md) | Lambda + Step Functions → pskit |
245
+ | [Troubleshooting](https://github.com/ak9347128658/serverless_kit/blob/main/docs/troubleshooting.md) | Common errors and fixes |
242
246
 
243
247
  ## Contributing & releasing
244
248
 
245
- - Contributor guide: [deploy_docs/CONTRIBUTING.md](deploy_docs/CONTRIBUTING.md)
246
- - Quick PyPI release guide: [deploy_docs/How_to_deploy.md](deploy_docs/How_to_deploy.md)
247
- - Publishing to PyPI (step by step): [deploy_docs/PUBLISHING_TO_PYPI.md](deploy_docs/PUBLISHING_TO_PYPI.md)
248
- - Security policy: [SECURITY.md](SECURITY.md)
249
+ - Contributor guide: [deploy_docs/CONTRIBUTING.md](https://github.com/ak9347128658/serverless_kit/blob/main/deploy_docs/CONTRIBUTING.md)
250
+ - Quick PyPI release guide: [deploy_docs/How_to_deploy.md](https://github.com/ak9347128658/serverless_kit/blob/main/deploy_docs/How_to_deploy.md)
251
+ - Publishing to PyPI (step by step): [deploy_docs/PUBLISHING_TO_PYPI.md](https://github.com/ak9347128658/serverless_kit/blob/main/deploy_docs/PUBLISHING_TO_PYPI.md)
252
+ - Security policy: [SECURITY.md](https://github.com/ak9347128658/serverless_kit/blob/main/SECURITY.md)
249
253
 
250
254
  ## Author
251
255
 
252
256
  Created and maintained by **Asif Khan @ [Kavion.ai](https://kavion.ai)**.
253
257
 
258
+ Source code, issues and releases: <https://github.com/ak9347128658/serverless_kit>
259
+
254
260
  ## License
255
261
 
256
- MIT, see [LICENSE](LICENSE).
262
+ MIT, see [LICENSE](https://github.com/ak9347128658/serverless_kit/blob/main/LICENSE).