vibetuner 2.15.1__tar.gz → 2.17.1__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.

Potentially problematic release.


This version of vibetuner might be problematic. Click here for more details.

Files changed (85) hide show
  1. {vibetuner-2.15.1 → vibetuner-2.17.1}/PKG-INFO +3 -5
  2. {vibetuner-2.15.1 → vibetuner-2.17.1}/README.md +0 -1
  3. {vibetuner-2.15.1 → vibetuner-2.17.1}/pyproject.toml +3 -4
  4. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/debug/users.html.jinja +2 -2
  5. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/login.html.jinja +11 -13
  6. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/__init__.py +0 -0
  7. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/__main__.py +0 -0
  8. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/cli/__init__.py +0 -0
  9. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/cli/run.py +0 -0
  10. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/cli/scaffold.py +0 -0
  11. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/config.py +0 -0
  12. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/context.py +0 -0
  13. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/AGENTS.md +0 -0
  14. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/CLAUDE.md +0 -0
  15. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/__init__.py +0 -0
  16. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/context.py +0 -0
  17. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/deps.py +0 -0
  18. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/email.py +0 -0
  19. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/hotreload.py +0 -0
  20. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/lifespan.py +0 -0
  21. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/middleware.py +0 -0
  22. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/oauth.py +0 -0
  23. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/routes/__init__.py +0 -0
  24. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/routes/auth.py +0 -0
  25. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/routes/debug.py +0 -0
  26. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/routes/health.py +0 -0
  27. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/routes/language.py +0 -0
  28. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/routes/meta.py +0 -0
  29. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/routes/user.py +0 -0
  30. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/frontend/templates.py +0 -0
  31. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/logging.py +0 -0
  32. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/models/AGENTS.md +0 -0
  33. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/models/CLAUDE.md +0 -0
  34. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/models/__init__.py +0 -0
  35. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/models/blob.py +0 -0
  36. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/models/email_verification.py +0 -0
  37. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/models/mixins.py +0 -0
  38. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/models/oauth.py +0 -0
  39. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/models/registry.py +0 -0
  40. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/models/types.py +0 -0
  41. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/models/user.py +0 -0
  42. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/mongo.py +0 -0
  43. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/paths.py +0 -0
  44. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/services/AGENTS.md +0 -0
  45. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/services/CLAUDE.md +0 -0
  46. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/services/__init__.py +0 -0
  47. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/services/blob.py +0 -0
  48. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/services/email.py +0 -0
  49. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/tasks/AGENTS.md +0 -0
  50. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/tasks/CLAUDE.md +0 -0
  51. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/tasks/__init__.py +0 -0
  52. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/tasks/context.py +0 -0
  53. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/tasks/worker.py +0 -0
  54. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/email/AGENTS.md +0 -0
  55. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/email/CLAUDE.md +0 -0
  56. {vibetuner-2.15.1/src/vibetuner/templates/email/default → vibetuner-2.17.1/src/vibetuner/templates/email}/magic_link.html.jinja +0 -0
  57. {vibetuner-2.15.1/src/vibetuner/templates/email/default → vibetuner-2.17.1/src/vibetuner/templates/email}/magic_link.txt.jinja +0 -0
  58. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/AGENTS.md +0 -0
  59. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/CLAUDE.md +0 -0
  60. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/base/favicons.html.jinja +0 -0
  61. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/base/footer.html.jinja +0 -0
  62. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/base/header.html.jinja +0 -0
  63. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/base/opengraph.html.jinja +0 -0
  64. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/base/skeleton.html.jinja +0 -0
  65. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/debug/collections.html.jinja +0 -0
  66. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/debug/components/debug_nav.html.jinja +0 -0
  67. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/debug/index.html.jinja +0 -0
  68. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/debug/info.html.jinja +0 -0
  69. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/debug/version.html.jinja +0 -0
  70. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/email/magic_link.txt.jinja +0 -0
  71. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/email_sent.html.jinja +0 -0
  72. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/index.html.jinja +0 -0
  73. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/lang/select.html.jinja +0 -0
  74. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/meta/browserconfig.xml.jinja +0 -0
  75. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/meta/robots.txt.jinja +0 -0
  76. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/meta/site.webmanifest.jinja +0 -0
  77. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/meta/sitemap.xml.jinja +0 -0
  78. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/user/edit.html.jinja +0 -0
  79. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/frontend/user/profile.html.jinja +0 -0
  80. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/markdown/.placeholder +0 -0
  81. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/markdown/AGENTS.md +0 -0
  82. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates/markdown/CLAUDE.md +0 -0
  83. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/templates.py +0 -0
  84. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/time.py +0 -0
  85. {vibetuner-2.15.1 → vibetuner-2.17.1}/src/vibetuner/versioning.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: vibetuner
3
- Version: 2.15.1
3
+ Version: 2.17.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.
@@ -42,15 +42,14 @@ Requires-Dist: streaq[web]<6.0.0
42
42
  Requires-Dist: typer-slim[standard]>=0.20.0
43
43
  Requires-Dist: babel>=2.17.0 ; extra == 'dev'
44
44
  Requires-Dist: cloudflare>=4.3.1 ; extra == 'dev'
45
- Requires-Dist: djlint>=1.36.4 ; extra == 'dev'
46
45
  Requires-Dist: dunamai>=1.25.0 ; extra == 'dev'
47
46
  Requires-Dist: gh-bin>=2.81.0 ; extra == 'dev'
48
47
  Requires-Dist: granian[pname,reload]>=2.5.7 ; extra == 'dev'
49
48
  Requires-Dist: just-bin>=1.43.0 ; extra == 'dev'
50
49
  Requires-Dist: pre-commit>=4.3.0 ; extra == 'dev'
51
50
  Requires-Dist: pysemver>=0.5.0 ; extra == 'dev'
52
- Requires-Dist: ruff>=0.14.3 ; extra == 'dev'
53
- Requires-Dist: rumdl>=0.0.171 ; extra == 'dev'
51
+ Requires-Dist: ruff>=0.14.4 ; extra == 'dev'
52
+ Requires-Dist: rumdl>=0.0.172 ; extra == 'dev'
54
53
  Requires-Dist: semver>=3.0.4 ; extra == 'dev'
55
54
  Requires-Dist: taplo>=0.9.3 ; extra == 'dev'
56
55
  Requires-Dist: ty>=0.0.1a25 ; extra == 'dev'
@@ -176,7 +175,6 @@ vibetuner run prod worker
176
175
  The `[dev]` extra includes all tools needed for development:
177
176
 
178
177
  - **Ruff**: Fast linting and formatting
179
- - **djlint**: Template linting
180
178
  - **Babel**: i18n message extraction
181
179
  - **pre-commit**: Git hooks
182
180
  - **Type stubs**: For aioboto3, authlib, PyYAML
@@ -107,7 +107,6 @@ vibetuner run prod worker
107
107
  The `[dev]` extra includes all tools needed for development:
108
108
 
109
109
  - **Ruff**: Fast linting and formatting
110
- - **djlint**: Template linting
111
110
  - **Babel**: i18n message extraction
112
111
  - **pre-commit**: Git hooks
113
112
  - **Type stubs**: For aioboto3, authlib, PyYAML
@@ -1,7 +1,7 @@
1
1
  [project]
2
2
  name = "vibetuner"
3
3
  description = "Core Python framework and blessed dependencies for production-ready FastAPI + MongoDB + HTMX projects"
4
- version = "2.15.1"
4
+ version = "2.17.1"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.11"
7
7
  license = { text = "MIT" }
@@ -63,15 +63,14 @@ dev = [
63
63
  # These are the development dependencies of AllTuner's blessed stack
64
64
  "babel>=2.17.0",
65
65
  "cloudflare>=4.3.1",
66
- "djlint>=1.36.4",
67
66
  "dunamai>=1.25.0",
68
67
  "gh-bin>=2.81.0",
69
68
  "granian[pname,reload]>=2.5.7",
70
69
  "just-bin>=1.43.0",
71
70
  "pre-commit>=4.3.0",
72
71
  "pysemver>=0.5.0",
73
- "ruff>=0.14.3",
74
- "rumdl>=0.0.171",
72
+ "ruff>=0.14.4",
73
+ "rumdl>=0.0.172",
75
74
  "semver>=3.0.4",
76
75
  "taplo>=0.9.3",
77
76
  "ty>=0.0.1a25",
@@ -36,7 +36,7 @@
36
36
  User ID: <code>{{ current_user_id }}</code>
37
37
  </p>
38
38
  <div class="card-actions justify-end">
39
- <form method="post" action="/debug/stop-impersonation">
39
+ <form method="post" action="{{ url_for('debug.stop_impersonation') }}">
40
40
  <button type="submit" class="btn btn-secondary btn-sm">Stop Impersonation</button>
41
41
  </form>
42
42
  </div>
@@ -105,7 +105,7 @@
105
105
  <td class="text-center">
106
106
  {% if current_user_id != user.id|string %}
107
107
  <form method="post"
108
- action="/debug/impersonate/{{ user.id }}"
108
+ action="{{ url_for('debug.impersonate_user', user_id=user.id) }}"
109
109
  class="inline">
110
110
  <button type="submit" class="btn btn-outline btn-sm">Impersonate</button>
111
111
  </form>
@@ -15,7 +15,11 @@
15
15
  {% if has_oauth and providers %}
16
16
  <div class="space-y-3 mb-6">
17
17
  {% for provider in providers %}
18
- <a href="{{ url_for('login_with_' + provider) }}{%- if next %}?next={{ next }}{%- endif %}"
18
+ {% set login_url = url_for('login_with_' + provider) %}
19
+ {% if next %}
20
+ {% set login_url = login_url ~ '?next=' ~ next %}
21
+ {% endif %}
22
+ <a href="{{ login_url }}"
19
23
  class="btn btn-outline btn-block justify-start gap-3 hover:btn-primary group transition-all duration-300 hover:scale-[1.02]">
20
24
  <span>{{ _("Continue with %(provider)s") | format(provider=provider.title()) }}</span>
21
25
  </a>
@@ -23,13 +27,13 @@
23
27
  </div>
24
28
  {% endif %}
25
29
  <!-- Divider -->
26
- {% if has_oauth and providers and has_email %}<div class="divider text-base-content/50">{{ _("OR") }}</div>{% endif %}
30
+ {% if has_oauth and providers and has_email %}
31
+ <div class="divider text-base-content/50">{{ _("OR") }}</div>
32
+ {% endif %}
27
33
  <!-- Email Magic Link -->
28
34
  {% if has_email %}
29
35
  <div class="bg-base-200/50 rounded-2xl p-6 border border-base-300/50">
30
- <form method="post"
31
- class="space-y-4"
32
- action="{{ url_for("send_magic_link") }}">
36
+ <form method="post" class="space-y-4" action="{{ url_for("send_magic_link") }}">
33
37
  {% if next %}<input type="hidden" name="next" value="{{ next }}" />{% endif %}
34
38
  <div class="form-control">
35
39
  <label class="label" for="email">
@@ -44,10 +48,7 @@
44
48
  required
45
49
  autocomplete="email" />
46
50
  <div class="absolute inset-y-0 right-0 flex items-center pr-3">
47
- <svg class="w-5 h-5 text-base-content/40"
48
- fill="none"
49
- stroke="currentColor"
50
- viewBox="0 0 24 24">
51
+ <svg class="w-5 h-5 text-base-content/40" fill="none" stroke="currentColor" viewBox="0 0 24 24">
51
52
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M3 8l7.89 4.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" />
52
53
  </svg>
53
54
  </div>
@@ -64,10 +65,7 @@
64
65
  <span>{{ _("Send Magic Link") }}</span>
65
66
  </button>
66
67
  <div class="alert alert-info bg-info/10 border-info/20">
67
- <svg class="w-5 h-5 text-info shrink-0"
68
- fill="none"
69
- stroke="currentColor"
70
- viewBox="0 0 24 24">
68
+ <svg class="w-5 h-5 text-info shrink-0" fill="none" stroke="currentColor" viewBox="0 0 24 24">
71
69
  <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" />
72
70
  </svg>
73
71
  <div class="text-sm">