py-serverless-kit 0.1.0__py3-none-any.whl

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 (71) hide show
  1. py_serverless_kit/__init__.py +47 -0
  2. py_serverless_kit/__main__.py +3 -0
  3. py_serverless_kit/_version.py +2 -0
  4. py_serverless_kit/cli/__init__.py +0 -0
  5. py_serverless_kit/cli/main.py +491 -0
  6. py_serverless_kit/cli/templates.py +212 -0
  7. py_serverless_kit/config/__init__.py +12 -0
  8. py_serverless_kit/config/loader.py +316 -0
  9. py_serverless_kit/config/schema.py +457 -0
  10. py_serverless_kit/core/__init__.py +0 -0
  11. py_serverless_kit/core/deployer.py +180 -0
  12. py_serverless_kit/core/describe.py +112 -0
  13. py_serverless_kit/core/project.py +147 -0
  14. py_serverless_kit/dashboard/__init__.py +3 -0
  15. py_serverless_kit/dashboard/generator.py +65 -0
  16. py_serverless_kit/dashboard/template.html +248 -0
  17. py_serverless_kit/local/__init__.py +3 -0
  18. py_serverless_kit/local/runner.py +234 -0
  19. py_serverless_kit/local/server.py +200 -0
  20. py_serverless_kit/packaging/__init__.py +3 -0
  21. py_serverless_kit/packaging/builder.py +252 -0
  22. py_serverless_kit/providers/__init__.py +15 -0
  23. py_serverless_kit/providers/alibaba.py +268 -0
  24. py_serverless_kit/providers/aws.py +508 -0
  25. py_serverless_kit/providers/azure.py +417 -0
  26. py_serverless_kit/providers/base.py +310 -0
  27. py_serverless_kit/providers/cloudflare.py +264 -0
  28. py_serverless_kit/providers/digitalocean.py +211 -0
  29. py_serverless_kit/providers/gcp.py +480 -0
  30. py_serverless_kit/providers/huawei.py +292 -0
  31. py_serverless_kit/providers/ibm.py +132 -0
  32. py_serverless_kit/providers/oracle.py +304 -0
  33. py_serverless_kit/providers/registry.py +60 -0
  34. py_serverless_kit/providers/schedule.py +153 -0
  35. py_serverless_kit/providers/tencent.py +275 -0
  36. py_serverless_kit/providers/terraform_doc.py +125 -0
  37. py_serverless_kit/runtime/__init__.py +6 -0
  38. py_serverless_kit/runtime/adapters/__init__.py +18 -0
  39. py_serverless_kit/runtime/adapters/_httpfn.py +91 -0
  40. py_serverless_kit/runtime/adapters/alibaba.py +147 -0
  41. py_serverless_kit/runtime/adapters/aws.py +201 -0
  42. py_serverless_kit/runtime/adapters/azure.py +185 -0
  43. py_serverless_kit/runtime/adapters/base.py +86 -0
  44. py_serverless_kit/runtime/adapters/cloudflare.py +126 -0
  45. py_serverless_kit/runtime/adapters/digitalocean.py +74 -0
  46. py_serverless_kit/runtime/adapters/gcp.py +176 -0
  47. py_serverless_kit/runtime/adapters/huawei.py +173 -0
  48. py_serverless_kit/runtime/adapters/ibm.py +91 -0
  49. py_serverless_kit/runtime/adapters/oracle.py +161 -0
  50. py_serverless_kit/runtime/adapters/tencent.py +151 -0
  51. py_serverless_kit/runtime/batch.py +47 -0
  52. py_serverless_kit/runtime/context.py +45 -0
  53. py_serverless_kit/runtime/dispatch.py +277 -0
  54. py_serverless_kit/runtime/errors.py +83 -0
  55. py_serverless_kit/runtime/event.py +267 -0
  56. py_serverless_kit/runtime/invoke.py +119 -0
  57. py_serverless_kit/runtime/log.py +69 -0
  58. py_serverless_kit/runtime/manifest.py +121 -0
  59. py_serverless_kit/runtime/response.py +177 -0
  60. py_serverless_kit/runtime/routing.py +74 -0
  61. py_serverless_kit/runtime/workflow.py +312 -0
  62. py_serverless_kit/terraform/__init__.py +3 -0
  63. py_serverless_kit/terraform/runner.py +104 -0
  64. py_serverless_kit/workflows/__init__.py +35 -0
  65. py_serverless_kit/workflows/asl.py +170 -0
  66. py_serverless_kit/workflows/gcp.py +328 -0
  67. py_serverless_kit-0.1.0.dist-info/METADATA +300 -0
  68. py_serverless_kit-0.1.0.dist-info/RECORD +71 -0
  69. py_serverless_kit-0.1.0.dist-info/WHEEL +4 -0
  70. py_serverless_kit-0.1.0.dist-info/entry_points.txt +3 -0
  71. py_serverless_kit-0.1.0.dist-info/licenses/LICENSE +21 -0
@@ -0,0 +1,300 @@
1
+ Metadata-Version: 2.5
2
+ Name: py-serverless-kit
3
+ Version: 0.1.0
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
9
+ Author: Asif Khan @ Kavion.ai
10
+ Maintainer: Asif Khan @ Kavion.ai
11
+ License: MIT
12
+ License-File: LICENSE
13
+ Keywords: aws,azure,faas,gcp,lambda,multi-cloud,serverless,step-functions,terraform
14
+ Classifier: Development Status :: 4 - Beta
15
+ Classifier: Environment :: Console
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Operating System :: OS Independent
19
+ Classifier: Programming Language :: Python :: 3
20
+ Classifier: Programming Language :: Python :: 3 :: Only
21
+ Classifier: Programming Language :: Python :: 3.9
22
+ Classifier: Programming Language :: Python :: 3.10
23
+ Classifier: Programming Language :: Python :: 3.11
24
+ Classifier: Programming Language :: Python :: 3.12
25
+ Classifier: Programming Language :: Python :: 3.13
26
+ Classifier: Topic :: Software Development :: Build Tools
27
+ Classifier: Topic :: System :: Distributed Computing
28
+ Classifier: Typing :: Typed
29
+ Requires-Python: >=3.9
30
+ Requires-Dist: click>=8.1
31
+ Requires-Dist: pydantic<3,>=2.5
32
+ Requires-Dist: pyyaml>=6.0
33
+ Provides-Extra: aws
34
+ Requires-Dist: boto3>=1.28; extra == 'aws'
35
+ Provides-Extra: dev
36
+ Requires-Dist: build>=1.0; extra == 'dev'
37
+ Requires-Dist: mypy>=1.8; extra == 'dev'
38
+ Requires-Dist: pytest-cov>=4.1; extra == 'dev'
39
+ Requires-Dist: pytest>=7.4; extra == 'dev'
40
+ Requires-Dist: ruff>=0.5; extra == 'dev'
41
+ Requires-Dist: twine>=5.0; extra == 'dev'
42
+ Requires-Dist: types-pyyaml; extra == 'dev'
43
+ Description-Content-Type: text/markdown
44
+
45
+ # py-serverless-kit
46
+
47
+ **Write your Python functions once. Deploy them to any of 10 clouds by changing one line of YAML.**
48
+
49
+ `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.
50
+
51
+ ```python
52
+ # app/handlers.py - identical on AWS, Azure, GCP, Alibaba, Oracle, IBM, DigitalOcean, Tencent, Huawei, Cloudflare
53
+ from py_serverless_kit import Event, Context, NotFound
54
+
55
+ def get_order(event: Event, ctx: Context):
56
+ order = ORDERS.get(event.http.path_params["id"])
57
+ if order is None:
58
+ raise NotFound("no such order") # -> HTTP 404 JSON on every cloud
59
+ return order # -> HTTP 200 JSON
60
+ ```
61
+
62
+ ```yaml
63
+ # pskit.yml
64
+ service: orders
65
+ provider:
66
+ name: aws # <- change to gcp, azure, alibaba, ... and redeploy. That's the migration.
67
+ region: us-east-1
68
+ functions:
69
+ get-order:
70
+ handler: app.handlers.get_order
71
+ events:
72
+ - http: GET /orders/{id}
73
+ ```
74
+
75
+ ```bash
76
+ pskit deploy # terraform apply on AWS
77
+ pskit deploy --provider gcp # same code, Google Cloud Functions
78
+ pskit dashboard --open # every function, trigger, URL and resource id
79
+ ```
80
+
81
+ ---
82
+
83
+ ## Why
84
+
85
+ Teams that build on AWS Lambda and Step Functions end up with code full of API Gateway event parsing, SQS record loops and hand-written ASL. When the business needs another cloud, every function has to be rewritten. `py-serverless-kit` fixes this at both layers:
86
+
87
+ | Layer | Locked-in way | With pskit |
88
+ |---|---|---|
89
+ | Handler code | Parses `event["requestContext"]["http"]["method"]`, `Records[].body`, ... | Uses `event.http.method`, `event.records[].body`: the same on every cloud |
90
+ | Triggers / infra | SAM / CloudFormation / console clicks | One `pskit.yml`, rendered to Terraform for the target cloud |
91
+ | Workflows | Step Functions ASL | Portable state machine, compiled to Step Functions, Google Cloud Workflows, or run by the built-in engine everywhere else |
92
+ | Visibility | One console per cloud | One generated dashboard across all clouds and stages |
93
+
94
+ ## Features
95
+
96
+ - **10 providers:** AWS Lambda, Azure Functions, Google Cloud Functions (gen2), Alibaba Function Compute, Oracle Functions, IBM Code Engine, DigitalOcean Functions, Tencent SCF, Huawei FunctionGraph, Cloudflare Workers.
97
+ - **Triggers:** HTTP (path params, CORS, auth), schedules (rate/cron, translated into each cloud's cron dialect), queues, object storage, pub/sub topics, and direct function-to-function `invoke()`.
98
+ - **Workflows:** task / choice / wait / pass / parallel / map / succeed / fail with retry and catch. Native on AWS and GCP; an embedded engine on the other clouds; runnable locally with `pskit workflow run`.
99
+ - **Terraform underneath:** real, reviewable `main.tf.json`, any backend (S3, GCS, azurerm, ...), works with OpenTofu. Escape hatches: `terraform.extra`, `${tf:...}` references, per-function `options`.
100
+ - **Config that scales:** `extends:`, per-provider `providers:` blocks, per-stage `stages:` blocks, and `${env:}`, `${opt:}`, `${self:}`, `${file()}` variables.
101
+ - **Local dev:** `pskit dev` (hot-reloading HTTP server), `pskit invoke` with synthetic queue/storage/schedule events, and a `LocalRunner` for pytest.
102
+ - **Dashboard:** a self-contained `index.html` listing every deployment, function, trigger, endpoint, ARN/id, console link and workflow.
103
+ - **Production details:** deterministic artifacts (no redeploy when nothing changed), partial batch failures (`BatchResult`), structured JSON logs, consistent HTTP error mapping, stack traces hidden from clients, a stdlib-only runtime (no extra dependencies inside your function), and hooks (`before_deploy`, ...).
104
+
105
+ ## Supported providers
106
+
107
+ | Provider | Tier | HTTP | Schedule | Queue | Storage | Topic | Workflows |
108
+ |---|---|:-:|:-:|:-:|:-:|:-:|---|
109
+ | AWS Lambda | stable | ✅ | ✅ | ✅ SQS | ✅ S3 | ✅ SNS | native (Step Functions) |
110
+ | Google Cloud Functions | stable | ✅ | ✅ | ✅ Pub/Sub | ✅ GCS | ✅ Pub/Sub | native (Cloud Workflows) |
111
+ | Azure Functions | stable | ✅ | ✅ | ✅ Storage Queue | ✅ Blob | ✅ Service Bus | embedded |
112
+ | Alibaba Function Compute | beta | ✅ | ✅ | – | ✅ OSS | ✅ MNS | embedded |
113
+ | Huawei FunctionGraph | beta | ✅ | ✅ | – | ✅ OBS | ✅ SMN | embedded |
114
+ | Tencent SCF | beta | ✅ | ✅ | – | ✅ COS | – | embedded |
115
+ | DigitalOcean Functions | beta | ✅ | ✅ | – | – | – | embedded |
116
+ | IBM Code Engine | beta | ✅ | – | – | – | – | embedded |
117
+ | Oracle Cloud Functions | experimental | ✅ | – | – | ✅ | – | embedded |
118
+ | Cloudflare Workers (Python) | experimental | ✅ | ✅ | – | – | – | embedded |
119
+
120
+ 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
+
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.
123
+
124
+ ## Install
125
+
126
+ ```bash
127
+ pip install py-serverless-kit
128
+ ```
129
+
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).
131
+
132
+ ## Quick start
133
+
134
+ ```bash
135
+ pskit init my-api --provider aws --template full # templates: http | events | workflow | full
136
+ cd my-api
137
+ pskit dev # http://127.0.0.1:3000/hello
138
+ pskit invoke -f hello --path "/hello?name=Ada"
139
+ pskit workflow run order-pipeline -i '{"amount": 42}'
140
+ pskit deploy --stage dev
141
+ pskit info
142
+ pskit dashboard --open
143
+ pskit remove --stage dev
144
+ ```
145
+
146
+ ### Move to another cloud
147
+
148
+ Change `provider.name`, or keep one file with per-cloud blocks:
149
+
150
+ ```yaml
151
+ provider:
152
+ name: aws
153
+ region: us-east-1
154
+ providers: # applied only when that provider is selected
155
+ gcp: {region: europe-west1, options: {project: my-project}}
156
+ azure: {region: westeurope, options: {subscription_id: "${env:ARM_SUBSCRIPTION_ID}"}}
157
+ ```
158
+
159
+ ```bash
160
+ pskit deploy --provider gcp
161
+ pskit deploy --provider azure --stage prod
162
+ ```
163
+
164
+ ### Triggers at a glance
165
+
166
+ ```yaml
167
+ functions:
168
+ api:
169
+ handler: app.api.handle
170
+ events:
171
+ - http: {method: POST, path: /orders, cors: true}
172
+ - http: GET /orders/{id}
173
+ nightly:
174
+ handler: app.jobs.nightly
175
+ events:
176
+ - schedule: {cron: "0 2 * * *", input: {report: daily}, timezone: Europe/Berlin}
177
+ worker:
178
+ handler: app.jobs.process
179
+ timeout: 60
180
+ events:
181
+ - queue: {name: orders, batch_size: 10, dead_letter: orders-dlq}
182
+ thumbnails:
183
+ handler: app.media.on_upload
184
+ events:
185
+ - storage: {bucket: my-uploads-bucket, events: [created], suffix: .jpg}
186
+ audit:
187
+ handler: app.audit.on_event
188
+ events:
189
+ - topic: order-events
190
+ ```
191
+
192
+ ```python
193
+ from py_serverless_kit import BatchResult, Event, Context
194
+
195
+ def process(event: Event, ctx: Context):
196
+ result = BatchResult() # retry only failed messages where the cloud supports it
197
+ for record in event.records:
198
+ try:
199
+ handle(record.json())
200
+ except Exception:
201
+ result.fail(record)
202
+ return result
203
+ ```
204
+
205
+ ### Workflows (portable Step Functions)
206
+
207
+ ```yaml
208
+ workflows:
209
+ order-pipeline:
210
+ start_at: Validate
211
+ states:
212
+ Validate:
213
+ type: task
214
+ function: validate-order
215
+ retry: [{errors: [TimeoutError], max_attempts: 3, backoff_rate: 2}]
216
+ catch: [{errors: [ValueError], next: Rejected}]
217
+ next: Route
218
+ Route:
219
+ type: choice
220
+ choices: [{variable: "$.amount", gt: 1000, next: ManualReview}]
221
+ default: Charge
222
+ ManualReview: {type: wait, seconds: 3600, next: Charge}
223
+ Charge: {type: task, function: charge-order, end: true}
224
+ Rejected: {type: fail, error: OrderRejected}
225
+ ```
226
+
227
+ The same definition becomes **AWS Step Functions** on AWS, **Google Cloud Workflows** on GCP, and an **embedded orchestrator function** on the other clouds. `pskit workflow show order-pipeline --format asl` prints the generated ASL.
228
+
229
+ ## How it works
230
+
231
+ ```
232
+ pskit.yml ──► config loader ──► provider validation ──► packager ──────────► artifact.zip
233
+ (extends, providers:, (capabilities, (your code + stdlib-only
234
+ stages:, ${vars}) limits, runtimes) runtime + manifest + shim)
235
+ │
236
+ ▼
237
+ provider renderer ──► .pskit/<provider>-<stage>/main.tf.json
238
+ │ terraform init / apply
239
+ ▼
240
+ deployment.json ──► dashboard/index.html
241
+
242
+ At runtime: cloud event ──► shim ──► runtime.adapters.<cloud> ──► Event ──► your handler
243
+ your result ──► Response / raw value ──► adapter ──► native cloud response
244
+ ```
245
+
246
+ More: [docs/architecture.md](docs/architecture.md).
247
+
248
+ ## Examples
249
+
250
+ Fifteen runnable scenarios live in [`examples/`](examples/). They are tested in CI.
251
+
252
+ | | |
253
+ |---|---|
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 |
269
+
270
+ ## Documentation
271
+
272
+ | | |
273
+ |---|---|
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 |
286
+
287
+ ## Contributing & releasing
288
+
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
+
294
+ ## Author
295
+
296
+ Created and maintained by **Asif Khan @ [Kavion.ai](https://kavion.ai)**.
297
+
298
+ ## License
299
+
300
+ MIT, see [LICENSE](LICENSE).
@@ -0,0 +1,71 @@
1
+ py_serverless_kit/__init__.py,sha256=Lc2v9E64SOic8bnbTXBW5a4_k5lHNiszewJRM_Ga0Zk,1199
2
+ py_serverless_kit/__main__.py,sha256=3MIhUB-AkMyd_bVfNAdzV9zd_X81dbyXPOfucvwhJ20,35
3
+ py_serverless_kit/_version.py,sha256=-ran-EJeM12RxR5V_X3q7UidaDbHeaUfcmeKnKo7NGw,59
4
+ py_serverless_kit/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
+ py_serverless_kit/cli/main.py,sha256=VOpi-3Th6OdscG7t2ri3wwnzQrGCDAXZeRwqtjiSYlA,20142
6
+ py_serverless_kit/cli/templates.py,sha256=O145ZjFS_DaQAU8vZhtPmjSEsmVWFrhn8SNXTC-Z4RA,5842
7
+ py_serverless_kit/config/__init__.py,sha256=iYl3gFvYIB0N9j5VmIrnA3L_OcVi-kbRewDFmgbdQ5k,291
8
+ py_serverless_kit/config/loader.py,sha256=PvecFZpLq4H_6PzUs5CLZaUCECVGj_Ge9MXW4030MHk,12040
9
+ py_serverless_kit/config/schema.py,sha256=49VlbCOOeuAe5wLwsDwBhYihQZlwzcNvPRfEcUyY0Sg,17467
10
+ py_serverless_kit/core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
+ py_serverless_kit/core/deployer.py,sha256=_pfbS-H7Eh-VbJtJyZ8LUtTRyVqE_VMcyatxhp_8Nzc,6950
12
+ py_serverless_kit/core/describe.py,sha256=iU4NxKCC8ph8k_KRMhGnpbYpDVDd46tlUOFrjOEoFWw,4400
13
+ py_serverless_kit/core/project.py,sha256=3UESb8_ZJVQesqSqNjpUozSuQ4NDTbaaIkKX_7k2CLE,6135
14
+ py_serverless_kit/dashboard/__init__.py,sha256=U3vfHz9qRDhO9vVMaJTcfHohWCWWFXgURNgJU69US8Q,164
15
+ py_serverless_kit/dashboard/generator.py,sha256=T_lX-PtvYRMN9GRuF8fwioIwu7Z4jP1kqjNCwwiUkcA,2556
16
+ py_serverless_kit/dashboard/template.html,sha256=IKubc_Yxum5yieX3D74lVnECc11fUpAHS_xMp37uoI0,14788
17
+ py_serverless_kit/local/__init__.py,sha256=EGmRyTqbe3LSZXOqY1XiCQsBNRKclDV7W6oFVEmjwlg,139
18
+ py_serverless_kit/local/runner.py,sha256=sevTMXtW4OrJlFFFcwzlUvZvj0l2DT1-inda1XgiFQI,9345
19
+ py_serverless_kit/local/server.py,sha256=BZ2Vub1khatbXJWsc0rRBXFo8_2h4pA5C13Pq7h4zfA,8947
20
+ py_serverless_kit/packaging/__init__.py,sha256=Xuk0SK_dQxsp4FJO_d7n1Gdsh7by5me1xdaimKzfvUU,128
21
+ py_serverless_kit/packaging/builder.py,sha256=qPULdYQzzXiDZ8P59cWYTNGdyHSaLluHiBfkgoVL-fk,8705
22
+ py_serverless_kit/providers/__init__.py,sha256=68S17yBbM7iXvHf42mS-yzIlD-jPPZQtXK3YjFVZztM,355
23
+ py_serverless_kit/providers/alibaba.py,sha256=XvJg0DdIl3WEo4xBQh_XSEQmFKTB7dRh78cEbsY4mSg,11689
24
+ py_serverless_kit/providers/aws.py,sha256=uBM1Yhv5QHr9PoTUemkbghCpRr2R_qEiYtumgSJvlh4,22852
25
+ py_serverless_kit/providers/azure.py,sha256=ZFWh5QhlcEd1CntjY7_EpGhptS83gQQjLhEWS_FvfA0,20075
26
+ py_serverless_kit/providers/base.py,sha256=Wrm1YHziNSRYpoS6bLgYcJqMVdTtA0DM0iwJBDwTmWI,11862
27
+ py_serverless_kit/providers/cloudflare.py,sha256=7yFDhw0TPYORHiW2b1zOtW1C8YMpTiLdXq6ldARbcwg,11032
28
+ py_serverless_kit/providers/digitalocean.py,sha256=Nj6mktijYfYih-7cMoDcf29nOg72WCfqPcqaQ1dHBuI,8777
29
+ py_serverless_kit/providers/gcp.py,sha256=82rKRHMkQ9wXI30fgGoqU-X7TXHvONSRzdrND7bHhcQ,21281
30
+ py_serverless_kit/providers/huawei.py,sha256=PNNvhT3PlmpiYsgiU2tXOv5X0wtmRyErXg_LwUzWChU,12616
31
+ py_serverless_kit/providers/ibm.py,sha256=wh7HRWPJkaAng_AVr49_zv28Nwg8pv2RkkPCa3qhvGA,5813
32
+ py_serverless_kit/providers/oracle.py,sha256=kgl_C2r0gci2Ya9eypvnivI5-hzVjDBJ4KC8UeFThFc,13577
33
+ py_serverless_kit/providers/registry.py,sha256=O5DdPn2oAukBQfnERnbsqzzOTKrV6UdKQjr4rWd6_Ho,2202
34
+ py_serverless_kit/providers/schedule.py,sha256=Y-30z9aFg5arb5kv_Fhm4OKNAE8lUAcV7WXhjuQo2V0,5030
35
+ py_serverless_kit/providers/tencent.py,sha256=axC3WUz9mPmA48obSxrJhE-TudNof69vLEmd6IILmdE,11918
36
+ py_serverless_kit/providers/terraform_doc.py,sha256=z79ggz9XOln5d-qiNk77_XqX5gC41dFXwlbtkKHP4RI,4732
37
+ py_serverless_kit/runtime/__init__.py,sha256=bJk26VXGDwIy9pTmdxWvFpay6CCIiz9tqe1LJt61afM,265
38
+ py_serverless_kit/runtime/batch.py,sha256=_gTHwc7CDuNpz0bxGSMJizCIbpWmXf16Ybwxi6d7LPM,1428
39
+ py_serverless_kit/runtime/context.py,sha256=2vroIt1cdLt85VLR7SJEGlqawyQQYF7vRhiNCyafrZM,1582
40
+ py_serverless_kit/runtime/dispatch.py,sha256=wesn_-MgNTXjb9csKuNlRhKJJSxOklp9uJvgAjUDATg,11169
41
+ py_serverless_kit/runtime/errors.py,sha256=CG2oSkQRsRLdhkJeD1RjkJeevt4TY_Bq_wQykT0XUFw,1951
42
+ py_serverless_kit/runtime/event.py,sha256=Fza-ARJ-rVYJuiwQYTcTQ4gNjl2ETdAZCxbpXMz_KXk,8690
43
+ py_serverless_kit/runtime/invoke.py,sha256=gGGYryAz_DLluB0mD9_nda3c4jgPn_rw_tkTAeQI9G0,5057
44
+ py_serverless_kit/runtime/log.py,sha256=YcpevZBTeSYtoe1x9f8N_YlMRnKbZuhgn5yUn9DjeXQ,2610
45
+ py_serverless_kit/runtime/manifest.py,sha256=ZEYqytO1eay2kOFfdl1lgLGDqLnMteMJm6ZdzO_aG04,4126
46
+ py_serverless_kit/runtime/response.py,sha256=uybQq5Bdfxndx3iI0yd6uaVcC9Xjg9Lx50k8wrTX61U,6582
47
+ py_serverless_kit/runtime/routing.py,sha256=325FzIaUL12izr03BaSc2Pb9gSS-UThFNFhARwerkzc,2695
48
+ py_serverless_kit/runtime/workflow.py,sha256=eFgfaFxiAWcByeUBgCQeakdYWZPAnJC0agdqZaZCO5g,12515
49
+ py_serverless_kit/runtime/adapters/__init__.py,sha256=ucpqTcbdTVa0RgXZPHmTui1cHKtoc5Q9-zOLZzJOwAI,382
50
+ py_serverless_kit/runtime/adapters/_httpfn.py,sha256=1V6_JihKm45kPiK58c2mfVxfHETMbvGo1F_SoTho0zs,3558
51
+ py_serverless_kit/runtime/adapters/alibaba.py,sha256=ronsIwovHil-6BZZoObvSDXp58hueqRxuIYq4R1mMt4,5776
52
+ py_serverless_kit/runtime/adapters/aws.py,sha256=aCBL2238LRKy9W2KMWl_1x5Mku5FAhq1JCDjOaMPeoI,8054
53
+ py_serverless_kit/runtime/adapters/azure.py,sha256=klj_qjTSvewoZ963KsmeTAqg-LpXrpqnFkfB5Ll4dTU,6692
54
+ py_serverless_kit/runtime/adapters/base.py,sha256=AeTBnMw6IvsofYSycASlSOUgaZasZn6Xp_0VfBW61jk,2565
55
+ py_serverless_kit/runtime/adapters/cloudflare.py,sha256=pWKzZE-MoozdkMM3CwhEKfSYuxmaUntG6ik-5_ivrbc,4366
56
+ py_serverless_kit/runtime/adapters/digitalocean.py,sha256=NZ7wxguyWV-OA30k9NkxUjjBY67CaZFbZzLepgQSx-s,3006
57
+ py_serverless_kit/runtime/adapters/gcp.py,sha256=32tD85hZ8jd2ztnvu0-GLJwH4KgmaOoP7sQ2wG-hLug,7101
58
+ py_serverless_kit/runtime/adapters/huawei.py,sha256=LdLnD_Z65ZOJVYnsPZQq6azxBTF738SP-kbhvYIvINE,6437
59
+ py_serverless_kit/runtime/adapters/ibm.py,sha256=5cWJsRXplZokYLtvQJQpQdiRzzzCWuRY4HZ-REqDc6s,3245
60
+ py_serverless_kit/runtime/adapters/oracle.py,sha256=cBgUauTJR6qHqt46__jWGJcjbZ5peEL1Mad_XBFEnV0,6039
61
+ py_serverless_kit/runtime/adapters/tencent.py,sha256=Y3IQTdBIhwxgo5sG4Ai4URG1mYPdYZYCYaOSWvOPPNw,5897
62
+ py_serverless_kit/terraform/__init__.py,sha256=G3Yv2CcQsT2qKgKjH6zpdNRMQujb1bQOeAAf7FxtJmM,129
63
+ py_serverless_kit/terraform/runner.py,sha256=UWj967MU9lZ5dY709MaBk7-e6H40FSzH1U7T8DiTlhY,3755
64
+ py_serverless_kit/workflows/__init__.py,sha256=kiBOsnxHk8FqFCV7_Z0Evc4J0ygpDPmQJy_CPs4ecj4,1107
65
+ py_serverless_kit/workflows/asl.py,sha256=5UFBfAKUaWjGlq4xG2bM_VrcZnLwsfZWD-Re4dCdeIA,6532
66
+ py_serverless_kit/workflows/gcp.py,sha256=_t1Kj3D9Cb9_NhwJ-FIpxK5A96jODf9w_vn0-r8Ixlc,14568
67
+ py_serverless_kit-0.1.0.dist-info/METADATA,sha256=j59FWmDAGpbTpUPdYpKYoqQ9KK11JusZ5usMiN0y12M,14679
68
+ py_serverless_kit-0.1.0.dist-info/WHEEL,sha256=W3fkpkm7-wf9vBI5Z-7s0eWkeM-spu78I8Neb98DeEg,87
69
+ py_serverless_kit-0.1.0.dist-info/entry_points.txt,sha256=I-fW8cddXp3EkwMyijn1KuLGZ0MungQBPpjJ5Ey7xuY,110
70
+ py_serverless_kit-0.1.0.dist-info/licenses/LICENSE,sha256=i-WgXn7_Gua7z8_iZsNK0mhS5fug1fqYEoLgF-4FyXs,1078
71
+ py_serverless_kit-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.32.4
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ pskit = py_serverless_kit.cli.main:main
3
+ py-serverless-kit = py_serverless_kit.cli.main:main
@@ -0,0 +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.