piccolo 1.4.2__py3-none-any.whl → 1.5.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (35) hide show
  1. piccolo/__init__.py +1 -1
  2. piccolo/apps/asgi/commands/new.py +1 -0
  3. piccolo/apps/asgi/commands/templates/app/_lilya_app.py.jinja +45 -0
  4. piccolo/apps/asgi/commands/templates/app/app.py.jinja +2 -0
  5. piccolo/apps/asgi/commands/templates/app/home/_lilya_endpoints.py.jinja +21 -0
  6. piccolo/apps/asgi/commands/templates/app/home/endpoints.py.jinja +2 -0
  7. piccolo/apps/asgi/commands/templates/app/home/templates/home.html.jinja_raw +5 -0
  8. piccolo/apps/migrations/auto/migration_manager.py +9 -9
  9. piccolo/apps/migrations/auto/serialisation.py +2 -4
  10. piccolo/apps/migrations/commands/backwards.py +9 -7
  11. piccolo/apps/migrations/commands/base.py +3 -3
  12. piccolo/apps/migrations/commands/forwards.py +3 -3
  13. piccolo/apps/playground/commands/run.py +1 -0
  14. piccolo/apps/user/tables.py +1 -0
  15. piccolo/columns/base.py +5 -3
  16. piccolo/columns/column_types.py +97 -116
  17. piccolo/columns/reference.py +1 -0
  18. piccolo/conf/apps.py +1 -2
  19. piccolo/query/methods/objects.py +8 -8
  20. piccolo/query/methods/select.py +4 -8
  21. piccolo/query/mixins.py +3 -3
  22. piccolo/query/proxy.py +3 -2
  23. piccolo/table.py +19 -13
  24. piccolo/utils/pydantic.py +6 -0
  25. {piccolo-1.4.2.dist-info → piccolo-1.5.1.dist-info}/METADATA +2 -2
  26. {piccolo-1.4.2.dist-info → piccolo-1.5.1.dist-info}/RECORD +35 -33
  27. tests/columns/test_array.py +22 -0
  28. tests/columns/test_reference.py +1 -0
  29. tests/conf/example.py +1 -0
  30. tests/table/test_metaclass.py +12 -0
  31. tests/utils/test_pydantic.py +28 -0
  32. {piccolo-1.4.2.dist-info → piccolo-1.5.1.dist-info}/LICENSE +0 -0
  33. {piccolo-1.4.2.dist-info → piccolo-1.5.1.dist-info}/WHEEL +0 -0
  34. {piccolo-1.4.2.dist-info → piccolo-1.5.1.dist-info}/entry_points.txt +0 -0
  35. {piccolo-1.4.2.dist-info → piccolo-1.5.1.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: piccolo
3
- Version: 1.4.2
3
+ Version: 1.5.1
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
@@ -144,7 +144,7 @@ Let Piccolo scaffold you an ASGI web app, using Piccolo as the ORM:
144
144
  piccolo asgi new
145
145
  ```
146
146
 
147
- [Starlette](https://www.starlette.io/), [FastAPI](https://fastapi.tiangolo.com/), [BlackSheep](https://www.neoteroi.dev/blacksheep/) and [Litestar](https://litestar.dev/) are currently supported.
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.
148
148
 
149
149
  ## Are you a Django user?
150
150
 
@@ -1,10 +1,10 @@
1
- piccolo/__init__.py,sha256=6TgXAJQx6V_bN7SerwQaBWi0io-WaFZnc73E9eZ4H_w,22
1
+ piccolo/__init__.py,sha256=fhNN-7ULy_9pNKoacDRvSuTI6i1H6WO1D2dUk7PEiqQ,22
2
2
  piccolo/custom_types.py,sha256=7HMQAze-5mieNLfbQ5QgbRQgR2abR7ol0qehv2SqROY,604
3
3
  piccolo/main.py,sha256=1VsFV67FWTUikPTysp64Fmgd9QBVa_9wcwKfwj2UCEA,5117
4
4
  piccolo/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  piccolo/querystring.py,sha256=YZkenGtG4mVSUdM7-zZXedxgIzXOnNOZf16AIqMr2n0,5863
6
6
  piccolo/schema.py,sha256=aWPuZxEulgBRD5NTqKN-RAZchxu-PoIrn0iFrWGZuq4,7731
7
- piccolo/table.py,sha256=YzBdMGhh4MXQ7gD6a89jXRxPe1Ce0qIcl_Ct_ffumdc,49732
7
+ piccolo/table.py,sha256=w582fj4V66e-EYbF5PPO4TWYCOdIzzylPsc4rNWhPEs,50001
8
8
  piccolo/table_reflection.py,sha256=jrN1nHerDJ4tU09GtNN3hz7ap-7rXnSUjljFO6LB2H0,7094
9
9
  piccolo/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  piccolo/apps/app/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -17,14 +17,15 @@ piccolo/apps/app/commands/templates/tables.py.jinja,sha256=revzdrvDDwe78VedBKz0z
17
17
  piccolo/apps/asgi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
18
18
  piccolo/apps/asgi/piccolo_app.py,sha256=7VUvqQJbB-ScO0A62S6MiJmQL9F5DS-SdlqlDLbAblE,217
19
19
  piccolo/apps/asgi/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
20
- piccolo/apps/asgi/commands/new.py,sha256=vZHSI2Pyh9cnVKbjPIiXEVFJ4JWfO-iBOCwvJSfPJyw,4206
20
+ piccolo/apps/asgi/commands/new.py,sha256=ZyYgwpBXb0t-0KQraeja6Y9ANjGEdZCXpu9bmm7_cPc,4230
21
21
  piccolo/apps/asgi/commands/templates/app/README.md.jinja,sha256=As3gNEZt9qcRmTVkjCzNtXJ8r4-3g0fCSe7Q-P39ezI,214
22
22
  piccolo/apps/asgi/commands/templates/app/_blacksheep_app.py.jinja,sha256=bgAGe0a9nWk0LAqK3VNDhPcKGqg0z8V-eIX2YmMoZLk,3117
23
23
  piccolo/apps/asgi/commands/templates/app/_esmerald_app.py.jinja,sha256=S-oYY6OFhwJA8PEYnrklQUkqtot3aXTmd7QGrW8Ufn4,2670
24
24
  piccolo/apps/asgi/commands/templates/app/_fastapi_app.py.jinja,sha256=cCmRVAN8gw6zfHBcLI_NxapwN7LGM5QSXM7K94imDh8,2436
25
+ piccolo/apps/asgi/commands/templates/app/_lilya_app.py.jinja,sha256=8rV1p-POGHkFIqvHvlE5wWwWPZweuSnMJhwreLMgLo8,1259
25
26
  piccolo/apps/asgi/commands/templates/app/_litestar_app.py.jinja,sha256=oMH5KXoEYhf9qgXNj2Kepc6prps1MQECufdUduaiwe4,2815
26
27
  piccolo/apps/asgi/commands/templates/app/_starlette_app.py.jinja,sha256=YvNUlJuTd4mj-pm3WQKbQq3w3x3VfDb_Wz6aQLUsORo,1271
27
- piccolo/apps/asgi/commands/templates/app/app.py.jinja,sha256=_ILj6Ap1AvAP55ZxrbNedTVsXr9klW3eh-GRf9WTQLs,389
28
+ piccolo/apps/asgi/commands/templates/app/app.py.jinja,sha256=gROY-LbHl8NtHDM_ntkI7Rjcbtg2ypDZ1FunBvpdjE4,458
28
29
  piccolo/apps/asgi/commands/templates/app/conftest.py.jinja,sha256=ZG1pRVMv3LhIfOsO3_08c_fF3EV4_EApuDHiIFFPJdk,497
29
30
  piccolo/apps/asgi/commands/templates/app/main.py.jinja,sha256=azwXyWZGkrIbZv5bZF_4Tvbly7AXkw5yFWGCHYImGeo,421
30
31
  piccolo/apps/asgi/commands/templates/app/piccolo_conf.py.jinja,sha256=f9Nb08_yipi0_mDUYrUvVoGCz7MRRS5QjCdUGBHN760,379
@@ -33,14 +34,15 @@ piccolo/apps/asgi/commands/templates/app/requirements.txt.jinja,sha256=w4FXnehMN
33
34
  piccolo/apps/asgi/commands/templates/app/home/__init__.py.jinja,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
34
35
  piccolo/apps/asgi/commands/templates/app/home/_blacksheep_endpoints.py.jinja,sha256=Rri_xzDkl87G5ME74qTxY25cwKIKufuzgkRsy__mNts,510
35
36
  piccolo/apps/asgi/commands/templates/app/home/_esmerald_endpoints.py.jinja,sha256=D_Slfc3IfTyBgq_VUIG5_AW5pVvvSqn-YGQspxMJNsE,499
37
+ piccolo/apps/asgi/commands/templates/app/home/_lilya_endpoints.py.jinja,sha256=nKSJ9VPTUTaLD9oDqAUseNuQkcPLBxShPAEfZK15rSE,490
36
38
  piccolo/apps/asgi/commands/templates/app/home/_litestar_endpoints.py.jinja,sha256=zXbYXDXFeeOCXmWBa_QK0kWGlBnv6T_A2jOHuvp9oCs,553
37
39
  piccolo/apps/asgi/commands/templates/app/home/_starlette_endpoints.py.jinja,sha256=KEjNEUKiZNBIWYAt9EgPHe4yCbkKLtlhaCBce9YI-RQ,498
38
- piccolo/apps/asgi/commands/templates/app/home/endpoints.py.jinja,sha256=G8Anx5v4Xszo0h0uCAduhWsXZDWluJvhMp0cr4kRezM,353
40
+ piccolo/apps/asgi/commands/templates/app/home/endpoints.py.jinja,sha256=Vc7pllhzKeNyj1XPzqdRH1AUpv7D4pooBIrUMt6gK7I,428
39
41
  piccolo/apps/asgi/commands/templates/app/home/piccolo_app.py.jinja,sha256=4gETiW9ukTNsomeJOvrRkqPbToZ_FU0b3LsNIaEYyP8,505
40
42
  piccolo/apps/asgi/commands/templates/app/home/tables.py.jinja,sha256=wk34RAsuoFn5iJ4OHlQzUqgatq6QB2G9tFE0BYkaers,197
41
43
  piccolo/apps/asgi/commands/templates/app/home/piccolo_migrations/README.md,sha256=ji6UOtHvzHX-eS_qhhKTN36ZXNZ7QwtjwjdE4Qgm35A,59
42
44
  piccolo/apps/asgi/commands/templates/app/home/templates/base.html.jinja_raw,sha256=3RqiNuyAap_P-xNK3uhNaQQ6rC365VzPmRqmmXSLO8o,451
43
- piccolo/apps/asgi/commands/templates/app/home/templates/home.html.jinja_raw,sha256=yfIE_m6qAEjY8v-W16p7gN1LPYrtyCVWictgyiuoqlM,2461
45
+ piccolo/apps/asgi/commands/templates/app/home/templates/home.html.jinja_raw,sha256=QJI0MY0hydMdqPg9YcW7XmmccJ1PyHvOSRIvMJX3ij0,2637
44
46
  piccolo/apps/asgi/commands/templates/app/static/favicon.ico,sha256=IvcgeJHObd9kj2mNIXkJdXYxMU8OaOymyYQWnWfbtHo,7406
45
47
  piccolo/apps/asgi/commands/templates/app/static/main.css,sha256=vudarPLglQ6NOgJiNeU2x0yQl0DiWScqb09QZv2wAzM,1056
46
48
  piccolo/apps/fixtures/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -58,24 +60,24 @@ piccolo/apps/migrations/piccolo_app.py,sha256=1EcS2ComBPCaMCC2C3WaPR_GqLwt3XiIJN
58
60
  piccolo/apps/migrations/tables.py,sha256=jqBnK-Rk545v1Eu6GaLHTVz7-uwBTUnz2m58OA-mxTc,799
59
61
  piccolo/apps/migrations/auto/__init__.py,sha256=5bgdh5EsROSvq4rrZAxpzmXiJNj5LJKwf06dxI2LZsc,191
60
62
  piccolo/apps/migrations/auto/diffable_table.py,sha256=FJ_D7FvL_vaThgIY-zFyW_kFmReOI12saM3DFcaAvfw,7058
61
- piccolo/apps/migrations/auto/migration_manager.py,sha256=TAuFgzcq17kIFNjcfmAyQTOux7ysglNacOH4oZ9JMRE,35090
63
+ piccolo/apps/migrations/auto/migration_manager.py,sha256=tnbQaB46v3bXVSVTkZUExH2KzknZfgM427j4jg68xC8,35096
62
64
  piccolo/apps/migrations/auto/operations.py,sha256=169IrCLR3FtTRxHsEHNg6dTG45lcEM7Aoyy3SwgX_hU,1329
63
65
  piccolo/apps/migrations/auto/schema_differ.py,sha256=VA1rK-_wNSdyZZgfA3ZOlpVGJCcvLyouKtT9k2YKhiA,26266
64
66
  piccolo/apps/migrations/auto/schema_snapshot.py,sha256=ZqUg4NpChOeoACKF2gkhqsz1BW3wOWFnzJCccq-CNNQ,4719
65
- piccolo/apps/migrations/auto/serialisation.py,sha256=jBVK-u1aF_WhcQO7T0nZ5hfsvs0YwmeaCG-JCecsPZw,23943
67
+ piccolo/apps/migrations/auto/serialisation.py,sha256=nlomUL-TwD_7Gjb8ttRZfIwn9VbNoEmRmD3LElP5e0k,23927
66
68
  piccolo/apps/migrations/auto/serialisation_legacy.py,sha256=Edqx3YL0RGTsTHLNkHRNnXdfX6ut1h65U7UX2cI_BkE,1752
67
69
  piccolo/apps/migrations/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
68
- piccolo/apps/migrations/commands/backwards.py,sha256=XKqmLLa9Q3vRWwU5dKi-g3IQfU_cACPQvIDzdhol7gY,6573
69
- piccolo/apps/migrations/commands/base.py,sha256=67f0lfaawVOH3q_NzypHiIO1rOfADzqpt0AEfAbnSjw,4473
70
+ piccolo/apps/migrations/commands/backwards.py,sha256=i96eR6_P7IJQDtbaPmIleDg0nCoZubP2P2hNOLtbbT8,6615
71
+ piccolo/apps/migrations/commands/base.py,sha256=v-uEfoSNpiHJivBO1YUc3yyDqwXyADIl53xNo_LnRZM,4475
70
72
  piccolo/apps/migrations/commands/check.py,sha256=VdaIjs3FFy_nwN6kjGKMoVQ4zp1Bdoej756UJBj79Pk,3982
71
73
  piccolo/apps/migrations/commands/clean.py,sha256=XD4xqtqkL5ZqnwIghzo5Yo2UnBAeznBVyrTiw6SnaCQ,2855
72
- piccolo/apps/migrations/commands/forwards.py,sha256=YniKDx8rgdYJ6TmEfPCYfuwJg5l9RqG_ZKkG5OSP2_M,5372
74
+ piccolo/apps/migrations/commands/forwards.py,sha256=WLRgIZ19pShsuk8dk4emJkxDz_lRVI27TBZqKjHXS2A,5374
73
75
  piccolo/apps/migrations/commands/new.py,sha256=WL8skWg-ZPOfkQHPgDbq388qdpvvhTZaXV6y1tGzEoc,7892
74
76
  piccolo/apps/migrations/commands/templates/migration.py.jinja,sha256=wMC8RTIcQj3mjZh3FhuxuIfsqftZ5ivraO9fg-H6fbI,681
75
77
  piccolo/apps/playground/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
76
78
  piccolo/apps/playground/piccolo_app.py,sha256=zs6nGxt-lgUF8nEwI0uDTNZDKQqjZaNDH8le5RqrMNE,222
77
79
  piccolo/apps/playground/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
- piccolo/apps/playground/commands/run.py,sha256=PaY3ls4C0j0TnVSTY85abv6e2SuTsII0H33HlkXlZzc,7350
80
+ piccolo/apps/playground/commands/run.py,sha256=ajXYy2UqU47QGQ3vmXbSvpwR8h7kbMV8W4QFCLJBHhE,7351
79
81
  piccolo/apps/project/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
80
82
  piccolo/apps/project/piccolo_app.py,sha256=mT3O0m3QcCfS0oOr3jt0QZ9TX6gUavGPjJeNn2C_fdM,220
81
83
  piccolo/apps/project/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -102,7 +104,7 @@ piccolo/apps/tester/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NM
102
104
  piccolo/apps/tester/commands/run.py,sha256=phFxim2ogARAviW-YT11y9F-L5SJxSioAIepUzQeAWU,2431
103
105
  piccolo/apps/user/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
104
106
  piccolo/apps/user/piccolo_app.py,sha256=yfw1J9FEnBWdgGdUdNMnqp06Wzm5_s9TO2r5KLchrLM,842
105
- piccolo/apps/user/tables.py,sha256=C23Ty79HwP9NdH3a-Dlav60KUvNm_B1vXK_ASfQdEEY,8953
107
+ piccolo/apps/user/tables.py,sha256=ZSXtOC9OANCKC6cq5ZCj3CqRwraibFDwtf1VVIBfmKQ,8954
106
108
  piccolo/apps/user/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
109
  piccolo/apps/user/commands/change_password.py,sha256=F7mlhtTUY7uENSK8vds5oibIDJTz7QBQdrl7EB-lF9Q,649
108
110
  piccolo/apps/user/commands/change_permissions.py,sha256=LScsKJUMJqIi54cZ1SgS9Wb356KB0t7smu94FDXLfVk,1463
@@ -113,14 +115,14 @@ piccolo/apps/user/piccolo_migrations/2020-06-11T21-38-55.py,sha256=JG_LFPrEljnSE
113
115
  piccolo/apps/user/piccolo_migrations/2021-04-30T16-14-15.py,sha256=Y_Dj4ROSxjnPsRDqcnpWeyk8UpF8c80T08_O2uq-GoA,1219
114
116
  piccolo/apps/user/piccolo_migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
115
117
  piccolo/columns/__init__.py,sha256=OYhO_n9anMiU9nL-K6ATq9FhAtm8RyMpqYQ7fTVbhxI,1120
116
- piccolo/columns/base.py,sha256=iMAEqKpnvzqCDuKQLPOl8h0YcwtHob_u28NuLxiMvWs,31564
118
+ piccolo/columns/base.py,sha256=7ZcqdJc1GuqmVPDHJlEkCHnEIKkXms0BlkS4fLIx80E,31620
117
119
  piccolo/columns/choices.py,sha256=-HNQuk9vMmVZIPZ5PMeXGTfr23o4nzKPSAkvcG1k0y8,723
118
- piccolo/columns/column_types.py,sha256=LbpxGNHhcynOrlQZ0kw6_3GCqMU5QWsOhDZEkWcLlvA,80395
120
+ piccolo/columns/column_types.py,sha256=REqafGESK3Zu8YbuCHM2v3R_KC-2OjGZs7D7VppH2KM,81013
119
121
  piccolo/columns/combination.py,sha256=vMXC2dfY7pvnCFhsT71XFVyb4gdQzfRsCMaiduu04Ss,6900
120
122
  piccolo/columns/indexes.py,sha256=NfNok3v_791jgDlN28KmhP9ZCjl6031BXmjxV3ovXJk,372
121
123
  piccolo/columns/m2m.py,sha256=BtcMM2FG7B442DifrbPxCNh2Wa4ZOQ-4ezEWYD0trVg,14365
122
124
  piccolo/columns/readable.py,sha256=vKIEc_vWxKo4GSPOeJZz-q5a1i4DNaoBcCNG_i_2OSA,1485
123
- piccolo/columns/reference.py,sha256=-e1nu-yWeqiyJtDqG0cPVVVrLai6ClEAYAa8c6a0hnA,3573
125
+ piccolo/columns/reference.py,sha256=FqE9rpMBMwNNkKXR3Wi4ce-fyT2Vh4KM8YpdC21s6gg,3574
124
126
  piccolo/columns/defaults/__init__.py,sha256=7hpB13baEJgc1zbZjRKDFr-5hltxM2VGj8KnKfOiS8c,145
125
127
  piccolo/columns/defaults/base.py,sha256=kxh5jgU9G1zpcncmqISZgwMeHnNPBgNCvuqPPQYO_zs,1854
126
128
  piccolo/columns/defaults/date.py,sha256=7tW_tTfsnzU8LXn9Qkrtk8OPyi80SESa-dY_UMlNTp0,2455
@@ -135,7 +137,7 @@ piccolo/columns/operators/comparison.py,sha256=7QyBNQypMP5uG--Vnq3wI1tuAJ0pNO3hG
135
137
  piccolo/columns/operators/math.py,sha256=knsUZzYOVdsFn3bTS0XC0ZzfNObeJcMvZ8Q_QwmGxjU,325
136
138
  piccolo/columns/operators/string.py,sha256=M5ifxHP-ttJaE_wYCl23W5sJof4i5S5_QDIOv34VxDM,142
137
139
  piccolo/conf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
138
- piccolo/conf/apps.py,sha256=SQPVQc67-ZM9mSGWJ5uAlenP59FthZdQYTkocQEzZ7Q,18912
140
+ piccolo/conf/apps.py,sha256=CtyysnDNkf9ar7Zue12vrulm6npBuxe5jo2AvNdLoQk,18904
139
141
  piccolo/engine/__init__.py,sha256=Z0QR5NAA9jTFenY7pEJv1C8jZXBaFZojBUR3z3nx1cw,283
140
142
  piccolo/engine/base.py,sha256=48swk-AFcsRjFUichSwX6HCagDMVbP0mFB1ueQCXO-o,4881
141
143
  piccolo/engine/cockroach.py,sha256=7anXR3JPpGuR6-OpDLHM0FxKZhjuTvbRUuZV6fv9lXU,1556
@@ -145,8 +147,8 @@ piccolo/engine/postgres.py,sha256=zUY6x52QrZ8waiqEUuqlVFiXyzAXrsFi3PY5EJnv3DM,18
145
147
  piccolo/engine/sqlite.py,sha256=h5RrrDqy-28ck8L9SkLURfZWFSTcVdojTLDt1w8cTgk,22099
146
148
  piccolo/query/__init__.py,sha256=1R0cRo8xoycUTFbSZzmW5rndH-wW4DDqsWJQgTELiWU,683
147
149
  piccolo/query/base.py,sha256=dcYkEy_fhOUoiRn7u7lVsoWUKe90Z7jDu5zir1teRB8,15397
148
- piccolo/query/mixins.py,sha256=QpSlHBSOSkwBuKAMrfS_HODitpIli4e79bZPkZwPSas,21637
149
- piccolo/query/proxy.py,sha256=Hg5S6tp1EiKD899eYdDKHscFYucHdKtL3YC2GTcL2Jk,1833
150
+ piccolo/query/mixins.py,sha256=3oFksbYSaNGz_F7XJRhTTMHK4Pdf8-FUfDMpdy7rsNM,21639
151
+ piccolo/query/proxy.py,sha256=Yq4jNc7IWJvdeO3u7_7iPyRy2WhVj8KsIUcIYHBIi9Q,1839
150
152
  piccolo/query/methods/__init__.py,sha256=_PfGUdOd6AsKq1sqXeZUHhESHE-e1cNpwFr8Lyz7QoY,421
151
153
  piccolo/query/methods/alter.py,sha256=AI9YkJeip2EitrWJN_TDExXhA8HGAG3XuDz1NR-KirQ,16728
152
154
  piccolo/query/methods/count.py,sha256=vSwn52IG0wlhPC6L-jYVlCsD4BPb2EkGHGwWn7z7gH4,1717
@@ -157,10 +159,10 @@ piccolo/query/methods/drop_index.py,sha256=SOX5wfm-Tbb5TrN6kaLRVHUWdEhyrmCQwF33J
157
159
  piccolo/query/methods/exists.py,sha256=LAeWpGKEMYZJeNGEcxbucxWDxAjn84jduNz2ZjzukPc,1181
158
160
  piccolo/query/methods/indexes.py,sha256=J-QUqaBJwpgahskUH0Cu0Mq7zEKcfVAtDsUVIVX-C4c,943
159
161
  piccolo/query/methods/insert.py,sha256=ssLJ_wn08KnOwwr7t-VILyn1P4hrvM63CfPIcAJWT5k,4701
160
- piccolo/query/methods/objects.py,sha256=MUAK1pbpoelS-DKIrrhlFByqj5G8kHfHoLprwbHhChk,11685
162
+ piccolo/query/methods/objects.py,sha256=4QFyK03sa0RXIvNCr8cl2RpvpxuO6DVeJ1vxGNwBNLM,11705
161
163
  piccolo/query/methods/raw.py,sha256=VhYpCB52mZk4zqFTsqK5CHKTDGskUjISXTBV7UjohmA,600
162
164
  piccolo/query/methods/refresh.py,sha256=P1Eo_HYU_L7kcGM_cvDDgyLi1boCXY7Pc4tv_eDAzvc,2769
163
- piccolo/query/methods/select.py,sha256=amI9l7OZ0CjvrFsLCE0i9sUuv24s0KNhihrFS0OjR44,26915
165
+ piccolo/query/methods/select.py,sha256=qP-EnhdcuQOmOQ_ADnnYvA4OFSnmU7avCiQ8yoP5OHs,26883
164
166
  piccolo/query/methods/table_exists.py,sha256=0yb3n6Jd2ovSBWlZ-gl00K4E7Jnbj7J8qAAX5d7hvNk,1259
165
167
  piccolo/query/methods/update.py,sha256=K0sq7XlIDr2mw5CwCvD4s9-jLcpYG6MI2hGScRGmdPc,3683
166
168
  piccolo/testing/__init__.py,sha256=pRFSqRInfx95AakOq54atmvqoB-ue073q2aR8u8zR40,83
@@ -174,7 +176,7 @@ piccolo/utils/list.py,sha256=4hPGiksJWxL226W7gyYBcqVGgMTgVa2jP8zvalc3zw8,1541
174
176
  piccolo/utils/naming.py,sha256=d7_mMscguK799RMhxFDifRgn8Ply5wiy2k1KkP22WUs,276
175
177
  piccolo/utils/objects.py,sha256=NjhfH57Q__1xSf4gvLtZFle3Lp0PiqPR7AcsVhkA3MY,1631
176
178
  piccolo/utils/printing.py,sha256=5VWNSfOrIGPh1VM-7fd4K18RGCYk0FQ5o-D4aLhzXZE,1748
177
- piccolo/utils/pydantic.py,sha256=6eRxtOVJSL-KZGy_eyKkgakKVbDocYaMHYyzvbMhZ5I,12054
179
+ piccolo/utils/pydantic.py,sha256=_8jzsZQioBIziriMJauma2Fto8jhP0qoi4mob2LM-NA,12328
178
180
  piccolo/utils/repr.py,sha256=K3w-TAP9WPx8tbAIB2XDab_C4PHsPrB9TzwWfOHa4cc,787
179
181
  piccolo/utils/sql_values.py,sha256=pGXmVTw6pWr8q7QA4xs7NiKSwjBzhN--3HXVjQv2SQQ,1749
180
182
  piccolo/utils/sync.py,sha256=j9Abkxn5HHS6HyvfpMzb1zV_teTkFHVhaIxu9rrSwSU,819
@@ -235,7 +237,7 @@ tests/apps/user/commands/test_change_permissions.py,sha256=uVKEiT1EKot3VA2TDETdQ
235
237
  tests/apps/user/commands/test_create.py,sha256=iJ3Tti62rHwvdcTwNXrc5JPam6vR1qxKRdMN456vm3o,2250
236
238
  tests/apps/user/commands/test_list.py,sha256=ipPfGdW6fH7q-Jc7JcYUvlioGmH9GQU0WImZGC2m-XQ,2840
237
239
  tests/columns/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
238
- tests/columns/test_array.py,sha256=XMgjRWsfd7ZHcK1kFchSDCu_L4hF-eMPsOvQrAzz1b0,5840
240
+ tests/columns/test_array.py,sha256=R6dnUBGcMHi5pVhczI4ydWpXsu2FqRASu6KtkhDWfZo,6660
239
241
  tests/columns/test_base.py,sha256=CTqCNcrqAJTjLXe3MCZgTczrmB3jcVRcOpU4FilpLoQ,3918
240
242
  tests/columns/test_bigint.py,sha256=a0B4y1H02ww5qaW574X2lyenbY6o29ztOhiaqybPC0c,1149
241
243
  tests/columns/test_boolean.py,sha256=kDESp6FnRtSZhuqIu0dBRwKMSpS5TFbbs3sz2MyZSs8,1720
@@ -253,7 +255,7 @@ tests/columns/test_numeric.py,sha256=ukh7rW3uAOQmLV9m36uyHcwC9te1SLKwUrh4KDXIEbc
253
255
  tests/columns/test_primary_key.py,sha256=6kKYs5qxIe0dJ7FQIFa-7c4LAsPQtiZbBviUiVoaTd0,5572
254
256
  tests/columns/test_readable.py,sha256=kMuge5X_PfVeE1PjStwEHY-W0zwrxVBXV0CiW2Gw7kE,802
255
257
  tests/columns/test_real.py,sha256=iM49DhFS2HaDX88NgelJumT-FPqqnVP84Z2m_KfnnQQ,606
256
- tests/columns/test_reference.py,sha256=89pAOQtATpop3YUv80wo_5GNANU2k-28516V66n3hQk,1507
258
+ tests/columns/test_reference.py,sha256=I_gjICtJ7bE2cBrmCv-kz25AvI922A3pizRVIhHpzSE,1508
257
259
  tests/columns/test_reserved_column_names.py,sha256=NxkrZevxb1GV2fYoWKUVPscCBP39qgpiTyqfBxc8wag,1514
258
260
  tests/columns/test_smallint.py,sha256=5pknplEbg6o03xJyrcYBRuV5qarOp3TAfR3OKobiaqw,1115
259
261
  tests/columns/test_time.py,sha256=PfN-1x0eIPu2ULljbhIVJdyrcGXLOUQww_NOSHZXdZI,1810
@@ -266,7 +268,7 @@ tests/columns/m2m/base.py,sha256=uH92ECQuY5AjpQXPySwrlruZPZzB4LH2V2FUSXmHRLQ,145
266
268
  tests/columns/m2m/test_m2m.py,sha256=LtNsHQ8xAzBFLiZVZhWEB56zu25FnaWtzJ62FZH3heI,12647
267
269
  tests/columns/m2m/test_m2m_schema.py,sha256=oxu7eAjFFpDjnq9Eq-5OTNmlnsEIMFWx18OItfpVs-s,339
268
270
  tests/conf/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
269
- tests/conf/example.py,sha256=kOa8EUzxG-iP-BGJuJv3-mqyvr1vW7XLVMeuCXzypo8,346
271
+ tests/conf/example.py,sha256=K8sTttLpEac8rQlOLDY500IGkHj3P3NoyFbCMnT1EqY,347
270
272
  tests/conf/test_apps.py,sha256=PrU4SRY0HvADGre5pMpALGmbWxPnydBug5ejSYf1e88,8461
271
273
  tests/engine/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
272
274
  tests/engine/test_extra_nodes.py,sha256=xW5gflHzM6ou26DqRSAZoaAbYVzF1IuMkW3vzNmB954,1298
@@ -314,7 +316,7 @@ tests/table/test_inheritance.py,sha256=AAkhEhhixVGweGe7ckzj-yypW-cj6D88Cca4-pjkw
314
316
  tests/table/test_insert.py,sha256=-xaoL6wTNB6UImiCk9NQKQ-B21l96H-9tN2_iEgXu5A,13695
315
317
  tests/table/test_join.py,sha256=Ukgvjc8NweBGHM7fVFytGQYG9P9thRaMeEvWXYs2Qes,15910
316
318
  tests/table/test_join_on.py,sha256=cdAV39JwHi0kIas2p9cw7mcsUv6mKLZD--_SUA0zLfI,2771
317
- tests/table/test_metaclass.py,sha256=7b_DSHZcgCToKLkVrMZExcPKxgPnkdaJpermDCm-NT0,3808
319
+ tests/table/test_metaclass.py,sha256=pMv0PHh-2a9p74bweQXCXnq1OFsJ7Gk0uWRFdCTMf58,4123
318
320
  tests/table/test_objects.py,sha256=bir86ks-Ngy8x9Eu9bekOrh6twBYdEkIgTdbBWY6x9s,8187
319
321
  tests/table/test_output.py,sha256=_9DydB4bt8GOtzgx7xYrAs6KG8EwRTcZ45EaAHMdEBk,3049
320
322
  tests/table/test_raw.py,sha256=9PTvYngQi41nYd5lKzkJdTqsEcwrdOXcvZjq-W26CwQ,1683
@@ -343,14 +345,14 @@ tests/utils/test_lazy_loader.py,sha256=wDWhlV2IR6RuTaYCI5eWesz465WqIscYEJjwWnPrh
343
345
  tests/utils/test_list.py,sha256=25UoStmrYS_JDOKsXYqTDc3FUkOe3dUcy51r0I6grK0,769
344
346
  tests/utils/test_naming.py,sha256=ncJdzkMHSVFo2YQLkRhY93WJ8_W_j2pW9tHHL_ZgQcs,661
345
347
  tests/utils/test_printing.py,sha256=W8pQyWX2pEkLdMYWxtibFXJnI4MVsb6XMOTo3DZUuZc,668
346
- tests/utils/test_pydantic.py,sha256=wOCGxEQnL32OypOpvqS-AHGw_gqR85osG0pq4Glyk-U,25899
348
+ tests/utils/test_pydantic.py,sha256=PU7y34fZNGagJvw78PV4AJ-4SrI6rRxevjIJxIkZE-k,26623
347
349
  tests/utils/test_sql_values.py,sha256=vzxRmy16FfLZPH-sAQexBvsF9MXB8n4smr14qoEOS5E,2535
348
350
  tests/utils/test_sync.py,sha256=9ytVo56y2vPQePvTeIi9lHIouEhWJbodl1TmzkGFrSo,799
349
351
  tests/utils/test_table_reflection.py,sha256=SIzuat-IpcVj1GCFyOWKShI8YkhdOPPFH7qVrvfyPNE,3794
350
352
  tests/utils/test_warnings.py,sha256=NvSC_cvJ6uZcwAGf1m-hLzETXCqprXELL8zg3TNLVMw,269
351
- piccolo-1.4.2.dist-info/LICENSE,sha256=zFIpi-16uIJ420UMIG75NU0JbDBykvrdnXcj5U_EYBI,1059
352
- piccolo-1.4.2.dist-info/METADATA,sha256=ApmzhoQ6RSrzMzvWrNyrgjqBGtpImJ7HWSGsnHJRKjc,5114
353
- piccolo-1.4.2.dist-info/WHEEL,sha256=00yskusixUoUt5ob_CiUp6LsnN5lqzTJpoqOFg_FVIc,92
354
- piccolo-1.4.2.dist-info/entry_points.txt,sha256=SJPHET4Fi1bN5F3WqcKkv9SClK3_F1I7m4eQjk6AFh0,46
355
- piccolo-1.4.2.dist-info/top_level.txt,sha256=-SR74VGbk43VoPy1HH-mHm97yoGukLK87HE5kdBW6qM,24
356
- piccolo-1.4.2.dist-info/RECORD,,
353
+ piccolo-1.5.1.dist-info/LICENSE,sha256=zFIpi-16uIJ420UMIG75NU0JbDBykvrdnXcj5U_EYBI,1059
354
+ piccolo-1.5.1.dist-info/METADATA,sha256=yWYssQ8mhB4JiWPgB5P4td5YAvYoqZX2l11bfp97LLI,5177
355
+ piccolo-1.5.1.dist-info/WHEEL,sha256=00yskusixUoUt5ob_CiUp6LsnN5lqzTJpoqOFg_FVIc,92
356
+ piccolo-1.5.1.dist-info/entry_points.txt,sha256=SJPHET4Fi1bN5F3WqcKkv9SClK3_F1I7m4eQjk6AFh0,46
357
+ piccolo-1.5.1.dist-info/top_level.txt,sha256=-SR74VGbk43VoPy1HH-mHm97yoGukLK87HE5kdBW6qM,24
358
+ piccolo-1.5.1.dist-info/RECORD,,
@@ -200,3 +200,25 @@ class TestNestedArray(TestCase):
200
200
  row = NestedArrayTable.objects().first().run_sync()
201
201
  assert row is not None
202
202
  self.assertEqual(row.value, [[1, 2, 3], [4, 5, 6]])
203
+
204
+
205
+ class TestGetDimensions(TestCase):
206
+ def test_get_dimensions(self):
207
+ """
208
+ Make sure that `_get_dimensions` returns the correct value.
209
+ """
210
+ self.assertEqual(Array(Integer())._get_dimensions(), 1)
211
+ self.assertEqual(Array(Array(Integer()))._get_dimensions(), 2)
212
+ self.assertEqual(Array(Array(Array(Integer())))._get_dimensions(), 3)
213
+
214
+
215
+ class TestGetInnerValueType(TestCase):
216
+ def test_get_inner_value_type(self):
217
+ """
218
+ Make sure that `_get_inner_value_type` returns the correct base type.
219
+ """
220
+ self.assertEqual(Array(Integer())._get_inner_value_type(), int)
221
+ self.assertEqual(Array(Array(Integer()))._get_inner_value_type(), int)
222
+ self.assertEqual(
223
+ Array(Array(Array(Integer())))._get_inner_value_type(), int
224
+ )
@@ -2,6 +2,7 @@
2
2
  Most of the tests for piccolo/columns/reference.py are covered in
3
3
  piccolo/columns/test_foreignkey.py
4
4
  """
5
+
5
6
  from unittest import TestCase
6
7
 
7
8
  from piccolo.columns.reference import LazyTableReference
tests/conf/example.py CHANGED
@@ -2,6 +2,7 @@
2
2
  This file is used by test_apps.py to make sure we can exclude imported
3
3
  ``Table`` subclasses when using ``table_finder``.
4
4
  """
5
+
5
6
  from piccolo.apps.user.tables import BaseUser
6
7
  from piccolo.columns.column_types import ForeignKey, Varchar
7
8
  from piccolo.table import Table
@@ -5,6 +5,7 @@ from piccolo.columns import Secret
5
5
  from piccolo.columns.column_types import (
6
6
  JSON,
7
7
  JSONB,
8
+ Array,
8
9
  Email,
9
10
  ForeignKey,
10
11
  Varchar,
@@ -132,6 +133,17 @@ class TestMetaClass(TestCase):
132
133
 
133
134
  self.assertEqual(MyTable._meta.email_columns, [MyTable.column_a])
134
135
 
136
+ def test_arry_columns(self):
137
+ """
138
+ Make sure ``TableMeta.array_columns`` are setup correctly.
139
+ """
140
+
141
+ class MyTable(Table):
142
+ column_a = Array(Varchar())
143
+ column_b = Varchar()
144
+
145
+ self.assertEqual(MyTable._meta.array_columns, [MyTable.column_a])
146
+
135
147
  def test_id_column(self):
136
148
  """
137
149
  Makes sure an id column is added.
@@ -329,6 +329,34 @@ class TestTableHelpText(TestCase):
329
329
  )
330
330
 
331
331
 
332
+ class TestUniqueColumn(TestCase):
333
+ def test_unique_column_true(self):
334
+ class Director(Table):
335
+ name = Varchar(unique=True)
336
+
337
+ pydantic_model = create_pydantic_model(table=Director)
338
+
339
+ self.assertEqual(
340
+ pydantic_model.model_json_schema()["properties"]["name"]["extra"][
341
+ "unique"
342
+ ],
343
+ True,
344
+ )
345
+
346
+ def test_unique_column_false(self):
347
+ class Director(Table):
348
+ name = Varchar()
349
+
350
+ pydantic_model = create_pydantic_model(table=Director)
351
+
352
+ self.assertEqual(
353
+ pydantic_model.model_json_schema()["properties"]["name"]["extra"][
354
+ "unique"
355
+ ],
356
+ False,
357
+ )
358
+
359
+
332
360
  class TestJSONColumn(TestCase):
333
361
  def test_default(self):
334
362
  class Movie(Table):