@ai-devtools/dbspec-windows-x64 1.6.2 → 1.6.4
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.
- package/bin/dbspec/_internal/_asyncio.pyd +0 -0
- package/bin/dbspec/_internal/_bz2.pyd +0 -0
- package/bin/dbspec/_internal/_ctypes.pyd +0 -0
- package/bin/dbspec/_internal/_decimal.pyd +0 -0
- package/bin/dbspec/_internal/_elementtree.pyd +0 -0
- package/bin/dbspec/_internal/_hashlib.pyd +0 -0
- package/bin/dbspec/_internal/_lzma.pyd +0 -0
- package/bin/dbspec/_internal/_multiprocessing.pyd +0 -0
- package/bin/dbspec/_internal/_overlapped.pyd +0 -0
- package/bin/dbspec/_internal/_queue.pyd +0 -0
- package/bin/dbspec/_internal/_socket.pyd +0 -0
- package/bin/dbspec/_internal/_sqlite3.pyd +0 -0
- package/bin/dbspec/_internal/_ssl.pyd +0 -0
- package/bin/dbspec/_internal/_uuid.pyd +0 -0
- package/bin/dbspec/_internal/_wmi.pyd +0 -0
- package/bin/dbspec/_internal/_zoneinfo.pyd +0 -0
- package/bin/dbspec/_internal/base_library.zip +0 -0
- package/bin/dbspec/_internal/dbspec.egg-info/PKG-INFO +10 -2
- package/bin/dbspec/_internal/dbspec.egg-info/SOURCES.txt +7 -0
- package/bin/dbspec/_internal/dbspec.egg-info/requires.txt +1 -0
- package/bin/dbspec/_internal/{psycopg-3.3.6.dist-info → psycopg-3.3.8.dist-info}/METADATA +3 -3
- package/bin/dbspec/_internal/{psycopg-3.3.6.dist-info → psycopg-3.3.8.dist-info}/RECORD +14 -14
- package/bin/dbspec/_internal/{psycopg-3.3.6.dist-info → psycopg-3.3.8.dist-info}/WHEEL +1 -1
- package/bin/dbspec/_internal/psycopg_binary/_psycopg.cp313-win_amd64.pyd +0 -0
- package/bin/dbspec/_internal/psycopg_binary/pq.cp313-win_amd64.pyd +0 -0
- package/bin/dbspec/_internal/psycopg_binary-3.3.8.dist-info/DELVEWHEEL +2 -0
- package/bin/dbspec/_internal/{psycopg_binary-3.3.6.dist-info → psycopg_binary-3.3.8.dist-info}/METADATA +1 -1
- package/bin/dbspec/_internal/psycopg_binary-3.3.8.dist-info/RECORD +23 -0
- package/bin/dbspec/_internal/psycopg_binary.libs/{libcrypto-3-x64-1b25ffbe1e3cb0270df11cbc0fff52e0.dll → libcrypto-3-x64-e8fe16ae7aaa80c4058daca50eeb22bc.dll} +0 -0
- package/bin/dbspec/_internal/psycopg_binary.libs/{libpq-27f4bc79679c7def243803fa35efdfb6.dll → libpq-8964b48270878337a158ce8745239352.dll} +0 -0
- package/bin/dbspec/_internal/psycopg_binary.libs/libssl-3-x64-cd56d6ad021c40bed05a41c6afc65bd6.dll +0 -0
- package/bin/dbspec/_internal/{pydantic-2.14.1.dist-info → pydantic-2.14.3.dist-info}/METADATA +105 -2
- package/bin/dbspec/_internal/{pydantic-2.14.1.dist-info → pydantic-2.14.3.dist-info}/RECORD +30 -28
- package/bin/dbspec/_internal/{pydantic-2.14.1.dist-info → pydantic-2.14.3.dist-info}/WHEEL +1 -1
- package/bin/dbspec/_internal/pydantic_core/_pydantic_core.cp313-win_amd64.pyd +0 -0
- package/bin/dbspec/_internal/pyexpat.pyd +0 -0
- package/bin/dbspec/_internal/pyproject.toml +2 -1
- package/bin/dbspec/_internal/python313.dll +0 -0
- package/bin/dbspec/_internal/select.pyd +0 -0
- package/bin/dbspec/_internal/sqlalchemy/engine/_processors_cy.cp313-win_amd64.pyd +0 -0
- package/bin/dbspec/_internal/sqlalchemy/engine/_result_cy.cp313-win_amd64.pyd +0 -0
- package/bin/dbspec/_internal/sqlalchemy/engine/_row_cy.cp313-win_amd64.pyd +0 -0
- package/bin/dbspec/_internal/sqlalchemy/engine/_util_cy.cp313-win_amd64.pyd +0 -0
- package/bin/dbspec/_internal/sqlalchemy/sql/_cache_key_cy.cp313-win_amd64.pyd +0 -0
- package/bin/dbspec/_internal/sqlalchemy/sql/_util_cy.cp313-win_amd64.pyd +0 -0
- package/bin/dbspec/_internal/sqlalchemy/util/_collections_cy.cp313-win_amd64.pyd +0 -0
- package/bin/dbspec/_internal/sqlalchemy/util/_immutabledict_cy.cp313-win_amd64.pyd +0 -0
- package/bin/dbspec/_internal/sqlite3.dll +0 -0
- package/bin/dbspec/_internal/src/resources/sqlalchemy_templates/alembic_default_comparator.py.j2 +144 -62
- package/bin/dbspec/_internal/unicodedata.pyd +0 -0
- package/bin/dbspec/dbspec.exe +0 -0
- package/package.json +1 -1
- package/bin/dbspec/_internal/psycopg_binary-3.3.6.dist-info/DELVEWHEEL +0 -2
- package/bin/dbspec/_internal/psycopg_binary-3.3.6.dist-info/RECORD +0 -23
- package/bin/dbspec/_internal/psycopg_binary.libs/libssl-3-x64-6f42cecbe10bc1773f4152192bcce611.dll +0 -0
- /package/bin/dbspec/_internal/{psycopg-3.3.6.dist-info → psycopg-3.3.8.dist-info}/INSTALLER +0 -0
- /package/bin/dbspec/_internal/{psycopg-3.3.6.dist-info → psycopg-3.3.8.dist-info}/licenses/LICENSE.txt +0 -0
- /package/bin/dbspec/_internal/{psycopg-3.3.6.dist-info → psycopg-3.3.8.dist-info}/top_level.txt +0 -0
- /package/bin/dbspec/_internal/{psycopg_binary-3.3.6.dist-info → psycopg_binary-3.3.8.dist-info}/INSTALLER +0 -0
- /package/bin/dbspec/_internal/{psycopg_binary-3.3.6.dist-info → psycopg_binary-3.3.8.dist-info}/WHEEL +0 -0
- /package/bin/dbspec/_internal/{psycopg_binary-3.3.6.dist-info → psycopg_binary-3.3.8.dist-info}/licenses/LICENSE.txt +0 -0
- /package/bin/dbspec/_internal/{psycopg_binary-3.3.6.dist-info → psycopg_binary-3.3.8.dist-info}/top_level.txt +0 -0
- /package/bin/dbspec/_internal/{pydantic-2.14.1.dist-info → pydantic-2.14.3.dist-info}/INSTALLER +0 -0
- /package/bin/dbspec/_internal/{pydantic-2.14.1.dist-info → pydantic-2.14.3.dist-info}/licenses/LICENSE +0 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dbspec
|
|
3
|
-
Version: 1.6.
|
|
3
|
+
Version: 1.6.4
|
|
4
4
|
Summary: DBSpec: CLI/TUI for database design (Excel as DSL)
|
|
5
5
|
Requires-Python: >=3.11
|
|
6
6
|
Description-Content-Type: text/markdown
|
|
@@ -12,6 +12,7 @@ Requires-Dist: sqlalchemy>=2.0.16
|
|
|
12
12
|
Requires-Dist: alembic
|
|
13
13
|
Requires-Dist: psycopg[binary]
|
|
14
14
|
Requires-Dist: jinja2
|
|
15
|
+
Requires-Dist: tomlkit>=0.13.2
|
|
15
16
|
|
|
16
17
|
# DBSpec
|
|
17
18
|
|
|
@@ -125,7 +126,14 @@ Migrations user guide: `docs/tui-migrations.md`.
|
|
|
125
126
|
|
|
126
127
|
## Configuration
|
|
127
128
|
|
|
128
|
-
|
|
129
|
+
Общая конфигурация команды: `.dbspec/config.toml` (в Git). Подключение к БД и
|
|
130
|
+
личные настройки: `.dbspec/local.toml` (исключён из Git). Временное состояние TUI
|
|
131
|
+
хранится отдельно в `.dbspec/state.json`.
|
|
132
|
+
|
|
133
|
+
CLI и TUI используют единственный путь моделей `generator.sqlalchemy.output_dir`
|
|
134
|
+
из общего конфига. Изменение пути в TUI сохраняется туда же; локальные настройки
|
|
135
|
+
и state его не перекрывают. Старый смешанный формат не поддерживается: существующие
|
|
136
|
+
конфиги разделяются вручную, без автоматического переноса.
|
|
129
137
|
|
|
130
138
|
Подробнее:
|
|
131
139
|
|
|
@@ -137,11 +137,15 @@ src/resources/sqlalchemy_templates/package_init.py.j2
|
|
|
137
137
|
src/reveng/__init__.py
|
|
138
138
|
src/storage/__init__.py
|
|
139
139
|
src/storage/alembic_env_patching.py
|
|
140
|
+
src/storage/alembic_service_table.py
|
|
140
141
|
src/storage/atomic.py
|
|
142
|
+
src/storage/codegen_config.py
|
|
141
143
|
src/storage/config.py
|
|
144
|
+
src/storage/config_files.py
|
|
142
145
|
src/storage/file_utils.py
|
|
143
146
|
src/storage/init.py
|
|
144
147
|
src/storage/init_alembic.py
|
|
148
|
+
src/storage/init_config.py
|
|
145
149
|
src/storage/init_logging.py
|
|
146
150
|
src/storage/init_resources.py
|
|
147
151
|
src/storage/init_templates.py
|
|
@@ -184,6 +188,7 @@ src/tui/components/header.py
|
|
|
184
188
|
src/tui/components/help_overlay.py
|
|
185
189
|
src/tui/components/init_dialog.py
|
|
186
190
|
src/tui/components/screen_host.py
|
|
191
|
+
src/tui/components/settings_dialog.py
|
|
187
192
|
src/tui/components/sidebar.py
|
|
188
193
|
src/tui/components/status_badge.py
|
|
189
194
|
src/tui/jobs/__init__.py
|
|
@@ -254,6 +259,8 @@ src/tui/styles/__init__.py
|
|
|
254
259
|
src/tui/styles/build.py
|
|
255
260
|
src/tui/styles/tokens.py
|
|
256
261
|
src/utils/__init__.py
|
|
262
|
+
src/utils/default_comparison.py
|
|
263
|
+
src/utils/default_literals.py
|
|
257
264
|
src/utils/parsing.py
|
|
258
265
|
src/utils/postgres_types.py
|
|
259
266
|
src/utils/progress.py
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: psycopg
|
|
3
|
-
Version: 3.3.
|
|
3
|
+
Version: 3.3.8
|
|
4
4
|
Summary: PostgreSQL database adapter for Python
|
|
5
5
|
Author-email: Daniele Varrazzo <daniele.varrazzo@gmail.com>
|
|
6
6
|
License-Expression: LGPL-3.0-only
|
|
@@ -34,9 +34,9 @@ License-File: LICENSE.txt
|
|
|
34
34
|
Requires-Dist: typing-extensions>=4.6; python_version < "3.13"
|
|
35
35
|
Requires-Dist: tzdata; sys_platform == "win32"
|
|
36
36
|
Provides-Extra: c
|
|
37
|
-
Requires-Dist: psycopg-c==3.3.
|
|
37
|
+
Requires-Dist: psycopg-c==3.3.8; implementation_name != "pypy" and extra == "c"
|
|
38
38
|
Provides-Extra: binary
|
|
39
|
-
Requires-Dist: psycopg-binary==3.3.
|
|
39
|
+
Requires-Dist: psycopg-binary==3.3.8; implementation_name != "pypy" and extra == "binary"
|
|
40
40
|
Provides-Extra: pool
|
|
41
41
|
Requires-Dist: psycopg-pool; extra == "pool"
|
|
42
42
|
Provides-Extra: test
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
psycopg-3.3.
|
|
2
|
-
psycopg-3.3.
|
|
3
|
-
psycopg-3.3.
|
|
4
|
-
psycopg-3.3.
|
|
5
|
-
psycopg-3.3.
|
|
6
|
-
psycopg-3.3.
|
|
1
|
+
psycopg-3.3.8.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
2
|
+
psycopg-3.3.8.dist-info/METADATA,sha256=xQOPeSh8UB19B0tSHd-nEgJGGrG9it4PXcsIjvF-dus,4369
|
|
3
|
+
psycopg-3.3.8.dist-info/RECORD,,
|
|
4
|
+
psycopg-3.3.8.dist-info/WHEEL,sha256=mOdXR9C3wMVov7cSY8PY-XCzo3SmmWCHvGQr5csJoao,91
|
|
5
|
+
psycopg-3.3.8.dist-info/licenses/LICENSE.txt,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
|
|
6
|
+
psycopg-3.3.8.dist-info/top_level.txt,sha256=npthKx2_OEoahttYqdsIPlRUgjS_bQBmfpDCVxQcPGo,8
|
|
7
7
|
psycopg/__init__.py,sha256=XxYHoZPLY-YKDFaHIJ0r0OMCl2C5VZ6ZaPMda12Cx3g,3423
|
|
8
8
|
psycopg/__pycache__/__init__.cpython-313.pyc,,
|
|
9
9
|
psycopg/__pycache__/_acompat.cpython-313.pyc,,
|
|
@@ -76,7 +76,7 @@ psycopg/_copy.py,sha256=Y9N2jQuE_MK5M-nunJ7ZrR3GpLfOnUn_LRCyY34vcOI,9735
|
|
|
76
76
|
psycopg/_copy_async.py,sha256=jL2_b3CgDqzv0WkWldtyoIe-AkGwocAPM18Xm1ArNK4,9974
|
|
77
77
|
psycopg/_copy_base.py,sha256=u2mwZxLMrIWDDvWgO5nb_KEsb9LZSYE52PFd374FoNk,14312
|
|
78
78
|
psycopg/_cursor_base.py,sha256=aqfhe1f-N_NDgJ6tReu6N2Rmav6_7hUX_pMKnqdBhuc,23103
|
|
79
|
-
psycopg/_dns.py,sha256=
|
|
79
|
+
psycopg/_dns.py,sha256=vgo0PxPMUrXF26pIbz3HsA1RkWyvjZTvLVA89X36uww,8006
|
|
80
80
|
psycopg/_encodings.py,sha256=wdONXpHrOA8n4CirFw-88j0FOvwte1PNCOjy94oOzJw,4599
|
|
81
81
|
psycopg/_enums.py,sha256=5gCef_sYe9UdaE4n_RmDWeF4TfQOwQFeikjrkz9YivI,1691
|
|
82
82
|
psycopg/_oids.py,sha256=mJI8HbRrTsbK0LIgnnG5xPH-3hxNUclotqUurmyo2s0,1875
|
|
@@ -98,7 +98,7 @@ psycopg/_typemod.py,sha256=25uahNc_1W1ASkgQ1Y0IhjZtyERVYlxrdEq7XcCDrtY,3165
|
|
|
98
98
|
psycopg/_tz.py,sha256=_-W0Izs84UYrbAY3I1CicGUk0ng-boCMZo5H5h0j9ug,1186
|
|
99
99
|
psycopg/_wrappers.py,sha256=wKZt_ar8QuRgEKC6tuwamYXCwB1P7IZQsmgYdVOlAhU,3126
|
|
100
100
|
psycopg/abc.py,sha256=uvhJMFQm6E_gfJqUWbIq70AqOlKURY9GHzF4g2-1Djg,7770
|
|
101
|
-
psycopg/adapt.py,sha256=
|
|
101
|
+
psycopg/adapt.py,sha256=EIF0LegtdmwqWyVE1WnrBrTFnfugYCJ8fFfYKH9TCOY,5437
|
|
102
102
|
psycopg/client_cursor.py,sha256=nRo3bckcKj3nZGAcXzrsPP45hEMfaxlegVne9wMdaz8,2681
|
|
103
103
|
psycopg/connection.py,sha256=AJXL6CYrQ2RfVGEbgXIm7KtookJSodOK-9_cbXJXOrQ,20665
|
|
104
104
|
psycopg/connection_async.py,sha256=vQrHXLJAQUAmXzGmMBkvy_XU9cxvBSkPwJb-eM0Yo3s,22963
|
|
@@ -114,7 +114,7 @@ psycopg/cursor.py,sha256=n-26XoMiYo34ONdJp_SKe5CCYBqztNVSzllMVIfxPg8,11116
|
|
|
114
114
|
psycopg/cursor_async.py,sha256=hx7jKMWQUx9iRwMdXbCqYICwd4x2v-BmXuSBbuv5owA,11426
|
|
115
115
|
psycopg/dbapi20.py,sha256=ZQwoxxMO4OHuuLZ06p19VWgJtmFbLX5YuLHbyjNF2YI,3309
|
|
116
116
|
psycopg/errors.py,sha256=XrkWWippwHpMm49TQ4LBDsg-g_Y-V8GFTuLtlQ3Tmhc,46563
|
|
117
|
-
psycopg/generators.py,sha256=
|
|
117
|
+
psycopg/generators.py,sha256=7JPG_mz-yXvKj1bvEE2ZhJ8ZyQqTPMq_hCajWX_jHW8,12462
|
|
118
118
|
psycopg/postgres.py,sha256=g1IImgRkiMny5OreYHZmonkI_CVNjOFpUYAFmWvCoUM,6439
|
|
119
119
|
psycopg/pq/__init__.py,sha256=bT8FsbWgKJb7Ck-2kMiugQko9FnDVdcEJuwb50SPUOU,3976
|
|
120
120
|
psycopg/pq/__pycache__/__init__.cpython-313.pyc,,
|
|
@@ -135,7 +135,7 @@ psycopg/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
135
135
|
psycopg/raw_cursor.py,sha256=tkdDWTEAKr9TdN5RcHhIPdAdYsngs5oZmmQt-2hQwmQ,1159
|
|
136
136
|
psycopg/rows.py,sha256=M1wDxKWFF8KM9Qkejj3a_JdUhBjuv-uVmrYw4vBGW9s,7959
|
|
137
137
|
psycopg/sql.py,sha256=zntTeNSnZ6pqBNYCy-mhsvXxerKp53Xt4M3glFNab-g,19116
|
|
138
|
-
psycopg/transaction.py,sha256
|
|
138
|
+
psycopg/transaction.py,sha256=oB-rfQAIuswEdI5yihIUk2TeEhP97P988NLSxz_8tVg,10964
|
|
139
139
|
psycopg/types/__init__.py,sha256=JPAkV4EfkXwdsr76_U1DsQV19c8aQNSB6kgud4bhXeM,181
|
|
140
140
|
psycopg/types/__pycache__/__init__.cpython-313.pyc,,
|
|
141
141
|
psycopg/types/__pycache__/array.cpython-313.pyc,,
|
|
@@ -154,13 +154,13 @@ psycopg/types/__pycache__/range.cpython-313.pyc,,
|
|
|
154
154
|
psycopg/types/__pycache__/shapely.cpython-313.pyc,,
|
|
155
155
|
psycopg/types/__pycache__/string.cpython-313.pyc,,
|
|
156
156
|
psycopg/types/__pycache__/uuid.cpython-313.pyc,,
|
|
157
|
-
psycopg/types/array.py,sha256=
|
|
157
|
+
psycopg/types/array.py,sha256=7Ju-GmmuKoE2laM2KVXMxasTooKQpW4yXwr1ZfEwqGU,16668
|
|
158
158
|
psycopg/types/bool.py,sha256=0GJQG-Cm5P5NgH8TfLNj9n_e5ckw42XnsRBinX0k45w,1163
|
|
159
|
-
psycopg/types/composite.py,sha256=
|
|
160
|
-
psycopg/types/datetime.py,sha256=
|
|
159
|
+
psycopg/types/composite.py,sha256=vMWFEHtXnR3Cz_M7l5ahVh_ha4X7sXT58EgWubUhDUY,18516
|
|
160
|
+
psycopg/types/datetime.py,sha256=OYmd2o9635uxPrJ39Xz2wqdV-Gc52XSEMc7BgEQImgI,25585
|
|
161
161
|
psycopg/types/enum.py,sha256=iIb1B3TMJxdbptqaRvzb92S5IU5SR0Y8dvVOkiwsouQ,7479
|
|
162
162
|
psycopg/types/hstore.py,sha256=CtE4aq_Cc5bVzjQROH7NHV5DOxK89nXTVZolPmRrL7E,7076
|
|
163
|
-
psycopg/types/json.py,sha256=
|
|
163
|
+
psycopg/types/json.py,sha256=iJOgq6DRGu0geDbNSvxtPxnqsg_HuyXTdBI4XoWe-Y8,9713
|
|
164
164
|
psycopg/types/multirange.py,sha256=ITuoEw72k4oM-3fv6mJ7Td3_3ynF2u_y219RbT_EhZo,17862
|
|
165
165
|
psycopg/types/net.py,sha256=h1vJ8Fpo4ekJpMMiiNym16EMiUmyiFtahqsQZuaZRcM,6732
|
|
166
166
|
psycopg/types/none.py,sha256=gy_OJqE1YslJ2RIix0Eq3x0B8IPfoH-Gcc2sQMIO0Sw,666
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
Version: 1.13.0
|
|
2
|
+
Arguments: ['C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-rain3g3y\\cp313-win_amd64\\build\\venv\\Scripts\\delvewheel', 'repair', '-w', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-rain3g3y\\cp313-win_amd64\\repaired_wheel', '--no-mangle', 'libiconv-2.dll;libwinpthread-1.dll', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-rain3g3y\\cp313-win_amd64\\built_wheel\\psycopg_binary-3.3.8-cp313-cp313-win_amd64.whl']
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
psycopg_binary-3.3.8.dist-info/DELVEWHEEL,sha256=U3eTju93mBdsT2AciiEnhU2iuNOCb4tI-Spc5wM0p-I,460
|
|
2
|
+
psycopg_binary-3.3.8.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
3
|
+
psycopg_binary-3.3.8.dist-info/METADATA,sha256=ipnRc4fD97ZpyPpKr-jpdiiP3KdqIIzmR7y1l2PnBsI,2777
|
|
4
|
+
psycopg_binary-3.3.8.dist-info/RECORD,,
|
|
5
|
+
psycopg_binary-3.3.8.dist-info/WHEEL,sha256=AP_wkikJcUkDPUGvTNydv7g0R7BhW1u_fVHNKW7TJyI,101
|
|
6
|
+
psycopg_binary-3.3.8.dist-info/licenses/LICENSE.txt,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
|
|
7
|
+
psycopg_binary-3.3.8.dist-info/top_level.txt,sha256=8OM_PsAa5oKkzVvRu8kDESihBQo_LXqwG_nrlecubIk,15
|
|
8
|
+
psycopg_binary.libs/libcrypto-3-x64-e8fe16ae7aaa80c4058daca50eeb22bc.dll,sha256=6P4WrnqqgMQFjaylDusivGj2b1G9qFnJXvAmPnBF9aM,5270528
|
|
9
|
+
psycopg_binary.libs/libpq-8964b48270878337a158ce8745239352.dll,sha256=X41FpLwoeB9BK363qyGC2P5S_QtHbDTHAubnE2Rh5xo,334848
|
|
10
|
+
psycopg_binary.libs/libssl-3-x64-cd56d6ad021c40bed05a41c6afc65bd6.dll,sha256=QYemtI02eYJqan4ZAyb8baLrv6K6Y9gMjNAMl-H0CBA,866816
|
|
11
|
+
psycopg_binary/__init__.py,sha256=cS_yF_9nWV85G23SoOFIx4pudPPo9KZhFvhzwOSTlbQ,747
|
|
12
|
+
psycopg_binary/__pycache__/__init__.cpython-313.pyc,,
|
|
13
|
+
psycopg_binary/__pycache__/_uuid.cpython-313.pyc,,
|
|
14
|
+
psycopg_binary/__pycache__/version.cpython-313.pyc,,
|
|
15
|
+
psycopg_binary/_psycopg.c,sha256=JxKjgAUf0-TpSgwc8GSqwhG3xskaFSlydXF11KAoX8c,5525307
|
|
16
|
+
psycopg_binary/_psycopg.cp313-win_amd64.pyd,sha256=5edzLrV3e4x3HqJUoVcND6BrYdPG4qMPj-1VcmRKBYc,586752
|
|
17
|
+
psycopg_binary/_psycopg.pyi,sha256=pme2JR7TOn3IU5rKNJHIf49V7-1aEvQ3SG52GFhxjAI,3262
|
|
18
|
+
psycopg_binary/_uuid.py,sha256=JjO2rXenlacRYuYULh6RgHEP-M7gT32QWs4pz-jiST4,828
|
|
19
|
+
psycopg_binary/pq.c,sha256=9B0cj5qelawaqAgTlS1uuGpAPFpXcV4YaVgC1RJE_WE,2085061
|
|
20
|
+
psycopg_binary/pq.cp313-win_amd64.pyd,sha256=k5pHuN4ef9Cjzz5BC5zEHz27T6eEhCrD82Ml_3AuYCI,238080
|
|
21
|
+
psycopg_binary/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
+
psycopg_binary/types/numutils.c,sha256=2SLaXxO0q3uHYmQHiY-6L79Ymiq_Dfjedv7ZuTnPsOQ,6252
|
|
23
|
+
psycopg_binary/version.py,sha256=NlEr0mLYE3j2I3iC7xbN60gCQQumNdz4eHnlARwUqkU,258
|
|
Binary file
|
|
Binary file
|
package/bin/dbspec/_internal/psycopg_binary.libs/libssl-3-x64-cd56d6ad021c40bed05a41c6afc65bd6.dll
ADDED
|
Binary file
|
package/bin/dbspec/_internal/{pydantic-2.14.1.dist-info → pydantic-2.14.3.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: pydantic
|
|
3
|
-
Version: 2.14.
|
|
3
|
+
Version: 2.14.3
|
|
4
4
|
Summary: Data validation using Python type hints
|
|
5
5
|
Project-URL: Homepage, https://github.com/pydantic/pydantic
|
|
6
6
|
Project-URL: Documentation, https://pydantic.dev/docs/validation/latest/get-started/
|
|
@@ -11,6 +11,7 @@ Author-email: Samuel Colvin <s@muelcolvin.com>, Eric Jolibois <em.jolibois@gmail
|
|
|
11
11
|
License-Expression: MIT
|
|
12
12
|
License-File: LICENSE
|
|
13
13
|
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Environment :: WebAssembly :: Emscripten
|
|
14
15
|
Classifier: Framework :: Hypothesis
|
|
15
16
|
Classifier: Framework :: Pydantic
|
|
16
17
|
Classifier: Intended Audience :: Developers
|
|
@@ -26,12 +27,13 @@ Classifier: Programming Language :: Python :: 3.13
|
|
|
26
27
|
Classifier: Programming Language :: Python :: 3.14
|
|
27
28
|
Classifier: Programming Language :: Python :: 3.15
|
|
28
29
|
Classifier: Programming Language :: Python :: Implementation :: CPython
|
|
30
|
+
Classifier: Programming Language :: Python :: Implementation :: GraalPy
|
|
29
31
|
Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
30
32
|
Classifier: Topic :: Internet
|
|
31
33
|
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
32
34
|
Requires-Python: >=3.10
|
|
33
35
|
Requires-Dist: annotated-types>=0.6.0
|
|
34
|
-
Requires-Dist: pydantic-core==2.50.
|
|
36
|
+
Requires-Dist: pydantic-core==2.50.4
|
|
35
37
|
Requires-Dist: typing-extensions>=4.16.0
|
|
36
38
|
Requires-Dist: typing-inspection>=0.4.4
|
|
37
39
|
Provides-Extra: email
|
|
@@ -117,6 +119,107 @@ See our [security policy](https://github.com/pydantic/pydantic/security/policy).
|
|
|
117
119
|
<!-- markdownlint-disable descriptive-link-text -->
|
|
118
120
|
<!-- markdownlint-disable-next-line first-line-heading -->
|
|
119
121
|
|
|
122
|
+
## v2.14.3 (2026-11-04)
|
|
123
|
+
|
|
124
|
+
[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.14.3)
|
|
125
|
+
|
|
126
|
+
### What's Changed
|
|
127
|
+
|
|
128
|
+
#### Packaging
|
|
129
|
+
|
|
130
|
+
* Build wheels for GraalPy 3.13 by [@msimacek](https://github.com/msimacek) in [#14136](https://github.com/pydantic/pydantic/pull/14136).
|
|
131
|
+
|
|
132
|
+
The previous v2.14.2 release published GraalPy 3.11 wheels, which were not working due to a PyO3 version bump. A CI workflow issue
|
|
133
|
+
made it so that the wheel wasn't tested before publishing. This is now fixed: starting in v2.14.3, we no longer publish GraalPy 3.11
|
|
134
|
+
wheels, and GraalPy 3.13 wheels are now published together with the existing 3.12 one.
|
|
135
|
+
|
|
136
|
+
#### Performance
|
|
137
|
+
|
|
138
|
+
* Improve schema generation for fixed type handlers by [@alexmojaki](https://github.com/alexmojaki) in [#14130](https://github.com/pydantic/pydantic/pull/14130)
|
|
139
|
+
* Skip general schema dispatch for builtin scalars by [@alexmojaki](https://github.com/alexmojaki) in [#14141](https://github.com/pydantic/pydantic/pull/14141)
|
|
140
|
+
* Skip annotation handler setup when annotations are empty by [@alexmojaki](https://github.com/alexmojaki) in [#14149](https://github.com/pydantic/pydantic/pull/14149)
|
|
141
|
+
* Fix quadratic serialization time with per-index `include`/`exclude` on sequences by [@Viicos](https://github.com/Viicos) in [#14160](https://github.com/pydantic/pydantic/pull/14160)
|
|
142
|
+
* Avoid type lookups when checking for `None` during serialization by [@Viicos](https://github.com/Viicos) in [#14167](https://github.com/pydantic/pydantic/pull/14167)
|
|
143
|
+
* Improve performance of model serialization by [@Viicos](https://github.com/Viicos) in [#14171](https://github.com/pydantic/pydantic/pull/14171)
|
|
144
|
+
* Improve performance of dict serialization by [@Viicos](https://github.com/Viicos) in [#14172](https://github.com/pydantic/pydantic/pull/14172)
|
|
145
|
+
* Improve performance of type inference during serialization by [@Viicos](https://github.com/Viicos) in [#14173](https://github.com/pydantic/pydantic/pull/14173)
|
|
146
|
+
* Avoid cloning the field name when using the default value during validation by [@Viicos](https://github.com/Viicos) in [#14175](https://github.com/pydantic/pydantic/pull/14175)
|
|
147
|
+
* Do not evaluate `model_config` annotations by [@Viicos](https://github.com/Viicos) in [#14195](https://github.com/pydantic/pydantic/pull/14195)
|
|
148
|
+
* Avoid slow runtime `Protocol` check when expanding `GroupedMetadata` annotations by [@Viicos](https://github.com/Viicos) in [#14196](https://github.com/pydantic/pydantic/pull/14196)
|
|
149
|
+
* Use a lightweight `@contextmanager` implementation internally by [@Viicos](https://github.com/Viicos) in [#14199](https://github.com/pydantic/pydantic/pull/14199)
|
|
150
|
+
|
|
151
|
+
#### Fixes
|
|
152
|
+
|
|
153
|
+
* Fix various issues about GC tracking in `pydantic-core` by [@Viicos](https://github.com/Viicos) in [#13819](https://github.com/pydantic/pydantic/pull/13819)
|
|
154
|
+
* Include `null` in serialization JSON Schema for `unless-none` field serializers by [@Kropiunig](https://github.com/Kropiunig) in [#13848](https://github.com/pydantic/pydantic/pull/13848)
|
|
155
|
+
* Fix `RecursionError` when copying or unpickling models with `defer_build` by [@Viicos](https://github.com/Viicos) in [#14115](https://github.com/pydantic/pydantic/pull/14115)
|
|
156
|
+
* Remove dead `default_factory` check in unsupported `Field()` attribute by [@owtaylor](https://github.com/owtaylor) in [#14129](https://github.com/pydantic/pydantic/pull/14129)
|
|
157
|
+
* Disallow non string extra keys during validation by [@Viicos](https://github.com/Viicos) in [#14135](https://github.com/pydantic/pydantic/pull/14135)
|
|
158
|
+
* Fix deeply nested data being reported as a cyclic reference by [@Viicos](https://github.com/Viicos) in [#14164](https://github.com/pydantic/pydantic/pull/14164)
|
|
159
|
+
|
|
160
|
+
### New Contributors
|
|
161
|
+
|
|
162
|
+
* [@owtaylor](https://github.com/owtaylor) made their first contribution in [#14129](https://github.com/pydantic/pydantic/pull/14129)
|
|
163
|
+
|
|
164
|
+
## v2.14.2 (2026-10-29)
|
|
165
|
+
|
|
166
|
+
[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.14.2)
|
|
167
|
+
|
|
168
|
+
### What's Changed
|
|
169
|
+
|
|
170
|
+
#### Packaging
|
|
171
|
+
|
|
172
|
+
* Bump PyO3 to 0.30.1, jiter to 0.18.0, use `PyFrozenDict` by [@Viicos](https://github.com/Viicos) in [#14003](https://github.com/pydantic/pydantic/pull/14003)
|
|
173
|
+
* Bump speedate to v0.18.0 by [@Viicos](https://github.com/Viicos) in [#14007](https://github.com/pydantic/pydantic/pull/14007)
|
|
174
|
+
* Publish `pydantic-core` wheels for PyPy 8.0 (`pp80` ABI) by [@Viicos](https://github.com/Viicos) in [#14083](https://github.com/pydantic/pydantic/pull/14083)
|
|
175
|
+
|
|
176
|
+
#### Performance
|
|
177
|
+
|
|
178
|
+
* Avoid Python tuple allocation during model fields validation by [@Viicos](https://github.com/Viicos) in [#13955](https://github.com/pydantic/pydantic/pull/13955)
|
|
179
|
+
* Lazily call repr of values during nested union serialization by [@Viicos](https://github.com/Viicos) in [#14082](https://github.com/pydantic/pydantic/pull/14082)
|
|
180
|
+
* Skip decorator field checks when no field decorators exist by [@alexmojaki](https://github.com/alexmojaki) in [#14111](https://github.com/pydantic/pydantic/pull/14111)
|
|
181
|
+
* Avoid heap allocation for small JSON model field buffers by [@alexmojaki](https://github.com/alexmojaki) in [#14113](https://github.com/pydantic/pydantic/pull/14113)
|
|
182
|
+
|
|
183
|
+
#### Fixes
|
|
184
|
+
|
|
185
|
+
* Make JSON validation by iteration consistent with Python approach by [@davidhewitt](https://github.com/davidhewitt) in [#13275](https://github.com/pydantic/pydantic/pull/13275).
|
|
186
|
+
|
|
187
|
+
JSON validation now handles field lookup and extra data the same way as Python validation. In particular, keys that only match an
|
|
188
|
+
unused alias or field name are now treated as extra data, instead of being silently dropped:
|
|
189
|
+
|
|
190
|
+
```python
|
|
191
|
+
from pydantic import BaseModel, ConfigDict
|
|
192
|
+
from pydantic.alias_generators import to_camel
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
class Page(BaseModel):
|
|
196
|
+
model_config = ConfigDict(extra='forbid', alias_generator=to_camel)
|
|
197
|
+
|
|
198
|
+
page_size: int = 10
|
|
199
|
+
|
|
200
|
+
|
|
201
|
+
Page.model_validate_json('{"page_size": 50}')
|
|
202
|
+
# Before: Page(page_size=10)
|
|
203
|
+
# After: ValidationError (extra_forbidden)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
See the [pull request](https://github.com/pydantic/pydantic/pull/13275) for the full list of behavior changes.
|
|
207
|
+
|
|
208
|
+
* Fix unpickling of generic classes defined in separate module by [@Viicos](https://github.com/Viicos) in [#13994](https://github.com/pydantic/pydantic/pull/13994)
|
|
209
|
+
* Support explicit `by_alias` overriding `validate_by_alias` in validation JSON schemas by [@Viicos](https://github.com/Viicos) in [#13997](https://github.com/pydantic/pydantic/pull/13997)
|
|
210
|
+
* Fix mypy plugin crash on deferred empty model by [@ilevkivskyi](https://github.com/ilevkivskyi) in [#14027](https://github.com/pydantic/pydantic/pull/14027)
|
|
211
|
+
* Fix infinite recursion when validating an invalid default with `PydanticUseDefault` by [@Viicos](https://github.com/Viicos) in [#14028](https://github.com/pydantic/pydantic/pull/14028)
|
|
212
|
+
* Implement recursion guard for `validate_strings()` by [@Viicos](https://github.com/Viicos) in [#14029](https://github.com/pydantic/pydantic/pull/14029)
|
|
213
|
+
* Support named tuples in `Sequence` serialization by [@Viicos](https://github.com/Viicos) in [#14033](https://github.com/pydantic/pydantic/pull/14033)
|
|
214
|
+
* Take `preserve_empty_path` into account in URL types equality by [@Viicos](https://github.com/Viicos) in [#14035](https://github.com/pydantic/pydantic/pull/14035)
|
|
215
|
+
* Fix pickling of `PydanticCustomError` and `ValidationError`s containing custom errors by [@Viicos](https://github.com/Viicos) in [#14051](https://github.com/pydantic/pydantic/pull/14051)
|
|
216
|
+
* Do not extract attribute docstrings from nested classes and functions by [@Viicos](https://github.com/Viicos) in [#14052](https://github.com/pydantic/pydantic/pull/14052)
|
|
217
|
+
* Fix forward annotations evaluation and type variables substitution when rebuilding parametrized generic models by [@Viicos](https://github.com/Viicos) in [#14054](https://github.com/pydantic/pydantic/pull/14054)
|
|
218
|
+
* Fix `Self` resolution in parametrized generics by [@Viicos](https://github.com/Viicos) in [#14065](https://github.com/pydantic/pydantic/pull/14065)
|
|
219
|
+
* Ignore extra data matching a field name in `TypedDict` and dataclasses with `extra=allow` by [@Viicos](https://github.com/Viicos) in [#14090](https://github.com/pydantic/pydantic/pull/14090)
|
|
220
|
+
* Check mapping `max_length` constraint during validation by [@Viicos](https://github.com/Viicos) in [#14092](https://github.com/pydantic/pydantic/pull/14092)
|
|
221
|
+
* Fix deep copy of self-referential models by [@Viicos](https://github.com/Viicos) in [#14116](https://github.com/pydantic/pydantic/pull/14116)
|
|
222
|
+
|
|
120
223
|
## v2.14.1 (2026-10-11)
|
|
121
224
|
|
|
122
225
|
[GitHub release](https://github.com/pydantic/pydantic/releases/tag/v2.14.1)
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
pydantic-2.14.
|
|
2
|
-
pydantic-2.14.
|
|
3
|
-
pydantic-2.14.
|
|
4
|
-
pydantic-2.14.
|
|
5
|
-
pydantic-2.14.
|
|
1
|
+
pydantic-2.14.3.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
2
|
+
pydantic-2.14.3.dist-info/METADATA,sha256=w-uJhBcr7cjgVmVeFBk1H0SXN0qRt7cJ28ShNA9Q4ek,141528
|
|
3
|
+
pydantic-2.14.3.dist-info/RECORD,,
|
|
4
|
+
pydantic-2.14.3.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
|
|
5
|
+
pydantic-2.14.3.dist-info/licenses/LICENSE,sha256=qeGG88oWte74QxjnpwFyE1GgDLe4rjpDlLZ7SeNSnvM,1129
|
|
6
6
|
pydantic/__init__.py,sha256=5SSMubvik7NTbb7X_qVDJtzfPAM3CuXwPXlMWEluwBs,15951
|
|
7
7
|
pydantic/__pycache__/__init__.cpython-313.pyc,,
|
|
8
8
|
pydantic/__pycache__/_migration.cpython-313.pyc,,
|
|
@@ -42,6 +42,7 @@ pydantic/__pycache__/warnings.cpython-313.pyc,,
|
|
|
42
42
|
pydantic/_internal/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
43
43
|
pydantic/_internal/__pycache__/__init__.cpython-313.pyc,,
|
|
44
44
|
pydantic/_internal/__pycache__/_config.cpython-313.pyc,,
|
|
45
|
+
pydantic/_internal/__pycache__/_contextlib.cpython-313.pyc,,
|
|
45
46
|
pydantic/_internal/__pycache__/_core_metadata.cpython-313.pyc,,
|
|
46
47
|
pydantic/_internal/__pycache__/_core_utils.cpython-313.pyc,,
|
|
47
48
|
pydantic/_internal/__pycache__/_dataclasses.cpython-313.pyc,,
|
|
@@ -69,31 +70,32 @@ pydantic/_internal/__pycache__/_typing_extra.cpython-313.pyc,,
|
|
|
69
70
|
pydantic/_internal/__pycache__/_utils.cpython-313.pyc,,
|
|
70
71
|
pydantic/_internal/__pycache__/_validate_call.cpython-313.pyc,,
|
|
71
72
|
pydantic/_internal/__pycache__/_validators.cpython-313.pyc,,
|
|
72
|
-
pydantic/_internal/_config.py,sha256=
|
|
73
|
+
pydantic/_internal/_config.py,sha256=4rgEq34CVc6GIrTlMQ9cJ8S5BO88SqsDQo6m68TFbac,14918
|
|
74
|
+
pydantic/_internal/_contextlib.py,sha256=Ir65W0klj3HuNNOuvIe_oVzDmt6hknfVWV7cemr6F7Y,3596
|
|
73
75
|
pydantic/_internal/_core_metadata.py,sha256=Y_g2t3i7uluK-wXCZvzJfRFMPUM23aBYLfae4FzBPy0,5162
|
|
74
76
|
pydantic/_internal/_core_utils.py,sha256=iovsFQ0u9wtPvEXNSqQtXGSFXcpPE_aTAo1SXM75G1E,5913
|
|
75
|
-
pydantic/_internal/_dataclasses.py,sha256=
|
|
77
|
+
pydantic/_internal/_dataclasses.py,sha256=yyHFG9d0QwEN_9MVrn8xRV-GMSXS51tfxn9tcJbeTtw,13642
|
|
76
78
|
pydantic/_internal/_decorators.py,sha256=ZqaoKcwtWudWa-WsopixHSZeA75YGIkI9GOigCmIzlk,35483
|
|
77
79
|
pydantic/_internal/_decorators_v1.py,sha256=v7_cyEBvJceFO0aYa1AuvYeaMvjEYRQ3-TbW8U8Ghds,6198
|
|
78
80
|
pydantic/_internal/_discriminated_union.py,sha256=HdRL2XOFoCeV95rK0YkxJWPhSdmZWnutRaaBkmQ60Hs,27686
|
|
79
|
-
pydantic/_internal/_docs_extraction.py,sha256=
|
|
80
|
-
pydantic/_internal/_fields.py,sha256
|
|
81
|
+
pydantic/_internal/_docs_extraction.py,sha256=V8_-TfG1oUHpEThCvNtZjJaPwd-zVodn4EqkAGv17hY,4708
|
|
82
|
+
pydantic/_internal/_fields.py,sha256=OlKgiqVO6ITTezu46rIDkGdf0gh3qnphx92RhrP4m28,41083
|
|
81
83
|
pydantic/_internal/_forward_ref.py,sha256=q6SQhW8wo9vPZiuXJ661Vfg7PgoqeJBQTA3dpInXWlA,641
|
|
82
|
-
pydantic/_internal/_generate_schema.py,sha256=
|
|
83
|
-
pydantic/_internal/_generics.py,sha256=
|
|
84
|
+
pydantic/_internal/_generate_schema.py,sha256=nUiqd0TSJLu5D0LPRChOpR3RxaDxvlZm9OxA6TWsWOs,144949
|
|
85
|
+
pydantic/_internal/_generics.py,sha256=zhuan6vsUx0YkNJJsRpKTLmuNYTQd3uJmJg3cp4A9z0,24849
|
|
84
86
|
pydantic/_internal/_git.py,sha256=IwPh3DPfa2Xq3rBuB9Nx8luR2A1i69QdeTfWWXIuCVg,809
|
|
85
87
|
pydantic/_internal/_import_utils.py,sha256=TRhxD5OuY6CUosioBdBcJUs0om7IIONiZdYAV7zQ8jM,402
|
|
86
|
-
pydantic/_internal/_known_annotated_metadata.py,sha256=
|
|
87
|
-
pydantic/_internal/_mock_val_ser.py,sha256=
|
|
88
|
+
pydantic/_internal/_known_annotated_metadata.py,sha256=0AX_Pcok173WfuKbVjKjPk4e5OXqj3t4xGbcmEpEQpM,17480
|
|
89
|
+
pydantic/_internal/_mock_val_ser.py,sha256=zWWC-EVqWqmXeomhy6u5hXhNbvvDv0D5859KmO-j_B0,9672
|
|
88
90
|
pydantic/_internal/_model_construction.py,sha256=6fixeFIkVMJP8Es9e3NGZbILnjtu1Mm119X-WtAZzuM,36663
|
|
89
|
-
pydantic/_internal/_namespace_utils.py,sha256=
|
|
91
|
+
pydantic/_internal/_namespace_utils.py,sha256=4xZrUon01na0AtJ0nY2tLQN2kuDH8erphK-g5KW_vOI,13331
|
|
90
92
|
pydantic/_internal/_repr.py,sha256=MNka4onC9u-tXJvV2rsz3JXsuxqlwKbKnd16-tgxriw,4981
|
|
91
93
|
pydantic/_internal/_schema_gather.py,sha256=0qGbiz4pdcfvdMiH7JueJ10tQ8c750g1OkZ0xyP_20Q,1892
|
|
92
94
|
pydantic/_internal/_schema_generation_shared.py,sha256=8nLsSaqgEebxeF26OwiPBt0ZVPipGqW1IV40agkRfxw,4869
|
|
93
|
-
pydantic/_internal/_serializers.py,sha256=
|
|
95
|
+
pydantic/_internal/_serializers.py,sha256=evOucDhMiIjaik5f4yMLdDP08ODB0l2pCir22HuQ-Ag,1786
|
|
94
96
|
pydantic/_internal/_signature.py,sha256=64JyRJJ8Gf-JOfrZa2xTNUdGpd7RGqdNLYFXYOFuPZU,7143
|
|
95
97
|
pydantic/_internal/_type_refs.py,sha256=nxJgVhwwxiSOcQbrc1e5La-Dpm5wU_4SSKJUBkp0hOU,4521
|
|
96
|
-
pydantic/_internal/_typing_extra.py,sha256=
|
|
98
|
+
pydantic/_internal/_typing_extra.py,sha256=sKfK5Bu2HFjhPuc_eT3WwjX0982335D2S0cfbwSWulE,21227
|
|
97
99
|
pydantic/_internal/_utils.py,sha256=I95ZNRhlU-m8V5pqBZSrP2sMINY-iw5abcPUURhaBng,15386
|
|
98
100
|
pydantic/_internal/_validate_call.py,sha256=GvGnf2WTPBm8g6X9U3RyMvL5o9y5K846kdK5CQ_QPhk,5369
|
|
99
101
|
pydantic/_internal/_validators.py,sha256=-Y9au4Rzog0CdMEeOHs77c998MTvgaEWfRNgxDL2c4k,20987
|
|
@@ -139,22 +141,22 @@ pydantic/functional_serializers.py,sha256=wcF7l3ZzY4rEXBG0IkU3KLGr5_NIEKS6-CFq14
|
|
|
139
141
|
pydantic/functional_validators.py,sha256=ungjnjugPxAh7vPhU7Yp7k6zdPUfKZrtOFbRzN064fw,33225
|
|
140
142
|
pydantic/generics.py,sha256=0ZqZ9O9annIj_3mGBRqps4htey3b5lV1-d2tUxPMMnA,144
|
|
141
143
|
pydantic/json.py,sha256=ZH8RkI7h4Bz-zp8OdTAxbJUoVvcoU-jhMdRZ0B-k0xc,140
|
|
142
|
-
pydantic/json_schema.py,sha256=
|
|
143
|
-
pydantic/main.py,sha256=
|
|
144
|
-
pydantic/mypy.py,sha256=
|
|
144
|
+
pydantic/json_schema.py,sha256=OBO7HfftJNOEBS7gMar0vv0FEn44oazCu7x7w2Eq59c,144167
|
|
145
|
+
pydantic/main.py,sha256=oYoupv4Cq9EDXdVrNQBv0psMkCJ_cdd-RfoOUq7Vruc,91726
|
|
146
|
+
pydantic/mypy.py,sha256=qWTROdLlgp9sRNXTPd4F3nQke818LSWdr7r83_5lmv4,64611
|
|
145
147
|
pydantic/networks.py,sha256=YIXsCaWUqE7FMwAO5ujYXClMLxI3KP6e2MdVwnP5X4s,44516
|
|
146
148
|
pydantic/parse.py,sha256=wkd82dgtvWtD895U_I6E1htqMlGhBSYEV39cuBSeo3A,141
|
|
147
149
|
pydantic/plugin/__init__.py,sha256=SrVX9XDbUKzt6BVNBRKXKmEqxecEREq6A4WoV_RMJhc,7263
|
|
148
150
|
pydantic/plugin/__pycache__/__init__.cpython-313.pyc,,
|
|
149
151
|
pydantic/plugin/__pycache__/_loader.cpython-313.pyc,,
|
|
150
152
|
pydantic/plugin/__pycache__/_schema_validator.cpython-313.pyc,,
|
|
151
|
-
pydantic/plugin/_loader.py,sha256=
|
|
153
|
+
pydantic/plugin/_loader.py,sha256=QutCqFPFRlsQWbsm5Nv_U6SZfF0UN8s2tfJeTTwUSUQ,2115
|
|
152
154
|
pydantic/plugin/_schema_validator.py,sha256=__9f3t6adZxNgyzajuNda5siIvKWDDXssE6QD8hzXB4,5815
|
|
153
155
|
pydantic/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
154
|
-
pydantic/root_model.py,sha256=
|
|
156
|
+
pydantic/root_model.py,sha256=7enqbPZHFXk7DO-2H9wG9NxmIGeJcbHSewhKSLS8a4A,8777
|
|
155
157
|
pydantic/schema.py,sha256=Vqqjvq_LnapVknebUd3Bp_J1p2gXZZnZRgL48bVEG7o,142
|
|
156
158
|
pydantic/tools.py,sha256=iHQpd8SJ5DCTtPV5atAV06T89bjSaMFeZZ2LX9lasZY,141
|
|
157
|
-
pydantic/type_adapter.py,sha256=
|
|
159
|
+
pydantic/type_adapter.py,sha256=HuIrYnURDsX0TS1L8A_AKxymlqg9MA-ODuaCp99v-kc,36569
|
|
158
160
|
pydantic/types.py,sha256=5IFO7vOYHyaPf4VE2bRi9aUdH1CY-NgADjpYDfwIWQQ,110280
|
|
159
161
|
pydantic/typing.py,sha256=P7feA35MwTcLsR1uL7db0S-oydBxobmXa55YDoBgajQ,138
|
|
160
162
|
pydantic/utils.py,sha256=15nR2QpqTBFlQV4TNtTItMyTJx_fbyV-gPmIEY1Gooc,141
|
|
@@ -190,8 +192,8 @@ pydantic/v1/annotated_types.py,sha256=uk2NAAxqiNELKjiHhyhxKaIOh8F1lYW_LzrW3X7oZB
|
|
|
190
192
|
pydantic/v1/class_validators.py,sha256=ULOaIUgYUDBsHL7EEVEarcM-UubKUggoN8hSbDonsFE,14672
|
|
191
193
|
pydantic/v1/color.py,sha256=iZABLYp6OVoo2AFkP9Ipri_wSc6-Kklu8YuhSartd5g,16844
|
|
192
194
|
pydantic/v1/config.py,sha256=a6P0Wer9x4cbwKW7Xv8poSUqM4WP-RLWwX6YMpYq9AA,6532
|
|
193
|
-
pydantic/v1/dataclasses.py,sha256=
|
|
194
|
-
pydantic/v1/datetime_parse.py,sha256=
|
|
195
|
+
pydantic/v1/dataclasses.py,sha256=0Sfk-TNwm21SqiGhhpzs1DsXajhdWM6Eh5ZiSu4bjIA,18358
|
|
196
|
+
pydantic/v1/datetime_parse.py,sha256=exzh-Ul0IWR4FwRVpvE5aoTQ69DK6R-vNCtUakowBxs,7728
|
|
195
197
|
pydantic/v1/decorator.py,sha256=zaaxxxoWPCm818D1bs0yhapRjXm32V8G0ZHWCdM1uXA,10339
|
|
196
198
|
pydantic/v1/env_settings.py,sha256=A9VXwtRl02AY-jH0C0ouy5VNw3fi6F_pkzuHDjgAAOM,14105
|
|
197
199
|
pydantic/v1/error_wrappers.py,sha256=6625Mfw9qkC2NwitB_JFAWe8B-Xv6zBU7rL9k28tfyo,5196
|
|
@@ -200,18 +202,18 @@ pydantic/v1/fields.py,sha256=MjiQ6Q5RkE-koXfmx8tYJbfe97_QeYtnpkQf8OTve_s,50646
|
|
|
200
202
|
pydantic/v1/generics.py,sha256=YzyKTZN6x5Q1RGJ3WQ9jN-uwHJxL3W4qoZqwcZXqxWg,17829
|
|
201
203
|
pydantic/v1/json.py,sha256=WQ5Hy_hIpfdR3YS8k6N2E6KMJzsdbBi_ldWOPJaV81M,3390
|
|
202
204
|
pydantic/v1/main.py,sha256=vRB1TbpkzPN3P5ijJlc-cjNuO-HciNOpC4b8K3zZnfc,45697
|
|
203
|
-
pydantic/v1/mypy.py,sha256=
|
|
205
|
+
pydantic/v1/mypy.py,sha256=egR4NqF3clfaVYPP5nmj36jjdOHJpRPeGYS83mzNTJY,38898
|
|
204
206
|
pydantic/v1/networks.py,sha256=HYNtKAfOmOnKJpsDg1g6SIkj9WPhU_-i8l5e2JKBpG4,22124
|
|
205
207
|
pydantic/v1/parse.py,sha256=BJtdqiZRtav9VRFCmOxoY-KImQmjPy-A_NoojiFUZxY,1821
|
|
206
208
|
pydantic/v1/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
207
209
|
pydantic/v1/schema.py,sha256=aqBuA--cq8gAVkim5BJPFASHzOZ8dFtmFX_fNGr6ip4,47801
|
|
208
210
|
pydantic/v1/tools.py,sha256=1lDdXHk0jL5uP3u5RCYAvUAlGClgAO-45lkq9j7fyBA,2881
|
|
209
|
-
pydantic/v1/types.py,sha256=
|
|
211
|
+
pydantic/v1/types.py,sha256=RfJ19cNFhy-VKs2lzIIl9_dHYn8Vlabd7VktOvoQawI,35793
|
|
210
212
|
pydantic/v1/typing.py,sha256=ovwtLpEZCbnghZaHfSNJupzetzHNkLXjn_66kgTnIV4,20102
|
|
211
213
|
pydantic/v1/utils.py,sha256=1PqOIlz6OVWwGds3HBKlw4Et6asFou0UUpAto7jFOCs,26014
|
|
212
214
|
pydantic/v1/validators.py,sha256=lyUkn1MWhHxlCX5ZfEgFj_CAHojoiPcaQeMdEM9XviU,22187
|
|
213
|
-
pydantic/v1/version.py,sha256=
|
|
215
|
+
pydantic/v1/version.py,sha256=51ZPNC7FcsbAGRl-p2_vbJ0-bKUtjtwc6hiKrBoG4ZA,1039
|
|
214
216
|
pydantic/validate_call_decorator.py,sha256=oktZNbH04RAEV99NSvl5ETPNLTEEE_HLkwj64TOsWd0,4749
|
|
215
217
|
pydantic/validators.py,sha256=pwbIJXVb1CV2mAE4w_EGfNj7DwzsKaWw_tTL6cviTus,146
|
|
216
|
-
pydantic/version.py,sha256=
|
|
218
|
+
pydantic/version.py,sha256=_-GyAanvFkY9PQE6b8wWbrEmw2tlg1842flVvGv2kps,3985
|
|
217
219
|
pydantic/warnings.py,sha256=tIhE-YCNiWNgO53dwo7jYdOFv7AHzJmTkbMdEGZLEko,5177
|
|
Binary file
|
|
Binary file
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "dbspec"
|
|
7
|
-
version = "1.6.
|
|
7
|
+
version = "1.6.4"
|
|
8
8
|
description = "DBSpec: CLI/TUI for database design (Excel as DSL)"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
@@ -17,6 +17,7 @@ dependencies = [
|
|
|
17
17
|
"alembic",
|
|
18
18
|
"psycopg[binary]",
|
|
19
19
|
"jinja2",
|
|
20
|
+
"tomlkit>=0.13.2",
|
|
20
21
|
]
|
|
21
22
|
|
|
22
23
|
[project.scripts]
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/bin/dbspec/_internal/src/resources/sqlalchemy_templates/alembic_default_comparator.py.j2
CHANGED
|
@@ -7,11 +7,12 @@ from collections.abc import Iterator as _DBSpecIterator
|
|
|
7
7
|
|
|
8
8
|
_dbspec_NEXTVAL_RE = _dbspec_re.compile(
|
|
9
9
|
r"\bnextval\s*\(\s*'((?:[^']|'')+)'\s*(?:::\s*(?:pg_catalog\.)?regclass)?\s*\)",
|
|
10
|
-
_dbspec_re.IGNORECASE,
|
|
10
|
+
_dbspec_re.IGNORECASE | _dbspec_re.ASCII,
|
|
11
11
|
)
|
|
12
12
|
_dbspec_SEQUENCE_IDENTIFIER_RE = _dbspec_re.compile(r'"((?:[^"]|"")+)"|([^\W\d][\w$]*)')
|
|
13
13
|
_dbspec_DOLLAR_QUOTE_RE = _dbspec_re.compile(r"\$(?:[^\W\d]\w*)?\$")
|
|
14
14
|
_dbspec_INVALID_SEQUENCE_IDENTIFIER = "Invalid nextval sequence identifier"
|
|
15
|
+
_dbspec_SQL_WHITESPACE = " \t\n\r\f\v"
|
|
15
16
|
|
|
16
17
|
|
|
17
18
|
def _dbspec_sequence_identity(value: str) -> tuple[str, ...]:
|
|
@@ -19,7 +20,7 @@ def _dbspec_sequence_identity(value: str) -> tuple[str, ...]:
|
|
|
19
20
|
parts: list[str] = []
|
|
20
21
|
end = 0
|
|
21
22
|
for match in _dbspec_SEQUENCE_IDENTIFIER_RE.finditer(value):
|
|
22
|
-
separator = value[end : match.start()].strip()
|
|
23
|
+
separator = value[end : match.start()].strip(_dbspec_SQL_WHITESPACE)
|
|
23
24
|
if separator != ("." if parts else ""):
|
|
24
25
|
raise ValueError(f"{_dbspec_INVALID_SEQUENCE_IDENTIFIER}: {value!r}")
|
|
25
26
|
quoted, unquoted = match.groups()
|
|
@@ -29,7 +30,7 @@ def _dbspec_sequence_identity(value: str) -> tuple[str, ...]:
|
|
|
29
30
|
else "".join(char.lower() if char.isascii() else char for char in unquoted)
|
|
30
31
|
)
|
|
31
32
|
end = match.end()
|
|
32
|
-
if value[end:].strip() or len(parts) not in (1, 2):
|
|
33
|
+
if value[end:].strip(_dbspec_SQL_WHITESPACE) or len(parts) not in (1, 2):
|
|
33
34
|
raise ValueError(f"{_dbspec_INVALID_SEQUENCE_IDENTIFIER}: {value!r}")
|
|
34
35
|
return tuple(parts)
|
|
35
36
|
|
|
@@ -85,11 +86,7 @@ def _dbspec_executed_nextval_arguments(sql: str) -> _DBSpecIterator[str]:
|
|
|
85
86
|
position += 1
|
|
86
87
|
|
|
87
88
|
|
|
88
|
-
_dbspec_CAST_RE = _dbspec_re.compile(
|
|
89
|
-
r"::\s*(?:pg_catalog\.)?[a-z_][\w. ]*(?:\(\s*\d+\s*\))?$", _dbspec_re.I
|
|
90
|
-
)
|
|
91
89
|
_dbspec_INTEGER_RE = _dbspec_re.compile(r"[+-]?\d+")
|
|
92
|
-
_dbspec_WHITESPACE_RE = _dbspec_re.compile(r"\s+")
|
|
93
90
|
|
|
94
91
|
|
|
95
92
|
def dbspec_compare_server_default(
|
|
@@ -126,21 +123,21 @@ def _dbspec_normalize_default(
|
|
|
126
123
|
) -> tuple[str, tuple[str, ...] | str] | None:
|
|
127
124
|
if value is None:
|
|
128
125
|
return None
|
|
129
|
-
text = str(value).strip()
|
|
126
|
+
text = str(value).strip(_dbspec_SQL_WHITESPACE)
|
|
130
127
|
if not text:
|
|
131
128
|
return None
|
|
132
129
|
sequence = _dbspec_normalize_nextval(text, column)
|
|
133
130
|
if sequence is not None:
|
|
134
131
|
return ("nextval", sequence)
|
|
135
|
-
return ("literal", _dbspec_normalize_literal_default(text))
|
|
132
|
+
return ("literal", _dbspec_normalize_literal_default(text, column))
|
|
136
133
|
|
|
137
134
|
|
|
138
135
|
def _dbspec_normalize_nextval(value: str, column: _DBSpecAny) -> tuple[str, ...] | None:
|
|
139
136
|
try:
|
|
140
|
-
|
|
141
|
-
if
|
|
137
|
+
match = _dbspec_NEXTVAL_RE.fullmatch(_dbspec_strip_balanced_parentheses(value))
|
|
138
|
+
if match is None:
|
|
142
139
|
return None
|
|
143
|
-
identity = _dbspec_sequence_identity(
|
|
140
|
+
identity = _dbspec_sequence_identity(match[1].replace("''", "'"))
|
|
144
141
|
except ValueError:
|
|
145
142
|
return None
|
|
146
143
|
if len(identity) == 1:
|
|
@@ -156,58 +153,143 @@ def _dbspec_column_schema(column: _DBSpecAny) -> str | None:
|
|
|
156
153
|
return schema if isinstance(schema, str) and schema else None
|
|
157
154
|
|
|
158
155
|
|
|
159
|
-
def
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
156
|
+
def _dbspec_sql_tokens(value: str) -> list[str]:
|
|
157
|
+
"""Tokenize enough PostgreSQL syntax to preserve literals and grouping."""
|
|
158
|
+
tokens: list[str] = []
|
|
159
|
+
position = 0
|
|
160
|
+
whitespace = ""
|
|
161
|
+
while position < len(value):
|
|
162
|
+
if value[position] in _dbspec_SQL_WHITESPACE:
|
|
163
|
+
whitespace += value[position]
|
|
164
|
+
position += 1
|
|
165
|
+
continue
|
|
166
|
+
start = position
|
|
167
|
+
if value.startswith("--", position):
|
|
168
|
+
end = value.find("\n", position)
|
|
169
|
+
position = len(value) if end < 0 else end + 1
|
|
170
|
+
elif value.startswith("/*", position):
|
|
171
|
+
depth = 1
|
|
172
|
+
position += 2
|
|
173
|
+
while position < len(value) and depth:
|
|
174
|
+
if value.startswith("/*", position):
|
|
175
|
+
depth += 1
|
|
176
|
+
position += 2
|
|
177
|
+
elif value.startswith("*/", position):
|
|
178
|
+
depth -= 1
|
|
179
|
+
position += 2
|
|
180
|
+
else:
|
|
181
|
+
position += 1
|
|
182
|
+
elif match := _dbspec_DOLLAR_QUOTE_RE.match(value, position):
|
|
183
|
+
end = value.find(match[0], match.end())
|
|
184
|
+
position = len(value) if end < 0 else end + len(match[0])
|
|
185
|
+
elif value[position] in ("'", '"') or (
|
|
186
|
+
value[position] in "eEbBxXnN" and value[position + 1:position + 2] == "'"
|
|
187
|
+
) or (
|
|
188
|
+
value[position] in "uU" and value[position + 1:position + 2] == "&"
|
|
189
|
+
and value[position + 2:position + 3] in ("'", '"')
|
|
190
|
+
):
|
|
191
|
+
escaped = value[position] in "eE"
|
|
192
|
+
if value[position] in "uU":
|
|
193
|
+
position += 2
|
|
194
|
+
elif value[position] in "eEbBxXnN":
|
|
195
|
+
position += 1
|
|
196
|
+
quote = value[position]
|
|
197
|
+
position += 1
|
|
198
|
+
while position < len(value):
|
|
199
|
+
if value.startswith(quote * 2, position):
|
|
200
|
+
position += 2
|
|
201
|
+
elif escaped and value[position] == "\\":
|
|
202
|
+
position += 2
|
|
203
|
+
elif value[position] == quote:
|
|
204
|
+
position += 1
|
|
205
|
+
break
|
|
206
|
+
else:
|
|
207
|
+
position += 1
|
|
208
|
+
else:
|
|
209
|
+
match = _dbspec_re.match(
|
|
210
|
+
r"(?:[A-Za-z_]|[^\x00-\x7f])(?:[A-Za-z_0-9$]|[^\x00-\x7f])*|[0-9]+(?:\.[0-9]+)?|[+*/<>=~!@#%^&|`?:-]+|.",
|
|
211
|
+
value[position:],
|
|
212
|
+
)
|
|
213
|
+
assert match is not None
|
|
214
|
+
position += len(match[0])
|
|
215
|
+
token = value[start:position]
|
|
216
|
+
# Adjacent string literals separated by a newline concatenate in PostgreSQL.
|
|
217
|
+
if whitespace and tokens and tokens[-1].endswith("'") and token.startswith("'"):
|
|
218
|
+
tokens.append("\n" if "\n" in whitespace else " ")
|
|
219
|
+
whitespace = ""
|
|
220
|
+
opaque = token.startswith(("'", '"', "$", "--", "/*")) or (
|
|
221
|
+
len(token) >= 2 and token[0] in "eEbBxXnN" and token[1] == "'"
|
|
222
|
+
) or (len(token) >= 3 and token[0] in "uU" and token[1] == "&" and token[2] in ("'", '"'))
|
|
223
|
+
folded = "".join(char.lower() if char.isascii() else char for char in token)
|
|
224
|
+
tokens.append(token if opaque else folded)
|
|
225
|
+
return tokens
|
|
175
226
|
|
|
176
227
|
|
|
177
228
|
def _dbspec_strip_balanced_parentheses(value: str) -> str:
|
|
178
|
-
|
|
179
|
-
while (
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
229
|
+
tokens = _dbspec_sql_tokens(value)
|
|
230
|
+
while len(tokens) >= 2 and tokens[0] == "(" and tokens[-1] == ")":
|
|
231
|
+
depth = 0
|
|
232
|
+
for position, token in enumerate(tokens):
|
|
233
|
+
if token == "(":
|
|
234
|
+
depth += 1
|
|
235
|
+
elif token == ")":
|
|
236
|
+
depth -= 1
|
|
237
|
+
if depth <= 0 and position != len(tokens) - 1:
|
|
238
|
+
return " ".join(tokens)
|
|
239
|
+
if depth != 0:
|
|
240
|
+
break
|
|
241
|
+
tokens = tokens[1:-1]
|
|
242
|
+
return " ".join(tokens)
|
|
186
243
|
|
|
187
244
|
|
|
188
|
-
def
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
245
|
+
def _dbspec_normalize_sql_expression(value: str) -> str:
|
|
246
|
+
return _dbspec_strip_balanced_parentheses(value)
|
|
247
|
+
|
|
248
|
+
|
|
249
|
+
def _dbspec_string_literal(value: str) -> str | None:
|
|
250
|
+
match = _dbspec_re.fullmatch(
|
|
251
|
+
r"'((?:[^']|'')*)'(?:\s*::\s*(?:pg_catalog\s*\.\s*)?(?:text|varchar|character\s+varying))?",
|
|
252
|
+
value, _dbspec_re.IGNORECASE | _dbspec_re.ASCII,
|
|
253
|
+
)
|
|
254
|
+
return match[1].replace("''", "'") if match else None
|
|
255
|
+
|
|
256
|
+
|
|
257
|
+
def _dbspec_normalize_literal_default(value: str, column: _DBSpecAny = None) -> str:
|
|
258
|
+
text = value.strip(_dbspec_SQL_WHITESPACE)
|
|
259
|
+
if text.lower().startswith("default "):
|
|
260
|
+
text = text[8:].strip(_dbspec_SQL_WHITESPACE)
|
|
261
|
+
text = _dbspec_strip_balanced_parentheses(text)
|
|
262
|
+
column_type = str(getattr(column, "type", "")).lower()
|
|
263
|
+
if _dbspec_re.fullmatch(r"(?:varchar|character varying|text)(?:\(\d+\))?", column_type):
|
|
264
|
+
literal = _dbspec_string_literal(text)
|
|
265
|
+
if literal is not None:
|
|
266
|
+
return "string:" + literal
|
|
267
|
+
return "sql:" + text
|
|
268
|
+
# Only normalize primitive casts; expressions and domain casts stay visible.
|
|
269
|
+
cast = _dbspec_re.fullmatch(
|
|
270
|
+
r"(.+?)\s*::\s*(?:pg_catalog\s*\.\s*)?(boolean|bool|integer|int|int4|bigint|int8|smallint|int2)",
|
|
271
|
+
text, _dbspec_re.IGNORECASE | _dbspec_re.ASCII,
|
|
272
|
+
)
|
|
273
|
+
primitive_text = _dbspec_strip_balanced_parentheses(cast[1]) if cast else text
|
|
274
|
+
cast_type = cast[2].lower() if cast else ""
|
|
275
|
+
boolean_casts = {"boolean", "bool"}
|
|
276
|
+
if cast_type in boolean_casts:
|
|
277
|
+
boolean = _dbspec_re.fullmatch(r"(?:'(true|false)'|(true|false))", primitive_text, _dbspec_re.IGNORECASE | _dbspec_re.ASCII)
|
|
278
|
+
if boolean:
|
|
279
|
+
return (boolean[1] or boolean[2]).lower()
|
|
280
|
+
return text
|
|
281
|
+
if cast:
|
|
282
|
+
# Quoted numeric literals are safe only with an explicit integer cast.
|
|
283
|
+
quoted = _dbspec_re.fullmatch(r"'([+-]?[0-9]+)'", primitive_text)
|
|
284
|
+
if quoted:
|
|
285
|
+
primitive_text = quoted[1]
|
|
286
|
+
integer = _dbspec_re.fullmatch(r"([+-]?)[ \t\n\r\f\v]*([0-9]+)", primitive_text)
|
|
287
|
+
if integer:
|
|
288
|
+
number = int(integer[1] + integer[2])
|
|
289
|
+
bit_width = {"smallint": 16, "int2": 16, "integer": 32, "int": 32, "int4": 32, "bigint": 64, "int8": 64}.get(cast_type)
|
|
290
|
+
if bit_width is not None and not -(2 ** (bit_width - 1)) <= number < 2 ** (bit_width - 1):
|
|
291
|
+
return text
|
|
292
|
+
return str(number)
|
|
293
|
+
if not cast and primitive_text.lower() in {"true", "false"}:
|
|
294
|
+
return primitive_text.lower()
|
|
295
|
+
return text
|
|
Binary file
|
package/bin/dbspec/dbspec.exe
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
Version: 1.13.0
|
|
2
|
-
Arguments: ['C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-ncnmha7b\\cp313-win_amd64\\build\\venv\\Scripts\\delvewheel', 'repair', '-w', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-ncnmha7b\\cp313-win_amd64\\repaired_wheel', '--no-mangle', 'libiconv-2.dll;libwinpthread-1.dll', 'C:\\Users\\runneradmin\\AppData\\Local\\Temp\\cibw-run-ncnmha7b\\cp313-win_amd64\\built_wheel\\psycopg_binary-3.3.6-cp313-cp313-win_amd64.whl']
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
psycopg_binary-3.3.6.dist-info/DELVEWHEEL,sha256=2bj8MdFftAsP-OpmKDRPmgSbIE62BkAOaqBRy7-wWWc,460
|
|
2
|
-
psycopg_binary-3.3.6.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
3
|
-
psycopg_binary-3.3.6.dist-info/METADATA,sha256=8sNmmO49Rtw73JDYe6pwAZFKvDU1sgvW8mDU5CK4hGM,2777
|
|
4
|
-
psycopg_binary-3.3.6.dist-info/RECORD,,
|
|
5
|
-
psycopg_binary-3.3.6.dist-info/WHEEL,sha256=AP_wkikJcUkDPUGvTNydv7g0R7BhW1u_fVHNKW7TJyI,101
|
|
6
|
-
psycopg_binary-3.3.6.dist-info/licenses/LICENSE.txt,sha256=fTqV5eBpeAZO0_jit8j4Ref9ikBSlHJ8xwj5TLg7gFk,7817
|
|
7
|
-
psycopg_binary-3.3.6.dist-info/top_level.txt,sha256=8OM_PsAa5oKkzVvRu8kDESihBQo_LXqwG_nrlecubIk,15
|
|
8
|
-
psycopg_binary.libs/libcrypto-3-x64-1b25ffbe1e3cb0270df11cbc0fff52e0.dll,sha256=GyX_vh48sCcN8Ry8D_9S4GabKKTNlmqcsM9915CHRuQ,5364736
|
|
9
|
-
psycopg_binary.libs/libpq-27f4bc79679c7def243803fa35efdfb6.dll,sha256=zijtyM4YS-Snq5l8TPK89lK7hOQ9xwW41R-zyZz28Jw,334848
|
|
10
|
-
psycopg_binary.libs/libssl-3-x64-6f42cecbe10bc1773f4152192bcce611.dll,sha256=yBgjn5_fW_773QrtCPfAPDcH3_3WiN1Xibz20lFrPz0,877056
|
|
11
|
-
psycopg_binary/__init__.py,sha256=cS_yF_9nWV85G23SoOFIx4pudPPo9KZhFvhzwOSTlbQ,747
|
|
12
|
-
psycopg_binary/__pycache__/__init__.cpython-313.pyc,,
|
|
13
|
-
psycopg_binary/__pycache__/_uuid.cpython-313.pyc,,
|
|
14
|
-
psycopg_binary/__pycache__/version.cpython-313.pyc,,
|
|
15
|
-
psycopg_binary/_psycopg.c,sha256=brpisowBa0xPNmwJ0TEyjcweSURSpGfPa-j08uqtOUw,5499412
|
|
16
|
-
psycopg_binary/_psycopg.cp313-win_amd64.pyd,sha256=Ga_9Zivktvg-jzWQoZkYoVbqul-SFEhZRfxo7OjIckE,584704
|
|
17
|
-
psycopg_binary/_psycopg.pyi,sha256=pme2JR7TOn3IU5rKNJHIf49V7-1aEvQ3SG52GFhxjAI,3262
|
|
18
|
-
psycopg_binary/_uuid.py,sha256=JjO2rXenlacRYuYULh6RgHEP-M7gT32QWs4pz-jiST4,828
|
|
19
|
-
psycopg_binary/pq.c,sha256=ksqpQ_EC3U9pS7JMDzVeNQ0TVuf1tk0PKGMImLJlIi0,2083710
|
|
20
|
-
psycopg_binary/pq.cp313-win_amd64.pyd,sha256=wmBOlPLunUm4M0fwPeexTxYdyS8Gua4RZ9_9a3c6p9w,238080
|
|
21
|
-
psycopg_binary/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
22
|
-
psycopg_binary/types/numutils.c,sha256=2SLaXxO0q3uHYmQHiY-6L79Ymiq_Dfjedv7ZuTnPsOQ,6252
|
|
23
|
-
psycopg_binary/version.py,sha256=NlEr0mLYE3j2I3iC7xbN60gCQQumNdz4eHnlARwUqkU,258
|
package/bin/dbspec/_internal/psycopg_binary.libs/libssl-3-x64-6f42cecbe10bc1773f4152192bcce611.dll
DELETED
|
Binary file
|
|
File without changes
|
|
File without changes
|
/package/bin/dbspec/_internal/{psycopg-3.3.6.dist-info → psycopg-3.3.8.dist-info}/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/bin/dbspec/_internal/{pydantic-2.14.1.dist-info → pydantic-2.14.3.dist-info}/INSTALLER
RENAMED
|
File without changes
|
|
File without changes
|