piccolo 1.21.0__tar.gz → 1.23.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (396) hide show
  1. {piccolo-1.21.0 → piccolo-1.23.0}/PKG-INFO +19 -7
  2. {piccolo-1.21.0 → piccolo-1.23.0}/README.md +1 -1
  3. piccolo-1.23.0/piccolo/__init__.py +1 -0
  4. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/new.py +3 -0
  5. piccolo-1.23.0/piccolo/apps/asgi/commands/templates/app/_falcon_app.py.jinja +60 -0
  6. piccolo-1.23.0/piccolo/apps/asgi/commands/templates/app/_quart_app.py.jinja +119 -0
  7. piccolo-1.23.0/piccolo/apps/asgi/commands/templates/app/_sanic_app.py.jinja +121 -0
  8. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/app.py.jinja +6 -0
  9. piccolo-1.23.0/piccolo/apps/asgi/commands/templates/app/home/_falcon_endpoints.py.jinja +19 -0
  10. piccolo-1.23.0/piccolo/apps/asgi/commands/templates/app/home/_quart_endpoints.py.jinja +18 -0
  11. piccolo-1.23.0/piccolo/apps/asgi/commands/templates/app/home/_sanic_endpoints.py.jinja +17 -0
  12. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/endpoints.py.jinja +6 -0
  13. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/templates/home.html.jinja_raw +15 -0
  14. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/playground/commands/run.py +9 -0
  15. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/column_types.py +78 -39
  16. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/defaults/timestamptz.py +1 -0
  17. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/engine/sqlite.py +14 -2
  18. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/base.py +11 -6
  19. piccolo-1.23.0/piccolo/query/operators/json.py +111 -0
  20. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/querystring.py +14 -2
  21. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/table_reflection.py +17 -5
  22. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo.egg-info/PKG-INFO +19 -7
  23. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo.egg-info/SOURCES.txt +11 -0
  24. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo.egg-info/requires.txt +2 -2
  25. {piccolo-1.21.0 → piccolo-1.23.0}/pyproject.toml +2 -1
  26. {piccolo-1.21.0 → piccolo-1.23.0}/setup.py +2 -2
  27. piccolo-1.23.0/tests/columns/test_integer.py +32 -0
  28. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_jsonb.py +100 -43
  29. piccolo-1.23.0/tests/query/operators/test_json.py +52 -0
  30. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_insert.py +1 -1
  31. piccolo-1.23.0/tests/testing/__init__.py +0 -0
  32. piccolo-1.23.0/tests/utils/__init__.py +0 -0
  33. piccolo-1.21.0/piccolo/__init__.py +0 -1
  34. {piccolo-1.21.0 → piccolo-1.23.0}/LICENSE +0 -0
  35. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/__init__.py +0 -0
  36. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/app/__init__.py +0 -0
  37. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/app/commands/__init__.py +0 -0
  38. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/app/commands/new.py +0 -0
  39. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/app/commands/show_all.py +0 -0
  40. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/app/commands/templates/piccolo_app.py.jinja +0 -0
  41. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/app/commands/templates/tables.py.jinja +0 -0
  42. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/app/piccolo_app.py +0 -0
  43. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/__init__.py +0 -0
  44. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/__init__.py +0 -0
  45. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/README.md.jinja +0 -0
  46. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/_blacksheep_app.py.jinja +0 -0
  47. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/_esmerald_app.py.jinja +0 -0
  48. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/_fastapi_app.py.jinja +0 -0
  49. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/_lilya_app.py.jinja +0 -0
  50. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/_litestar_app.py.jinja +0 -0
  51. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/_starlette_app.py.jinja +0 -0
  52. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/conftest.py.jinja +0 -0
  53. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/__init__.py.jinja +0 -0
  54. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/_blacksheep_endpoints.py.jinja +0 -0
  55. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/_esmerald_endpoints.py.jinja +0 -0
  56. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/_lilya_endpoints.py.jinja +0 -0
  57. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/_litestar_endpoints.py.jinja +0 -0
  58. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/_starlette_endpoints.py.jinja +0 -0
  59. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/piccolo_app.py.jinja +0 -0
  60. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/piccolo_migrations/README.md +0 -0
  61. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/tables.py.jinja +0 -0
  62. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/home/templates/base.html.jinja_raw +0 -0
  63. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/main.py.jinja +0 -0
  64. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/piccolo_conf.py.jinja +0 -0
  65. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/piccolo_conf_test.py.jinja +0 -0
  66. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/requirements.txt.jinja +0 -0
  67. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/static/favicon.ico +0 -0
  68. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/commands/templates/app/static/main.css +0 -0
  69. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/asgi/piccolo_app.py +0 -0
  70. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/fixtures/__init__.py +0 -0
  71. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/fixtures/commands/__init__.py +0 -0
  72. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/fixtures/commands/dump.py +0 -0
  73. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/fixtures/commands/load.py +0 -0
  74. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/fixtures/commands/shared.py +0 -0
  75. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/fixtures/piccolo_app.py +0 -0
  76. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/meta/__init__.py +0 -0
  77. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/meta/commands/__init__.py +0 -0
  78. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/meta/commands/version.py +0 -0
  79. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/meta/piccolo_app.py +0 -0
  80. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/__init__.py +0 -0
  81. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/auto/__init__.py +0 -0
  82. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/auto/diffable_table.py +0 -0
  83. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/auto/migration_manager.py +0 -0
  84. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/auto/operations.py +0 -0
  85. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/auto/schema_differ.py +0 -0
  86. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/auto/schema_snapshot.py +0 -0
  87. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/auto/serialisation.py +0 -0
  88. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/auto/serialisation_legacy.py +0 -0
  89. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/commands/__init__.py +0 -0
  90. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/commands/backwards.py +0 -0
  91. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/commands/base.py +0 -0
  92. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/commands/check.py +0 -0
  93. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/commands/clean.py +0 -0
  94. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/commands/forwards.py +0 -0
  95. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/commands/new.py +0 -0
  96. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/commands/templates/migration.py.jinja +0 -0
  97. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/piccolo_app.py +0 -0
  98. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/migrations/tables.py +0 -0
  99. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/playground/__init__.py +0 -0
  100. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/playground/commands/__init__.py +0 -0
  101. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/playground/piccolo_app.py +0 -0
  102. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/project/__init__.py +0 -0
  103. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/project/commands/__init__.py +0 -0
  104. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/project/commands/new.py +0 -0
  105. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/project/commands/templates/piccolo_conf.py.jinja +0 -0
  106. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/project/piccolo_app.py +0 -0
  107. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/schema/__init__.py +0 -0
  108. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/schema/commands/__init__.py +0 -0
  109. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/schema/commands/exceptions.py +0 -0
  110. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/schema/commands/generate.py +0 -0
  111. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/schema/commands/graph.py +0 -0
  112. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/schema/commands/templates/graphviz.dot.jinja +0 -0
  113. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/schema/piccolo_app.py +0 -0
  114. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/shell/__init__.py +0 -0
  115. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/shell/commands/__init__.py +0 -0
  116. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/shell/commands/run.py +0 -0
  117. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/shell/piccolo_app.py +0 -0
  118. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/sql_shell/__init__.py +0 -0
  119. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/sql_shell/commands/__init__.py +0 -0
  120. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/sql_shell/commands/run.py +0 -0
  121. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/sql_shell/piccolo_app.py +0 -0
  122. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/tester/__init__.py +0 -0
  123. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/tester/commands/__init__.py +0 -0
  124. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/tester/commands/run.py +0 -0
  125. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/tester/piccolo_app.py +0 -0
  126. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/__init__.py +0 -0
  127. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/commands/__init__.py +0 -0
  128. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/commands/change_password.py +0 -0
  129. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/commands/change_permissions.py +0 -0
  130. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/commands/create.py +0 -0
  131. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/commands/list.py +0 -0
  132. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/piccolo_app.py +0 -0
  133. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/piccolo_migrations/2019-11-14T21-52-21.py +0 -0
  134. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/piccolo_migrations/2020-06-11T21-38-55.py +0 -0
  135. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/piccolo_migrations/2021-04-30T16-14-15.py +0 -0
  136. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/piccolo_migrations/__init__.py +0 -0
  137. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/apps/user/tables.py +0 -0
  138. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/__init__.py +0 -0
  139. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/base.py +0 -0
  140. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/choices.py +0 -0
  141. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/combination.py +0 -0
  142. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/defaults/__init__.py +0 -0
  143. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/defaults/base.py +0 -0
  144. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/defaults/date.py +0 -0
  145. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/defaults/interval.py +0 -0
  146. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/defaults/time.py +0 -0
  147. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/defaults/timestamp.py +0 -0
  148. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/defaults/uuid.py +0 -0
  149. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/indexes.py +0 -0
  150. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/m2m.py +0 -0
  151. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/operators/__init__.py +0 -0
  152. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/operators/base.py +0 -0
  153. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/operators/comparison.py +0 -0
  154. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/operators/math.py +0 -0
  155. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/operators/string.py +0 -0
  156. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/readable.py +0 -0
  157. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/columns/reference.py +0 -0
  158. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/conf/__init__.py +0 -0
  159. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/conf/apps.py +0 -0
  160. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/custom_types.py +0 -0
  161. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/engine/__init__.py +0 -0
  162. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/engine/base.py +0 -0
  163. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/engine/cockroach.py +0 -0
  164. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/engine/exceptions.py +0 -0
  165. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/engine/finder.py +0 -0
  166. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/engine/postgres.py +0 -0
  167. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/main.py +0 -0
  168. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/py.typed +0 -0
  169. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/__init__.py +0 -0
  170. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/functions/__init__.py +0 -0
  171. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/functions/aggregate.py +0 -0
  172. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/functions/base.py +0 -0
  173. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/functions/datetime.py +0 -0
  174. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/functions/math.py +0 -0
  175. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/functions/string.py +0 -0
  176. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/functions/type_conversion.py +0 -0
  177. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/__init__.py +0 -0
  178. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/alter.py +0 -0
  179. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/count.py +0 -0
  180. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/create.py +0 -0
  181. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/create_index.py +0 -0
  182. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/delete.py +0 -0
  183. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/drop_index.py +0 -0
  184. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/exists.py +0 -0
  185. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/indexes.py +0 -0
  186. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/insert.py +0 -0
  187. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/objects.py +0 -0
  188. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/raw.py +0 -0
  189. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/refresh.py +0 -0
  190. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/select.py +0 -0
  191. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/table_exists.py +0 -0
  192. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/methods/update.py +0 -0
  193. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/mixins.py +0 -0
  194. {piccolo-1.21.0/profiling → piccolo-1.23.0/piccolo/query/operators}/__init__.py +0 -0
  195. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/query/proxy.py +0 -0
  196. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/schema.py +0 -0
  197. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/table.py +0 -0
  198. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/testing/__init__.py +0 -0
  199. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/testing/model_builder.py +0 -0
  200. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/testing/random_builder.py +0 -0
  201. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/testing/test_case.py +0 -0
  202. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/__init__.py +0 -0
  203. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/dictionary.py +0 -0
  204. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/encoding.py +0 -0
  205. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/graphlib/__init__.py +0 -0
  206. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/graphlib/_graphlib.py +0 -0
  207. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/lazy_loader.py +0 -0
  208. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/list.py +0 -0
  209. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/naming.py +0 -0
  210. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/objects.py +0 -0
  211. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/printing.py +0 -0
  212. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/pydantic.py +0 -0
  213. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/repr.py +0 -0
  214. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/sql_values.py +0 -0
  215. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/sync.py +0 -0
  216. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo/utils/warnings.py +0 -0
  217. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo.egg-info/dependency_links.txt +0 -0
  218. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo.egg-info/entry_points.txt +0 -0
  219. {piccolo-1.21.0 → piccolo-1.23.0}/piccolo.egg-info/top_level.txt +0 -0
  220. {piccolo-1.21.0/tests/apps → piccolo-1.23.0/profiling}/__init__.py +0 -0
  221. {piccolo-1.21.0 → piccolo-1.23.0}/profiling/run_profile.py +0 -0
  222. {piccolo-1.21.0 → piccolo-1.23.0}/setup.cfg +0 -0
  223. {piccolo-1.21.0/tests/apps/app → piccolo-1.23.0/tests/apps}/__init__.py +0 -0
  224. {piccolo-1.21.0/tests/apps/app/commands → piccolo-1.23.0/tests/apps/app}/__init__.py +0 -0
  225. {piccolo-1.21.0/tests/apps/asgi → piccolo-1.23.0/tests/apps/app/commands}/__init__.py +0 -0
  226. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/app/commands/test_new.py +0 -0
  227. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/app/commands/test_show_all.py +0 -0
  228. {piccolo-1.21.0/tests/apps/asgi/commands → piccolo-1.23.0/tests/apps/asgi}/__init__.py +0 -0
  229. {piccolo-1.21.0/tests/apps/fixtures → piccolo-1.23.0/tests/apps/asgi/commands}/__init__.py +0 -0
  230. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/asgi/commands/test_new.py +0 -0
  231. {piccolo-1.21.0/tests/apps/fixtures/commands → piccolo-1.23.0/tests/apps/fixtures}/__init__.py +0 -0
  232. {piccolo-1.21.0/tests/apps/meta → piccolo-1.23.0/tests/apps/fixtures/commands}/__init__.py +0 -0
  233. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/fixtures/commands/test_dump_load.py +0 -0
  234. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/fixtures/commands/test_shared.py +0 -0
  235. {piccolo-1.21.0/tests/apps/meta/commands → piccolo-1.23.0/tests/apps/meta}/__init__.py +0 -0
  236. {piccolo-1.21.0/tests/apps/migrations → piccolo-1.23.0/tests/apps/meta/commands}/__init__.py +0 -0
  237. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/meta/commands/test_version.py +0 -0
  238. {piccolo-1.21.0/tests/apps/migrations/auto → piccolo-1.23.0/tests/apps/migrations}/__init__.py +0 -0
  239. {piccolo-1.21.0/tests/apps/migrations/auto/integration → piccolo-1.23.0/tests/apps/migrations/auto}/__init__.py +0 -0
  240. {piccolo-1.21.0/tests/apps/migrations/commands → piccolo-1.23.0/tests/apps/migrations/auto/integration}/__init__.py +0 -0
  241. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/auto/integration/test_migrations.py +0 -0
  242. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/auto/test_diffable_table.py +0 -0
  243. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/auto/test_migration_manager.py +0 -0
  244. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/auto/test_schema_differ.py +0 -0
  245. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/auto/test_schema_snapshot.py +0 -0
  246. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/auto/test_serialisation.py +0 -0
  247. {piccolo-1.21.0/tests/apps/migrations/commands/test_migrations → piccolo-1.23.0/tests/apps/migrations/commands}/__init__.py +0 -0
  248. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/commands/test_base.py +0 -0
  249. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/commands/test_check.py +0 -0
  250. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/commands/test_clean.py +0 -0
  251. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/commands/test_forwards_backwards.py +0 -0
  252. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/commands/test_migrations/2020-03-31T20-38-22.py +0 -0
  253. {piccolo-1.21.0/tests/apps/project → piccolo-1.23.0/tests/apps/migrations/commands/test_migrations}/__init__.py +0 -0
  254. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/commands/test_new.py +0 -0
  255. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/migrations/test_migration.py +0 -0
  256. {piccolo-1.21.0/tests/apps/project/commands → piccolo-1.23.0/tests/apps/project}/__init__.py +0 -0
  257. {piccolo-1.21.0/tests/apps/schema → piccolo-1.23.0/tests/apps/project/commands}/__init__.py +0 -0
  258. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/project/commands/test_new.py +0 -0
  259. {piccolo-1.21.0/tests/apps/shell → piccolo-1.23.0/tests/apps/schema}/__init__.py +0 -0
  260. {piccolo-1.21.0/tests/apps/shell/commands → piccolo-1.23.0/tests/apps/shell}/__init__.py +0 -0
  261. {piccolo-1.21.0/tests/apps/sql_shell → piccolo-1.23.0/tests/apps/shell/commands}/__init__.py +0 -0
  262. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/shell/commands/test_run.py +0 -0
  263. {piccolo-1.21.0/tests/apps/sql_shell/commands → piccolo-1.23.0/tests/apps/sql_shell}/__init__.py +0 -0
  264. {piccolo-1.21.0/tests/apps/tester → piccolo-1.23.0/tests/apps/sql_shell/commands}/__init__.py +0 -0
  265. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/sql_shell/commands/test_run.py +0 -0
  266. {piccolo-1.21.0/tests/apps/user → piccolo-1.23.0/tests/apps/tester}/__init__.py +0 -0
  267. {piccolo-1.21.0/tests/apps/user/commands → piccolo-1.23.0/tests/apps/user}/__init__.py +0 -0
  268. {piccolo-1.21.0/tests/columns → piccolo-1.23.0/tests/apps/user/commands}/__init__.py +0 -0
  269. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/user/commands/test_change_password.py +0 -0
  270. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/user/commands/test_change_permissions.py +0 -0
  271. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/user/commands/test_create.py +0 -0
  272. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/user/commands/test_list.py +0 -0
  273. {piccolo-1.21.0 → piccolo-1.23.0}/tests/apps/user/test_tables.py +0 -0
  274. {piccolo-1.21.0/tests/columns/m2m → piccolo-1.23.0/tests/columns}/__init__.py +0 -0
  275. {piccolo-1.21.0/tests/conf → piccolo-1.23.0/tests/columns/m2m}/__init__.py +0 -0
  276. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/m2m/base.py +0 -0
  277. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/m2m/test_m2m.py +0 -0
  278. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/m2m/test_m2m_schema.py +0 -0
  279. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_array.py +0 -0
  280. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_base.py +0 -0
  281. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_bigint.py +0 -0
  282. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_boolean.py +0 -0
  283. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_bytea.py +0 -0
  284. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_choices.py +0 -0
  285. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_combination.py +0 -0
  286. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_date.py +0 -0
  287. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_db_column_name.py +0 -0
  288. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_defaults.py +0 -0
  289. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_double_precision.py +0 -0
  290. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_get_sql_value.py +0 -0
  291. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_interval.py +0 -0
  292. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_json.py +0 -0
  293. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_numeric.py +0 -0
  294. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_primary_key.py +0 -0
  295. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_readable.py +0 -0
  296. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_real.py +0 -0
  297. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_reference.py +0 -0
  298. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_reserved_column_names.py +0 -0
  299. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_smallint.py +0 -0
  300. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_time.py +0 -0
  301. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_timestamp.py +0 -0
  302. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_timestamptz.py +0 -0
  303. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_uuid.py +0 -0
  304. {piccolo-1.21.0 → piccolo-1.23.0}/tests/columns/test_varchar.py +0 -0
  305. {piccolo-1.21.0/tests/engine → piccolo-1.23.0/tests/conf}/__init__.py +0 -0
  306. {piccolo-1.21.0 → piccolo-1.23.0}/tests/conf/example.py +0 -0
  307. {piccolo-1.21.0 → piccolo-1.23.0}/tests/conf/test_apps.py +0 -0
  308. {piccolo-1.21.0/tests/example_apps → piccolo-1.23.0/tests/engine}/__init__.py +0 -0
  309. {piccolo-1.21.0 → piccolo-1.23.0}/tests/engine/test_extra_nodes.py +0 -0
  310. {piccolo-1.21.0 → piccolo-1.23.0}/tests/engine/test_logging.py +0 -0
  311. {piccolo-1.21.0 → piccolo-1.23.0}/tests/engine/test_nested_transaction.py +0 -0
  312. {piccolo-1.21.0 → piccolo-1.23.0}/tests/engine/test_pool.py +0 -0
  313. {piccolo-1.21.0 → piccolo-1.23.0}/tests/engine/test_transaction.py +0 -0
  314. {piccolo-1.21.0 → piccolo-1.23.0}/tests/engine/test_version_parsing.py +0 -0
  315. {piccolo-1.21.0/tests/example_apps/mega → piccolo-1.23.0/tests/example_apps}/__init__.py +0 -0
  316. {piccolo-1.21.0/tests/example_apps/mega/piccolo_migrations → piccolo-1.23.0/tests/example_apps/mega}/__init__.py +0 -0
  317. {piccolo-1.21.0 → piccolo-1.23.0}/tests/example_apps/mega/piccolo_app.py +0 -0
  318. {piccolo-1.21.0 → piccolo-1.23.0}/tests/example_apps/mega/piccolo_migrations/2021-09-20T21-23-25-698988.py +0 -0
  319. {piccolo-1.21.0/tests/example_apps/music → piccolo-1.23.0/tests/example_apps/mega/piccolo_migrations}/__init__.py +0 -0
  320. {piccolo-1.21.0 → piccolo-1.23.0}/tests/example_apps/mega/tables.py +0 -0
  321. {piccolo-1.21.0/tests/query → piccolo-1.23.0/tests/example_apps/music}/__init__.py +0 -0
  322. {piccolo-1.21.0 → piccolo-1.23.0}/tests/example_apps/music/piccolo_app.py +0 -0
  323. {piccolo-1.21.0 → piccolo-1.23.0}/tests/example_apps/music/tables.py +0 -0
  324. {piccolo-1.21.0 → piccolo-1.23.0}/tests/example_apps/music/tables_detailed.py +0 -0
  325. {piccolo-1.21.0/tests/query/functions → piccolo-1.23.0/tests/query}/__init__.py +0 -0
  326. {piccolo-1.21.0/tests/query/mixins → piccolo-1.23.0/tests/query/functions}/__init__.py +0 -0
  327. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/functions/base.py +0 -0
  328. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/functions/test_datetime.py +0 -0
  329. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/functions/test_functions.py +0 -0
  330. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/functions/test_math.py +0 -0
  331. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/functions/test_string.py +0 -0
  332. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/functions/test_type_conversion.py +0 -0
  333. {piccolo-1.21.0/tests/table → piccolo-1.23.0/tests/query/mixins}/__init__.py +0 -0
  334. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/mixins/test_columns_delegate.py +0 -0
  335. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/mixins/test_order_by_delegate.py +0 -0
  336. {piccolo-1.21.0/tests/table/instance → piccolo-1.23.0/tests/query/operators}/__init__.py +0 -0
  337. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/test_await.py +0 -0
  338. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/test_camelcase.py +0 -0
  339. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/test_freeze.py +0 -0
  340. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/test_gather.py +0 -0
  341. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/test_querystring.py +0 -0
  342. {piccolo-1.21.0 → piccolo-1.23.0}/tests/query/test_slots.py +0 -0
  343. {piccolo-1.21.0/tests/testing → piccolo-1.23.0/tests/table}/__init__.py +0 -0
  344. {piccolo-1.21.0/tests/utils → piccolo-1.23.0/tests/table/instance}/__init__.py +0 -0
  345. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/instance/test_create.py +0 -0
  346. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/instance/test_get_related.py +0 -0
  347. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/instance/test_get_related_readable.py +0 -0
  348. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/instance/test_instantiate.py +0 -0
  349. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/instance/test_remove.py +0 -0
  350. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/instance/test_save.py +0 -0
  351. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/instance/test_to_dict.py +0 -0
  352. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_all_columns.py +0 -0
  353. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_alter.py +0 -0
  354. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_batch.py +0 -0
  355. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_callback.py +0 -0
  356. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_constructor.py +0 -0
  357. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_count.py +0 -0
  358. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_create.py +0 -0
  359. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_create_db_tables.py +0 -0
  360. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_create_table_class.py +0 -0
  361. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_delete.py +0 -0
  362. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_drop_db_tables.py +0 -0
  363. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_exists.py +0 -0
  364. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_from_dict.py +0 -0
  365. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_indexes.py +0 -0
  366. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_inheritance.py +0 -0
  367. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_join.py +0 -0
  368. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_join_on.py +0 -0
  369. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_metaclass.py +0 -0
  370. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_objects.py +0 -0
  371. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_output.py +0 -0
  372. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_raw.py +0 -0
  373. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_ref.py +0 -0
  374. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_refresh.py +0 -0
  375. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_repr.py +0 -0
  376. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_select.py +0 -0
  377. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_str.py +0 -0
  378. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_table_exists.py +0 -0
  379. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_update.py +0 -0
  380. {piccolo-1.21.0 → piccolo-1.23.0}/tests/table/test_update_self.py +0 -0
  381. {piccolo-1.21.0 → piccolo-1.23.0}/tests/test_main.py +0 -0
  382. {piccolo-1.21.0 → piccolo-1.23.0}/tests/test_schema.py +0 -0
  383. {piccolo-1.21.0 → piccolo-1.23.0}/tests/testing/test_model_builder.py +0 -0
  384. {piccolo-1.21.0 → piccolo-1.23.0}/tests/testing/test_random_builder.py +0 -0
  385. {piccolo-1.21.0 → piccolo-1.23.0}/tests/testing/test_test_case.py +0 -0
  386. {piccolo-1.21.0 → piccolo-1.23.0}/tests/utils/test_dictionary.py +0 -0
  387. {piccolo-1.21.0 → piccolo-1.23.0}/tests/utils/test_encoding.py +0 -0
  388. {piccolo-1.21.0 → piccolo-1.23.0}/tests/utils/test_lazy_loader.py +0 -0
  389. {piccolo-1.21.0 → piccolo-1.23.0}/tests/utils/test_list.py +0 -0
  390. {piccolo-1.21.0 → piccolo-1.23.0}/tests/utils/test_naming.py +0 -0
  391. {piccolo-1.21.0 → piccolo-1.23.0}/tests/utils/test_printing.py +0 -0
  392. {piccolo-1.21.0 → piccolo-1.23.0}/tests/utils/test_pydantic.py +0 -0
  393. {piccolo-1.21.0 → piccolo-1.23.0}/tests/utils/test_sql_values.py +0 -0
  394. {piccolo-1.21.0 → piccolo-1.23.0}/tests/utils/test_sync.py +0 -0
  395. {piccolo-1.21.0 → piccolo-1.23.0}/tests/utils/test_table_reflection.py +0 -0
  396. {piccolo-1.21.0 → piccolo-1.23.0}/tests/utils/test_warnings.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: piccolo
3
- Version: 1.21.0
3
+ Version: 1.23.0
4
4
  Summary: A fast, user friendly ORM and query builder which supports asyncio.
5
5
  Home-page: https://github.com/piccolo-orm/piccolo
6
6
  Author: Daniel Townsend
@@ -12,16 +12,16 @@ Project-URL: Tracker, https://github.com/piccolo-orm/piccolo/issues
12
12
  Classifier: License :: OSI Approved :: MIT License
13
13
  Classifier: Programming Language :: Python
14
14
  Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.8
16
15
  Classifier: Programming Language :: Python :: 3.9
17
16
  Classifier: Programming Language :: Python :: 3.10
18
17
  Classifier: Programming Language :: Python :: 3.11
19
18
  Classifier: Programming Language :: Python :: 3.12
19
+ Classifier: Programming Language :: Python :: 3.13
20
20
  Classifier: Programming Language :: Python :: Implementation :: CPython
21
21
  Classifier: Framework :: AsyncIO
22
22
  Classifier: Typing :: Typed
23
23
  Classifier: Topic :: Database
24
- Requires-Python: >=3.8.0
24
+ Requires-Python: >=3.9.0
25
25
  Description-Content-Type: text/markdown
26
26
  License-File: LICENSE
27
27
  Requires-Dist: black
@@ -36,7 +36,7 @@ Requires-Dist: orjson>=3.5.1; extra == "orjson"
36
36
  Provides-Extra: playground
37
37
  Requires-Dist: ipython; extra == "playground"
38
38
  Provides-Extra: postgres
39
- Requires-Dist: asyncpg>=0.21.0; extra == "postgres"
39
+ Requires-Dist: asyncpg>=0.30.0; extra == "postgres"
40
40
  Provides-Extra: sqlite
41
41
  Requires-Dist: aiosqlite>=0.16.0; extra == "sqlite"
42
42
  Provides-Extra: uvloop
@@ -44,9 +44,21 @@ Requires-Dist: uvloop>=0.12.0; sys_platform != "win32" and extra == "uvloop"
44
44
  Provides-Extra: all
45
45
  Requires-Dist: orjson>=3.5.1; extra == "all"
46
46
  Requires-Dist: ipython; extra == "all"
47
- Requires-Dist: asyncpg>=0.21.0; extra == "all"
47
+ Requires-Dist: asyncpg>=0.30.0; extra == "all"
48
48
  Requires-Dist: aiosqlite>=0.16.0; extra == "all"
49
49
  Requires-Dist: uvloop>=0.12.0; sys_platform != "win32" and extra == "all"
50
+ Dynamic: author
51
+ Dynamic: author-email
52
+ Dynamic: classifier
53
+ Dynamic: description
54
+ Dynamic: description-content-type
55
+ Dynamic: home-page
56
+ Dynamic: license
57
+ Dynamic: project-url
58
+ Dynamic: provides-extra
59
+ Dynamic: requires-dist
60
+ Dynamic: requires-python
61
+ Dynamic: summary
50
62
 
51
63
  ![Logo](https://raw.githubusercontent.com/piccolo-orm/piccolo/master/docs/logo_hero.png "Piccolo Logo")
52
64
 
@@ -144,7 +156,7 @@ Let Piccolo scaffold you an ASGI web app, using Piccolo as the ORM:
144
156
  piccolo asgi new
145
157
  ```
146
158
 
147
- [Starlette](https://www.starlette.io/), [FastAPI](https://fastapi.tiangolo.com/), [BlackSheep](https://www.neoteroi.dev/blacksheep/), [Litestar](https://litestar.dev/), [Esmerald](https://esmerald.dev/) and [Lilya](https://lilya.dev) are currently supported.
159
+ [Starlette](https://www.starlette.io/), [FastAPI](https://fastapi.tiangolo.com/), [BlackSheep](https://www.neoteroi.dev/blacksheep/), [Litestar](https://litestar.dev/), [Esmerald](https://esmerald.dev/), [Lilya](https://lilya.dev), [Quart](https://quart.palletsprojects.com/en/latest/), [Falcon](https://falconframework.org/) and [Sanic](https://sanic.dev/en/) are currently supported.
148
160
 
149
161
  ## Are you a Django user?
150
162
 
@@ -94,7 +94,7 @@ Let Piccolo scaffold you an ASGI web app, using Piccolo as the ORM:
94
94
  piccolo asgi new
95
95
  ```
96
96
 
97
- [Starlette](https://www.starlette.io/), [FastAPI](https://fastapi.tiangolo.com/), [BlackSheep](https://www.neoteroi.dev/blacksheep/), [Litestar](https://litestar.dev/), [Esmerald](https://esmerald.dev/) and [Lilya](https://lilya.dev) are currently supported.
97
+ [Starlette](https://www.starlette.io/), [FastAPI](https://fastapi.tiangolo.com/), [BlackSheep](https://www.neoteroi.dev/blacksheep/), [Litestar](https://litestar.dev/), [Esmerald](https://esmerald.dev/), [Lilya](https://lilya.dev), [Quart](https://quart.palletsprojects.com/en/latest/), [Falcon](https://falconframework.org/) and [Sanic](https://sanic.dev/en/) are currently supported.
98
98
 
99
99
  ## Are you a Django user?
100
100
 
@@ -0,0 +1 @@
1
+ __VERSION__ = "1.23.0"
@@ -17,6 +17,9 @@ ROUTER_DEPENDENCIES = {
17
17
  "litestar": ["litestar"],
18
18
  "esmerald": ["esmerald"],
19
19
  "lilya": ["lilya"],
20
+ "quart": ["quart", "quart_schema"],
21
+ "falcon": ["falcon"],
22
+ "sanic": ["sanic", "sanic_ext"],
20
23
  }
21
24
  ROUTERS = list(ROUTER_DEPENDENCIES.keys())
22
25
 
@@ -0,0 +1,60 @@
1
+ import os
2
+ import typing as t
3
+
4
+ import falcon.asgi
5
+ from hypercorn.middleware import DispatcherMiddleware
6
+ from piccolo.engine import engine_finder
7
+ from piccolo_admin.endpoints import create_admin
8
+ from piccolo_api.crud.endpoints import PiccoloCRUD
9
+
10
+ from home.endpoints import HomeEndpoint
11
+ from home.piccolo_app import APP_CONFIG
12
+ from home.tables import Task
13
+
14
+
15
+ async def open_database_connection_pool():
16
+ try:
17
+ engine = engine_finder()
18
+ await engine.start_connection_pool()
19
+ except Exception:
20
+ print("Unable to connect to the database")
21
+
22
+
23
+ async def close_database_connection_pool():
24
+ try:
25
+ engine = engine_finder()
26
+ await engine.close_connection_pool()
27
+ except Exception:
28
+ print("Unable to connect to the database")
29
+
30
+
31
+ class LifespanMiddleware:
32
+ async def process_startup(
33
+ self, scope: t.Dict[str, t.Any], event: t.Dict[str, t.Any]
34
+ ) -> None:
35
+ await open_database_connection_pool()
36
+
37
+ async def process_shutdown(
38
+ self, scope: t.Dict[str, t.Any], event: t.Dict[str, t.Any]
39
+ ) -> None:
40
+ await close_database_connection_pool()
41
+
42
+
43
+ app: t.Any = falcon.asgi.App(middleware=LifespanMiddleware())
44
+ app.add_static_route("/static", directory=os.path.abspath("static"))
45
+ app.add_route("/", HomeEndpoint())
46
+
47
+ PICCOLO_CRUD: t.Any = PiccoloCRUD(table=Task)
48
+
49
+ # enable the Admin and PiccoloCrud app using DispatcherMiddleware
50
+ app = DispatcherMiddleware( # type: ignore
51
+ {
52
+ "/admin": create_admin(
53
+ tables=APP_CONFIG.table_classes,
54
+ # Required when running under HTTPS:
55
+ # allowed_hosts=['my_site.com']
56
+ ),
57
+ "/tasks": PICCOLO_CRUD,
58
+ "": app,
59
+ }
60
+ )
@@ -0,0 +1,119 @@
1
+ import typing as t
2
+ from http import HTTPStatus
3
+
4
+ from hypercorn.middleware import DispatcherMiddleware
5
+ from piccolo.engine import engine_finder
6
+ from piccolo_admin.endpoints import create_admin
7
+ from piccolo_api.crud.serializers import create_pydantic_model
8
+ from quart import Quart
9
+ from quart_schema import (
10
+ Info,
11
+ QuartSchema,
12
+ hide,
13
+ tag,
14
+ validate_request,
15
+ validate_response,
16
+ )
17
+
18
+ from home.endpoints import index
19
+ from home.piccolo_app import APP_CONFIG
20
+ from home.tables import Task
21
+
22
+
23
+ app = Quart(__name__, static_folder="static")
24
+ QuartSchema(app, info=Info(title="Quart API", version="0.1.0"))
25
+
26
+
27
+ TaskModelIn: t.Any = create_pydantic_model(
28
+ table=Task,
29
+ model_name="TaskModelIn",
30
+ )
31
+ TaskModelOut: t.Any = create_pydantic_model(
32
+ table=Task,
33
+ include_default_columns=True,
34
+ model_name="TaskModelOut",
35
+ )
36
+
37
+
38
+ @app.get("/")
39
+ @hide
40
+ def home():
41
+ return index()
42
+
43
+
44
+ @app.get("/tasks/")
45
+ @validate_response(t.List[TaskModelOut])
46
+ @tag(["Task"])
47
+ async def tasks():
48
+ return await Task.select().order_by(Task._meta.primary_key, ascending=False)
49
+
50
+
51
+ @app.post("/tasks/")
52
+ @validate_request(TaskModelIn)
53
+ @validate_response(TaskModelOut)
54
+ @tag(["Task"])
55
+ async def create_task(data: TaskModelIn):
56
+ task = Task(**data.model_dump())
57
+ await task.save()
58
+ return task.to_dict(), HTTPStatus.CREATED
59
+
60
+
61
+ @app.put("/tasks/<int:task_id>/")
62
+ @validate_request(TaskModelIn)
63
+ @validate_response(TaskModelOut)
64
+ @tag(["Task"])
65
+ async def update_task(task_id: int, data: TaskModelIn):
66
+ task = await Task.objects().get(Task._meta.primary_key == task_id)
67
+ if not task:
68
+ return {}, HTTPStatus.NOT_FOUND
69
+
70
+ for key, value in data.model_dump().items():
71
+ setattr(task, key, value)
72
+
73
+ await task.save()
74
+
75
+ return task.to_dict(), HTTPStatus.OK
76
+
77
+
78
+ @app.delete("/tasks/<int:task_id>/")
79
+ @validate_response(TaskModelOut)
80
+ @tag(["Task"])
81
+ async def delete_task(task_id: int):
82
+ task = await Task.objects().get(Task._meta.primary_key == task_id)
83
+ if not task:
84
+ return {}, HTTPStatus.NOT_FOUND
85
+
86
+ await task.remove()
87
+
88
+ return {}, HTTPStatus.OK
89
+
90
+
91
+ @app.before_serving
92
+ async def open_database_connection_pool():
93
+ try:
94
+ engine = engine_finder()
95
+ await engine.start_connection_pool()
96
+ except Exception:
97
+ print("Unable to connect to the database")
98
+
99
+
100
+ @app.after_serving
101
+ async def close_database_connection_pool():
102
+ try:
103
+ engine = engine_finder()
104
+ await engine.close_connection_pool()
105
+ except Exception:
106
+ print("Unable to connect to the database")
107
+
108
+
109
+ # enable the admin application using DispatcherMiddleware
110
+ app = DispatcherMiddleware( # type: ignore
111
+ {
112
+ "/admin": create_admin(
113
+ tables=APP_CONFIG.table_classes,
114
+ # Required when running under HTTPS:
115
+ # allowed_hosts=['my_site.com']
116
+ ),
117
+ "": app,
118
+ }
119
+ )
@@ -0,0 +1,121 @@
1
+ import asyncio
2
+ import typing as t
3
+
4
+ from hypercorn.middleware import DispatcherMiddleware
5
+ from piccolo.engine import engine_finder
6
+ from piccolo_admin.endpoints import create_admin
7
+ from piccolo_api.crud.serializers import create_pydantic_model
8
+ from sanic import Request, Sanic, json
9
+ from sanic_ext import openapi
10
+
11
+ from home.endpoints import index
12
+ from home.piccolo_app import APP_CONFIG
13
+ from home.tables import Task
14
+
15
+ app = Sanic(__name__)
16
+ app.static("/static/", "static")
17
+
18
+
19
+ TaskModelIn: t.Any = create_pydantic_model(
20
+ table=Task,
21
+ model_name="TaskModelIn",
22
+ )
23
+ TaskModelOut: t.Any = create_pydantic_model(
24
+ table=Task,
25
+ include_default_columns=True,
26
+ model_name="TaskModelOut",
27
+ )
28
+
29
+
30
+ @app.get("/")
31
+ @openapi.exclude()
32
+ def home(request: Request):
33
+ return index()
34
+
35
+
36
+ @app.get("/tasks/")
37
+ @openapi.tag("Task")
38
+ @openapi.response(200, {"application/json": TaskModelOut.model_json_schema()})
39
+ async def tasks(request: Request):
40
+ return json(
41
+ await Task.select().order_by(Task._meta.primary_key, ascending=False),
42
+ status=200,
43
+ )
44
+
45
+
46
+ @app.post("/tasks/")
47
+ @openapi.definition(
48
+ body={"application/json": TaskModelIn.model_json_schema()},
49
+ tag="Task",
50
+ )
51
+ @openapi.response(201, {"application/json": TaskModelOut.model_json_schema()})
52
+ async def create_task(request: Request):
53
+ task = Task(**request.json)
54
+ await task.save()
55
+ return json(task.to_dict(), status=201)
56
+
57
+
58
+ @app.put("/tasks/<task_id:int>/")
59
+ @openapi.definition(
60
+ body={"application/json": TaskModelIn.model_json_schema()},
61
+ tag="Task",
62
+ )
63
+ @openapi.response(200, {"application/json": TaskModelOut.model_json_schema()})
64
+ async def update_task(request: Request, task_id: int):
65
+ task = await Task.objects().get(Task._meta.primary_key == task_id)
66
+ if not task:
67
+ return json({}, status=404)
68
+ for key, value in request.json.items():
69
+ setattr(task, key, value)
70
+
71
+ await task.save()
72
+ return json(task.to_dict(), status=200)
73
+
74
+
75
+ @app.delete("/tasks/<task_id:int>/")
76
+ @openapi.tag("Task")
77
+ async def delete_task(request: Request, task_id: int):
78
+ task = await Task.objects().get(Task._meta.primary_key == task_id)
79
+ if not task:
80
+ return json({}, status=404)
81
+ await task.remove()
82
+ return json({}, status=200)
83
+
84
+
85
+ async def open_database_connection_pool():
86
+ try:
87
+ engine = engine_finder()
88
+ await engine.start_connection_pool()
89
+ except Exception:
90
+ print("Unable to connect to the database")
91
+
92
+
93
+ async def close_database_connection_pool():
94
+ try:
95
+ engine = engine_finder()
96
+ await engine.close_connection_pool()
97
+ except Exception:
98
+ print("Unable to connect to the database")
99
+
100
+
101
+ @app.after_server_start
102
+ async def startup(app, loop):
103
+ await open_database_connection_pool()
104
+
105
+
106
+ @app.before_server_stop
107
+ async def shutdown(app, loop):
108
+ await close_database_connection_pool()
109
+
110
+
111
+ # enable the admin application using DispatcherMiddleware
112
+ app = DispatcherMiddleware( # type: ignore
113
+ {
114
+ "/admin": create_admin(
115
+ tables=APP_CONFIG.table_classes,
116
+ # Required when running under HTTPS:
117
+ # allowed_hosts=['my_site.com']
118
+ ),
119
+ "": app,
120
+ }
121
+ )
@@ -10,4 +10,10 @@
10
10
  {% include '_esmerald_app.py.jinja' %}
11
11
  {% elif router == 'lilya' %}
12
12
  {% include '_lilya_app.py.jinja' %}
13
+ {% elif router == 'quart' %}
14
+ {% include '_quart_app.py.jinja' %}
15
+ {% elif router == 'falcon' %}
16
+ {% include '_falcon_app.py.jinja' %}
17
+ {% elif router == 'sanic' %}
18
+ {% include '_sanic_app.py.jinja' %}
13
19
  {% endif %}
@@ -0,0 +1,19 @@
1
+ import os
2
+
3
+ import falcon
4
+ import jinja2
5
+
6
+ ENVIRONMENT = jinja2.Environment(
7
+ loader=jinja2.FileSystemLoader(
8
+ searchpath=os.path.join(os.path.dirname(__file__), "templates")
9
+ )
10
+ )
11
+
12
+
13
+ class HomeEndpoint:
14
+ async def on_get(self, req, resp):
15
+ template = ENVIRONMENT.get_template("home.html.jinja")
16
+ content = template.render(title="Piccolo + ASGI",)
17
+ resp.status = falcon.HTTP_200
18
+ resp.content_type = "text/html"
19
+ resp.text = content
@@ -0,0 +1,18 @@
1
+ import os
2
+
3
+ import jinja2
4
+
5
+ from quart import Response
6
+
7
+ ENVIRONMENT = jinja2.Environment(
8
+ loader=jinja2.FileSystemLoader(
9
+ searchpath=os.path.join(os.path.dirname(__file__), "templates")
10
+ )
11
+ )
12
+
13
+
14
+ def index():
15
+ template = ENVIRONMENT.get_template("home.html.jinja")
16
+ content = template.render(title="Piccolo + ASGI")
17
+ return Response(content)
18
+
@@ -0,0 +1,17 @@
1
+ import os
2
+
3
+ import jinja2
4
+
5
+ from sanic import HTTPResponse
6
+
7
+ ENVIRONMENT = jinja2.Environment(
8
+ loader=jinja2.FileSystemLoader(
9
+ searchpath=os.path.join(os.path.dirname(__file__), "templates")
10
+ )
11
+ )
12
+
13
+
14
+ def index():
15
+ template = ENVIRONMENT.get_template("home.html.jinja")
16
+ content = template.render(title="Piccolo + ASGI")
17
+ return HTTPResponse(content)
@@ -8,4 +8,10 @@
8
8
  {% include '_esmerald_endpoints.py.jinja' %}
9
9
  {% elif router == 'lilya' %}
10
10
  {% include '_lilya_endpoints.py.jinja' %}
11
+ {% elif router == 'quart' %}
12
+ {% include '_quart_endpoints.py.jinja' %}
13
+ {% elif router == 'falcon' %}
14
+ {% include '_falcon_endpoints.py.jinja' %}
15
+ {% elif router == 'sanic' %}
16
+ {% include '_sanic_endpoints.py.jinja' %}
11
17
  {% endif %}
@@ -66,6 +66,21 @@
66
66
  <li><a href="/admin/">Admin</a></li>
67
67
  <li><a href="/tasks/">JSON endpoint</a></li>
68
68
  </ul>
69
+ <h3>Quart</h3>
70
+ <ul>
71
+ <li><a href="/admin/">Admin</a></li>
72
+ <li><a href="/docs">Swagger API</a></li>
73
+ </ul>
74
+ <h3>Falcon</h3>
75
+ <ul>
76
+ <li><a href="/admin/">Admin</a></li>
77
+ <li><a href="/tasks/">JSON endpoint</a></li>
78
+ </ul>
79
+ <h3>Sanic</h3>
80
+ <ul>
81
+ <li><a href="/admin/">Admin</a></li>
82
+ <li><a href="/docs/swagger">Swagger API</a></li>
83
+ </ul>
69
84
  </section>
70
85
  </div>
71
86
  {% endblock content %}
@@ -233,6 +233,11 @@ def populate():
233
233
  RecordingStudio.facilities: {
234
234
  "restaurant": True,
235
235
  "mixing_desk": True,
236
+ "instruments": {"electric_guitars": 10, "drum_kits": 2},
237
+ "technicians": [
238
+ {"name": "Alice Jones"},
239
+ {"name": "Bob Williams"},
240
+ ],
236
241
  },
237
242
  }
238
243
  )
@@ -244,6 +249,10 @@ def populate():
244
249
  RecordingStudio.facilities: {
245
250
  "restaurant": False,
246
251
  "mixing_desk": True,
252
+ "instruments": {"electric_guitars": 6, "drum_kits": 3},
253
+ "technicians": [
254
+ {"name": "Frank Smith"},
255
+ ],
247
256
  },
248
257
  },
249
258
  )
@@ -70,6 +70,10 @@ from piccolo.utils.warnings import colored_warning
70
70
 
71
71
  if t.TYPE_CHECKING: # pragma: no cover
72
72
  from piccolo.columns.base import ColumnMeta
73
+ from piccolo.query.operators.json import (
74
+ GetChildElement,
75
+ GetElementFromPath,
76
+ )
73
77
  from piccolo.table import Table
74
78
 
75
79
 
@@ -2319,6 +2323,76 @@ class JSON(Column):
2319
2323
  else:
2320
2324
  return "JSON"
2321
2325
 
2326
+ ###########################################################################
2327
+
2328
+ def arrow(self, key: t.Union[str, int, QueryString]) -> GetChildElement:
2329
+ """
2330
+ Allows a child element of the JSON structure to be returned - for
2331
+ example::
2332
+
2333
+ >>> await RecordingStudio.select(
2334
+ ... RecordingStudio.facilities.arrow("restaurant")
2335
+ ... )
2336
+
2337
+ """
2338
+ from piccolo.query.operators.json import GetChildElement
2339
+
2340
+ alias = self._alias or self._meta.get_default_alias()
2341
+ return GetChildElement(identifier=self, key=key, alias=alias)
2342
+
2343
+ def __getitem__(
2344
+ self, value: t.Union[str, int, QueryString]
2345
+ ) -> GetChildElement:
2346
+ """
2347
+ A shortcut for the ``arrow`` method, used for retrieving a child
2348
+ element.
2349
+
2350
+ For example:
2351
+
2352
+ .. code-block:: python
2353
+
2354
+ >>> await RecordingStudio.select(
2355
+ ... RecordingStudio.facilities["restaurant"]
2356
+ ... )
2357
+
2358
+ """
2359
+ return self.arrow(key=value)
2360
+
2361
+ def from_path(
2362
+ self,
2363
+ path: t.List[t.Union[str, int]],
2364
+ ) -> GetElementFromPath:
2365
+ """
2366
+ Allows an element of the JSON structure to be returned, which can be
2367
+ arbitrarily deep. For example::
2368
+
2369
+ >>> await RecordingStudio.select(
2370
+ ... RecordingStudio.facilities.from_path([
2371
+ ... "technician",
2372
+ ... 0,
2373
+ ... "first_name"
2374
+ ... ])
2375
+ ... )
2376
+
2377
+ It's the same as calling ``arrow`` multiple times, but is more
2378
+ efficient / convenient if extracting highly nested data::
2379
+
2380
+ >>> await RecordingStudio.select(
2381
+ ... RecordingStudio.facilities.arrow(
2382
+ ... "technician"
2383
+ ... ).arrow(
2384
+ ... 0
2385
+ ... ).arrow(
2386
+ ... "first_name"
2387
+ ... )
2388
+ ... )
2389
+
2390
+ """
2391
+ from piccolo.query.operators.json import GetElementFromPath
2392
+
2393
+ alias = self._alias or self._meta.get_default_alias()
2394
+ return GetElementFromPath(identifier=self, path=path, alias=alias)
2395
+
2322
2396
  ###########################################################################
2323
2397
  # Descriptors
2324
2398
 
@@ -2337,10 +2411,10 @@ class JSON(Column):
2337
2411
 
2338
2412
  class JSONB(JSON):
2339
2413
  """
2340
- Used for storing JSON strings - Postgres only. The data is stored in a
2341
- binary format, and can be queried. Insertion can be slower (as it needs to
2342
- be converted to the binary format). The benefits of JSONB generally
2343
- outweigh the downsides.
2414
+ Used for storing JSON strings - Postgres / CochroachDB only. The data is
2415
+ stored in a binary format, and can be queried more efficiently. Insertion
2416
+ can be slower (as it needs to be converted to the binary format). The
2417
+ benefits of JSONB generally outweigh the downsides.
2344
2418
 
2345
2419
  :param default:
2346
2420
  Either a JSON string can be provided, or a Python ``dict`` or ``list``
@@ -2352,41 +2426,6 @@ class JSONB(JSON):
2352
2426
  def column_type(self):
2353
2427
  return "JSONB" # Must be defined, we override column_type() in JSON()
2354
2428
 
2355
- def arrow(self, key: str) -> JSONB:
2356
- """
2357
- Allows part of the JSON structure to be returned - for example,
2358
- for {"a": 1}, and a key value of "a", then 1 will be returned.
2359
- """
2360
- instance = t.cast(JSONB, self.copy())
2361
- instance.json_operator = f"-> '{key}'"
2362
- return instance
2363
-
2364
- def get_select_string(
2365
- self, engine_type: str, with_alias: bool = True
2366
- ) -> QueryString:
2367
- select_string = self._meta.get_full_name(with_alias=False)
2368
-
2369
- if self.json_operator is not None:
2370
- select_string += f" {self.json_operator}"
2371
-
2372
- if with_alias:
2373
- alias = self._alias or self._meta.get_default_alias()
2374
- select_string += f' AS "{alias}"'
2375
-
2376
- return QueryString(select_string)
2377
-
2378
- def eq(self, value) -> Where:
2379
- """
2380
- See ``Boolean.eq`` for more details.
2381
- """
2382
- return self.__eq__(value)
2383
-
2384
- def ne(self, value) -> Where:
2385
- """
2386
- See ``Boolean.ne`` for more details.
2387
- """
2388
- return self.__ne__(value)
2389
-
2390
2429
  ###########################################################################
2391
2430
  # Descriptors
2392
2431
 
@@ -73,6 +73,7 @@ TimestamptzArg = t.Union[
73
73
  Enum,
74
74
  None,
75
75
  datetime.datetime,
76
+ t.Callable[[], datetime.datetime],
76
77
  ]
77
78
 
78
79