snake-orm 0.1.0b1__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 (198) hide show
  1. snake_orm-0.1.0b1.dist-info/METADATA +366 -0
  2. snake_orm-0.1.0b1.dist-info/RECORD +198 -0
  3. snake_orm-0.1.0b1.dist-info/WHEEL +4 -0
  4. snake_orm-0.1.0b1.dist-info/entry_points.txt +2 -0
  5. snake_orm-0.1.0b1.dist-info/licenses/LICENSE +21 -0
  6. snakeorm/__init__.py +214 -0
  7. snakeorm/advisor.py +109 -0
  8. snakeorm/cli/__init__.py +3 -0
  9. snakeorm/cli/app.py +992 -0
  10. snakeorm/cli/discovery.py +179 -0
  11. snakeorm/cli/hooks.py +86 -0
  12. snakeorm/compiler/__init__.py +3 -0
  13. snakeorm/compiler/compiler.py +330 -0
  14. snakeorm/connection.py +228 -0
  15. snakeorm/contrib/__init__.py +17 -0
  16. snakeorm/contrib/asgi.py +192 -0
  17. snakeorm/contrib/config.py +264 -0
  18. snakeorm/contrib/deliver.py +256 -0
  19. snakeorm/contrib/django.py +245 -0
  20. snakeorm/contrib/sidecar.py +44 -0
  21. snakeorm/contrib/wsgi.py +176 -0
  22. snakeorm/core/__init__.py +1 -0
  23. snakeorm/core/config.py +173 -0
  24. snakeorm/core/converters.py +172 -0
  25. snakeorm/core/exceptions.py +175 -0
  26. snakeorm/core/placement.py +15 -0
  27. snakeorm/core/sentinels.py +37 -0
  28. snakeorm/core/signals.py +114 -0
  29. snakeorm/debug/__init__.py +42 -0
  30. snakeorm/debug/assets/css/panel.css +616 -0
  31. snakeorm/debug/assets/css/snake_orm_app.css +293 -0
  32. snakeorm/debug/assets/img/icon.svg +5 -0
  33. snakeorm/debug/assets/js/history.js +425 -0
  34. snakeorm/debug/assets/js/language.js +283 -0
  35. snakeorm/debug/assets/js/panel.js +241 -0
  36. snakeorm/debug/assets/js/snake_orm_app.js +82 -0
  37. snakeorm/debug/assets/pages/cli.html +28 -0
  38. snakeorm/debug/assets/pages/config.html +34 -0
  39. snakeorm/debug/assets/pages/database_first.html +29 -0
  40. snakeorm/debug/assets/pages/help.html +21 -0
  41. snakeorm/debug/assets/pages/history.html +27 -0
  42. snakeorm/debug/capture.py +234 -0
  43. snakeorm/debug/channel.py +131 -0
  44. snakeorm/debug/collector.py +144 -0
  45. snakeorm/debug/config.py +149 -0
  46. snakeorm/debug/html.py +578 -0
  47. snakeorm/debug/matrix.py +60 -0
  48. snakeorm/debug/origin.py +42 -0
  49. snakeorm/debug/otel/__init__.py +68 -0
  50. snakeorm/debug/otel/context.py +43 -0
  51. snakeorm/debug/otel/exporter.py +277 -0
  52. snakeorm/debug/otel/payload.py +97 -0
  53. snakeorm/debug/otel/report.py +29 -0
  54. snakeorm/debug/otel/spans.py +393 -0
  55. snakeorm/debug/otel/summary.py +59 -0
  56. snakeorm/debug/record.py +54 -0
  57. snakeorm/debug/report.py +311 -0
  58. snakeorm/debug/testing.py +23 -0
  59. snakeorm/decorators/__init__.py +13 -0
  60. snakeorm/decorators/abstract.py +26 -0
  61. snakeorm/decorators/db_first.py +104 -0
  62. snakeorm/decorators/function.py +28 -0
  63. snakeorm/decorators/model.py +268 -0
  64. snakeorm/decorators/polymorphic.py +140 -0
  65. snakeorm/decorators/result.py +167 -0
  66. snakeorm/decorators/row.py +90 -0
  67. snakeorm/decorators/trigger.py +47 -0
  68. snakeorm/decorators/view.py +149 -0
  69. snakeorm/dialects/__init__.py +6 -0
  70. snakeorm/dialects/base.py +373 -0
  71. snakeorm/dialects/capabilities.py +571 -0
  72. snakeorm/dialects/literals.py +46 -0
  73. snakeorm/dialects/matrix.py +384 -0
  74. snakeorm/dialects/mysql.py +519 -0
  75. snakeorm/dialects/postgres.py +504 -0
  76. snakeorm/dialects/sqlite.py +417 -0
  77. snakeorm/drivers/__init__.py +18 -0
  78. snakeorm/drivers/asyncbase.py +73 -0
  79. snakeorm/drivers/asyncdecorators.py +244 -0
  80. snakeorm/drivers/asyncpool.py +228 -0
  81. snakeorm/drivers/asyncpsycopg.py +124 -0
  82. snakeorm/drivers/asyncpymysql.py +50 -0
  83. snakeorm/drivers/asyncsqlite.py +30 -0
  84. snakeorm/drivers/base.py +76 -0
  85. snakeorm/drivers/failures.py +181 -0
  86. snakeorm/drivers/logging.py +167 -0
  87. snakeorm/drivers/pool.py +352 -0
  88. snakeorm/drivers/psycopg.py +188 -0
  89. snakeorm/drivers/pymysql.py +176 -0
  90. snakeorm/drivers/savepoints.py +46 -0
  91. snakeorm/drivers/sqlite.py +170 -0
  92. snakeorm/drivers/threaded.py +143 -0
  93. snakeorm/drivers/timeout.py +87 -0
  94. snakeorm/dto/__init__.py +55 -0
  95. snakeorm/dto/read.py +231 -0
  96. snakeorm/dto/region.py +326 -0
  97. snakeorm/dto/resolve.py +354 -0
  98. snakeorm/dto/spec.py +201 -0
  99. snakeorm/expressions/__init__.py +88 -0
  100. snakeorm/expressions/conditional.py +178 -0
  101. snakeorm/expressions/expression.py +810 -0
  102. snakeorm/expressions/functions.py +71 -0
  103. snakeorm/expressions/keys.py +299 -0
  104. snakeorm/expressions/paths.py +43 -0
  105. snakeorm/expressions/scalar.py +293 -0
  106. snakeorm/expressions/window.py +248 -0
  107. snakeorm/fields/__init__.py +68 -0
  108. snakeorm/fields/check.py +79 -0
  109. snakeorm/fields/column.py +316 -0
  110. snakeorm/fields/enum.py +64 -0
  111. snakeorm/fields/index.py +46 -0
  112. snakeorm/fields/relationship.py +738 -0
  113. snakeorm/fields/typed.py +736 -0
  114. snakeorm/helpers/__init__.py +1 -0
  115. snakeorm/helpers/annotations.py +21 -0
  116. snakeorm/helpers/inheritance.py +41 -0
  117. snakeorm/helpers/pyliteral.py +52 -0
  118. snakeorm/helpers/pytype.py +50 -0
  119. snakeorm/introspection/__init__.py +13 -0
  120. snakeorm/introspection/base.py +30 -0
  121. snakeorm/introspection/drift.py +78 -0
  122. snakeorm/introspection/models.py +633 -0
  123. snakeorm/introspection/mysql.py +367 -0
  124. snakeorm/introspection/postgres.py +397 -0
  125. snakeorm/introspection/sqlite.py +217 -0
  126. snakeorm/introspection/unsupported.py +94 -0
  127. snakeorm/linker/__init__.py +3 -0
  128. snakeorm/linker/linker.py +521 -0
  129. snakeorm/metadata/__init__.py +41 -0
  130. snakeorm/metadata/check.py +37 -0
  131. snakeorm/metadata/column.py +201 -0
  132. snakeorm/metadata/enum_storage.py +33 -0
  133. snakeorm/metadata/fk_action.py +19 -0
  134. snakeorm/metadata/foreign_key.py +26 -0
  135. snakeorm/metadata/index.py +43 -0
  136. snakeorm/metadata/index_method.py +19 -0
  137. snakeorm/metadata/int_size.py +20 -0
  138. snakeorm/metadata/json_storage.py +21 -0
  139. snakeorm/metadata/polymorphic.py +30 -0
  140. snakeorm/metadata/primary_key.py +23 -0
  141. snakeorm/metadata/relationship.py +60 -0
  142. snakeorm/metadata/relationship_kind.py +43 -0
  143. snakeorm/metadata/routine.py +26 -0
  144. snakeorm/metadata/server_default.py +20 -0
  145. snakeorm/metadata/table.py +97 -0
  146. snakeorm/metadata/table_kind.py +23 -0
  147. snakeorm/metadata/trigger.py +62 -0
  148. snakeorm/metadata/type_params.py +348 -0
  149. snakeorm/migration/__init__.py +88 -0
  150. snakeorm/migration/asyncrunner.py +168 -0
  151. snakeorm/migration/autodetect.py +96 -0
  152. snakeorm/migration/ddl.py +1172 -0
  153. snakeorm/migration/diff.py +701 -0
  154. snakeorm/migration/loader.py +77 -0
  155. snakeorm/migration/operations.py +952 -0
  156. snakeorm/migration/planner.py +78 -0
  157. snakeorm/migration/realize.py +420 -0
  158. snakeorm/migration/renames.py +153 -0
  159. snakeorm/migration/render.py +1095 -0
  160. snakeorm/migration/runner.py +314 -0
  161. snakeorm/migration/squash.py +60 -0
  162. snakeorm/migration/state.py +107 -0
  163. snakeorm/model.py +162 -0
  164. snakeorm/py.typed +0 -0
  165. snakeorm/query/__init__.py +9 -0
  166. snakeorm/query/compound.py +288 -0
  167. snakeorm/query/join_kind.py +19 -0
  168. snakeorm/query/joined.py +143 -0
  169. snakeorm/query/query.py +1001 -0
  170. snakeorm/query/recursive.py +244 -0
  171. snakeorm/registry/__init__.py +5 -0
  172. snakeorm/registry/by_module.py +163 -0
  173. snakeorm/registry/registry.py +166 -0
  174. snakeorm/session/__init__.py +8 -0
  175. snakeorm/session/asyncsession.py +638 -0
  176. snakeorm/session/coercion.py +306 -0
  177. snakeorm/session/factory.py +29 -0
  178. snakeorm/session/guards.py +269 -0
  179. snakeorm/session/isolation.py +23 -0
  180. snakeorm/session/mapper.py +213 -0
  181. snakeorm/session/planning.py +815 -0
  182. snakeorm/session/retry.py +96 -0
  183. snakeorm/session/session.py +871 -0
  184. snakeorm/session/shared.py +355 -0
  185. snakeorm/sql/__init__.py +18 -0
  186. snakeorm/sql/adapt.py +104 -0
  187. snakeorm/sql/aggregate.py +232 -0
  188. snakeorm/sql/condition.py +359 -0
  189. snakeorm/sql/delete.py +46 -0
  190. snakeorm/sql/insert.py +149 -0
  191. snakeorm/sql/joins.py +158 -0
  192. snakeorm/sql/pk_subquery.py +54 -0
  193. snakeorm/sql/refs.py +19 -0
  194. snakeorm/sql/resolver.py +28 -0
  195. snakeorm/sql/select.py +175 -0
  196. snakeorm/sql/update.py +82 -0
  197. snakeorm/sql/value.py +552 -0
  198. snakeorm/times.py +276 -0
@@ -0,0 +1,293 @@
1
+ /* SHELL del panel de debug (`snake_orm_app`): el CHASIS — tema (tokens light/dark), reset, botón
2
+ flotante, offcanvas, cabecera, layout de cuerpo y menú. Los COMPONENTES de dentro (métricas,
3
+ queries, ayuda) van en `panel.css`. Todo scopeado bajo `.snk` DENTRO del shadow root; `all:initial`
4
+ corta la herencia del host (Pico/Tailwind/resets). Se inlinea junto a `panel.css` en un <style>. */
5
+ .snk {
6
+ all: initial;
7
+ font-family: ui-sans-serif, system-ui, -apple-system, sans-serif;
8
+ font-size: 13px;
9
+ line-height: 1.5;
10
+ color: #d6ecd9;
11
+ --bg: #0f1a12;
12
+ --surf: #16241a;
13
+ --txt: #d6ecd9;
14
+ --sub: #7ba488;
15
+ --bd: #274031;
16
+ --acc: #3ddc84;
17
+ --acc2: #b6e84f;
18
+ --sel: #4ade80;
19
+ --wrt: #fb7185;
20
+ --warn: #fbbf24;
21
+ --kw: #b6e84f
22
+ }
23
+
24
+ .snk.snk-light {
25
+ color: #2f4a39;
26
+ --bg: #f3f7f2;
27
+ --surf: #e9f0e8;
28
+ --txt: #2f4a39;
29
+ --sub: #6a8574;
30
+ --bd: #d6e3d7;
31
+ --acc: #2f9e63;
32
+ --acc2: #6f9a34;
33
+ --sel: #2f9e63;
34
+ --wrt: #d9607a;
35
+ --warn: #bf831f;
36
+ --kw: #5c8a2c
37
+ }
38
+
39
+ .snk,
40
+ .snk * {
41
+ box-sizing: border-box
42
+ }
43
+
44
+ .snk button {
45
+ font: inherit;
46
+ color: inherit
47
+ }
48
+
49
+ .snk .snk-fab {
50
+ position: fixed;
51
+ right: 20px;
52
+ bottom: 20px;
53
+ left: auto;
54
+ top: auto;
55
+ width: 52px;
56
+ height: 52px;
57
+ border-radius: 50%;
58
+ border: 0;
59
+ cursor: grab;
60
+ z-index: 2147483000;
61
+ display: flex;
62
+ align-items: center;
63
+ justify-content: center;
64
+ background: radial-gradient(120% 120% at 30% 20%, #4ce694, #16a35f 55%, #0c6b40);
65
+ color: #fff;
66
+ box-shadow: 0 8px 22px rgba(12, 90, 55, .5), inset 0 1.5px 0 rgba(255, 255, 255, .28), inset 0 -3px 8px rgba(0, 0, 0, .25);
67
+ touch-action: none;
68
+ user-select: none;
69
+ -webkit-user-select: none;
70
+ transition: transform .2s, box-shadow .2s, opacity .2s
71
+ }
72
+
73
+ .snk .snk-fab:hover {
74
+ transform: scale(1.06)
75
+ }
76
+
77
+ .snk .snk-fab.snk-drag {
78
+ cursor: grabbing;
79
+ transform: scale(1.1);
80
+ box-shadow: 0 10px 28px rgba(0, 0, 0, .45)
81
+ }
82
+
83
+ .snk .snk-fab.snk-hidden {
84
+ opacity: 0;
85
+ transform: scale(.5);
86
+ pointer-events: none
87
+ }
88
+
89
+ .snk .snk-fab svg {
90
+ width: 38px;
91
+ height: 38px;
92
+ color: #fff;
93
+ pointer-events: none
94
+ }
95
+
96
+ .snk .snk-badge {
97
+ position: absolute;
98
+ top: -5px;
99
+ right: -5px;
100
+ min-width: 19px;
101
+ height: 19px;
102
+ padding: 0 4px;
103
+ border-radius: 10px;
104
+ background: var(--surf);
105
+ color: var(--txt);
106
+ font-weight: 600;
107
+ font-size: 11px;
108
+ line-height: 19px;
109
+ text-align: center;
110
+ border: 1px solid var(--bd);
111
+ pointer-events: none
112
+ }
113
+
114
+ .snk .snk-badge.snk-hot {
115
+ background: var(--warn);
116
+ color: #1e1e2e;
117
+ border-color: var(--warn)
118
+ }
119
+
120
+ .snk .snk-back {
121
+ position: fixed;
122
+ inset: 0;
123
+ background: rgba(8, 18, 12, .55);
124
+ opacity: 0;
125
+ pointer-events: none;
126
+ transition: opacity .2s;
127
+ z-index: 2147483001
128
+ }
129
+
130
+ .snk .snk-back.snk-show {
131
+ opacity: 1;
132
+ pointer-events: auto
133
+ }
134
+
135
+ .snk .snk-panel {
136
+ position: fixed;
137
+ top: 0;
138
+ right: 0;
139
+ height: 100%;
140
+ width: min(1080px, 96vw);
141
+ background: var(--surf);
142
+ color: var(--txt);
143
+ z-index: 2147483002;
144
+ transform: translateX(102%);
145
+ transition: transform .28s cubic-bezier(.22, 1, .36, 1);
146
+ display: flex;
147
+ flex-direction: column;
148
+ box-shadow: -16px 0 50px rgba(0, 0, 0, .45)
149
+ }
150
+
151
+ .snk .snk-panel.snk-open {
152
+ transform: none
153
+ }
154
+
155
+ .snk .snk-head {
156
+ display: flex;
157
+ align-items: center;
158
+ gap: 8px;
159
+ padding: 14px 20px;
160
+ border-bottom: 1px solid var(--bd);
161
+ background: linear-gradient(135deg, rgba(61, 220, 132, .16), rgba(182, 232, 79, .1))
162
+ }
163
+
164
+ .snk .snk-title {
165
+ font-size: 15px;
166
+ font-weight: 700;
167
+ display: flex;
168
+ align-items: center;
169
+ gap: 8px;
170
+ color: var(--txt)
171
+ }
172
+
173
+ .snk .snk-title svg {
174
+ width: 30px;
175
+ height: 30px;
176
+ color: var(--acc)
177
+ }
178
+
179
+ .snk .snk-sub {
180
+ color: var(--sub);
181
+ font-size: 12px;
182
+ margin-top: 2px
183
+ }
184
+
185
+ .snk .snk-sp {
186
+ flex: 1
187
+ }
188
+
189
+ .snk .snk-ico {
190
+ background: transparent;
191
+ border: 0;
192
+ color: var(--sub);
193
+ cursor: pointer;
194
+ width: 34px;
195
+ height: 34px;
196
+ border-radius: 8px;
197
+ font-size: 18px;
198
+ line-height: 1;
199
+ display: flex;
200
+ align-items: center;
201
+ justify-content: center
202
+ }
203
+
204
+ .snk .snk-ico:hover {
205
+ background: rgba(127, 127, 127, .15);
206
+ color: var(--txt)
207
+ }
208
+
209
+ .snk .snk-lang {
210
+ background: var(--bg);
211
+ border: 1px solid var(--bd);
212
+ color: var(--txt);
213
+ border-radius: 8px;
214
+ padding: 6px 8px;
215
+ font-size: 12px;
216
+ font-weight: 600;
217
+ cursor: pointer
218
+ }
219
+
220
+ .snk .snk-body {
221
+ flex: 1;
222
+ min-height: 0;
223
+ display: flex
224
+ }
225
+
226
+ .snk .snk-views {
227
+ flex: 1;
228
+ min-width: 0;
229
+ display: flex;
230
+ flex-direction: column
231
+ }
232
+
233
+ .snk .snk-view {
234
+ display: none;
235
+ flex: 1;
236
+ min-height: 0;
237
+ flex-direction: column;
238
+ overflow: hidden
239
+ }
240
+
241
+ .snk .snk-view.snk-active {
242
+ display: flex
243
+ }
244
+
245
+ .snk .snk-menu {
246
+ width: 132px;
247
+ flex-shrink: 0;
248
+ border-left: 1px solid var(--bd);
249
+ background: var(--bg);
250
+ display: flex;
251
+ flex-direction: column;
252
+ gap: 4px;
253
+ padding: 12px 8px;
254
+ overflow-y: auto
255
+ }
256
+
257
+ .snk .snk-menu-item {
258
+ background: transparent;
259
+ border: 0;
260
+ border-radius: 8px;
261
+ padding: 9px 12px;
262
+ text-align: left;
263
+ color: var(--sub);
264
+ cursor: pointer;
265
+ font-size: 13px;
266
+ font-weight: 600
267
+ }
268
+
269
+ .snk .snk-menu-item:hover {
270
+ background: rgba(127, 127, 127, .12);
271
+ color: var(--txt)
272
+ }
273
+
274
+ .snk .snk-menu-item.snk-active {
275
+ background: rgba(61, 220, 132, .14);
276
+ color: var(--acc)
277
+ }
278
+
279
+ .snk.snk-standalone .snk-fab,
280
+ .snk.snk-standalone .snk-back {
281
+ display: none
282
+ }
283
+
284
+ .snk.snk-standalone .snk-panel {
285
+ position: static;
286
+ transform: none;
287
+ width: 100%;
288
+ max-width: 1080px;
289
+ margin: 0 auto;
290
+ height: auto;
291
+ border-radius: 16px;
292
+ box-shadow: 0 12px 44px rgba(0, 0, 0, .3)
293
+ }
@@ -0,0 +1,5 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 96 96" fill="none" stroke="currentColor" stroke-width="4.5" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
2
+ <ellipse cx="48" cy="26" rx="26" ry="9"/>
3
+ <path d="M22 26 v18 c0 5 11.6 9 26 9 s26 -4 26 -9 V26"/>
4
+ <path d="M22 44 v18 c0 5 11.6 9 26 9 s26 -4 26 -9 v-18"/>
5
+ </svg>