SQLAlchemy 2.0.14__py3-none-any.whl → 2.0.16__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 (139) hide show
  1. {SQLAlchemy-2.0.14.dist-info → SQLAlchemy-2.0.16.dist-info}/METADATA +3 -1
  2. SQLAlchemy-2.0.16.dist-info/RECORD +260 -0
  3. sqlalchemy/__init__.py +1 -1
  4. sqlalchemy/dialects/mssql/base.py +3 -5
  5. sqlalchemy/dialects/mssql/provision.py +0 -2
  6. sqlalchemy/dialects/mssql/pyodbc.py +0 -1
  7. sqlalchemy/dialects/mysql/aiomysql.py +3 -4
  8. sqlalchemy/dialects/mysql/asyncmy.py +3 -4
  9. sqlalchemy/dialects/mysql/base.py +0 -9
  10. sqlalchemy/dialects/oracle/base.py +0 -3
  11. sqlalchemy/dialects/oracle/cx_oracle.py +1 -8
  12. sqlalchemy/dialects/oracle/oracledb.py +0 -1
  13. sqlalchemy/dialects/oracle/provision.py +0 -3
  14. sqlalchemy/dialects/postgresql/array.py +3 -9
  15. sqlalchemy/dialects/postgresql/asyncpg.py +3 -6
  16. sqlalchemy/dialects/postgresql/base.py +122 -29
  17. sqlalchemy/dialects/postgresql/dml.py +0 -1
  18. sqlalchemy/dialects/postgresql/ext.py +0 -1
  19. sqlalchemy/dialects/postgresql/hstore.py +6 -45
  20. sqlalchemy/dialects/postgresql/json.py +10 -75
  21. sqlalchemy/dialects/postgresql/named_types.py +1 -1
  22. sqlalchemy/dialects/postgresql/operators.py +129 -0
  23. sqlalchemy/dialects/postgresql/pg_catalog.py +1 -0
  24. sqlalchemy/dialects/postgresql/psycopg.py +5 -11
  25. sqlalchemy/dialects/postgresql/psycopg2.py +0 -1
  26. sqlalchemy/dialects/postgresql/ranges.py +22 -26
  27. sqlalchemy/dialects/sqlite/aiosqlite.py +7 -5
  28. sqlalchemy/dialects/sqlite/base.py +0 -5
  29. sqlalchemy/dialects/sqlite/dml.py +0 -1
  30. sqlalchemy/dialects/sqlite/pysqlite.py +0 -1
  31. sqlalchemy/engine/base.py +7 -7
  32. sqlalchemy/engine/create.py +0 -1
  33. sqlalchemy/engine/cursor.py +0 -6
  34. sqlalchemy/engine/default.py +5 -9
  35. sqlalchemy/engine/events.py +0 -1
  36. sqlalchemy/engine/interfaces.py +1 -1
  37. sqlalchemy/engine/reflection.py +5 -3
  38. sqlalchemy/engine/result.py +0 -3
  39. sqlalchemy/event/base.py +0 -1
  40. sqlalchemy/event/legacy.py +0 -1
  41. sqlalchemy/event/registry.py +0 -1
  42. sqlalchemy/ext/associationproxy.py +0 -1
  43. sqlalchemy/ext/asyncio/base.py +1 -1
  44. sqlalchemy/ext/asyncio/engine.py +33 -3
  45. sqlalchemy/ext/asyncio/session.py +4 -3
  46. sqlalchemy/ext/automap.py +0 -2
  47. sqlalchemy/ext/declarative/extensions.py +38 -8
  48. sqlalchemy/ext/horizontal_shard.py +0 -1
  49. sqlalchemy/ext/hybrid.py +0 -2
  50. sqlalchemy/ext/mypy/apply.py +0 -2
  51. sqlalchemy/ext/mypy/decl_class.py +0 -3
  52. sqlalchemy/ext/mypy/infer.py +0 -1
  53. sqlalchemy/ext/mypy/plugin.py +0 -1
  54. sqlalchemy/log.py +0 -1
  55. sqlalchemy/orm/__init__.py +0 -1
  56. sqlalchemy/orm/_typing.py +1 -8
  57. sqlalchemy/orm/attributes.py +0 -7
  58. sqlalchemy/orm/bulk_persistence.py +31 -26
  59. sqlalchemy/orm/clsregistry.py +0 -1
  60. sqlalchemy/orm/collections.py +0 -2
  61. sqlalchemy/orm/context.py +55 -17
  62. sqlalchemy/orm/decl_api.py +15 -13
  63. sqlalchemy/orm/decl_base.py +6 -22
  64. sqlalchemy/orm/dependency.py +0 -9
  65. sqlalchemy/orm/descriptor_props.py +0 -2
  66. sqlalchemy/orm/events.py +0 -3
  67. sqlalchemy/orm/instrumentation.py +0 -1
  68. sqlalchemy/orm/interfaces.py +10 -1
  69. sqlalchemy/orm/loading.py +0 -9
  70. sqlalchemy/orm/mapped_collection.py +1 -2
  71. sqlalchemy/orm/mapper.py +50 -36
  72. sqlalchemy/orm/persistence.py +12 -12
  73. sqlalchemy/orm/properties.py +0 -1
  74. sqlalchemy/orm/relationships.py +0 -10
  75. sqlalchemy/orm/scoping.py +0 -1
  76. sqlalchemy/orm/session.py +1 -14
  77. sqlalchemy/orm/state.py +11 -6
  78. sqlalchemy/orm/state_changes.py +0 -1
  79. sqlalchemy/orm/strategies.py +0 -22
  80. sqlalchemy/orm/strategy_options.py +0 -2
  81. sqlalchemy/orm/sync.py +0 -1
  82. sqlalchemy/orm/unitofwork.py +0 -2
  83. sqlalchemy/orm/util.py +1 -10
  84. sqlalchemy/orm/writeonly.py +0 -2
  85. sqlalchemy/pool/base.py +0 -2
  86. sqlalchemy/pool/impl.py +2 -1
  87. sqlalchemy/sql/_py_util.py +0 -1
  88. sqlalchemy/sql/_typing.py +0 -1
  89. sqlalchemy/sql/annotation.py +0 -1
  90. sqlalchemy/sql/base.py +0 -3
  91. sqlalchemy/sql/cache_key.py +0 -1
  92. sqlalchemy/sql/coercions.py +4 -8
  93. sqlalchemy/sql/compiler.py +8 -29
  94. sqlalchemy/sql/crud.py +1 -8
  95. sqlalchemy/sql/ddl.py +0 -4
  96. sqlalchemy/sql/default_comparator.py +0 -1
  97. sqlalchemy/sql/dml.py +1 -4
  98. sqlalchemy/sql/elements.py +1 -0
  99. sqlalchemy/sql/functions.py +0 -2
  100. sqlalchemy/sql/lambdas.py +0 -3
  101. sqlalchemy/sql/naming.py +0 -1
  102. sqlalchemy/sql/schema.py +0 -4
  103. sqlalchemy/sql/selectable.py +15 -21
  104. sqlalchemy/sql/sqltypes.py +12 -8
  105. sqlalchemy/sql/traversals.py +1 -3
  106. sqlalchemy/sql/type_api.py +0 -5
  107. sqlalchemy/sql/util.py +0 -1
  108. sqlalchemy/sql/visitors.py +0 -1
  109. sqlalchemy/testing/assertsql.py +0 -2
  110. sqlalchemy/testing/asyncio.py +0 -1
  111. sqlalchemy/testing/config.py +1 -5
  112. sqlalchemy/testing/engines.py +0 -1
  113. sqlalchemy/testing/fixtures.py +0 -4
  114. sqlalchemy/testing/plugin/plugin_base.py +0 -4
  115. sqlalchemy/testing/plugin/pytestplugin.py +0 -4
  116. sqlalchemy/testing/profiling.py +0 -3
  117. sqlalchemy/testing/provision.py +0 -3
  118. sqlalchemy/testing/requirements.py +2 -3
  119. sqlalchemy/testing/schema.py +0 -1
  120. sqlalchemy/testing/suite/test_cte.py +0 -1
  121. sqlalchemy/testing/suite/test_dialect.py +0 -4
  122. sqlalchemy/testing/suite/test_insert.py +92 -7
  123. sqlalchemy/testing/suite/test_reflection.py +0 -8
  124. sqlalchemy/testing/suite/test_results.py +0 -1
  125. sqlalchemy/testing/suite/test_select.py +0 -1
  126. sqlalchemy/testing/suite/test_sequence.py +0 -1
  127. sqlalchemy/testing/suite/test_types.py +0 -71
  128. sqlalchemy/testing/util.py +0 -4
  129. sqlalchemy/util/__init__.py +1 -0
  130. sqlalchemy/util/_concurrency_py3k.py +0 -3
  131. sqlalchemy/util/compat.py +23 -1
  132. sqlalchemy/util/deprecations.py +0 -3
  133. sqlalchemy/util/langhelpers.py +0 -2
  134. sqlalchemy/util/topological.py +0 -1
  135. sqlalchemy/util/typing.py +0 -1
  136. SQLAlchemy-2.0.14.dist-info/RECORD +0 -259
  137. {SQLAlchemy-2.0.14.dist-info → SQLAlchemy-2.0.16.dist-info}/LICENSE +0 -0
  138. {SQLAlchemy-2.0.14.dist-info → SQLAlchemy-2.0.16.dist-info}/WHEEL +0 -0
  139. {SQLAlchemy-2.0.14.dist-info → SQLAlchemy-2.0.16.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: SQLAlchemy
3
- Version: 2.0.14
3
+ Version: 2.0.16
4
4
  Summary: Database Abstraction Library
5
5
  Home-page: https://www.sqlalchemy.org
6
6
  Author: Mike Bayer
@@ -71,6 +71,8 @@ Provides-Extra: postgresql_psycopg2binary
71
71
  Requires-Dist: psycopg2-binary ; extra == 'postgresql_psycopg2binary'
72
72
  Provides-Extra: postgresql_psycopg2cffi
73
73
  Requires-Dist: psycopg2cffi ; extra == 'postgresql_psycopg2cffi'
74
+ Provides-Extra: postgresql_psycopgbinary
75
+ Requires-Dist: psycopg[binary] (>=3.0.7) ; extra == 'postgresql_psycopgbinary'
74
76
  Provides-Extra: pymysql
75
77
  Requires-Dist: pymysql ; extra == 'pymysql'
76
78
  Provides-Extra: sqlcipher
@@ -0,0 +1,260 @@
1
+ sqlalchemy/__init__.py,sha256=SVtgSH7sUTwGsMSzuBKmMSqF2OX7aaTD-Lybl-EJTL0,12626
2
+ sqlalchemy/events.py,sha256=pRcPKKsPQHGPH_pvTtKRmzuEIy-QHCtkUiZl4MUbxKs,536
3
+ sqlalchemy/exc.py,sha256=4SMKOJtz7_SWt5vskCSeXSi4ZlFyL4jh53Q8sk4-ODQ,24011
4
+ sqlalchemy/inspection.py,sha256=2-h6SqEs2OyjyHq20j3eo_1eomCKxExY5AVzdo0CiRk,4429
5
+ sqlalchemy/log.py,sha256=w4mCPtdsvdSSxVXoLEO5qaAiTXxZ9QZqZ4uWwn1Xpdw,8628
6
+ sqlalchemy/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ sqlalchemy/schema.py,sha256=mt74CGCBtfv_qI1_6zzNFMexYGyWDj2Jkh-XdH4kEWI,3194
8
+ sqlalchemy/types.py,sha256=DgBpPaT-vtsn6_glx5wocrIhR2A1vy56SQNRY3NiPUw,3168
9
+ sqlalchemy/connectors/__init__.py,sha256=uKUYWQoXyleIyjWBuh7gzgnazJokx3DaasKJbFOfQGA,476
10
+ sqlalchemy/connectors/pyodbc.py,sha256=FiOJGpgYZ3mNQOP5th-7IZdY0ro1eUGpYX2gBiGPKTE,8483
11
+ sqlalchemy/cyextension/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
12
+ sqlalchemy/cyextension/collections.pyx,sha256=KDI5QTOyYz9gDl-3d7MbGMA0Kc-wxpJqnLmCaUmQy2U,12323
13
+ sqlalchemy/cyextension/immutabledict.pxd,sha256=oc8BbnQwDg7pWAdThB-fzu8s9_ViOe1Ds-8T0r0POjI,41
14
+ sqlalchemy/cyextension/immutabledict.pyx,sha256=aQJPZKjcqbO8jHDqpC9F-v-ew2qAjUscc5CntaheZUk,3285
15
+ sqlalchemy/cyextension/processors.pyx,sha256=0swFIBdR19x1kPRe-dijBaLW898AhH6QJizbv4ho9pk,1545
16
+ sqlalchemy/cyextension/resultproxy.pyx,sha256=cDtMjLTdC47g7cME369NSOCck3JwG2jwZ6j25no3_gw,2477
17
+ sqlalchemy/cyextension/util.pyx,sha256=lv03p63oVn23jLhMI4_RYGewUnJfh-4FkrNMEFL7A3Y,2289
18
+ sqlalchemy/dialects/__init__.py,sha256=-Tvtzn65H8RsXHCcXP2_WKy7pBR1blaWVw0fvsNlryA,1786
19
+ sqlalchemy/dialects/type_migration_guidelines.txt,sha256=-uHNdmYFGB7bzUNT6i8M5nb4j6j9YUKAtW4lcBZqsMg,8239
20
+ sqlalchemy/dialects/mssql/__init__.py,sha256=cHfYkDNsBKHrhaRVNdz7HFnYKAV4mQogP3sZdB5tUdA,1841
21
+ sqlalchemy/dialects/mssql/base.py,sha256=LAvyNPctEmBWUH5a_XKcPZNByOxcOgTzxfjFV8QGNwg,131595
22
+ sqlalchemy/dialects/mssql/information_schema.py,sha256=vVsIan_fwm2HmU13SMoBP4QgrSJ52itHgr8dOXu5INk,8067
23
+ sqlalchemy/dialects/mssql/json.py,sha256=B0m6H08CKuk-yomDHcCwfQbVuVN2WLufuVueA_qb1NQ,4573
24
+ sqlalchemy/dialects/mssql/provision.py,sha256=qNslme0Z62slaOiU1o1eOckJ6UaYUgbcRRfnR1N2lzw,4996
25
+ sqlalchemy/dialects/mssql/pymssql.py,sha256=BfJp9t-IQabqWXySJBmP9pwNTWnJqbjA2jJM9M4XeWc,4029
26
+ sqlalchemy/dialects/mssql/pyodbc.py,sha256=Z-JnUrk42pq7cyyz6HUVu_9NRcAE9uIcACw3Bhic40Q,26707
27
+ sqlalchemy/dialects/mysql/__init__.py,sha256=btLABiNnmbWt9ziW-XgVWEB1qHWQcSFz7zxZNw4m_LY,2144
28
+ sqlalchemy/dialects/mysql/aiomysql.py,sha256=9aMkAAqn-cs1mvxaybTWnmuxEzdvcSfBv0Aei7gWez4,9595
29
+ sqlalchemy/dialects/mysql/asyncmy.py,sha256=U-0-BHMkVnYe19TkhIzdHe7s6ZkYJVJ6AUPQzWjOUXo,9866
30
+ sqlalchemy/dialects/mysql/base.py,sha256=qm1tVsWTk3MymDjiLVwlHfjgnyLKjr47t45sftW7f2k,119097
31
+ sqlalchemy/dialects/mysql/cymysql.py,sha256=5CQVJAlqQ3pT4IDGSQJH2hCzj-EWjUitA21MLqJwEEs,2291
32
+ sqlalchemy/dialects/mysql/dml.py,sha256=WJCt0bd7i5SbkEeG2nxP7xYBXZDzA4X7wOE3B4dcQXA,6998
33
+ sqlalchemy/dialects/mysql/enumerated.py,sha256=1L2J2wT6nQEmRS4z-jzZpoi44IqIaHgBRZZB9m55czo,8439
34
+ sqlalchemy/dialects/mysql/expression.py,sha256=WW5G2XPwqJfXjuzHBt4BRP0pCLcPJkPD1mvZX1g0JL0,4066
35
+ sqlalchemy/dialects/mysql/json.py,sha256=JlSFBAHhJ9JmV-3azH80xkLgeh7g6A6DVyNVCNZiKPU,2260
36
+ sqlalchemy/dialects/mysql/mariadb.py,sha256=eV33eyd5PX_xFqiM8MQjvqkQExxiC1IYRefHGQ4P06U,608
37
+ sqlalchemy/dialects/mysql/mariadbconnector.py,sha256=p5c4Mfpzz3eQwJu4z4ddRHJZftdmUOL6wSIBHFXqAcU,7466
38
+ sqlalchemy/dialects/mysql/mysqlconnector.py,sha256=5glmkPhD_KP-Mci8ZXBr4yzqH1MDfzCJ9F_kZNyXcGo,5666
39
+ sqlalchemy/dialects/mysql/mysqldb.py,sha256=dPXGcjZtvMx0CoH6530kDNginDE5YfGgxWUz0L28_0A,9654
40
+ sqlalchemy/dialects/mysql/provision.py,sha256=uPT6-BIoP_12XLmWAza1TDFNhOVVJ3rmQoMH7nvh-Vg,3226
41
+ sqlalchemy/dialects/mysql/pymysql.py,sha256=gLaQkaTU-RISblBiOlxvx5Kdumq04NI_p4fpVKXTRuQ,2944
42
+ sqlalchemy/dialects/mysql/pyodbc.py,sha256=mkOvumrxpmAi6noZlkaTVKz2F7G5vLh2vx0cZSn9VTA,4288
43
+ sqlalchemy/dialects/mysql/reflection.py,sha256=IWf3wte2XMrBwRVCUyXnIFNrP8iDdreygnlNK3PdRrk,22526
44
+ sqlalchemy/dialects/mysql/reserved_words.py,sha256=DsPHsW3vwOrvU7bv3Nbfact2Z_jyZ9xUTT-mdeQvqxo,9145
45
+ sqlalchemy/dialects/mysql/types.py,sha256=i8DpRkOL1QhPErZ25AmCQOuFLciWhdjNL3I0CeHEhdY,24258
46
+ sqlalchemy/dialects/oracle/__init__.py,sha256=HcAB9tvX7uAVHDMd2pWXKVFdcCwwjLWCXHMXgYU1EWY,1306
47
+ sqlalchemy/dialects/oracle/base.py,sha256=X7AoqfOBEGXqmZkep2tZJ9wlNzgtvYFqQ3P5H0ura5I,117911
48
+ sqlalchemy/dialects/oracle/cx_oracle.py,sha256=Tno0OgmlxoSMRw9iTO5Gv47oSkOddXu1ZIphPlYSrbs,55101
49
+ sqlalchemy/dialects/oracle/dictionary.py,sha256=iUoyFEFM8z0sfVWR2n_nnre14kaQkV_syKO0R5Dos4M,19487
50
+ sqlalchemy/dialects/oracle/oracledb.py,sha256=_-fUQ94xai80B7v9WLVGoGDIv8u54nVspBdyGEyI76g,3457
51
+ sqlalchemy/dialects/oracle/provision.py,sha256=5cvIc3yTWxz4AIRYxcesbRJ1Ft-zT9GauQ911yPnN2o,8055
52
+ sqlalchemy/dialects/oracle/types.py,sha256=IhDjnE7m98jYBOp28BOull4QOaSTacNUNAOVryNFfpU,7481
53
+ sqlalchemy/dialects/postgresql/__init__.py,sha256=bZEPsLbRtB7s6TMQAHCIzKBgkxUa3eDXvCkeARua37E,3734
54
+ sqlalchemy/dialects/postgresql/_psycopg_common.py,sha256=wGJmPl_0mR8MMlYdlNVo-rwKOxnsfkSprKtPfOpHSo0,6136
55
+ sqlalchemy/dialects/postgresql/array.py,sha256=tLyU9GDAeIypNhjTuFQUYbaTeijVM1VVJS6UdzzXXn4,13682
56
+ sqlalchemy/dialects/postgresql/asyncpg.py,sha256=ag0Mc5-ZDNOKe0TfRTX3e5HGOKva5R62iSxAo1Hs3Rg,37094
57
+ sqlalchemy/dialects/postgresql/base.py,sha256=g_Pb36cMayA2ajp8Poi5yVx83M9H1WjiHFyNxkY6d7U,171994
58
+ sqlalchemy/dialects/postgresql/dml.py,sha256=7t1xtfjdH1rOllRrNpMIU-6doqFiZ6WTKKc9rSE7pC4,10094
59
+ sqlalchemy/dialects/postgresql/ext.py,sha256=DMWLFNBUxNg67M6V5HLIfahvGRxDFMoWpYUfAoKCPvY,16070
60
+ sqlalchemy/dialects/postgresql/hstore.py,sha256=q5x0npbAMI8cdRFGTMwLoWFj9P1G9DUkw5OEUCfTXpI,11532
61
+ sqlalchemy/dialects/postgresql/json.py,sha256=panGtnEbcirQDy4yR2huWydFqa_Kmv8xhpLyf-SSRWE,11203
62
+ sqlalchemy/dialects/postgresql/named_types.py,sha256=zNoHsP3nVq5xxA7SOQ6LLDwYZEHFciZ-nDjw_I9f_G0,17092
63
+ sqlalchemy/dialects/postgresql/operators.py,sha256=MB40xq1124OnhUzkvtbnTmxEiey0VxMOYyznF96wwhI,2799
64
+ sqlalchemy/dialects/postgresql/pg8000.py,sha256=tc5aa6bYfYV9dIcy-EfN25f7o_HmQ4P83wvkeFidfSE,15620
65
+ sqlalchemy/dialects/postgresql/pg_catalog.py,sha256=0lLnIgxfCrqkx_LNijMxo0trNLsodcd8KwretZIj4uM,8875
66
+ sqlalchemy/dialects/postgresql/provision.py,sha256=oxyAzs8_PhuK0ChivXC3l2Nldih3_HKffvGsZqD8XWI,5509
67
+ sqlalchemy/dialects/postgresql/psycopg.py,sha256=S4HEUxj7ferTg_3IYqxaIRGqHe1YA2Ugu2Vq9Js9KzI,21841
68
+ sqlalchemy/dialects/postgresql/psycopg2.py,sha256=rOU3QhE0bZerL5hhR3JtF26kj6tmG4VVHa0-qwRxBxc,30673
69
+ sqlalchemy/dialects/postgresql/psycopg2cffi.py,sha256=2EOuDwBetfvelcPoTzSwOHe6X8lTwaYH7znNzXJt9eM,1739
70
+ sqlalchemy/dialects/postgresql/ranges.py,sha256=EebUBCU6aHVXG5_P_93ECA14Au557zkTtodCq3wC-WA,30260
71
+ sqlalchemy/dialects/postgresql/types.py,sha256=vf_1VBkaf6bn-D1c6ns_e4C-qFjwsixNBvZRFlqSqD4,6699
72
+ sqlalchemy/dialects/sqlite/__init__.py,sha256=wnZ9vtfm0QXmth1jiGiubFgRiKxIoQoNthb1bp4FhCs,1173
73
+ sqlalchemy/dialects/sqlite/aiosqlite.py,sha256=T8Vq-H-7tgIW24JOl9_KAHfqwhA6edemuByt9SJfNxQ,10897
74
+ sqlalchemy/dialects/sqlite/base.py,sha256=8htJLMebsP_yTJKub4qUJD0SgWu_4sKiRHbGhoR-Qow,96211
75
+ sqlalchemy/dialects/sqlite/dml.py,sha256=a3vyNx22vqo85vVrsAp5q5WKAR3Ti1qO9donlwqUYuw,7480
76
+ sqlalchemy/dialects/sqlite/json.py,sha256=XFPwSdNx0DxDfxDZn7rmGGqsAgL4vpJbjjGaA73WruQ,2533
77
+ sqlalchemy/dialects/sqlite/provision.py,sha256=O4JDoybdb2RBblXErEVPE2P_5xHab927BQItJa203zU,5383
78
+ sqlalchemy/dialects/sqlite/pysqlcipher.py,sha256=_JuOCoic--ehAGkCgnwUUKKTs6xYoBGag4Y_WkQUDwU,5347
79
+ sqlalchemy/dialects/sqlite/pysqlite.py,sha256=xBg6DKqvml5cCGxVSAQxR1dcMvso8q4uyXs2m4WLzz0,27891
80
+ sqlalchemy/engine/__init__.py,sha256=fJCAl5P7JH9iwjuWo72_3LOIzWWhTnvXqzpAmm_T0fY,2818
81
+ sqlalchemy/engine/_py_processors.py,sha256=RSVKm9YppSBDSCEi8xvbZdRCP9EsCYfbyEg9iDCMCiI,3744
82
+ sqlalchemy/engine/_py_row.py,sha256=Zdta0JGa7V2aV04L7nzXUEp-H1gpresKyBlneQu60pk,3549
83
+ sqlalchemy/engine/_py_util.py,sha256=5m3MZbEqnUwP5kK_ghisFpzcXgBwSxTSkBEFB6afiD8,2245
84
+ sqlalchemy/engine/base.py,sha256=5-NFJjjNrr2SpX9FGd0DC5pDiUiZWup0HyXvP1SOFgU,122148
85
+ sqlalchemy/engine/characteristics.py,sha256=YvMgrUVAt3wsSiQ0K8l44yBjFlMK3MGajxhg50t5yFM,2344
86
+ sqlalchemy/engine/create.py,sha256=8372TLpy4FOAIZ9WmuNkx1v9DPgwpoCAH9P7LNXZCwY,32629
87
+ sqlalchemy/engine/cursor.py,sha256=YChnviiirHFSqwRhgcPfFAyqhu8HzLxwuQg-7J7v9Ao,74396
88
+ sqlalchemy/engine/default.py,sha256=-xqATrVZuhcolumeVLv4OgPnlERrTvfr9t16kkfKuaw,83620
89
+ sqlalchemy/engine/events.py,sha256=9BfbZ7uyaC3rOthu1l0fGhLLE0skTtahhy2NedS-DgA,37424
90
+ sqlalchemy/engine/interfaces.py,sha256=M__Rrn3lAfFRjrmBDFiJE_Alw0zoMHRV_Ad9iDPdH_0,112825
91
+ sqlalchemy/engine/mock.py,sha256=MMdaDvuKuAH_ugnaumq9xK1LOc0c81cocxUnar0hcNM,4177
92
+ sqlalchemy/engine/processors.py,sha256=ENN6XwndxJPW-aXPu_3NzAZsy5SvNznHoa1Qn29ERAw,2383
93
+ sqlalchemy/engine/reflection.py,sha256=0LTHyTbQAQ2V236_ljAbKnnzb7XpxVW244NbGgnfK0Q,75274
94
+ sqlalchemy/engine/result.py,sha256=d_tR2B4LD-uKn-gBOwufHk3XAePszAcfthUH9UNliOU,77720
95
+ sqlalchemy/engine/row.py,sha256=70087e_L0REbTxAQZ905qRfg42EdiVNnmjofcG6Ybls,10452
96
+ sqlalchemy/engine/strategies.py,sha256=HjCj_FHQOgkkhhtnVmcOEuHI_cftNo3P0hN5zkhZvDc,442
97
+ sqlalchemy/engine/url.py,sha256=vGqmfdJ0XwQ9HfA0G9wJ0pGJ4mIuCoSsm9kByNet9Mg,30454
98
+ sqlalchemy/engine/util.py,sha256=Y5euVW6-DGJaxIgUachA2n1aiqm2M3cB-tCG2joRVt4,5683
99
+ sqlalchemy/event/__init__.py,sha256=CSBMp0yu5joTC6tWvx40B4p87N7oGKxC-ZLx2ULKUnQ,997
100
+ sqlalchemy/event/api.py,sha256=nQAvPK1jrLpmu8aKCUtc-vYWcIuG-1FgAtp3GRkfIiI,8227
101
+ sqlalchemy/event/attr.py,sha256=NMe_sPQTju2PE-f68C8TcKJGW-Gxyi1CLXumAmE368Y,20438
102
+ sqlalchemy/event/base.py,sha256=ECHisETYKRpHGzdhwxbGNnfFjCfD3OKKN9_A8xQsDSM,14996
103
+ sqlalchemy/event/legacy.py,sha256=OpPqE64xk1OYjLW1scvc6iijhoa5GZJt5f7-beWhgOc,8211
104
+ sqlalchemy/event/registry.py,sha256=XFjAAmV8vjHfdU7DOqIxu6BXBW2vFIIKJ6eYXiu_-ko,10861
105
+ sqlalchemy/ext/__init__.py,sha256=w4h7EpXjKPr0LD4yHa0pDCfrvleU3rrX7mgyb8RuDYQ,322
106
+ sqlalchemy/ext/associationproxy.py,sha256=vYG-c1KYB3hRKF22FthJZm0oibimuqexvSInlGtdjzg,64977
107
+ sqlalchemy/ext/automap.py,sha256=7p13-VpN0MOM525r7pmEnftedya9l5G-Ei_cFXZfpTc,61431
108
+ sqlalchemy/ext/baked.py,sha256=R8ZAxiVN6eH50AJu0O3TtFXNE1tnRkMlSj3AvkcWFhY,17818
109
+ sqlalchemy/ext/compiler.py,sha256=h7eR0NcPJ4F_k8YGRP3R9YX75Y9pgiVxoCjRyvceF7g,20391
110
+ sqlalchemy/ext/horizontal_shard.py,sha256=eh14W8QWHYH22PL1l5qF_ad9Fyh1WAFjKi_vNfsme94,16766
111
+ sqlalchemy/ext/hybrid.py,sha256=VYZcz6-Mx0T2XWv_ZK4GUBOw5Ru8IcDuEQaOojSBPEE,52525
112
+ sqlalchemy/ext/indexable.py,sha256=RkG9BKwil-TqDjVBM14ML9c-geUrHxtRKpYkSJEwGHA,11028
113
+ sqlalchemy/ext/instrumentation.py,sha256=rjjSbTGilYeGLdyEWV932TfTaGxiVP44_RajinANk54,15723
114
+ sqlalchemy/ext/mutable.py,sha256=d3Pp8PcAVN4pHN9rhc1ReXBWe0Q70Q5S1klFoYGyDPA,37393
115
+ sqlalchemy/ext/orderinglist.py,sha256=8Vcg7UUkLg-QbYAbLVDSqu-5REkR6L-FLLhCYsHYxCQ,14384
116
+ sqlalchemy/ext/serializer.py,sha256=ox6dbMOBmFR0H2RQFt17mcYBOGKgn1cNVFfqY8-jpgQ,6178
117
+ sqlalchemy/ext/asyncio/__init__.py,sha256=oaV5vnuL6DOd_n1TApySI157_380Pd9bskjjriS7iik,1255
118
+ sqlalchemy/ext/asyncio/base.py,sha256=LQzW7Qo9xvYutjDlwrh3Ln1AqIeyEGZR6vXCxh7ue5E,9015
119
+ sqlalchemy/ext/asyncio/engine.py,sha256=14gs0OO_v5AZ-CqU0ixgvj8pCZfhuhmfI-Evl5389tE,47372
120
+ sqlalchemy/ext/asyncio/exc.py,sha256=1hCdOKzvSryc_YE4jgj0l9JASOmZXutdzShEYPiLbGI,639
121
+ sqlalchemy/ext/asyncio/result.py,sha256=YHLhgGklf77hEbhNwZ3JhK4Nj52FB-4YTkC-3PbRGE4,30570
122
+ sqlalchemy/ext/asyncio/scoping.py,sha256=s5XZ2oY4D3okMHSKxX989wtsRjixP7-1e7emhHh6VP0,49561
123
+ sqlalchemy/ext/asyncio/session.py,sha256=iSNkFu0cv8EN-964It-O1BOUyf-LXQCD3QBdHGte8VQ,59909
124
+ sqlalchemy/ext/declarative/__init__.py,sha256=VJu8S1efxil20W48fJlpDn6gHorOudn5p3-lF72WcJ8,1818
125
+ sqlalchemy/ext/declarative/extensions.py,sha256=vwZjudPFA_mao1U04-RZCaU_tvPMBgQa5OTmSI7K7SU,19547
126
+ sqlalchemy/ext/mypy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
127
+ sqlalchemy/ext/mypy/apply.py,sha256=uUES4grydYtKykLKlxzJeBXeGe8kfWou9_rzEyEkfp0,10503
128
+ sqlalchemy/ext/mypy/decl_class.py,sha256=Ls2Efh4kEhle6Z4VMz0GRBgGQTYs2fHr5b4DfuDj44c,17377
129
+ sqlalchemy/ext/mypy/infer.py,sha256=Kr79d5i_iLf559s2_y7cN_TtDxZMr-t5c7AsV_dhlNE,19366
130
+ sqlalchemy/ext/mypy/names.py,sha256=CWPZVswhNNBCpb49Vf2w-Y8dxxaYPj9JbiOSLtczfEY,10967
131
+ sqlalchemy/ext/mypy/plugin.py,sha256=fLXDukvZqbJ0JJCOoyZAuOniYZ_F1YT-l9gKppu8SEs,9750
132
+ sqlalchemy/ext/mypy/util.py,sha256=wci1awA8t5aKKUmfl6JDhXv8KnSjsGTDhwWjwzjRPes,8984
133
+ sqlalchemy/future/__init__.py,sha256=79DZx3v7TQZpkS_qThlmuCOm1a9UK2ObNZhyMmjfNB0,516
134
+ sqlalchemy/future/engine.py,sha256=6uOpOedIqiT1-3qJSJIlv9_raMJU8NTkhQwN_Ngg8kI,499
135
+ sqlalchemy/orm/__init__.py,sha256=cBn0aPWyDFY4ya-cHRshQBcuThk1smTUCTrlp6LHdlE,8463
136
+ sqlalchemy/orm/_orm_constructors.py,sha256=6wCs-32yXRYF7slWJaYWwZDqNTTXMFld7rOjuHG8eM8,99269
137
+ sqlalchemy/orm/_typing.py,sha256=TH2_JcWdtDVG-wHhqOWEktkAI6RS2PbYjv-ttYbhZZU,5008
138
+ sqlalchemy/orm/attributes.py,sha256=IEr-T11tsyvOJHODaYcXkgfTFYcZ2kd3Bm1-KrfQySU,91734
139
+ sqlalchemy/orm/base.py,sha256=Eel0VNPF1IVDijTOnYzrDyBVYxVL331K09z65FrQEV4,26799
140
+ sqlalchemy/orm/bulk_persistence.py,sha256=RsHzKxZ2GkOcGwE1sU70f7Cj99rtGzHzeyfm8o4YoNo,69342
141
+ sqlalchemy/orm/clsregistry.py,sha256=4J-kKshmLOEyx3VBqREm2k_XY0cer4zwUoHJT3n5Xmw,17949
142
+ sqlalchemy/orm/collections.py,sha256=3ZnUE4q0ZmbEjxUo_IkGncAw7ql1i23EZrWEsvbOt54,50938
143
+ sqlalchemy/orm/context.py,sha256=52Lv_rhKCQn-xBalUtddGG1yXtVWmKmZ1qU96-d1UZA,110488
144
+ sqlalchemy/orm/decl_api.py,sha256=QY4nVsWEE_BQjd73hKlCylbWUuLjhLoQL7AO152A3nI,62916
145
+ sqlalchemy/orm/decl_base.py,sha256=JW1llPLGjyKu8AamLx4lBxsnDuQ0gpgMnOFadzJeqos,81278
146
+ sqlalchemy/orm/dependency.py,sha256=oHg3-dXVwVzZSpSRSZNWGUDEuhmDdtEPCUxEdD4euUA,47029
147
+ sqlalchemy/orm/descriptor_props.py,sha256=4ioza3TnVE_2RC2wSJLDCa1WNJnim_i0yUiuPq8BQDs,37428
148
+ sqlalchemy/orm/dynamic.py,sha256=-4kTkjq6Z88L1STsjybi27cMXc1OVlmmvtPxE_DmJKI,8622
149
+ sqlalchemy/orm/evaluator.py,sha256=jPjVrP7XbVOG6aXTCBREq0rF3oNHLqB4XAT-gt_cpaA,11925
150
+ sqlalchemy/orm/events.py,sha256=fGnUHwDTV9FTiifB2mmIJispwPbIT4mZongRJD7uiw4,127258
151
+ sqlalchemy/orm/exc.py,sha256=A3wvZVs5sC5XCef4LoTUBG-UfhmliFpU9rYMdS2t_To,7356
152
+ sqlalchemy/orm/identity.py,sha256=gRiuQSrurHGEAJXH9QGYioXL49Im5EGcYQ-IKUEpHmQ,9249
153
+ sqlalchemy/orm/instrumentation.py,sha256=UiICt6MaDo3kf2x71F-NJZ6Q7zv2sN2-9zLwm4zOARU,24451
154
+ sqlalchemy/orm/interfaces.py,sha256=W7bz4nA0Cx4f1BHHREBPhTQvFNOqFcHvx4h8u6Csz70,47346
155
+ sqlalchemy/orm/loading.py,sha256=o3R9yKDigR21aoNeyX6-KpSyvXesC9pQ91IMbaA_J8A,56405
156
+ sqlalchemy/orm/mapped_collection.py,sha256=bNs7GOMZW-LSs2LQ_63lYqhdZ3IHp5Bz2bm_tzqr7i8,19275
157
+ sqlalchemy/orm/mapper.py,sha256=Ib6ZpEHR1YgzmTv5_1a44Emet9mvf6jKg-JguCca3Xs,170648
158
+ sqlalchemy/orm/path_registry.py,sha256=3pZzbKvGppL4rc5IXQV20kvntkmrUw6vhO0Ck-FjK9s,24506
159
+ sqlalchemy/orm/persistence.py,sha256=oKqEic1r4jCI069PP7Dw_VxTHyvjD9iEHSHLK45imik,60516
160
+ sqlalchemy/orm/properties.py,sha256=XCSoGCHQNGY7AM6qUJtdUt9TMF-slt4FI1rWpBSV20Q,26755
161
+ sqlalchemy/orm/query.py,sha256=cs85Bh3OqfRqE3qhcsNlftvgJejgODJhkkixdVBjLC4,117883
162
+ sqlalchemy/orm/relationships.py,sha256=BT2YBwVc2HrAigZaLNz7gkYlyU5mE0S4ngfomN2G9nk,127740
163
+ sqlalchemy/orm/scoping.py,sha256=fdoHbwZgiqRpCtkKqivwBB5_ulKbPKc_nkErRjrDDMc,74844
164
+ sqlalchemy/orm/session.py,sha256=QQD0WXpOr2rF1FZXNKMMhGekHjBAkJi2Dl4B7ZZe77o,186465
165
+ sqlalchemy/orm/state.py,sha256=voUgA4Ef_wB90Tttt4scDnBijnTFAYohiPVngmnXg00,37449
166
+ sqlalchemy/orm/state_changes.py,sha256=xLCwVrz930fhjyA5cxKaPqgZm9qj0FZCuv1-yKYONB8,6586
167
+ sqlalchemy/orm/strategies.py,sha256=5VahSJVSdkGZ3SpTXirfmJ2KFW3PutxFZcFDhE9_xbY,113754
168
+ sqlalchemy/orm/strategy_options.py,sha256=Vb9qpDk1PkNO6noeHGEVpezBRPHdo-naWP7mRqNkmJI,81687
169
+ sqlalchemy/orm/sync.py,sha256=5Nt_OqP4IfhAtHwFRar4dw-YjLENRLvp4d3jDC4wpnw,5749
170
+ sqlalchemy/orm/unitofwork.py,sha256=Wk5YZocBbxe4m1wU2aFQ7gY1Cp5CROi13kDEM1iOSz4,27033
171
+ sqlalchemy/orm/util.py,sha256=U07ckrJHumeV_0IIq9tvg1kutga31vnrg1fCf3nkmZs,79727
172
+ sqlalchemy/orm/writeonly.py,sha256=Lmn3y7hx0dLqGhhiO-p6wTOeKQ7U5ePK_qTR0JIfRoo,19537
173
+ sqlalchemy/pool/__init__.py,sha256=CIv4b6ctueY7w3sML_LxyLKAdl59esYOhz3O7W5w7WE,1815
174
+ sqlalchemy/pool/base.py,sha256=FrVZ6_0sNr9P1tudH55UugMB578FgADDsfH_zsMjPG0,52350
175
+ sqlalchemy/pool/events.py,sha256=eb5t6zLqZ0yErsaCt3-3m_-KjnK2VkGO5ILvnHY1Fmg,13201
176
+ sqlalchemy/pool/impl.py,sha256=bwd4GQ5FHzlblAfaXoD_23bwxFiLqQF5xEUY18qImRo,17740
177
+ sqlalchemy/sql/__init__.py,sha256=TMjmKl6YaAK6jXtmPLqPDn4yrbShVC3Wc9njjU1MrUw,5730
178
+ sqlalchemy/sql/_dml_constructors.py,sha256=hoNyINY3FNi1ZQajR6lbcRN7oYsNghM1wuzzVWxIv3c,3867
179
+ sqlalchemy/sql/_elements_constructors.py,sha256=-qksx59Gqhmzxo1xByPtZZboNvL8uYcCN14pjHYHxL8,62914
180
+ sqlalchemy/sql/_orm_types.py,sha256=_vR3_HQYgZR_of6_ZpTQByie2gaVScxQjVAVWAP3Ztg,620
181
+ sqlalchemy/sql/_py_util.py,sha256=iiwgX3dQhOjdB5-10jtgHPIdibUqGk49bC1qdZMBpYI,2173
182
+ sqlalchemy/sql/_selectable_constructors.py,sha256=RDqgejqiUuU12Be1jBpMIx_YdJho8fhKfnMoJLPFTFE,18812
183
+ sqlalchemy/sql/_typing.py,sha256=t_g3EqzSK9PGCVGCCGwNso2gcmupcFKJalMD1-_l8ng,10457
184
+ sqlalchemy/sql/annotation.py,sha256=8iye1kbFDeKYcgAW7vaBg7HdcZLvUtjRXUzVS6ZRNLk,17904
185
+ sqlalchemy/sql/base.py,sha256=xMnomm_y8T4215FhhEFQVM2R21cgphqIjwq_FMsxbc8,73762
186
+ sqlalchemy/sql/cache_key.py,sha256=nDM36JOkcQm2u6GCgCV84c72MW2ntGDMoZrVIy5_HDQ,32661
187
+ sqlalchemy/sql/coercions.py,sha256=ju8xEi7b9G_GzxaQ6Nwu0cFIWFZ--ottIVfdiuhHY7Y,40553
188
+ sqlalchemy/sql/compiler.py,sha256=iynrWB7lFXJF8MDL3pO3ktP3l9IgmkQD64LisGNTnnI,267009
189
+ sqlalchemy/sql/crud.py,sha256=FSJRsmd3jDA1SRhuCIfJdaRD7jQ1lmqU4G4vcFMDfNs,55647
190
+ sqlalchemy/sql/ddl.py,sha256=ubFUBB8ajD4_TBY5LEmpEFn6PNPy4ctesNU6f36DPec,45689
191
+ sqlalchemy/sql/default_comparator.py,sha256=Gqz0_b4_AViJGQVhZQMhB5m5e5OhQ9ykjl8jZuLYDOw,16744
192
+ sqlalchemy/sql/dml.py,sha256=uxfHb0sG4IvtFx1G9MGrrxL9Bm_kqlX52sRV-IKtMN8,65550
193
+ sqlalchemy/sql/elements.py,sha256=cJgQAUBGBpSF7FqOYgcWISW2T7FjCgl22K5_v7ed-74,169214
194
+ sqlalchemy/sql/events.py,sha256=xe3vJ6pQJau3dJWBAY0zU7Lz52UKuMrpLycriLm3AWA,18301
195
+ sqlalchemy/sql/expression.py,sha256=baMnCH04jeE8E3tA2TovXlsREocA2j3fdHKnzOB8H4U,7586
196
+ sqlalchemy/sql/functions.py,sha256=A5SRLM6EqY4RQ4e0LI5yCjGwzRIjn7Sz8mLFLSfmCHc,54492
197
+ sqlalchemy/sql/lambdas.py,sha256=kUbj1HTqzGdTeKFVZDR0t82JnotYVBfjHE8jV_-2l3w,49309
198
+ sqlalchemy/sql/naming.py,sha256=l8udFP2wvXLgehIB0uF2KXwpkXSVSREDk6fLCH9F-XY,6865
199
+ sqlalchemy/sql/operators.py,sha256=ovOlwgWQy-nhesRt29Hd4TIP7x0EsA33GsSkhSEB6yE,73998
200
+ sqlalchemy/sql/roles.py,sha256=fRi_bOduJED_Dk2PjudvAzEdpf0JXgfv1b5onjKHmsU,7628
201
+ sqlalchemy/sql/schema.py,sha256=03emDaRo4vlkugY2VgIVNWfc4_EkwzjiSDawyZRZMwM,227000
202
+ sqlalchemy/sql/selectable.py,sha256=XSL6o79lor6AWvg_Rfv4BskkcTlNjui0Rmh4s_KfYxw,232342
203
+ sqlalchemy/sql/sqltypes.py,sha256=h7sTx-7ld1ajMwwr5exDqcmWYmMh65sUXzLkDpD8UDw,125872
204
+ sqlalchemy/sql/traversals.py,sha256=UT2g9KbITMGf4EELAzR8OGlqRVNANlMgPgalU_MkDyU,33601
205
+ sqlalchemy/sql/type_api.py,sha256=EJ1RFnAAExqs7BviHLo3VmSDda7gBxIY8nRx3zc7bU0,85191
206
+ sqlalchemy/sql/util.py,sha256=5CGmTf3LueJ34nDUCrpfB_WqmMSLBDYC6UgK-H7LJik,48269
207
+ sqlalchemy/sql/visitors.py,sha256=IXzmK9IZr40ZSwP8ucRb6A1sgDC3_wpm0nM-qayg3bI,36354
208
+ sqlalchemy/testing/__init__.py,sha256=9M2SMxBBLJ8xLUWXNCWDzkcvOqFznWcJzrSd712vATU,3126
209
+ sqlalchemy/testing/assertions.py,sha256=lNNZ-gfF4TDRXmB7hZDdch7JYZRb_qWGeqWDFKtopx0,31439
210
+ sqlalchemy/testing/assertsql.py,sha256=fIlHNWaGUR439L6yF98kGz4E_VBIJw5BvpnnQoCutCA,16775
211
+ sqlalchemy/testing/asyncio.py,sha256=cAw68tzu3h5wjdIKfOqhFATcbMb38XeK0ThjIalUHuQ,3728
212
+ sqlalchemy/testing/config.py,sha256=E_FLPXO78dXNFsMx3JV-QEr_ocR2k39tyl7n8PxGF_0,10937
213
+ sqlalchemy/testing/engines.py,sha256=w5-0FbanItRsOt6x4n7wM_OnToCzJnrvZZ2hk5Yzng8,13355
214
+ sqlalchemy/testing/entities.py,sha256=rysywsnjXHlIIC-uv0L7-fLmTAuNpHJvcSd1HeAdY5M,3354
215
+ sqlalchemy/testing/exclusions.py,sha256=uoYLEwyNOK1eR8rpfOZ2Q3dxgY0akM-RtsIFML-FPrY,12444
216
+ sqlalchemy/testing/fixtures.py,sha256=Dl4NWhZHol5iGg1pPe5vONe9nlEUyhsDhXj-weEtgQk,33101
217
+ sqlalchemy/testing/pickleable.py,sha256=0AqRQGexDo-lgsEx_GDMRqMIyG1QAQONbGsqWxLyoog,2889
218
+ sqlalchemy/testing/profiling.py,sha256=HPjYvRLT1nD90FCZ7AA8j9ygkMtf1SGA47Xze2QPueo,10148
219
+ sqlalchemy/testing/provision.py,sha256=w4F_ceGHPpWHUeh6cVcE5ktCC-ISrGc2yOSnXauOd5U,14200
220
+ sqlalchemy/testing/requirements.py,sha256=lsIcOEZfn-pgrMqnsJ55NrVnpq-CQETwXg-0Mk3HfVs,50709
221
+ sqlalchemy/testing/schema.py,sha256=OSfMoIJ7ORbevGkeJdrKcTrQ0s7wXebuCU08mC1Y9jA,6513
222
+ sqlalchemy/testing/util.py,sha256=FV2048zXXHFBjYbwHHuahnOpLOzCzXzTzjSz976sZKQ,14160
223
+ sqlalchemy/testing/warnings.py,sha256=pmfT33PF1q1PI7DdHOsup3LxHq1AC4-aYl1oL8HmrYo,1546
224
+ sqlalchemy/testing/plugin/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
225
+ sqlalchemy/testing/plugin/bootstrap.py,sha256=GrBB27KbswjE3Tt-zJlj6uSqGh9N-_CXkonnJSSBz84,1437
226
+ sqlalchemy/testing/plugin/plugin_base.py,sha256=FB73wxHVFjpiCuwIg1KFCQlx1yPiHb2thpNbEoLRX48,21277
227
+ sqlalchemy/testing/plugin/pytestplugin.py,sha256=yIZf7y4Vl-J583kSpB7t2IXCBP9keF254LjxGAEcSxo,27232
228
+ sqlalchemy/testing/suite/__init__.py,sha256=_firVc2uS3TMZ3vH2baQzNb17ubM78RHtb9kniSybmk,476
229
+ sqlalchemy/testing/suite/test_cte.py,sha256=O5idVeBnHm9zdiG3tuCBUn4hYU_TA63-6LNnRygr8g0,6205
230
+ sqlalchemy/testing/suite/test_ddl.py,sha256=xWimTjggpTe3S1Xfmt_IPofTXkUUcKuVSVCIfIyGMbA,11785
231
+ sqlalchemy/testing/suite/test_deprecations.py,sha256=XI8ZU1NxC-6uvPDImaaq9O7Ov6MF5gmy-yk3TfesLAo,5082
232
+ sqlalchemy/testing/suite/test_dialect.py,sha256=_5gZVBqq6jYhzKj7pgGo6FHrSPeEgZYmiPn2Q28gYqA,21015
233
+ sqlalchemy/testing/suite/test_insert.py,sha256=xbMkoNgDY7wSRBXOLny1JltZwUN8HiH_OIwpOh-HD6M,17368
234
+ sqlalchemy/testing/suite/test_reflection.py,sha256=YUgTW76IFVNjiYJoZfFZa0W1WVYBZNo5rjynZLxlljA,104478
235
+ sqlalchemy/testing/suite/test_results.py,sha256=BSNHQ1SxhU964RS5AIkKMqE_JrVjCabtODLHr5EYfHo,15665
236
+ sqlalchemy/testing/suite/test_rowcount.py,sha256=zA0Q3Guf-TQioyLmNZ6HWCUOEuEhf7q-uI2J72j2kjk,6147
237
+ sqlalchemy/testing/suite/test_select.py,sha256=QHsBX16EZpxlEZZLM0pMNcwayPU0dig39McKwiiith0,58325
238
+ sqlalchemy/testing/suite/test_sequence.py,sha256=c80CBWrU930GPnPfr9TCRbTTuITR7BpIactncLIj2XU,9672
239
+ sqlalchemy/testing/suite/test_types.py,sha256=GTully5oymZ9I_GCrw1q0_kVRcnPSOnfT89shObI8x0,61834
240
+ sqlalchemy/testing/suite/test_unicode_ddl.py,sha256=7obItCpFt4qlWaDqe25HWgQT6FoUhgz1W7_Xycfz9Xk,5887
241
+ sqlalchemy/testing/suite/test_update_delete.py,sha256=VxhsI37iivEYejQ38duuT4dida9iXH_4EK3QMvaXMZM,1648
242
+ sqlalchemy/util/__init__.py,sha256=Bh0SkfkeCsz6-rbDmC41lAWOuCvKCiXVZthN2cWJEXk,8245
243
+ sqlalchemy/util/_collections.py,sha256=SzJIKREJgfGTjOZRgvcwPGQR2_x_7k8LzFbuzqzJ2Mg,20401
244
+ sqlalchemy/util/_concurrency_py3k.py,sha256=SNvy2lOf2cb15CwcfdIHfFJFKXXV-VoBfb-pK-iScDA,8284
245
+ sqlalchemy/util/_has_cy.py,sha256=XMkeqCDGmhkd0uuzpCdyELz7gOjHxyFQ1AIlc5NneoY,1229
246
+ sqlalchemy/util/_py_collections.py,sha256=8ZL6A4hrvSv2w4K4PaZImHhm0sLNAzaEvqyrWyOzFic,16678
247
+ sqlalchemy/util/compat.py,sha256=cdYRtH6ZMSVY8WgzRNDZ8yagOSYG1xjuSyQEBs6Q6Pg,9109
248
+ sqlalchemy/util/concurrency.py,sha256=ZxcQYOKy-GBsQkPmCrBO5MzMpqW3JZme2Hiyqpbt9uc,2284
249
+ sqlalchemy/util/deprecations.py,sha256=R-1ALq_6-JqktzVMxOBS5jh_DNi5gcM5uP0IBd22jcQ,12113
250
+ sqlalchemy/util/langhelpers.py,sha256=y_7NUQYLOFki1llVD73HHYqL-80OPXYl5xghZpyIQgE,64931
251
+ sqlalchemy/util/preloaded.py,sha256=KKNLJEqChDW1TNUsM_TzKu7JYEA3kkuh2N-quM_2_Y4,5905
252
+ sqlalchemy/util/queue.py,sha256=ITejs6KS4Hz_ojrss2oFeUO9MoIeR3qWmZQ8J7yyrNU,10205
253
+ sqlalchemy/util/tool_support.py,sha256=epm8MzDZpVmhE6LIjrjJrP8BUf12Wab2m28A9lGq95s,5969
254
+ sqlalchemy/util/topological.py,sha256=hjJWL3C_B7Rpv9s7jj7wcTckcZUSkxc6xRDhiN1xyec,3458
255
+ sqlalchemy/util/typing.py,sha256=I426vml9ezDOVSMFE3FL2XaqF1eT73zke0bXJEdPXUs,15640
256
+ SQLAlchemy-2.0.16.dist-info/LICENSE,sha256=2lSTeluT1aC-5eJXO8vhkzf93qCSeV_mFXLrv3tNdIU,1100
257
+ SQLAlchemy-2.0.16.dist-info/METADATA,sha256=zoONBukXaGRPJe_95d4sxKj4xgkHU2O6RRxnP9pONqI,9450
258
+ SQLAlchemy-2.0.16.dist-info/WHEEL,sha256=pkctZYzUS4AYVn6dJ-7367OJZivF2e8RA9b_ZBjif18,92
259
+ SQLAlchemy-2.0.16.dist-info/top_level.txt,sha256=rp-ZgB7D8G11ivXON5VGPjupT1voYmWqkciDt5Uaw_Q,11
260
+ SQLAlchemy-2.0.16.dist-info/RECORD,,
sqlalchemy/__init__.py CHANGED
@@ -267,7 +267,7 @@ from .types import Uuid as Uuid
267
267
  from .types import VARBINARY as VARBINARY
268
268
  from .types import VARCHAR as VARCHAR
269
269
 
270
- __version__ = "2.0.14"
270
+ __version__ = "2.0.16"
271
271
 
272
272
 
273
273
  def __go(lcls: Any) -> None:
@@ -1309,7 +1309,6 @@ class DATETIMEOFFSET(_DateTimeBase, sqltypes.DateTime):
1309
1309
  class _UnicodeLiteral:
1310
1310
  def literal_processor(self, dialect):
1311
1311
  def process(value):
1312
-
1313
1312
  value = value.replace("'", "''")
1314
1313
 
1315
1314
  if dialect.identifier_preparer._double_percents:
@@ -1838,9 +1837,7 @@ class MSExecutionContext(default.DefaultExecutionContext):
1838
1837
  dialect: MSDialect
1839
1838
 
1840
1839
  def _opt_encode(self, statement):
1841
-
1842
1840
  if self.compiled and self.compiled.schema_translate_map:
1843
-
1844
1841
  rst = self.compiled.preparer._render_schema_translates
1845
1842
  statement = rst(statement, self.compiled.schema_translate_map)
1846
1843
 
@@ -2691,8 +2688,9 @@ class MSDDLCompiler(compiler.DDLCompiler):
2691
2688
  formatted_name = self.preparer.format_constraint(constraint)
2692
2689
  if formatted_name is not None:
2693
2690
  text += "CONSTRAINT %s " % formatted_name
2694
- text += "UNIQUE "
2695
-
2691
+ text += "UNIQUE %s" % self.define_unique_constraint_distinct(
2692
+ constraint, **kw
2693
+ )
2696
2694
  clustered = constraint.dialect_options["mssql"]["clustered"]
2697
2695
  if clustered is not None:
2698
2696
  if clustered:
@@ -22,7 +22,6 @@ from ...testing.provision import temp_table_keyword_args
22
22
 
23
23
  @generate_driver_url.for_db("mssql")
24
24
  def generate_driver_url(url, driver, query_str):
25
-
26
25
  backend = url.get_backend_name()
27
26
 
28
27
  new_url = url.set(drivername="%s+%s" % (backend, driver))
@@ -84,7 +83,6 @@ def _reap_mssql_dbs(url, idents):
84
83
  log.info("db reaper connecting to %r", url)
85
84
  eng = create_engine(url)
86
85
  with eng.connect().execution_options(isolation_level="AUTOCOMMIT") as conn:
87
-
88
86
  log.info("identifiers in file: %s", ", ".join(idents))
89
87
 
90
88
  to_reap = conn.exec_driver_sql(
@@ -377,7 +377,6 @@ class _ms_numeric_pyodbc:
377
377
  """
378
378
 
379
379
  def bind_processor(self, dialect):
380
-
381
380
  super_process = super().bind_processor(dialect)
382
381
 
383
382
  if not dialect._need_decimal_fix:
@@ -34,7 +34,6 @@ This dialect should normally be used only with the
34
34
 
35
35
 
36
36
  """ # noqa
37
-
38
37
  from .pymysql import MySQLDialect_pymysql
39
38
  from ... import pool
40
39
  from ... import util
@@ -255,16 +254,17 @@ class AsyncAdapt_aiomysql_dbapi:
255
254
 
256
255
  def connect(self, *arg, **kw):
257
256
  async_fallback = kw.pop("async_fallback", False)
257
+ creator_fn = kw.pop("async_creator_fn", self.aiomysql.connect)
258
258
 
259
259
  if util.asbool(async_fallback):
260
260
  return AsyncAdaptFallback_aiomysql_connection(
261
261
  self,
262
- await_fallback(self.aiomysql.connect(*arg, **kw)),
262
+ await_fallback(creator_fn(*arg, **kw)),
263
263
  )
264
264
  else:
265
265
  return AsyncAdapt_aiomysql_connection(
266
266
  self,
267
- await_only(self.aiomysql.connect(*arg, **kw)),
267
+ await_only(creator_fn(*arg, **kw)),
268
268
  )
269
269
 
270
270
 
@@ -285,7 +285,6 @@ class MySQLDialect_aiomysql(MySQLDialect_pymysql):
285
285
 
286
286
  @classmethod
287
287
  def get_pool_class(cls, url):
288
-
289
288
  async_fallback = url.query.get("async_fallback", False)
290
289
 
291
290
  if util.asbool(async_fallback):
@@ -29,7 +29,6 @@ This dialect should normally be used only with the
29
29
 
30
30
 
31
31
  """ # noqa
32
-
33
32
  from contextlib import asynccontextmanager
34
33
 
35
34
  from .pymysql import MySQLDialect_pymysql
@@ -267,16 +266,17 @@ class AsyncAdapt_asyncmy_dbapi:
267
266
 
268
267
  def connect(self, *arg, **kw):
269
268
  async_fallback = kw.pop("async_fallback", False)
269
+ creator_fn = kw.pop("async_creator_fn", self.asyncmy.connect)
270
270
 
271
271
  if util.asbool(async_fallback):
272
272
  return AsyncAdaptFallback_asyncmy_connection(
273
273
  self,
274
- await_fallback(self.asyncmy.connect(*arg, **kw)),
274
+ await_fallback(creator_fn(*arg, **kw)),
275
275
  )
276
276
  else:
277
277
  return AsyncAdapt_asyncmy_connection(
278
278
  self,
279
- await_only(self.asyncmy.connect(*arg, **kw)),
279
+ await_only(creator_fn(*arg, **kw)),
280
280
  )
281
281
 
282
282
 
@@ -295,7 +295,6 @@ class MySQLDialect_asyncmy(MySQLDialect_pymysql):
295
295
 
296
296
  @classmethod
297
297
  def get_pool_class(cls, url):
298
-
299
298
  async_fallback = url.query.get("async_fallback", False)
300
299
 
301
300
  if util.asbool(async_fallback):
@@ -1179,7 +1179,6 @@ class MySQLExecutionContext(default.DefaultExecutionContext):
1179
1179
 
1180
1180
 
1181
1181
  class MySQLCompiler(compiler.SQLCompiler):
1182
-
1183
1182
  render_table_with_column_in_update_from = True
1184
1183
  """Overridden from base SQLCompiler value"""
1185
1184
 
@@ -1581,7 +1580,6 @@ class MySQLCompiler(compiler.SQLCompiler):
1581
1580
  tmp = " FOR UPDATE"
1582
1581
 
1583
1582
  if select._for_update_arg.of and self.dialect.supports_for_update_of:
1584
-
1585
1583
  tables = util.OrderedSet()
1586
1584
  for c in select._for_update_arg.of:
1587
1585
  tables.update(sql_util.surface_selectables_only(c))
@@ -1848,7 +1846,6 @@ class MySQLDDLCompiler(compiler.DDLCompiler):
1848
1846
  ):
1849
1847
  arg = opts[opt]
1850
1848
  if opt in _reflection._options_of_type_string:
1851
-
1852
1849
  arg = self.sql_compiler.render_literal_value(
1853
1850
  arg, sqltypes.String()
1854
1851
  )
@@ -1940,7 +1937,6 @@ class MySQLDDLCompiler(compiler.DDLCompiler):
1940
1937
 
1941
1938
  length = index.dialect_options[self.dialect.name]["length"]
1942
1939
  if length is not None:
1943
-
1944
1940
  if isinstance(length, dict):
1945
1941
  # length value can be a (column_name --> integer value)
1946
1942
  # mapping specifying the prefix length for each column of the
@@ -2909,7 +2905,6 @@ class MySQLDialect(default.DefaultDialect):
2909
2905
 
2910
2906
  @reflection.cache
2911
2907
  def get_table_options(self, connection, table_name, schema=None, **kw):
2912
-
2913
2908
  parsed_state = self._parsed_state_or_create(
2914
2909
  connection, table_name, schema, **kw
2915
2910
  )
@@ -2942,7 +2937,6 @@ class MySQLDialect(default.DefaultDialect):
2942
2937
 
2943
2938
  @reflection.cache
2944
2939
  def get_foreign_keys(self, connection, table_name, schema=None, **kw):
2945
-
2946
2940
  parsed_state = self._parsed_state_or_create(
2947
2941
  connection, table_name, schema, **kw
2948
2942
  )
@@ -3021,7 +3015,6 @@ class MySQLDialect(default.DefaultDialect):
3021
3015
  ]
3022
3016
 
3023
3017
  if col_tuples:
3024
-
3025
3018
  correct_for_wrong_fk_case = connection.execute(
3026
3019
  sql.text(
3027
3020
  """
@@ -3092,7 +3085,6 @@ class MySQLDialect(default.DefaultDialect):
3092
3085
 
3093
3086
  @reflection.cache
3094
3087
  def get_indexes(self, connection, table_name, schema=None, **kw):
3095
-
3096
3088
  parsed_state = self._parsed_state_or_create(
3097
3089
  connection, table_name, schema, **kw
3098
3090
  )
@@ -3168,7 +3160,6 @@ class MySQLDialect(default.DefaultDialect):
3168
3160
 
3169
3161
  @reflection.cache
3170
3162
  def get_view_definition(self, connection, view_name, schema=None, **kw):
3171
-
3172
3163
  charset = self._connection_charset
3173
3164
  full_name = ".".join(
3174
3165
  self.identifier_preparer._quote_free_identifiers(schema, view_name)
@@ -699,7 +699,6 @@ class OracleTypeCompiler(compiler.GenericTypeCompiler):
699
699
  **kw,
700
700
  ):
701
701
  if precision is None:
702
-
703
702
  precision = getattr(type_, "precision", None)
704
703
 
705
704
  if _requires_binary_precision:
@@ -1098,7 +1097,6 @@ class OracleCompiler(compiler.SQLCompiler):
1098
1097
 
1099
1098
  # add expressions to accommodate FOR UPDATE OF
1100
1099
  if for_update is not None and for_update.of:
1101
-
1102
1100
  adapter = sql_util.ClauseAdapter(inner_subquery)
1103
1101
  for_update.of = [
1104
1102
  adapter.traverse(elem) for elem in for_update.of
@@ -1352,7 +1350,6 @@ class OracleDDLCompiler(compiler.DDLCompiler):
1352
1350
 
1353
1351
 
1354
1352
  class OracleIdentifierPreparer(compiler.IdentifierPreparer):
1355
-
1356
1353
  reserved_words = {x.lower() for x in RESERVED_WORDS}
1357
1354
  illegal_initial_characters = {str(dig) for dig in range(0, 10)}.union(
1358
1355
  ["_", "$"]
@@ -736,7 +736,6 @@ class OracleCompiler_cx_oracle(OracleCompiler):
736
736
  # Oracle parameters and use the custom escaping here
737
737
  escaped_from = kw.get("escaped_from", None)
738
738
  if not escaped_from:
739
-
740
739
  if self._bind_translate_re.search(name):
741
740
  # not quite the translate use case as we want to
742
741
  # also get a quick boolean if we even found
@@ -764,7 +763,6 @@ class OracleExecutionContext_cx_oracle(OracleExecutionContext):
764
763
  # check for has_out_parameters or RETURNING, create cx_Oracle.var
765
764
  # objects if so
766
765
  if self.compiled.has_out_parameters or self.compiled._oracle_returning:
767
-
768
766
  out_parameters = self.out_parameters
769
767
  assert out_parameters is not None
770
768
 
@@ -841,7 +839,7 @@ class OracleExecutionContext_cx_oracle(OracleExecutionContext):
841
839
  def _generate_cursor_outputtype_handler(self):
842
840
  output_handlers = {}
843
841
 
844
- for (keyname, name, objects, type_) in self.compiled._result_columns:
842
+ for keyname, name, objects, type_ in self.compiled._result_columns:
845
843
  handler = type_._cached_custom_processor(
846
844
  self.dialect,
847
845
  "cx_oracle_outputtypehandler",
@@ -892,7 +890,6 @@ class OracleExecutionContext_cx_oracle(OracleExecutionContext):
892
890
  and is_sql_compiler(self.compiled)
893
891
  and self.compiled._oracle_returning
894
892
  ):
895
-
896
893
  initial_buffer = self.fetchall_for_returning(
897
894
  self.cursor, _internal=True
898
895
  )
@@ -1038,7 +1035,6 @@ class OracleDialect_cx_oracle(OracleDialect):
1038
1035
  threaded=None,
1039
1036
  **kwargs,
1040
1037
  ):
1041
-
1042
1038
  OracleDialect.__init__(self, **kwargs)
1043
1039
  self.arraysize = arraysize
1044
1040
  self.encoding_errors = encoding_errors
@@ -1240,7 +1236,6 @@ class OracleDialect_cx_oracle(OracleDialect):
1240
1236
  def output_type_handler(
1241
1237
  cursor, name, default_type, size, precision, scale
1242
1238
  ):
1243
-
1244
1239
  if (
1245
1240
  default_type == cx_Oracle.NUMBER
1246
1241
  and default_type is not cx_Oracle.NATIVE_FLOAT
@@ -1307,7 +1302,6 @@ class OracleDialect_cx_oracle(OracleDialect):
1307
1302
  return output_type_handler
1308
1303
 
1309
1304
  def on_connect(self):
1310
-
1311
1305
  output_type_handler = self._generate_connection_outputtype_handler()
1312
1306
 
1313
1307
  def on_connect(conn):
@@ -1453,7 +1447,6 @@ class OracleDialect_cx_oracle(OracleDialect):
1453
1447
  def do_commit_twophase(
1454
1448
  self, connection, xid, is_prepared=True, recover=False
1455
1449
  ):
1456
-
1457
1450
  if not is_prepared:
1458
1451
  self.do_commit(connection.connection)
1459
1452
  else:
@@ -67,7 +67,6 @@ class OracleDialect_oracledb(_OracleDialect_cx_oracle):
67
67
  thick_mode=None,
68
68
  **kwargs,
69
69
  ):
70
-
71
70
  super().__init__(
72
71
  auto_convert_lobs,
73
72
  coerce_to_decimal,
@@ -62,7 +62,6 @@ def _ora_drop_all_schema_objects_pre_tables(cfg, eng):
62
62
 
63
63
  @drop_all_schema_objects_post_tables.for_db("oracle")
64
64
  def _ora_drop_all_schema_objects_post_tables(cfg, eng):
65
-
66
65
  with eng.begin() as conn:
67
66
  for syn in conn.dialect._get_synonyms(conn, None, None, None):
68
67
  conn.exec_driver_sql(f"drop synonym {syn['synonym_name']}")
@@ -93,7 +92,6 @@ def _oracle_drop_db(cfg, eng, ident):
93
92
 
94
93
  @stop_test_class_outside_fixtures.for_db("oracle")
95
94
  def _ora_stop_test_class_outside_fixtures(config, db, cls):
96
-
97
95
  try:
98
96
  _purge_recyclebin(db)
99
97
  except exc.DatabaseError as err:
@@ -155,7 +153,6 @@ def _reap_oracle_dbs(url, idents):
155
153
  log.info("db reaper connecting to %r", url)
156
154
  eng = create_engine(url)
157
155
  with eng.begin() as conn:
158
-
159
156
  log.info("identifiers in file: %s", ", ".join(idents))
160
157
 
161
158
  to_reap = conn.exec_driver_sql(
@@ -14,6 +14,9 @@ from typing import Any
14
14
  from typing import Optional
15
15
  from typing import TypeVar
16
16
 
17
+ from .operators import CONTAINED_BY
18
+ from .operators import CONTAINS
19
+ from .operators import OVERLAP
17
20
  from ... import types as sqltypes
18
21
  from ... import util
19
22
  from ...sql import expression
@@ -99,7 +102,6 @@ class array(expression.ExpressionClauseList[_T]):
99
102
  inherit_cache = True
100
103
 
101
104
  def __init__(self, clauses, **kw):
102
-
103
105
  type_arg = kw.pop("type_", None)
104
106
  super().__init__(operators.comma_op, *clauses, **kw)
105
107
 
@@ -155,13 +157,6 @@ class array(expression.ExpressionClauseList[_T]):
155
157
  return self
156
158
 
157
159
 
158
- CONTAINS = operators.custom_op("@>", precedence=5, is_comparison=True)
159
-
160
- CONTAINED_BY = operators.custom_op("<@", precedence=5, is_comparison=True)
161
-
162
- OVERLAP = operators.custom_op("&&", precedence=5, is_comparison=True)
163
-
164
-
165
160
  class ARRAY(sqltypes.ARRAY):
166
161
  """PostgreSQL ARRAY type.
167
162
 
@@ -408,7 +403,6 @@ class ARRAY(sqltypes.ARRAY):
408
403
 
409
404
 
410
405
  def _split_enum_values(array_string):
411
-
412
406
  if '"' not in array_string:
413
407
  # no escape char is present so it can just split on the comma
414
408
  return array_string.split(",") if array_string else []