piccolo 1.21.0__tar.gz → 1.22.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 (389) hide show
  1. {piccolo-1.21.0 → piccolo-1.22.0}/PKG-INFO +7 -21
  2. piccolo-1.22.0/piccolo/__init__.py +1 -0
  3. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/playground/commands/run.py +9 -0
  4. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/column_types.py +78 -39
  5. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/base.py +11 -6
  6. piccolo-1.22.0/piccolo/query/operators/json.py +111 -0
  7. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/querystring.py +14 -2
  8. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/table_reflection.py +17 -5
  9. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo.egg-info/PKG-INFO +7 -21
  10. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo.egg-info/SOURCES.txt +4 -2
  11. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo.egg-info/entry_points.txt +1 -0
  12. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo.egg-info/requires.txt +2 -2
  13. {piccolo-1.21.0 → piccolo-1.22.0}/setup.py +2 -2
  14. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_jsonb.py +100 -43
  15. piccolo-1.22.0/tests/query/operators/test_json.py +52 -0
  16. piccolo-1.22.0/tests/testing/__init__.py +0 -0
  17. piccolo-1.22.0/tests/utils/__init__.py +0 -0
  18. piccolo-1.21.0/piccolo/__init__.py +0 -1
  19. piccolo-1.21.0/tests/test_main.py +0 -9
  20. piccolo-1.21.0/tests/test_schema.py +0 -183
  21. {piccolo-1.21.0 → piccolo-1.22.0}/LICENSE +0 -0
  22. {piccolo-1.21.0 → piccolo-1.22.0}/README.md +0 -0
  23. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/__init__.py +0 -0
  24. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/app/__init__.py +0 -0
  25. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/app/commands/__init__.py +0 -0
  26. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/app/commands/new.py +0 -0
  27. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/app/commands/show_all.py +0 -0
  28. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/app/commands/templates/piccolo_app.py.jinja +0 -0
  29. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/app/commands/templates/tables.py.jinja +0 -0
  30. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/app/piccolo_app.py +0 -0
  31. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/__init__.py +0 -0
  32. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/__init__.py +0 -0
  33. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/new.py +0 -0
  34. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/README.md.jinja +0 -0
  35. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/_blacksheep_app.py.jinja +0 -0
  36. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/_esmerald_app.py.jinja +0 -0
  37. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/_fastapi_app.py.jinja +0 -0
  38. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/_lilya_app.py.jinja +0 -0
  39. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/_litestar_app.py.jinja +0 -0
  40. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/_starlette_app.py.jinja +0 -0
  41. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/app.py.jinja +0 -0
  42. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/conftest.py.jinja +0 -0
  43. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/__init__.py.jinja +0 -0
  44. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/_blacksheep_endpoints.py.jinja +0 -0
  45. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/_esmerald_endpoints.py.jinja +0 -0
  46. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/_lilya_endpoints.py.jinja +0 -0
  47. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/_litestar_endpoints.py.jinja +0 -0
  48. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/_starlette_endpoints.py.jinja +0 -0
  49. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/endpoints.py.jinja +0 -0
  50. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/piccolo_app.py.jinja +0 -0
  51. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/piccolo_migrations/README.md +0 -0
  52. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/tables.py.jinja +0 -0
  53. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/templates/base.html.jinja_raw +0 -0
  54. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/home/templates/home.html.jinja_raw +0 -0
  55. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/main.py.jinja +0 -0
  56. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/piccolo_conf.py.jinja +0 -0
  57. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/piccolo_conf_test.py.jinja +0 -0
  58. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/requirements.txt.jinja +0 -0
  59. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/static/favicon.ico +0 -0
  60. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/commands/templates/app/static/main.css +0 -0
  61. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/asgi/piccolo_app.py +0 -0
  62. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/fixtures/__init__.py +0 -0
  63. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/fixtures/commands/__init__.py +0 -0
  64. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/fixtures/commands/dump.py +0 -0
  65. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/fixtures/commands/load.py +0 -0
  66. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/fixtures/commands/shared.py +0 -0
  67. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/fixtures/piccolo_app.py +0 -0
  68. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/meta/__init__.py +0 -0
  69. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/meta/commands/__init__.py +0 -0
  70. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/meta/commands/version.py +0 -0
  71. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/meta/piccolo_app.py +0 -0
  72. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/__init__.py +0 -0
  73. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/auto/__init__.py +0 -0
  74. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/auto/diffable_table.py +0 -0
  75. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/auto/migration_manager.py +0 -0
  76. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/auto/operations.py +0 -0
  77. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/auto/schema_differ.py +0 -0
  78. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/auto/schema_snapshot.py +0 -0
  79. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/auto/serialisation.py +0 -0
  80. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/auto/serialisation_legacy.py +0 -0
  81. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/commands/__init__.py +0 -0
  82. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/commands/backwards.py +0 -0
  83. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/commands/base.py +0 -0
  84. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/commands/check.py +0 -0
  85. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/commands/clean.py +0 -0
  86. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/commands/forwards.py +0 -0
  87. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/commands/new.py +0 -0
  88. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/commands/templates/migration.py.jinja +0 -0
  89. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/piccolo_app.py +0 -0
  90. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/migrations/tables.py +0 -0
  91. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/playground/__init__.py +0 -0
  92. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/playground/commands/__init__.py +0 -0
  93. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/playground/piccolo_app.py +0 -0
  94. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/project/__init__.py +0 -0
  95. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/project/commands/__init__.py +0 -0
  96. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/project/commands/new.py +0 -0
  97. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/project/commands/templates/piccolo_conf.py.jinja +0 -0
  98. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/project/piccolo_app.py +0 -0
  99. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/schema/__init__.py +0 -0
  100. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/schema/commands/__init__.py +0 -0
  101. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/schema/commands/exceptions.py +0 -0
  102. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/schema/commands/generate.py +0 -0
  103. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/schema/commands/graph.py +0 -0
  104. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/schema/commands/templates/graphviz.dot.jinja +0 -0
  105. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/schema/piccolo_app.py +0 -0
  106. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/shell/__init__.py +0 -0
  107. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/shell/commands/__init__.py +0 -0
  108. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/shell/commands/run.py +0 -0
  109. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/shell/piccolo_app.py +0 -0
  110. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/sql_shell/__init__.py +0 -0
  111. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/sql_shell/commands/__init__.py +0 -0
  112. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/sql_shell/commands/run.py +0 -0
  113. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/sql_shell/piccolo_app.py +0 -0
  114. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/tester/__init__.py +0 -0
  115. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/tester/commands/__init__.py +0 -0
  116. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/tester/commands/run.py +0 -0
  117. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/tester/piccolo_app.py +0 -0
  118. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/__init__.py +0 -0
  119. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/commands/__init__.py +0 -0
  120. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/commands/change_password.py +0 -0
  121. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/commands/change_permissions.py +0 -0
  122. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/commands/create.py +0 -0
  123. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/commands/list.py +0 -0
  124. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/piccolo_app.py +0 -0
  125. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/piccolo_migrations/2019-11-14T21-52-21.py +0 -0
  126. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/piccolo_migrations/2020-06-11T21-38-55.py +0 -0
  127. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/piccolo_migrations/2021-04-30T16-14-15.py +0 -0
  128. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/piccolo_migrations/__init__.py +0 -0
  129. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/apps/user/tables.py +0 -0
  130. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/__init__.py +0 -0
  131. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/base.py +0 -0
  132. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/choices.py +0 -0
  133. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/combination.py +0 -0
  134. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/defaults/__init__.py +0 -0
  135. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/defaults/base.py +0 -0
  136. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/defaults/date.py +0 -0
  137. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/defaults/interval.py +0 -0
  138. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/defaults/time.py +0 -0
  139. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/defaults/timestamp.py +0 -0
  140. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/defaults/timestamptz.py +0 -0
  141. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/defaults/uuid.py +0 -0
  142. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/indexes.py +0 -0
  143. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/m2m.py +0 -0
  144. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/operators/__init__.py +0 -0
  145. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/operators/base.py +0 -0
  146. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/operators/comparison.py +0 -0
  147. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/operators/math.py +0 -0
  148. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/operators/string.py +0 -0
  149. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/readable.py +0 -0
  150. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/columns/reference.py +0 -0
  151. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/conf/__init__.py +0 -0
  152. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/conf/apps.py +0 -0
  153. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/custom_types.py +0 -0
  154. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/engine/__init__.py +0 -0
  155. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/engine/base.py +0 -0
  156. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/engine/cockroach.py +0 -0
  157. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/engine/exceptions.py +0 -0
  158. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/engine/finder.py +0 -0
  159. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/engine/postgres.py +0 -0
  160. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/engine/sqlite.py +0 -0
  161. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/main.py +0 -0
  162. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/py.typed +0 -0
  163. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/__init__.py +0 -0
  164. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/functions/__init__.py +0 -0
  165. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/functions/aggregate.py +0 -0
  166. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/functions/base.py +0 -0
  167. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/functions/datetime.py +0 -0
  168. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/functions/math.py +0 -0
  169. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/functions/string.py +0 -0
  170. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/functions/type_conversion.py +0 -0
  171. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/__init__.py +0 -0
  172. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/alter.py +0 -0
  173. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/count.py +0 -0
  174. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/create.py +0 -0
  175. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/create_index.py +0 -0
  176. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/delete.py +0 -0
  177. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/drop_index.py +0 -0
  178. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/exists.py +0 -0
  179. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/indexes.py +0 -0
  180. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/insert.py +0 -0
  181. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/objects.py +0 -0
  182. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/raw.py +0 -0
  183. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/refresh.py +0 -0
  184. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/select.py +0 -0
  185. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/table_exists.py +0 -0
  186. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/methods/update.py +0 -0
  187. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/mixins.py +0 -0
  188. {piccolo-1.21.0/profiling → piccolo-1.22.0/piccolo/query/operators}/__init__.py +0 -0
  189. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/query/proxy.py +0 -0
  190. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/schema.py +0 -0
  191. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/table.py +0 -0
  192. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/testing/__init__.py +0 -0
  193. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/testing/model_builder.py +0 -0
  194. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/testing/random_builder.py +0 -0
  195. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/testing/test_case.py +0 -0
  196. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/__init__.py +0 -0
  197. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/dictionary.py +0 -0
  198. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/encoding.py +0 -0
  199. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/graphlib/__init__.py +0 -0
  200. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/graphlib/_graphlib.py +0 -0
  201. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/lazy_loader.py +0 -0
  202. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/list.py +0 -0
  203. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/naming.py +0 -0
  204. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/objects.py +0 -0
  205. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/printing.py +0 -0
  206. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/pydantic.py +0 -0
  207. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/repr.py +0 -0
  208. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/sql_values.py +0 -0
  209. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/sync.py +0 -0
  210. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo/utils/warnings.py +0 -0
  211. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo.egg-info/dependency_links.txt +0 -0
  212. {piccolo-1.21.0 → piccolo-1.22.0}/piccolo.egg-info/top_level.txt +0 -0
  213. {piccolo-1.21.0/tests/apps → piccolo-1.22.0/profiling}/__init__.py +0 -0
  214. {piccolo-1.21.0 → piccolo-1.22.0}/profiling/run_profile.py +0 -0
  215. {piccolo-1.21.0 → piccolo-1.22.0}/pyproject.toml +0 -0
  216. {piccolo-1.21.0 → piccolo-1.22.0}/setup.cfg +0 -0
  217. {piccolo-1.21.0/tests/apps/app → piccolo-1.22.0/tests/apps}/__init__.py +0 -0
  218. {piccolo-1.21.0/tests/apps/app/commands → piccolo-1.22.0/tests/apps/app}/__init__.py +0 -0
  219. {piccolo-1.21.0/tests/apps/asgi → piccolo-1.22.0/tests/apps/app/commands}/__init__.py +0 -0
  220. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/app/commands/test_new.py +0 -0
  221. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/app/commands/test_show_all.py +0 -0
  222. {piccolo-1.21.0/tests/apps/asgi/commands → piccolo-1.22.0/tests/apps/asgi}/__init__.py +0 -0
  223. {piccolo-1.21.0/tests/apps/fixtures → piccolo-1.22.0/tests/apps/asgi/commands}/__init__.py +0 -0
  224. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/asgi/commands/test_new.py +0 -0
  225. {piccolo-1.21.0/tests/apps/fixtures/commands → piccolo-1.22.0/tests/apps/fixtures}/__init__.py +0 -0
  226. {piccolo-1.21.0/tests/apps/meta → piccolo-1.22.0/tests/apps/fixtures/commands}/__init__.py +0 -0
  227. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/fixtures/commands/test_dump_load.py +0 -0
  228. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/fixtures/commands/test_shared.py +0 -0
  229. {piccolo-1.21.0/tests/apps/meta/commands → piccolo-1.22.0/tests/apps/meta}/__init__.py +0 -0
  230. {piccolo-1.21.0/tests/apps/migrations → piccolo-1.22.0/tests/apps/meta/commands}/__init__.py +0 -0
  231. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/meta/commands/test_version.py +0 -0
  232. {piccolo-1.21.0/tests/apps/migrations/auto → piccolo-1.22.0/tests/apps/migrations}/__init__.py +0 -0
  233. {piccolo-1.21.0/tests/apps/migrations/auto/integration → piccolo-1.22.0/tests/apps/migrations/auto}/__init__.py +0 -0
  234. {piccolo-1.21.0/tests/apps/migrations/commands → piccolo-1.22.0/tests/apps/migrations/auto/integration}/__init__.py +0 -0
  235. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/auto/integration/test_migrations.py +0 -0
  236. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/auto/test_diffable_table.py +0 -0
  237. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/auto/test_migration_manager.py +0 -0
  238. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/auto/test_schema_differ.py +0 -0
  239. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/auto/test_schema_snapshot.py +0 -0
  240. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/auto/test_serialisation.py +0 -0
  241. {piccolo-1.21.0/tests/apps/migrations/commands/test_migrations → piccolo-1.22.0/tests/apps/migrations/commands}/__init__.py +0 -0
  242. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/commands/test_base.py +0 -0
  243. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/commands/test_check.py +0 -0
  244. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/commands/test_clean.py +0 -0
  245. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/commands/test_forwards_backwards.py +0 -0
  246. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/commands/test_migrations/2020-03-31T20-38-22.py +0 -0
  247. {piccolo-1.21.0/tests/apps/project → piccolo-1.22.0/tests/apps/migrations/commands/test_migrations}/__init__.py +0 -0
  248. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/commands/test_new.py +0 -0
  249. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/migrations/test_migration.py +0 -0
  250. {piccolo-1.21.0/tests/apps/project/commands → piccolo-1.22.0/tests/apps/project}/__init__.py +0 -0
  251. {piccolo-1.21.0/tests/apps/schema → piccolo-1.22.0/tests/apps/project/commands}/__init__.py +0 -0
  252. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/project/commands/test_new.py +0 -0
  253. {piccolo-1.21.0/tests/apps/shell → piccolo-1.22.0/tests/apps/schema}/__init__.py +0 -0
  254. {piccolo-1.21.0/tests/apps/shell/commands → piccolo-1.22.0/tests/apps/shell}/__init__.py +0 -0
  255. {piccolo-1.21.0/tests/apps/sql_shell → piccolo-1.22.0/tests/apps/shell/commands}/__init__.py +0 -0
  256. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/shell/commands/test_run.py +0 -0
  257. {piccolo-1.21.0/tests/apps/sql_shell/commands → piccolo-1.22.0/tests/apps/sql_shell}/__init__.py +0 -0
  258. {piccolo-1.21.0/tests/apps/tester → piccolo-1.22.0/tests/apps/sql_shell/commands}/__init__.py +0 -0
  259. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/sql_shell/commands/test_run.py +0 -0
  260. {piccolo-1.21.0/tests/apps/user → piccolo-1.22.0/tests/apps/tester}/__init__.py +0 -0
  261. {piccolo-1.21.0/tests/apps/user/commands → piccolo-1.22.0/tests/apps/user}/__init__.py +0 -0
  262. {piccolo-1.21.0/tests/columns → piccolo-1.22.0/tests/apps/user/commands}/__init__.py +0 -0
  263. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/user/commands/test_change_password.py +0 -0
  264. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/user/commands/test_change_permissions.py +0 -0
  265. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/user/commands/test_create.py +0 -0
  266. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/user/commands/test_list.py +0 -0
  267. {piccolo-1.21.0 → piccolo-1.22.0}/tests/apps/user/test_tables.py +0 -0
  268. {piccolo-1.21.0/tests/columns/m2m → piccolo-1.22.0/tests/columns}/__init__.py +0 -0
  269. {piccolo-1.21.0/tests/conf → piccolo-1.22.0/tests/columns/m2m}/__init__.py +0 -0
  270. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/m2m/base.py +0 -0
  271. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/m2m/test_m2m.py +0 -0
  272. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/m2m/test_m2m_schema.py +0 -0
  273. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_array.py +0 -0
  274. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_base.py +0 -0
  275. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_bigint.py +0 -0
  276. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_boolean.py +0 -0
  277. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_bytea.py +0 -0
  278. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_choices.py +0 -0
  279. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_combination.py +0 -0
  280. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_date.py +0 -0
  281. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_db_column_name.py +0 -0
  282. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_defaults.py +0 -0
  283. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_double_precision.py +0 -0
  284. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_get_sql_value.py +0 -0
  285. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_interval.py +0 -0
  286. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_json.py +0 -0
  287. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_numeric.py +0 -0
  288. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_primary_key.py +0 -0
  289. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_readable.py +0 -0
  290. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_real.py +0 -0
  291. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_reference.py +0 -0
  292. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_reserved_column_names.py +0 -0
  293. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_smallint.py +0 -0
  294. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_time.py +0 -0
  295. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_timestamp.py +0 -0
  296. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_timestamptz.py +0 -0
  297. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_uuid.py +0 -0
  298. {piccolo-1.21.0 → piccolo-1.22.0}/tests/columns/test_varchar.py +0 -0
  299. {piccolo-1.21.0/tests/engine → piccolo-1.22.0/tests/conf}/__init__.py +0 -0
  300. {piccolo-1.21.0 → piccolo-1.22.0}/tests/conf/example.py +0 -0
  301. {piccolo-1.21.0 → piccolo-1.22.0}/tests/conf/test_apps.py +0 -0
  302. {piccolo-1.21.0/tests/example_apps → piccolo-1.22.0/tests/engine}/__init__.py +0 -0
  303. {piccolo-1.21.0 → piccolo-1.22.0}/tests/engine/test_extra_nodes.py +0 -0
  304. {piccolo-1.21.0 → piccolo-1.22.0}/tests/engine/test_logging.py +0 -0
  305. {piccolo-1.21.0 → piccolo-1.22.0}/tests/engine/test_nested_transaction.py +0 -0
  306. {piccolo-1.21.0 → piccolo-1.22.0}/tests/engine/test_pool.py +0 -0
  307. {piccolo-1.21.0 → piccolo-1.22.0}/tests/engine/test_transaction.py +0 -0
  308. {piccolo-1.21.0 → piccolo-1.22.0}/tests/engine/test_version_parsing.py +0 -0
  309. {piccolo-1.21.0/tests/example_apps/mega → piccolo-1.22.0/tests/example_apps}/__init__.py +0 -0
  310. {piccolo-1.21.0/tests/example_apps/mega/piccolo_migrations → piccolo-1.22.0/tests/example_apps/mega}/__init__.py +0 -0
  311. {piccolo-1.21.0 → piccolo-1.22.0}/tests/example_apps/mega/piccolo_app.py +0 -0
  312. {piccolo-1.21.0 → piccolo-1.22.0}/tests/example_apps/mega/piccolo_migrations/2021-09-20T21-23-25-698988.py +0 -0
  313. {piccolo-1.21.0/tests/example_apps/music → piccolo-1.22.0/tests/example_apps/mega/piccolo_migrations}/__init__.py +0 -0
  314. {piccolo-1.21.0 → piccolo-1.22.0}/tests/example_apps/mega/tables.py +0 -0
  315. {piccolo-1.21.0/tests/query → piccolo-1.22.0/tests/example_apps/music}/__init__.py +0 -0
  316. {piccolo-1.21.0 → piccolo-1.22.0}/tests/example_apps/music/piccolo_app.py +0 -0
  317. {piccolo-1.21.0 → piccolo-1.22.0}/tests/example_apps/music/tables.py +0 -0
  318. {piccolo-1.21.0 → piccolo-1.22.0}/tests/example_apps/music/tables_detailed.py +0 -0
  319. {piccolo-1.21.0/tests/query/functions → piccolo-1.22.0/tests/query}/__init__.py +0 -0
  320. {piccolo-1.21.0/tests/query/mixins → piccolo-1.22.0/tests/query/functions}/__init__.py +0 -0
  321. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/functions/base.py +0 -0
  322. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/functions/test_datetime.py +0 -0
  323. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/functions/test_functions.py +0 -0
  324. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/functions/test_math.py +0 -0
  325. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/functions/test_string.py +0 -0
  326. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/functions/test_type_conversion.py +0 -0
  327. {piccolo-1.21.0/tests/table → piccolo-1.22.0/tests/query/mixins}/__init__.py +0 -0
  328. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/mixins/test_columns_delegate.py +0 -0
  329. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/mixins/test_order_by_delegate.py +0 -0
  330. {piccolo-1.21.0/tests/table/instance → piccolo-1.22.0/tests/query/operators}/__init__.py +0 -0
  331. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/test_await.py +0 -0
  332. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/test_camelcase.py +0 -0
  333. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/test_freeze.py +0 -0
  334. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/test_gather.py +0 -0
  335. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/test_querystring.py +0 -0
  336. {piccolo-1.21.0 → piccolo-1.22.0}/tests/query/test_slots.py +0 -0
  337. {piccolo-1.21.0/tests/testing → piccolo-1.22.0/tests/table}/__init__.py +0 -0
  338. {piccolo-1.21.0/tests/utils → piccolo-1.22.0/tests/table/instance}/__init__.py +0 -0
  339. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/instance/test_create.py +0 -0
  340. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/instance/test_get_related.py +0 -0
  341. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/instance/test_get_related_readable.py +0 -0
  342. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/instance/test_instantiate.py +0 -0
  343. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/instance/test_remove.py +0 -0
  344. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/instance/test_save.py +0 -0
  345. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/instance/test_to_dict.py +0 -0
  346. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_all_columns.py +0 -0
  347. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_alter.py +0 -0
  348. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_batch.py +0 -0
  349. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_callback.py +0 -0
  350. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_constructor.py +0 -0
  351. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_count.py +0 -0
  352. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_create.py +0 -0
  353. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_create_db_tables.py +0 -0
  354. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_create_table_class.py +0 -0
  355. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_delete.py +0 -0
  356. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_drop_db_tables.py +0 -0
  357. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_exists.py +0 -0
  358. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_from_dict.py +0 -0
  359. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_indexes.py +0 -0
  360. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_inheritance.py +0 -0
  361. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_insert.py +0 -0
  362. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_join.py +0 -0
  363. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_join_on.py +0 -0
  364. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_metaclass.py +0 -0
  365. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_objects.py +0 -0
  366. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_output.py +0 -0
  367. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_raw.py +0 -0
  368. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_ref.py +0 -0
  369. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_refresh.py +0 -0
  370. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_repr.py +0 -0
  371. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_select.py +0 -0
  372. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_str.py +0 -0
  373. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_table_exists.py +0 -0
  374. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_update.py +0 -0
  375. {piccolo-1.21.0 → piccolo-1.22.0}/tests/table/test_update_self.py +0 -0
  376. {piccolo-1.21.0 → piccolo-1.22.0}/tests/testing/test_model_builder.py +0 -0
  377. {piccolo-1.21.0 → piccolo-1.22.0}/tests/testing/test_random_builder.py +0 -0
  378. {piccolo-1.21.0 → piccolo-1.22.0}/tests/testing/test_test_case.py +0 -0
  379. {piccolo-1.21.0 → piccolo-1.22.0}/tests/utils/test_dictionary.py +0 -0
  380. {piccolo-1.21.0 → piccolo-1.22.0}/tests/utils/test_encoding.py +0 -0
  381. {piccolo-1.21.0 → piccolo-1.22.0}/tests/utils/test_lazy_loader.py +0 -0
  382. {piccolo-1.21.0 → piccolo-1.22.0}/tests/utils/test_list.py +0 -0
  383. {piccolo-1.21.0 → piccolo-1.22.0}/tests/utils/test_naming.py +0 -0
  384. {piccolo-1.21.0 → piccolo-1.22.0}/tests/utils/test_printing.py +0 -0
  385. {piccolo-1.21.0 → piccolo-1.22.0}/tests/utils/test_pydantic.py +0 -0
  386. {piccolo-1.21.0 → piccolo-1.22.0}/tests/utils/test_sql_values.py +0 -0
  387. {piccolo-1.21.0 → piccolo-1.22.0}/tests/utils/test_sync.py +0 -0
  388. {piccolo-1.21.0 → piccolo-1.22.0}/tests/utils/test_table_reflection.py +0 -0
  389. {piccolo-1.21.0 → piccolo-1.22.0}/tests/utils/test_warnings.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: piccolo
3
- Version: 1.21.0
3
+ Version: 1.22.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
@@ -9,44 +9,28 @@ License: MIT
9
9
  Project-URL: Documentation, https://piccolo-orm.readthedocs.io/en/latest/index.html
10
10
  Project-URL: Source, https://github.com/piccolo-orm/piccolo
11
11
  Project-URL: Tracker, https://github.com/piccolo-orm/piccolo/issues
12
+ Platform: UNKNOWN
12
13
  Classifier: License :: OSI Approved :: MIT License
13
14
  Classifier: Programming Language :: Python
14
15
  Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.8
16
16
  Classifier: Programming Language :: Python :: 3.9
17
17
  Classifier: Programming Language :: Python :: 3.10
18
18
  Classifier: Programming Language :: Python :: 3.11
19
19
  Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
20
21
  Classifier: Programming Language :: Python :: Implementation :: CPython
21
22
  Classifier: Framework :: AsyncIO
22
23
  Classifier: Typing :: Typed
23
24
  Classifier: Topic :: Database
24
- Requires-Python: >=3.8.0
25
+ Requires-Python: >=3.9.0
25
26
  Description-Content-Type: text/markdown
26
- License-File: LICENSE
27
- Requires-Dist: black
28
- Requires-Dist: colorama>=0.4.0
29
- Requires-Dist: Jinja2>=2.11.0
30
- Requires-Dist: targ>=0.3.7
31
- Requires-Dist: inflection>=0.5.1
32
- Requires-Dist: typing-extensions>=4.3.0
33
- Requires-Dist: pydantic[email]==2.*
34
27
  Provides-Extra: orjson
35
- Requires-Dist: orjson>=3.5.1; extra == "orjson"
36
28
  Provides-Extra: playground
37
- Requires-Dist: ipython; extra == "playground"
38
29
  Provides-Extra: postgres
39
- Requires-Dist: asyncpg>=0.21.0; extra == "postgres"
40
30
  Provides-Extra: sqlite
41
- Requires-Dist: aiosqlite>=0.16.0; extra == "sqlite"
42
31
  Provides-Extra: uvloop
43
- Requires-Dist: uvloop>=0.12.0; sys_platform != "win32" and extra == "uvloop"
44
32
  Provides-Extra: all
45
- Requires-Dist: orjson>=3.5.1; extra == "all"
46
- Requires-Dist: ipython; extra == "all"
47
- Requires-Dist: asyncpg>=0.21.0; extra == "all"
48
- Requires-Dist: aiosqlite>=0.16.0; extra == "all"
49
- Requires-Dist: uvloop>=0.12.0; sys_platform != "win32" and extra == "all"
33
+ License-File: LICENSE
50
34
 
51
35
  ![Logo](https://raw.githubusercontent.com/piccolo-orm/piccolo/master/docs/logo_hero.png "Piccolo Logo")
52
36
 
@@ -155,3 +139,5 @@ We have a handy page which shows the equivalent of [common Django queries in Pic
155
139
  Our documentation is on [Read the docs](https://piccolo-orm.readthedocs.io/en/latest/piccolo/getting_started/index.html).
156
140
 
157
141
  We also have some great [tutorial videos on YouTube](https://www.youtube.com/channel/UCE7x5nm1Iy9KDfXPNrNQ5lA).
142
+
143
+
@@ -0,0 +1 @@
1
+ __VERSION__ = "1.22.0"
@@ -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
 
@@ -6,6 +6,7 @@ from time import time
6
6
  from piccolo.columns.column_types import JSON, JSONB
7
7
  from piccolo.custom_types import QueryResponseType, TableInstance
8
8
  from piccolo.query.mixins import ColumnsDelegate
9
+ from piccolo.query.operators.json import JSONQueryString
9
10
  from piccolo.querystring import QueryString
10
11
  from piccolo.utils.encoding import load_json
11
12
  from piccolo.utils.objects import make_nested_object
@@ -65,16 +66,20 @@ class Query(t.Generic[TableInstance, QueryResponseType]):
65
66
  self, "columns_delegate", None
66
67
  )
67
68
 
69
+ json_column_names: t.List[str] = []
70
+
68
71
  if columns_delegate is not None:
69
- json_columns = [
70
- i
71
- for i in columns_delegate.selected_columns
72
- if isinstance(i, (JSON, JSONB))
73
- ]
72
+ json_columns: t.List[t.Union[JSON, JSONB]] = []
73
+
74
+ for column in columns_delegate.selected_columns:
75
+ if isinstance(column, (JSON, JSONB)):
76
+ json_columns.append(column)
77
+ elif isinstance(column, JSONQueryString):
78
+ if alias := column._alias:
79
+ json_column_names.append(alias)
74
80
  else:
75
81
  json_columns = self.table._meta.json_columns
76
82
 
77
- json_column_names = []
78
83
  for column in json_columns:
79
84
  if column._alias is not None:
80
85
  json_column_names.append(column._alias)
@@ -0,0 +1,111 @@
1
+ from __future__ import annotations
2
+
3
+ import typing as t
4
+
5
+ from piccolo.querystring import QueryString
6
+ from piccolo.utils.encoding import dump_json
7
+
8
+ if t.TYPE_CHECKING:
9
+ from piccolo.columns.column_types import JSON
10
+
11
+
12
+ class JSONQueryString(QueryString):
13
+
14
+ def clean_value(self, value: t.Any):
15
+ if not isinstance(value, (str, QueryString)):
16
+ value = dump_json(value)
17
+ return value
18
+
19
+ def __eq__(self, value) -> QueryString: # type: ignore[override]
20
+ value = self.clean_value(value)
21
+ return QueryString("{} = {}", self, value)
22
+
23
+ def __ne__(self, value) -> QueryString: # type: ignore[override]
24
+ value = self.clean_value(value)
25
+ return QueryString("{} != {}", self, value)
26
+
27
+ def eq(self, value) -> QueryString:
28
+ return self.__eq__(value)
29
+
30
+ def ne(self, value) -> QueryString:
31
+ return self.__ne__(value)
32
+
33
+
34
+ class GetChildElement(JSONQueryString):
35
+ """
36
+ Allows you to get a child element from a JSON object.
37
+
38
+ You can access this via the ``arrow`` function on ``JSON`` and ``JSONB``
39
+ columns.
40
+
41
+ """
42
+
43
+ def __init__(
44
+ self,
45
+ identifier: t.Union[JSON, QueryString],
46
+ key: t.Union[str, int, QueryString],
47
+ alias: t.Optional[str] = None,
48
+ ):
49
+ if isinstance(key, int):
50
+ # asyncpg only accepts integer keys if we explicitly mark it as an
51
+ # int.
52
+ key = QueryString("{}::int", key)
53
+
54
+ super().__init__("{} -> {}", identifier, key, alias=alias)
55
+
56
+ def arrow(self, key: t.Union[str, int, QueryString]) -> GetChildElement:
57
+ """
58
+ This allows you to drill multiple levels deep into a JSON object if
59
+ needed.
60
+
61
+ For example::
62
+
63
+ >>> await RecordingStudio.select(
64
+ ... RecordingStudio.name,
65
+ ... RecordingStudio.facilities.arrow(
66
+ ... "instruments"
67
+ ... ).arrow(
68
+ ... "drum_kits"
69
+ ... ).as_alias("drum_kits")
70
+ ... ).output(load_json=True)
71
+ [
72
+ {'name': 'Abbey Road', 'drum_kits': 2},
73
+ {'name': 'Electric Lady', 'drum_kits': 3}
74
+ ]
75
+
76
+ """
77
+ return GetChildElement(identifier=self, key=key, alias=self._alias)
78
+
79
+ def __getitem__(
80
+ self, value: t.Union[str, int, QueryString]
81
+ ) -> GetChildElement:
82
+ return GetChildElement(identifier=self, key=value, alias=self._alias)
83
+
84
+
85
+ class GetElementFromPath(JSONQueryString):
86
+ """
87
+ Allows you to retrieve an element from a JSON object by specifying a path.
88
+ It can be several levels deep.
89
+
90
+ You can access this via the ``from_path`` function on ``JSON`` and
91
+ ``JSONB`` columns.
92
+
93
+ """
94
+
95
+ def __init__(
96
+ self,
97
+ identifier: t.Union[JSON, QueryString],
98
+ path: t.List[t.Union[str, int]],
99
+ alias: t.Optional[str] = None,
100
+ ):
101
+ """
102
+ :param path:
103
+ For example: ``["technician", 0, "name"]``.
104
+
105
+ """
106
+ super().__init__(
107
+ "{} #> {}",
108
+ identifier,
109
+ [str(i) if isinstance(i, int) else i for i in path],
110
+ alias=alias,
111
+ )
@@ -259,10 +259,22 @@ class QueryString(Selectable):
259
259
  # Basic logic
260
260
 
261
261
  def __eq__(self, value) -> QueryString: # type: ignore[override]
262
- return QueryString("{} = {}", self, value)
262
+ if value is None:
263
+ return QueryString("{} IS NULL", self)
264
+ else:
265
+ return QueryString("{} = {}", self, value)
263
266
 
264
267
  def __ne__(self, value) -> QueryString: # type: ignore[override]
265
- return QueryString("{} != {}", self, value)
268
+ if value is None:
269
+ return QueryString("{} IS NOT NULL", self, value)
270
+ else:
271
+ return QueryString("{} != {}", self, value)
272
+
273
+ def eq(self, value) -> QueryString:
274
+ return self.__eq__(value)
275
+
276
+ def ne(self, value) -> QueryString:
277
+ return self.__ne__(value)
266
278
 
267
279
  def __add__(self, value) -> QueryString:
268
280
  return QueryString("{} + {}", self, value)
@@ -8,6 +8,8 @@ import typing as t
8
8
  from dataclasses import dataclass
9
9
 
10
10
  from piccolo.apps.schema.commands.generate import get_output_schema
11
+ from piccolo.engine import engine_finder
12
+ from piccolo.engine.base import Engine
11
13
  from piccolo.table import Table
12
14
 
13
15
 
@@ -78,9 +80,16 @@ class TableStorage(metaclass=Singleton):
78
80
  works with Postgres.
79
81
  """
80
82
 
81
- def __init__(self):
83
+ def __init__(self, engine: t.Optional[Engine] = None):
84
+ """
85
+ :param engine:
86
+ Which engine to use to make the database queries. If not specified,
87
+ we try importing an engine from ``piccolo_conf.py``.
88
+
89
+ """
90
+ self.engine = engine or engine_finder()
82
91
  self.tables = ImmutableDict()
83
- self._schema_tables = {}
92
+ self._schema_tables: t.Dict[str, t.List[str]] = {}
84
93
 
85
94
  async def reflect(
86
95
  self,
@@ -120,10 +129,13 @@ class TableStorage(metaclass=Singleton):
120
129
  exclude_list = self._to_list(exclude)
121
130
 
122
131
  if keep_existing:
123
- exclude += self._schema_tables.get(schema_name, [])
132
+ exclude_list += self._schema_tables.get(schema_name, [])
124
133
 
125
134
  output_schema = await get_output_schema(
126
- schema_name=schema_name, include=include_list, exclude=exclude_list
135
+ schema_name=schema_name,
136
+ include=include_list,
137
+ exclude=exclude_list,
138
+ engine=self.engine,
127
139
  )
128
140
  add_tables = [
129
141
  self._add_table(schema_name=schema_name, table=table)
@@ -177,7 +189,7 @@ class TableStorage(metaclass=Singleton):
177
189
 
178
190
  def _add_to_schema_tables(self, schema_name: str, table_name: str) -> None:
179
191
  """
180
- We keep record of schemas and their tables for easy use. This method
192
+ We keep a record of schemas and their tables for easy use. This method
181
193
  adds a table to its schema.
182
194
 
183
195
  """
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: piccolo
3
- Version: 1.21.0
3
+ Version: 1.22.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
@@ -9,44 +9,28 @@ License: MIT
9
9
  Project-URL: Documentation, https://piccolo-orm.readthedocs.io/en/latest/index.html
10
10
  Project-URL: Source, https://github.com/piccolo-orm/piccolo
11
11
  Project-URL: Tracker, https://github.com/piccolo-orm/piccolo/issues
12
+ Platform: UNKNOWN
12
13
  Classifier: License :: OSI Approved :: MIT License
13
14
  Classifier: Programming Language :: Python
14
15
  Classifier: Programming Language :: Python :: 3
15
- Classifier: Programming Language :: Python :: 3.8
16
16
  Classifier: Programming Language :: Python :: 3.9
17
17
  Classifier: Programming Language :: Python :: 3.10
18
18
  Classifier: Programming Language :: Python :: 3.11
19
19
  Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
20
21
  Classifier: Programming Language :: Python :: Implementation :: CPython
21
22
  Classifier: Framework :: AsyncIO
22
23
  Classifier: Typing :: Typed
23
24
  Classifier: Topic :: Database
24
- Requires-Python: >=3.8.0
25
+ Requires-Python: >=3.9.0
25
26
  Description-Content-Type: text/markdown
26
- License-File: LICENSE
27
- Requires-Dist: black
28
- Requires-Dist: colorama>=0.4.0
29
- Requires-Dist: Jinja2>=2.11.0
30
- Requires-Dist: targ>=0.3.7
31
- Requires-Dist: inflection>=0.5.1
32
- Requires-Dist: typing-extensions>=4.3.0
33
- Requires-Dist: pydantic[email]==2.*
34
27
  Provides-Extra: orjson
35
- Requires-Dist: orjson>=3.5.1; extra == "orjson"
36
28
  Provides-Extra: playground
37
- Requires-Dist: ipython; extra == "playground"
38
29
  Provides-Extra: postgres
39
- Requires-Dist: asyncpg>=0.21.0; extra == "postgres"
40
30
  Provides-Extra: sqlite
41
- Requires-Dist: aiosqlite>=0.16.0; extra == "sqlite"
42
31
  Provides-Extra: uvloop
43
- Requires-Dist: uvloop>=0.12.0; sys_platform != "win32" and extra == "uvloop"
44
32
  Provides-Extra: all
45
- Requires-Dist: orjson>=3.5.1; extra == "all"
46
- Requires-Dist: ipython; extra == "all"
47
- Requires-Dist: asyncpg>=0.21.0; extra == "all"
48
- Requires-Dist: aiosqlite>=0.16.0; extra == "all"
49
- Requires-Dist: uvloop>=0.12.0; sys_platform != "win32" and extra == "all"
33
+ License-File: LICENSE
50
34
 
51
35
  ![Logo](https://raw.githubusercontent.com/piccolo-orm/piccolo/master/docs/logo_hero.png "Piccolo Logo")
52
36
 
@@ -155,3 +139,5 @@ We have a handy page which shows the equivalent of [common Django queries in Pic
155
139
  Our documentation is on [Read the docs](https://piccolo-orm.readthedocs.io/en/latest/piccolo/getting_started/index.html).
156
140
 
157
141
  We also have some great [tutorial videos on YouTube](https://www.youtube.com/channel/UCE7x5nm1Iy9KDfXPNrNQ5lA).
142
+
143
+
@@ -182,6 +182,8 @@ piccolo/query/methods/refresh.py
182
182
  piccolo/query/methods/select.py
183
183
  piccolo/query/methods/table_exists.py
184
184
  piccolo/query/methods/update.py
185
+ piccolo/query/operators/__init__.py
186
+ piccolo/query/operators/json.py
185
187
  piccolo/testing/__init__.py
186
188
  piccolo/testing/model_builder.py
187
189
  piccolo/testing/random_builder.py
@@ -203,8 +205,6 @@ piccolo/utils/graphlib/__init__.py
203
205
  piccolo/utils/graphlib/_graphlib.py
204
206
  profiling/__init__.py
205
207
  profiling/run_profile.py
206
- tests/test_main.py
207
- tests/test_schema.py
208
208
  tests/apps/__init__.py
209
209
  tests/apps/app/__init__.py
210
210
  tests/apps/app/commands/__init__.py
@@ -325,6 +325,8 @@ tests/query/functions/test_type_conversion.py
325
325
  tests/query/mixins/__init__.py
326
326
  tests/query/mixins/test_columns_delegate.py
327
327
  tests/query/mixins/test_order_by_delegate.py
328
+ tests/query/operators/__init__.py
329
+ tests/query/operators/test_json.py
328
330
  tests/table/__init__.py
329
331
  tests/table/test_all_columns.py
330
332
  tests/table/test_alter.py
@@ -1,2 +1,3 @@
1
1
  [console_scripts]
2
2
  piccolo = piccolo.main:main
3
+
@@ -9,7 +9,7 @@ pydantic[email]==2.*
9
9
  [all]
10
10
  orjson>=3.5.1
11
11
  ipython
12
- asyncpg>=0.21.0
12
+ asyncpg>=0.30.0
13
13
  aiosqlite>=0.16.0
14
14
 
15
15
  [all:sys_platform != "win32"]
@@ -22,7 +22,7 @@ orjson>=3.5.1
22
22
  ipython
23
23
 
24
24
  [postgres]
25
- asyncpg>=0.21.0
25
+ asyncpg>=0.30.0
26
26
 
27
27
  [sqlite]
28
28
  aiosqlite>=0.16.0
@@ -58,7 +58,7 @@ setup(
58
58
  long_description_content_type="text/markdown",
59
59
  author="Daniel Townsend",
60
60
  author_email="dan@dantownsend.co.uk",
61
- python_requires=">=3.8.0",
61
+ python_requires=">=3.9.0",
62
62
  url="https://github.com/piccolo-orm/piccolo",
63
63
  packages=find_packages(exclude=("tests",)),
64
64
  package_data={
@@ -84,11 +84,11 @@ setup(
84
84
  "License :: OSI Approved :: MIT License",
85
85
  "Programming Language :: Python",
86
86
  "Programming Language :: Python :: 3",
87
- "Programming Language :: Python :: 3.8",
88
87
  "Programming Language :: Python :: 3.9",
89
88
  "Programming Language :: Python :: 3.10",
90
89
  "Programming Language :: Python :: 3.11",
91
90
  "Programming Language :: Python :: 3.12",
91
+ "Programming Language :: Python :: 3.13",
92
92
  "Programming Language :: Python :: Implementation :: CPython",
93
93
  "Framework :: AsyncIO",
94
94
  "Typing :: Typed",