vibetuner 2.18.1__py3-none-any.whl → 2.30.1__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.
Potentially problematic release.
This version of vibetuner might be problematic. Click here for more details.
- vibetuner/cli/__init__.py +48 -3
- vibetuner/cli/run.py +2 -2
- vibetuner/cli/scaffold.py +25 -0
- vibetuner/config.py +13 -2
- vibetuner/frontend/__init__.py +28 -5
- vibetuner/frontend/lifespan.py +8 -2
- vibetuner/frontend/middleware.py +0 -4
- vibetuner/frontend/routes/debug.py +41 -31
- vibetuner/frontend/templates.py +47 -2
- vibetuner/mongo.py +15 -0
- vibetuner/paths.py +34 -10
- vibetuner/services/blob.py +31 -45
- vibetuner/services/email.py +14 -15
- vibetuner/services/s3_storage.py +454 -0
- vibetuner/tasks/__init__.py +0 -2
- vibetuner/tasks/lifespan.py +28 -0
- vibetuner/tasks/worker.py +2 -9
- vibetuner/versioning.py +6 -2
- {vibetuner-2.18.1.dist-info → vibetuner-2.30.1.dist-info}/METADATA +18 -15
- {vibetuner-2.18.1.dist-info → vibetuner-2.30.1.dist-info}/RECORD +22 -22
- {vibetuner-2.18.1.dist-info → vibetuner-2.30.1.dist-info}/WHEEL +1 -1
- vibetuner/frontend/context.py +0 -10
- vibetuner/tasks/context.py +0 -34
- {vibetuner-2.18.1.dist-info → vibetuner-2.30.1.dist-info}/entry_points.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: vibetuner
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.30.1
|
|
4
4
|
Summary: Core Python framework and blessed dependencies for production-ready FastAPI + MongoDB + HTMX projects
|
|
5
5
|
Keywords: fastapi,mongodb,htmx,web-framework,scaffolding,oauth,background-jobs
|
|
6
6
|
Author: All Tuner Labs, S.L.
|
|
@@ -20,12 +20,12 @@ Requires-Dist: aioboto3>=15.5.0
|
|
|
20
20
|
Requires-Dist: arel>=0.4.0
|
|
21
21
|
Requires-Dist: asyncer>=0.0.10
|
|
22
22
|
Requires-Dist: authlib>=1.6.5
|
|
23
|
-
Requires-Dist: beanie[zstd]>=2.0.
|
|
24
|
-
Requires-Dist: click>=8.3.
|
|
25
|
-
Requires-Dist: copier>=9.
|
|
23
|
+
Requires-Dist: beanie[zstd]>=2.0.1
|
|
24
|
+
Requires-Dist: click>=8.3.1
|
|
25
|
+
Requires-Dist: copier>=9.11.0,<9.11.1
|
|
26
26
|
Requires-Dist: email-validator>=2.3.0
|
|
27
|
-
Requires-Dist: fastapi[standard-no-fastapi-cloud-cli]>=0.
|
|
28
|
-
Requires-Dist: granian[pname]>=2.
|
|
27
|
+
Requires-Dist: fastapi[standard-no-fastapi-cloud-cli]>=0.122.0
|
|
28
|
+
Requires-Dist: granian[pname]>=2.6.0
|
|
29
29
|
Requires-Dist: httpx[http2]>=0.28.1
|
|
30
30
|
Requires-Dist: itsdangerous>=2.2.0
|
|
31
31
|
Requires-Dist: loguru>=0.7.3
|
|
@@ -33,7 +33,7 @@ Requires-Dist: pydantic[email]>=2.12.4
|
|
|
33
33
|
Requires-Dist: pydantic-extra-types[pycountry]>=2.10.6
|
|
34
34
|
Requires-Dist: pydantic-settings>=2.12.0
|
|
35
35
|
Requires-Dist: pyyaml>=6.0.3
|
|
36
|
-
Requires-Dist: redis[hiredis]>=7.0
|
|
36
|
+
Requires-Dist: redis[hiredis]>=7.1.0
|
|
37
37
|
Requires-Dist: rich>=14.2.0
|
|
38
38
|
Requires-Dist: sse-starlette>=3.0.3
|
|
39
39
|
Requires-Dist: starlette-babel>=1.0.3
|
|
@@ -44,20 +44,22 @@ Requires-Dist: babel>=2.17.0 ; extra == 'dev'
|
|
|
44
44
|
Requires-Dist: cloudflare>=4.3.1 ; extra == 'dev'
|
|
45
45
|
Requires-Dist: djlint>=1.36.4 ; extra == 'dev'
|
|
46
46
|
Requires-Dist: dunamai>=1.25.0 ; extra == 'dev'
|
|
47
|
-
Requires-Dist: gh-bin>=2.83.
|
|
48
|
-
Requires-Dist: granian[pname,reload]>=2.
|
|
49
|
-
Requires-Dist: just-bin>=1.43.
|
|
50
|
-
Requires-Dist:
|
|
47
|
+
Requires-Dist: gh-bin>=2.83.1 ; extra == 'dev'
|
|
48
|
+
Requires-Dist: granian[pname,reload]>=2.6.0 ; extra == 'dev'
|
|
49
|
+
Requires-Dist: just-bin>=1.43.1 ; extra == 'dev'
|
|
50
|
+
Requires-Dist: prek>=0.2.18 ; extra == 'dev'
|
|
51
51
|
Requires-Dist: pysemver>=0.5.0 ; extra == 'dev'
|
|
52
|
-
Requires-Dist: ruff>=0.14.
|
|
53
|
-
Requires-Dist: rumdl>=0.0.
|
|
52
|
+
Requires-Dist: ruff>=0.14.6 ; extra == 'dev'
|
|
53
|
+
Requires-Dist: rumdl>=0.0.182 ; extra == 'dev'
|
|
54
54
|
Requires-Dist: semver>=3.0.4 ; extra == 'dev'
|
|
55
55
|
Requires-Dist: taplo>=0.9.3 ; extra == 'dev'
|
|
56
|
-
Requires-Dist: ty>=0.0.
|
|
56
|
+
Requires-Dist: ty>=0.0.1a27 ; extra == 'dev'
|
|
57
57
|
Requires-Dist: types-aioboto3[s3,ses]>=15.5.0 ; extra == 'dev'
|
|
58
58
|
Requires-Dist: types-authlib>=1.6.5.20251005 ; extra == 'dev'
|
|
59
59
|
Requires-Dist: types-pyyaml>=6.0.12.20250915 ; extra == 'dev'
|
|
60
60
|
Requires-Dist: uv-bump>=0.3.1 ; extra == 'dev'
|
|
61
|
+
Requires-Dist: pytest>=9.0.1 ; extra == 'test'
|
|
62
|
+
Requires-Dist: pytest-asyncio>=1.3.0 ; extra == 'test'
|
|
61
63
|
Requires-Python: >=3.11
|
|
62
64
|
Project-URL: Changelog, https://github.com/alltuner/vibetuner/blob/main/CHANGELOG.md
|
|
63
65
|
Project-URL: Documentation, https://vibetuner.alltuner.com/
|
|
@@ -65,6 +67,7 @@ Project-URL: Homepage, https://vibetuner.alltuner.com/
|
|
|
65
67
|
Project-URL: Issues, https://github.com/alltuner/vibetuner/issues
|
|
66
68
|
Project-URL: Repository, https://github.com/alltuner/vibetuner
|
|
67
69
|
Provides-Extra: dev
|
|
70
|
+
Provides-Extra: test
|
|
68
71
|
Description-Content-Type: text/markdown
|
|
69
72
|
|
|
70
73
|
# vibetuner
|
|
@@ -177,7 +180,7 @@ The `[dev]` extra includes all tools needed for development:
|
|
|
177
180
|
|
|
178
181
|
- **Ruff**: Fast linting and formatting
|
|
179
182
|
- **Babel**: i18n message extraction
|
|
180
|
-
- **pre-commit**: Git hooks
|
|
183
|
+
- **pre-commit**: Git hooks (prek is a fast pre-commit drop-in replacement)
|
|
181
184
|
- **Type stubs**: For aioboto3, authlib, PyYAML
|
|
182
185
|
- And more...
|
|
183
186
|
|
|
@@ -1,26 +1,25 @@
|
|
|
1
1
|
vibetuner/__init__.py,sha256=rFIVCmxkKTT_g477V8biCw0lgpudyuUabXhYxg189lY,90
|
|
2
2
|
vibetuner/__main__.py,sha256=Ye9oBAgXhcYQ4I4yZli3TIXF5lWQ9yY4tTPs4XnDDUY,29
|
|
3
|
-
vibetuner/cli/__init__.py,sha256=
|
|
4
|
-
vibetuner/cli/run.py,sha256=
|
|
5
|
-
vibetuner/cli/scaffold.py,sha256=
|
|
6
|
-
vibetuner/config.py,sha256=
|
|
3
|
+
vibetuner/cli/__init__.py,sha256=lmuLn8ytkO0JwX3ILm6AFQmrzEMe5LeHmwV2oyyy0sI,3543
|
|
4
|
+
vibetuner/cli/run.py,sha256=TILyvy-bZTKWcAK-K2SNYqqD-G3ypCay-ghadGztqRQ,5021
|
|
5
|
+
vibetuner/cli/scaffold.py,sha256=5MipgasDKsK6WDa_vpfY4my1kyismkaskvXE277NE-s,6450
|
|
6
|
+
vibetuner/config.py,sha256=UfEyAlow6lE_npr53dgESb-KZQuohP18vlTncOuWJC4,4571
|
|
7
7
|
vibetuner/context.py,sha256=h4f4FfkmLlOD6WiSLhx7-IjFvIA4zcrsAp6478l6npg,743
|
|
8
|
-
vibetuner/frontend/__init__.py,sha256=
|
|
9
|
-
vibetuner/frontend/context.py,sha256=yd9mJ8Cj9AUeHE533dofEoyCkw6oSPowdq397whfN_s,169
|
|
8
|
+
vibetuner/frontend/__init__.py,sha256=COZuPRzTFUfxeyWkvmz0GxBBFFvBHtf2mMGmLw5fy2c,3965
|
|
10
9
|
vibetuner/frontend/deps.py,sha256=b3ocC_ryaK2Jp51SfcFqckrXiaL7V-chkFRqLjzgA_c,1296
|
|
11
10
|
vibetuner/frontend/email.py,sha256=k0d7FCZCge5VYOKp3fLsbx7EA5_SrtBkpMs57o4W7u0,1119
|
|
12
11
|
vibetuner/frontend/hotreload.py,sha256=Gl7FIKJaiCVVoyWQqdErBUOKDP1cGBFUpGzqHMiJd10,285
|
|
13
|
-
vibetuner/frontend/lifespan.py,sha256=
|
|
14
|
-
vibetuner/frontend/middleware.py,sha256=
|
|
12
|
+
vibetuner/frontend/lifespan.py,sha256=ZduSyH6E2_IW9vFWH5jww2R22mRybSm_mNfbtDHnsS0,1074
|
|
13
|
+
vibetuner/frontend/middleware.py,sha256=iOqcp-7WwRqHLYa1dg3xDzAXGrpqmYpqBmtQcdd9obY,4890
|
|
15
14
|
vibetuner/frontend/oauth.py,sha256=EzEwoOZ_8xn_CiqAWpNoEdhV2NPxZKKwF2bA6W6Bkj0,5884
|
|
16
15
|
vibetuner/frontend/routes/__init__.py,sha256=nHhiylHIUPZ2R-Bd7vXEGHLJBQ7fNuzPTJodjJR3lyc,428
|
|
17
16
|
vibetuner/frontend/routes/auth.py,sha256=vKE-Dm2yPXReaOLvcxfT4a6df1dKUoteZ4p46v8Elm4,4331
|
|
18
|
-
vibetuner/frontend/routes/debug.py,sha256=
|
|
17
|
+
vibetuner/frontend/routes/debug.py,sha256=hqiuRjcLOvL2DdhA83HUzp5svECKjyFB-LoNn7xDiFE,13269
|
|
19
18
|
vibetuner/frontend/routes/health.py,sha256=_XkMpdMNUemu7qzkGkqn5TBnZmGrArA3Xps5CWCcGlg,959
|
|
20
19
|
vibetuner/frontend/routes/language.py,sha256=wHNfdewqWfK-2JLXwglu0Q0b_e00HFGd0A2-PYT44LE,1240
|
|
21
20
|
vibetuner/frontend/routes/meta.py,sha256=pSyIxQsiB0QZSYwCQbS07KhkT5oHC5r9jvjUDIqZRGw,1409
|
|
22
21
|
vibetuner/frontend/routes/user.py,sha256=b8ow6IGnfsHosSwSmEIYZtuQJnW_tacnNjp_aMnqWxU,2666
|
|
23
|
-
vibetuner/frontend/templates.py,sha256=
|
|
22
|
+
vibetuner/frontend/templates.py,sha256=BLBBcF9e-EUDQXeOUzCHgQx1D0lCMkLfUXgNCwG6CtE,6607
|
|
24
23
|
vibetuner/logging.py,sha256=9eNofqVtKZCBDS33NbBI7Sv2875gM8MNStTSCjX2AXQ,2409
|
|
25
24
|
vibetuner/models/__init__.py,sha256=JvmQvzDIxaI7zlk-ROCWEbuzxXSUOqCshINUjgu-AfQ,325
|
|
26
25
|
vibetuner/models/blob.py,sha256=F30HFS4Z_Bji_PGPflWIv4dOwqKLsEWQHcjW1Oz_79M,2523
|
|
@@ -30,14 +29,15 @@ vibetuner/models/oauth.py,sha256=BdOZbW47Das9ntHTtRmVdl1lB5zLCcXW2fyVJ-tQ_F8,150
|
|
|
30
29
|
vibetuner/models/registry.py,sha256=O5YG7vOrWluqpH5N7m44v72wbscMhU_Pu3TJw_u0MTk,311
|
|
31
30
|
vibetuner/models/types.py,sha256=Lj3ASEvx5eNgQMcVhNyKQHHolJqDxj2yH8S-M9oa4J8,402
|
|
32
31
|
vibetuner/models/user.py,sha256=ttcSH4mVREPhA6bCFUWXKfJ9_8_Iq3lEYXe3rDrslw4,2696
|
|
33
|
-
vibetuner/mongo.py,sha256=
|
|
34
|
-
vibetuner/paths.py,sha256=
|
|
32
|
+
vibetuner/mongo.py,sha256=BejYrqHrupNfvNhEu6xUakCnRQy3YdiExk2r6hkafOs,1056
|
|
33
|
+
vibetuner/paths.py,sha256=hWWcjwVPNxac74rRuHgHD46CwmQKHJidEALo-euw72k,8360
|
|
35
34
|
vibetuner/services/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
|
-
vibetuner/services/blob.py,sha256
|
|
37
|
-
vibetuner/services/email.py,sha256=
|
|
38
|
-
vibetuner/
|
|
39
|
-
vibetuner/tasks/
|
|
40
|
-
vibetuner/tasks/
|
|
35
|
+
vibetuner/services/blob.py,sha256=mYsMDA04E1fgXLaprWDip28RrxEX60T1G7UT1aMZDBY,5029
|
|
36
|
+
vibetuner/services/email.py,sha256=Y0yKgqki2an7fE6n4hQeROjVglzcqIGBgXICJbKZq0s,1669
|
|
37
|
+
vibetuner/services/s3_storage.py,sha256=purEKXKqb_5iroyDgEWCJ2DRMmG08Jy5tnsc2ZE1An4,15407
|
|
38
|
+
vibetuner/tasks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
39
|
+
vibetuner/tasks/lifespan.py,sha256=BKOI-wbMLOqEbR4NgCKI5c9OP8W1RpxOswBL3XzPTWc,861
|
|
40
|
+
vibetuner/tasks/worker.py,sha256=ZCfBpaqpyDG5OD3wtSf9YdIWie6CaQ49KwLNn_iTNCc,248
|
|
41
41
|
vibetuner/templates/email/magic_link.html.jinja,sha256=DzaCnBsYoau2JQh5enPAa2FMFFTyCwdyiM3vGhBQdtA,553
|
|
42
42
|
vibetuner/templates/email/magic_link.txt.jinja,sha256=dANak9ion1cpILt45V3GcI2qnL_gKFPj7PsZKYV0m5s,200
|
|
43
43
|
vibetuner/templates/frontend/base/favicons.html.jinja,sha256=A7s7YXuE82tRd7ZLJs1jGEGwBRiMPrqlWd507xL1iZg,70
|
|
@@ -65,8 +65,8 @@ vibetuner/templates/frontend/user/profile.html.jinja,sha256=qXFonyeCy99JE5o3rEta
|
|
|
65
65
|
vibetuner/templates/markdown/.placeholder,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
66
66
|
vibetuner/templates.py,sha256=xRoMb_oyAI5x4kxfpg56UcLKkT8e9HVn-o3KFAu9ISE,5094
|
|
67
67
|
vibetuner/time.py,sha256=3_DtveCCzI20ocTnAlTh2u7FByUXtINaUoQZO-_uZow,1188
|
|
68
|
-
vibetuner/versioning.py,sha256=
|
|
69
|
-
vibetuner-2.
|
|
70
|
-
vibetuner-2.
|
|
71
|
-
vibetuner-2.
|
|
72
|
-
vibetuner-2.
|
|
68
|
+
vibetuner/versioning.py,sha256=c7Wg-SM-oJzQqG2RE0O8gZGHzHTgvwqa4yHn3Dk5-Sk,372
|
|
69
|
+
vibetuner-2.30.1.dist-info/WHEEL,sha256=YUH1mBqsx8Dh2cQG2rlcuRYUhJddG9iClegy4IgnHik,79
|
|
70
|
+
vibetuner-2.30.1.dist-info/entry_points.txt,sha256=aKIj9YCCXizjYupx9PeWkUJePg3ncHke_LTS5rmCsfs,49
|
|
71
|
+
vibetuner-2.30.1.dist-info/METADATA,sha256=O25ikO_Zt59f7VbnTMTwQV4ADEFZb0cj7ze2zZzwiE8,8227
|
|
72
|
+
vibetuner-2.30.1.dist-info/RECORD,,
|
vibetuner/frontend/context.py
DELETED
vibetuner/tasks/context.py
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
from contextlib import asynccontextmanager
|
|
2
|
-
from typing import AsyncIterator
|
|
3
|
-
|
|
4
|
-
from httpx import AsyncClient
|
|
5
|
-
from pydantic import BaseModel
|
|
6
|
-
|
|
7
|
-
from vibetuner.mongo import init_models
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class Context(BaseModel):
|
|
11
|
-
http_client: AsyncClient
|
|
12
|
-
# Add the context properties for your tasks below
|
|
13
|
-
|
|
14
|
-
# Until here
|
|
15
|
-
model_config = {"arbitrary_types_allowed": True}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
@asynccontextmanager
|
|
19
|
-
async def lifespan() -> AsyncIterator[Context]:
|
|
20
|
-
await init_models()
|
|
21
|
-
# Add below anything that should happen before startup
|
|
22
|
-
|
|
23
|
-
# Until here
|
|
24
|
-
async with (
|
|
25
|
-
AsyncClient() as http_client,
|
|
26
|
-
# Add any other async context managers you need here
|
|
27
|
-
):
|
|
28
|
-
yield Context(
|
|
29
|
-
http_client=http_client,
|
|
30
|
-
# Add any other async context managers you need here
|
|
31
|
-
)
|
|
32
|
-
|
|
33
|
-
# Add below anything that should happen before shutdown
|
|
34
|
-
# Until here
|
|
File without changes
|