fastlifeweb 0.9.7__py3-none-any.whl → 0.11.0__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 (90) hide show
  1. fastlife/__init__.py +2 -2
  2. fastlife/config/__init__.py +13 -0
  3. fastlife/{configurator → config}/configurator.py +64 -41
  4. fastlife/{configurator → config}/registry.py +2 -10
  5. fastlife/{configurator → config}/settings.py +7 -3
  6. fastlife/middlewares/__init__.py +7 -0
  7. fastlife/middlewares/base.py +24 -0
  8. fastlife/middlewares/reverse_proxy/__init__.py +16 -0
  9. fastlife/middlewares/reverse_proxy/x_forwarded.py +1 -14
  10. fastlife/middlewares/session/__init__.py +16 -0
  11. fastlife/middlewares/session/middleware.py +6 -1
  12. fastlife/middlewares/session/serializer.py +21 -0
  13. fastlife/request/__init__.py +5 -0
  14. fastlife/request/{model_result.py → form.py} +21 -9
  15. fastlife/request/form_data.py +28 -3
  16. fastlife/request/request.py +18 -0
  17. fastlife/routing/__init__.py +7 -0
  18. fastlife/routing/route.py +45 -0
  19. fastlife/routing/router.py +12 -4
  20. fastlife/security/__init__.py +1 -0
  21. fastlife/security/csrf.py +29 -11
  22. fastlife/security/policy.py +6 -2
  23. fastlife/shared_utils/__init__.py +1 -0
  24. fastlife/shared_utils/infer.py +7 -0
  25. fastlife/shared_utils/resolver.py +10 -2
  26. fastlife/templates/A.jinja +33 -9
  27. fastlife/templates/Button.jinja +55 -32
  28. fastlife/templates/Checkbox.jinja +20 -6
  29. fastlife/templates/CsrfToken.jinja +4 -0
  30. fastlife/templates/Details.jinja +31 -3
  31. fastlife/templates/Form.jinja +45 -7
  32. fastlife/templates/H1.jinja +14 -1
  33. fastlife/templates/H2.jinja +14 -1
  34. fastlife/templates/H3.jinja +14 -1
  35. fastlife/templates/H4.jinja +14 -1
  36. fastlife/templates/H5.jinja +14 -1
  37. fastlife/templates/H6.jinja +14 -1
  38. fastlife/templates/Hidden.jinja +3 -3
  39. fastlife/templates/Input.jinja +21 -8
  40. fastlife/templates/Label.jinja +18 -2
  41. fastlife/templates/Option.jinja +14 -2
  42. fastlife/templates/P.jinja +14 -2
  43. fastlife/templates/Radio.jinja +34 -12
  44. fastlife/templates/Select.jinja +15 -4
  45. fastlife/templates/Summary.jinja +13 -2
  46. fastlife/templates/Table.jinja +12 -1
  47. fastlife/templates/Tbody.jinja +11 -1
  48. fastlife/templates/Td.jinja +12 -1
  49. fastlife/templates/Textarea.jinja +18 -0
  50. fastlife/templates/Tfoot.jinja +11 -1
  51. fastlife/templates/Th.jinja +12 -1
  52. fastlife/templates/Thead.jinja +11 -1
  53. fastlife/templates/Tr.jinja +11 -1
  54. fastlife/templates/pydantic_form/Boolean.jinja +3 -2
  55. fastlife/templates/pydantic_form/Checklist.jinja +3 -5
  56. fastlife/templates/pydantic_form/Dropdown.jinja +3 -2
  57. fastlife/templates/pydantic_form/Error.jinja +4 -3
  58. fastlife/templates/pydantic_form/Hidden.jinja +2 -1
  59. fastlife/templates/pydantic_form/Hint.jinja +2 -1
  60. fastlife/templates/pydantic_form/Model.jinja +16 -3
  61. fastlife/templates/pydantic_form/Sequence.jinja +15 -6
  62. fastlife/templates/pydantic_form/Text.jinja +2 -2
  63. fastlife/templates/pydantic_form/Textarea.jinja +32 -0
  64. fastlife/templates/pydantic_form/Union.jinja +7 -1
  65. fastlife/templates/pydantic_form/Widget.jinja +6 -3
  66. fastlife/templating/binding.py +18 -4
  67. fastlife/templating/renderer/__init__.py +3 -1
  68. fastlife/templating/renderer/abstract.py +21 -8
  69. fastlife/templating/renderer/constants.py +82 -0
  70. fastlife/templating/renderer/jinjax.py +269 -6
  71. fastlife/templating/renderer/widgets/base.py +43 -7
  72. fastlife/templating/renderer/widgets/boolean.py +21 -0
  73. fastlife/templating/renderer/widgets/checklist.py +23 -0
  74. fastlife/templating/renderer/widgets/dropdown.py +22 -2
  75. fastlife/templating/renderer/widgets/factory.py +100 -29
  76. fastlife/templating/renderer/widgets/hidden.py +16 -0
  77. fastlife/templating/renderer/widgets/model.py +7 -1
  78. fastlife/templating/renderer/widgets/sequence.py +8 -6
  79. fastlife/templating/renderer/widgets/text.py +80 -4
  80. fastlife/templating/renderer/widgets/union.py +25 -2
  81. fastlife/testing/testclient.py +3 -3
  82. fastlife/views/pydantic_form.py +2 -2
  83. {fastlifeweb-0.9.7.dist-info → fastlifeweb-0.11.0.dist-info}/METADATA +4 -9
  84. {fastlifeweb-0.9.7.dist-info → fastlifeweb-0.11.0.dist-info}/RECORD +86 -84
  85. fastlife/configurator/__init__.py +0 -4
  86. fastlife/configurator/base.py +0 -9
  87. fastlife/configurator/route_handler.py +0 -29
  88. fastlife/templates/__init__.py +0 -0
  89. {fastlifeweb-0.9.7.dist-info → fastlifeweb-0.11.0.dist-info}/LICENSE +0 -0
  90. {fastlifeweb-0.9.7.dist-info → fastlifeweb-0.11.0.dist-info}/WHEEL +0 -0
@@ -13,7 +13,7 @@ from fastapi.testclient import TestClient
13
13
  from multidict import MultiDict
14
14
  from starlette.types import ASGIApp
15
15
 
16
- from fastlife.configurator.settings import Settings
16
+ from fastlife.config.settings import Settings
17
17
  from fastlife.middlewares.session.serializer import AbsractSessionSerializer
18
18
  from fastlife.shared_utils.resolver import resolve
19
19
 
@@ -153,7 +153,7 @@ class Element:
153
153
 
154
154
  class WebForm:
155
155
  """
156
- Handle form.
156
+ Handle html form.
157
157
 
158
158
  Form are filled out and submit with methods and try to avoid invalid
159
159
  usage, such as selecting an option that don't exists is not possible here.
@@ -504,7 +504,7 @@ class WebTestClient:
504
504
 
505
505
  @property
506
506
  def cookies(self) -> Cookies:
507
- """HTTP Cookies"""
507
+ """HTTP Cookies."""
508
508
  return self.testclient.cookies
509
509
 
510
510
  @property
@@ -4,7 +4,7 @@ from fastapi import Query, Request, Response
4
4
  from pydantic.fields import FieldInfo
5
5
 
6
6
  from fastlife import Configurator, configure
7
- from fastlife.configurator.registry import Registry
7
+ from fastlife.config.registry import Registry
8
8
  from fastlife.shared_utils.resolver import resolve_extended
9
9
 
10
10
 
@@ -25,7 +25,7 @@ async def show_widget(
25
25
  if title:
26
26
  field = FieldInfo(title=title)
27
27
  data = reg.renderer(request).pydantic_form_field(
28
- model=model_cls,
28
+ model=model_cls, # type: ignore
29
29
  name=name,
30
30
  token=token,
31
31
  removable=removable,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: fastlifeweb
3
- Version: 0.9.7
3
+ Version: 0.11.0
4
4
  Summary: High-level web framework
5
5
  Home-page: https://github.com/mardiros/fastlife
6
6
  License: BSD-derived
@@ -18,7 +18,6 @@ Classifier: Programming Language :: Python :: 3.12
18
18
  Classifier: Topic :: Internet :: WWW/HTTP
19
19
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
20
20
  Requires-Dist: beautifulsoup4[testing] (>=4.12.2,<5.0.0)
21
- Requires-Dist: behave (>=1.2.6,<2.0.0)
22
21
  Requires-Dist: fastapi (>=0.112.0,<0.113.0)
23
22
  Requires-Dist: itsdangerous (>=2.1.2,<3.0.0)
24
23
  Requires-Dist: jinjax (>=0.44,<0.45)
@@ -33,20 +32,16 @@ Description-Content-Type: text/markdown
33
32
 
34
33
  # Fastlife
35
34
 
36
- [![CI](https://github.com/mardiros/fastlife/actions/workflows/main.yml/badge.svg)](https://github.com/mardiros/fastlife/actions/workflows/main.yml)
37
-
38
- [![codecov](https://codecov.io/gh/mardiros/fastlife/graph/badge.svg?token=DTpi73d7mf)](https://codecov.io/gh/mardiros/fastlife)
39
-
35
+ [![Documentation](https://github.com/mardiros/fastlife/actions/workflows/gh-pages.yml/badge.svg)](https://mardiros.github.io/fastlife/)
36
+ [![Continuous Integration](https://github.com/mardiros/fastlife/actions/workflows/main.yml/badge.svg)](https://github.com/mardiros/fastlife/actions/workflows/main.yml)
37
+ [![Coverage Report](https://codecov.io/gh/mardiros/fastlife/graph/badge.svg?token=DTpi73d7mf)](https://codecov.io/gh/mardiros/fastlife)
40
38
 
41
39
  A high-level Python web framework based on FastAPI, JinjaX, Pydandic and htmx.
42
40
 
43
41
  The intention is to prototype web application fast. It generate forms directly from
44
42
  Pydantic models.
45
43
 
46
-
47
-
48
44
  Under heavy development.
49
45
 
50
-
51
46
  The package is available on pypi with the name fastlifeweb.
52
47
 
@@ -1,56 +1,57 @@
1
- fastlife/__init__.py,sha256=nAeweHnTvWHgDZYuPIWawZvT4juuhvMp4hzF2B-yCJU,317
2
- fastlife/configurator/__init__.py,sha256=vMV25HEfuXjCL7DhZukhlB2JSfxwzX2lGbErcZ5b7N0,146
3
- fastlife/configurator/base.py,sha256=2ahvTudLmD99YQjnIeGN5JDPCSl3k-mauu7bsSEB5RE,216
4
- fastlife/configurator/configurator.py,sha256=1RzDS-BEQ5MjNv29QKnmRO-j50xJ4Noax-I8tcClRyQ,7238
5
- fastlife/configurator/registry.py,sha256=FKXCxWlMMGNN1-l5H6QLTCoqP_tWENN84RjkConejWI,1580
6
- fastlife/configurator/route_handler.py,sha256=TRsiGM8xQxJvRFbdKZphLK7l37DSfKvvmkEbg-h5EoU,977
7
- fastlife/configurator/settings.py,sha256=Go1y7dGfxG5tfdAfysSl6TruBUfD_IGMq0Ks_eFBakE,3718
8
- fastlife/middlewares/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
- fastlife/middlewares/reverse_proxy/__init__.py,sha256=geiPYm_h8A6cgkyy2AOBsokfeJjvO5iRQS5A2Ui6vN4,276
10
- fastlife/middlewares/reverse_proxy/x_forwarded.py,sha256=zQuVVa4FIazefWouGj3uuORdV0LcQxU4cF4SK8IN2RU,1540
11
- fastlife/middlewares/session/__init__.py,sha256=OnzRCYRzc1lw9JB0UdKi-aRLPNT2n8mM8kwY1P4w7uU,838
12
- fastlife/middlewares/session/middleware.py,sha256=JgXdBlxlm9zIEgXcidbBrMAp5wJVPsZWtvCLVDk5h2s,3049
13
- fastlife/middlewares/session/serializer.py,sha256=qpVnHQjYTxw3aOnoEOKIjOFJg2z45KjiX5sipWk2gws,1458
1
+ fastlife/__init__.py,sha256=4tACh9tKuAaMZ-qK0GWJN-WLqaou8H7ZPE9sXfs_NlI,303
2
+ fastlife/config/__init__.py,sha256=3AoTQ5ojTCYDU3i1vDUCDC5pbBOeSWZ0w1Xo6A1qDrY,284
3
+ fastlife/config/configurator.py,sha256=ol8tdOSDk9Q_M1Nkme-3DaAEXkV5j6XXYIFR3V0Xxvw,8640
4
+ fastlife/config/registry.py,sha256=v1IKPWKyPaG4TbCzrkC4uU51vRoSdpLWXEvAh_mbtjE,1246
5
+ fastlife/config/settings.py,sha256=mdM1YlBXFq2HDWCKeMkBeHmW4NlgKEPZyKAxumUsrbo,3760
6
+ fastlife/middlewares/__init__.py,sha256=C3DUOzR5EhlAv5Zq7h-Abyvkd7bUsJohTRSB2wpRYQE,220
7
+ fastlife/middlewares/base.py,sha256=9OYqByRuVoIrLt353NOedPQTLdr7LSmxhb2BZcp20qk,638
8
+ fastlife/middlewares/reverse_proxy/__init__.py,sha256=XTG9_Djw92wlyYh1dUDq8kkO8Oq61kBMqd_jNCsLfaQ,845
9
+ fastlife/middlewares/reverse_proxy/x_forwarded.py,sha256=WC4xV3i6_Ogqsf_Zgt1ESml8zfnPbJJJkPlC2gTEqW8,1095
10
+ fastlife/middlewares/session/__init__.py,sha256=3XgXcIO6yQls5G7x8K2T8b7a_enA_7rQptWZcp3j2Ak,1400
11
+ fastlife/middlewares/session/middleware.py,sha256=AlRIFXfn3JesKJzMAFUHDOo22mfuwDHkyecDHo9jCdA,3172
12
+ fastlife/middlewares/session/serializer.py,sha256=fTdZCop0y4VkCMyOIo6GEbo5fVWrwsBXaSWfConPL8E,2144
14
13
  fastlife/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
15
- fastlife/request/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
16
- fastlife/request/form_data.py,sha256=mP8ilwRUY2WbktIkRgaJJ2EUjwUMPbSPg29GzwZgT18,3713
17
- fastlife/request/model_result.py,sha256=TRaVkyIE50IzVprncoWUUZd15-y4D3ywyZdx7eh6nFE,3237
18
- fastlife/routing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
- fastlife/routing/router.py,sha256=hHK4NumgTTXI330ZxQeZBiEfGtBRn4_k_fIh_xaaVtg,338
20
- fastlife/security/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
21
- fastlife/security/csrf.py,sha256=yDBF8X5jna-EZm7PPNvoaS_RJTYfTapwbghm506O9wM,1519
22
- fastlife/security/policy.py,sha256=7gnwooTz7iCDZ26hzulUK0vUz9Ncd7y1Lq_6Lr7CJ98,702
23
- fastlife/shared_utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
24
- fastlife/shared_utils/infer.py,sha256=0jNPY5vqKvDlNCmVPnRAXbTcQnmbuOIOIGAeGcxDPok,472
25
- fastlife/shared_utils/resolver.py,sha256=wXQQTB4jf86m4qENhMOkHkWpLJj_T4-_eND_ItTLnTE,1410
26
- fastlife/templates/A.jinja,sha256=EoceT_0ZGvnLz5GmVHXsi5vXdzQJnHW1j7ZUxQOVR0k,426
27
- fastlife/templates/Button.jinja,sha256=uSDCdK2uYEsLnTUDjKo8qaUKHjddIoDvTMR6QrADO0A,1378
28
- fastlife/templates/Checkbox.jinja,sha256=wljKcufMxSWMCiTpqI5Ugfxn4GF224tJaw0AtM1syPo,236
29
- fastlife/templates/CsrfToken.jinja,sha256=7qbPvgiAgR6fgaCnDTLozJgOPSWWUJ_W4VLPGra4ahA,61
30
- fastlife/templates/Details.jinja,sha256=JP_otsatCu4w68iIqoMiCwh1S0ymUd_yFqoztdifOVU,166
31
- fastlife/templates/Form.jinja,sha256=mimb2oq1jHt-5wtN-JD2gbcZEN5UiaLFwzuqxl6X5IU,341
32
- fastlife/templates/H1.jinja,sha256=bx8MnoZKN2C2GbfmX4lgi1P6XRh_g67qb_hWmrodGhs,59
33
- fastlife/templates/H2.jinja,sha256=aY2Q_DdHHViqA2nUCPjAqlUgcAqadYnUJnxFnCONydY,59
34
- fastlife/templates/H3.jinja,sha256=pkt2APIelNnjTE67XBgr8Futs5mAY7QzmF_isMINim8,59
35
- fastlife/templates/H4.jinja,sha256=BpmhtBri3Sj7PCHA4eCs7WWkKHi-h1GIvPy-PJBdz6E,59
36
- fastlife/templates/H5.jinja,sha256=H5iNmmFrrmBq1vBlDKdtuBzrwOYpG2gFVuixE5wWh20,59
37
- fastlife/templates/H6.jinja,sha256=QHb5GCMiEFgh-fU2_2X-NcvrrFvGyLWpGJDIEiSTY1E,59
38
- fastlife/templates/Hidden.jinja,sha256=nOGfkWwhXckJE2O4wL5IXNKB5dvU0HbmdWCTECxEFHs,120
39
- fastlife/templates/Input.jinja,sha256=ptEx-N4RyoqIwomTDeX4IhT1ebLw3QqH6Wg0cTnF-Jg,336
40
- fastlife/templates/Label.jinja,sha256=Z3wJWfwTKjHmmuYbYp9ZjaUZuHO7AyGpQD3Q03uS6cA,87
41
- fastlife/templates/Option.jinja,sha256=-rleDJmdheZ37xwhel9A0mF6Tf7p65b_yDXRwiB2aIQ,162
42
- fastlife/templates/P.jinja,sha256=nqRB1vJ3NjSjpnI19unYBVArxnMoD3EsXH0wWXJ0auc,107
43
- fastlife/templates/Radio.jinja,sha256=Mj4mv-ljz_68991gskzGVZeU6xq2NQjj_X37IijflJY,462
44
- fastlife/templates/Select.jinja,sha256=aNzI140A9hTtjhTJARDeaCaAVUrFuveq6dHFXp1zTiM,179
45
- fastlife/templates/Summary.jinja,sha256=eATV30yqsz-wASiCNaQzhNNuVfRXNoMgeyjKv4J84a8,493
46
- fastlife/templates/Table.jinja,sha256=goC3qNsbt1NZgbhhuDRuoJuMKHNRCt_bmK96SY_KF1Y,74
47
- fastlife/templates/Tbody.jinja,sha256=K8wwTYcYi8-NYdP4g7MBokvYqJp9QW7DmChADuCa-Gs,35
48
- fastlife/templates/Td.jinja,sha256=xF2h-Vie0OnjShxzcLwjrGHgi9hvLdlq4H7Ost7aCAA,65
49
- fastlife/templates/Tfoot.jinja,sha256=iSHDcwhi7VNql5Yl3jvkrx2WVquT5Zm8to9P3WBlKYQ,35
50
- fastlife/templates/Th.jinja,sha256=dhWdbwSWIMpIxWFOIXIX6FhRkeUwwWZr5R7PoTcJZ9w,65
51
- fastlife/templates/Thead.jinja,sha256=gp3T4XiEk5zgih0gmmLcVke-Z8AgTol7AQrRtVev480,35
52
- fastlife/templates/Tr.jinja,sha256=xTPzz7j7Zz0g4GkAAEizV5jlz1QXBDibSGCqX2s4sdc,53
53
- fastlife/templates/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
14
+ fastlife/request/__init__.py,sha256=C5lZAsUZJDw0TfTegRyN5BEhzgfiqvfc8YXu2vp0siU,73
15
+ fastlife/request/form.py,sha256=FucGua79LCKqNBP6Ycle7-5JU6EMI6SrHCgoJBcvGY4,3532
16
+ fastlife/request/form_data.py,sha256=BLAanhP0u-9VXNmHyjVTj4fbGFWNEyJJwpHTw_mqVmw,4459
17
+ fastlife/request/request.py,sha256=NGeU6Wpdh-lnbmgZyjCo31fre1Nl86M8yZqvNsOTsZA,544
18
+ fastlife/routing/__init__.py,sha256=8EMnQE5n8oA4J9_c3nxzwKDVt3tefZ6fGH0d2owE8mo,195
19
+ fastlife/routing/route.py,sha256=GehIHNnqZANXipdn1_dWzZnZlByc2Q4Yh39MuczS3Sc,1405
20
+ fastlife/routing/router.py,sha256=zoQ9Gmo6dEm-IIf2etIQrvhrXP0i3RWkVZuJZ8HMno4,481
21
+ fastlife/security/__init__.py,sha256=QYDcJ3oXQzqXQxoDD_6biGAtercFrtePttoifiL1j34,25
22
+ fastlife/security/csrf.py,sha256=Y1M37tFe5dsnbA_aklcFZrLm6ePzEpKLsQsmojDk3Dc,2141
23
+ fastlife/security/policy.py,sha256=k33DVbub0_QvKCgD9vo_cdyNRUS2e7x7wctarVj8Dko,945
24
+ fastlife/shared_utils/__init__.py,sha256=i66ytuf-Ezo7jSiNQHIsBMVIcB-tDX0tg28-pUOlhzE,26
25
+ fastlife/shared_utils/infer.py,sha256=CJjsL_F5OQRG7-0_89MQiZhyd7IcMGyirlQhjtcaIT4,728
26
+ fastlife/shared_utils/resolver.py,sha256=BRU88Ej4oA1iDIyG4Z6T7Q9WFvPHiMm6zuSh623312A,1725
27
+ fastlife/templates/A.jinja,sha256=Yji2aeqtQqkFqXhVQJZaVN60pX_418WGM2XdbIzZEwI,1399
28
+ fastlife/templates/Button.jinja,sha256=8qqMIOI8EBerNCiq12O7whv0D5pOhGadJvMe8mp8l5Q,2320
29
+ fastlife/templates/Checkbox.jinja,sha256=A4Cw3MvI_7gy_FdCQpjQmN5qIjSCcaPYkGhP1xY31cA,763
30
+ fastlife/templates/CsrfToken.jinja,sha256=ftqhcMibf1G8pbGCytlUcj5LGEmD8QJKwVKTro5w-ns,199
31
+ fastlife/templates/Details.jinja,sha256=LzXncOoytRoeJ5rKl19V057eEwPWN9LT4Ag63GjCxE0,751
32
+ fastlife/templates/Form.jinja,sha256=tIHzua02cXX-vgGvRd6_zQetZJjPMGsJ6KZFgNEq11I,1530
33
+ fastlife/templates/H1.jinja,sha256=W-lnoGHLIbJToKXHtD__HSfCqMycafB9l2uW_Uf976E,385
34
+ fastlife/templates/H2.jinja,sha256=QRAn9Nuhws1HZPaRNFN9OvGxbhRfbc2IvU5qu1iyk10,385
35
+ fastlife/templates/H3.jinja,sha256=wUdplEVscd99lpdPRmMEMIaJ_ND7c4_mNiWuC9q0bf4,385
36
+ fastlife/templates/H4.jinja,sha256=0i6za9gaWHNkiNVEITOnEoQPQc3-qgOk_uTJ2hJMilk,385
37
+ fastlife/templates/H5.jinja,sha256=pE50LIDT1cst0-BHMsrm5sXClqZbXgm2n7Q05LDqLkQ,385
38
+ fastlife/templates/H6.jinja,sha256=BJOS5JGsMKVtiIHnldWlFdO9GqyOGcilPfOiGeBZ-Og,385
39
+ fastlife/templates/Hidden.jinja,sha256=-D74wZ7qp2n5l_8HKmDhX5v_M2sAJ5l-w_z9m5d5KvA,283
40
+ fastlife/templates/Input.jinja,sha256=ISCXs-YHeFqS1geIsNf8p32xUje7ccBtXznwOhdXAsM,931
41
+ fastlife/templates/Label.jinja,sha256=H4AkLUIpkGkO3cq9xjR7fXT7CCo0HMIO_AR3FEGQDng,547
42
+ fastlife/templates/Option.jinja,sha256=x6t7uUQsI1YSRstD4bSVlgK2wm8NJUXnzOWfNWGlk_Y,448
43
+ fastlife/templates/P.jinja,sha256=AZax3MlZAyxUbdKWuiaCYk9uDsXqEzv_BaNa25k4RCY,386
44
+ fastlife/templates/Radio.jinja,sha256=u0x1lUbpSh6P3Y1FxJQ6Ms0MSRddCSme8B2sZdqkRJE,1523
45
+ fastlife/templates/Select.jinja,sha256=OD8V15-rkUyMwHkqQo9xiiFKxx8KpMRjGgqS0PFOCkY,566
46
+ fastlife/templates/Summary.jinja,sha256=CbvVg0-R5w-CDEXSWfYzQ-hE0q4wNDsLTDO6H_C7Mj0,863
47
+ fastlife/templates/Table.jinja,sha256=gKcjoRWn2cNg5DRr-2AQ65YD6mzeF3sMuyOCerGOTRc,400
48
+ fastlife/templates/Tbody.jinja,sha256=LG6B41wnKc3My3LoCQJPYiLnd7pz3JmRAJ2o7a_m1hs,325
49
+ fastlife/templates/Td.jinja,sha256=oz69BLz9uAtDZ24Uw6YvoN6P2L84KC8R_Eq4cx5Dnc4,384
50
+ fastlife/templates/Textarea.jinja,sha256=0WsTi-yxVwYXndmJJN93WblQVqM0h0NCSMUDwoC3kdc,636
51
+ fastlife/templates/Tfoot.jinja,sha256=hxdYkc-3P27Qm9ZobSxhpjugOFJifVia20uHzTXHvIk,325
52
+ fastlife/templates/Th.jinja,sha256=XO5IX2BDhUj9JeMEArdMiXsrLcgc0Zj2bZAV_gnFBYQ,385
53
+ fastlife/templates/Thead.jinja,sha256=FB0ZaYwQR1KEJun5XpuO4sXsUuyPabXxf8M5qkeD-xI,324
54
+ fastlife/templates/Tr.jinja,sha256=tWMonYy0XPCaGCeheo6aqqSXo7wxqxz6hPUBGAWrHNI,316
54
55
  fastlife/templates/icons/AcademicCap.jinja,sha256=0yJiwNF09SXGmssEHFkEE_2GPb2LFN1BIR4DChDRBls,528
55
56
  fastlife/templates/icons/AdjustmentsHorizontal.jinja,sha256=eaAOfrTqfmkJmNaFeCiBSzSCohu6_kqNSuFIB1Vz1RE,568
56
57
  fastlife/templates/icons/AdjustmentsVertical.jinja,sha256=n7jBi400_q6KnhMABtUwKBBM_7n1IXFtdtaNwamrfxs,560
@@ -1663,39 +1664,40 @@ fastlife/templates/icons/solid/Wrench.jinja,sha256=7DafP_B4LT5QkvTeMUx_zmLYliM2e
1663
1664
  fastlife/templates/icons/solid/WrenchScrewdriver.jinja,sha256=4R90jRI63aRFxvQQCYs75lDbPYoNO600x4hKPlRku_4,1368
1664
1665
  fastlife/templates/icons/solid/XCircle.jinja,sha256=0VoZ58uL7mLSzYlFUme5chykpQL9h7yJeq29dN6GjZ0,593
1665
1666
  fastlife/templates/icons/solid/XMark.jinja,sha256=tvAtbOfIVteEEzFGSejQlq4Z_rFD3J9zf7EEjCNQA0Q,507
1666
- fastlife/templates/pydantic_form/Boolean.jinja,sha256=1Y54P3AGLE8wd-TcowDsZTY_-XID0AJSqXVjbc-C6WM,471
1667
- fastlife/templates/pydantic_form/Checklist.jinja,sha256=Egn1Od1B2K315MWGi8O2RkRl9o10ia8J-Ky6XFPr2v4,782
1668
- fastlife/templates/pydantic_form/Dropdown.jinja,sha256=B3OlOOIY6trxfqEJZRUutWPbASfVxhy041N1AlN624s,588
1669
- fastlife/templates/pydantic_form/Error.jinja,sha256=Wb5NnVRc4U7ZGKmYV7s4eGenWEug8WK9li48iTlX4cQ,121
1670
- fastlife/templates/pydantic_form/Hidden.jinja,sha256=NF8Od_mSSnRJAxWqsgeD1C5YzqJso-HCeDjGbpHjmlE,86
1671
- fastlife/templates/pydantic_form/Hint.jinja,sha256=O0ZsAQnATcG0a_qLQfrwM6VZHmAw3k1W33WYlEBUas8,123
1672
- fastlife/templates/pydantic_form/Model.jinja,sha256=IRCU9PpqGLv6l7uVpVfAucWsVZbZQBCtfF_lpVMMOfc,490
1673
- fastlife/templates/pydantic_form/Sequence.jinja,sha256=oZMdpKdIvp7h-HPyK3wBFSH0ruHICDsPXsM4WOFxaJc,1420
1674
- fastlife/templates/pydantic_form/Text.jinja,sha256=7OJt4rC11-XCKFKDP8lIsFy6M33pRW9ceD9K-irhiJg,461
1675
- fastlife/templates/pydantic_form/Union.jinja,sha256=ibSgK04qE_GND8Fm0T5pBsP2LUaVe9lZQgSlVU6Cblk,1080
1676
- fastlife/templates/pydantic_form/Widget.jinja,sha256=xXjesiIfaS2CWv9T11UDVHwBz6JT1FSPB6EWtp98_hA,290
1667
+ fastlife/templates/pydantic_form/Boolean.jinja,sha256=jC5YHjgcVskigq4omDFws6r7McBtcA--yOLiv5Yjtt8,593
1668
+ fastlife/templates/pydantic_form/Checklist.jinja,sha256=d1msOWqtBOY7X7W_gHOpSlIrGR3PNzKDExCIuEejozw,923
1669
+ fastlife/templates/pydantic_form/Dropdown.jinja,sha256=_qBnj40pmitUhO9cbTXtOrd6XlkJ2pz3GY45bIevMjc,692
1670
+ fastlife/templates/pydantic_form/Error.jinja,sha256=vVSb1BKyKLOD4IOAM7aCKSNh7aAlmoiZVgRuvDCwLIo,205
1671
+ fastlife/templates/pydantic_form/Hidden.jinja,sha256=9gAl6NVC9bf_S0EQ1ieswaJz7LPmPX5atlt1BrDNTNo,228
1672
+ fastlife/templates/pydantic_form/Hint.jinja,sha256=8leBpfMGDmalc_KAjr2paTojr_rwq-luS6m_1BGj7Tw,202
1673
+ fastlife/templates/pydantic_form/Model.jinja,sha256=-lCcOzfExev3IuNUrbPx176SrBl9lbmGE9dii9fgyO4,925
1674
+ fastlife/templates/pydantic_form/Sequence.jinja,sha256=uCFqTUfmmRw5gBLiEDb_2OysVhsNOlkvv8fO5HpqrbA,1803
1675
+ fastlife/templates/pydantic_form/Text.jinja,sha256=MRYNHnmK_WTPPZzRWPRlR9XMgER5jUAYIC5tDmLNXHY,518
1676
+ fastlife/templates/pydantic_form/Textarea.jinja,sha256=WKj5G7cYrzblWSLd0MvVZd1pEvg_8tIUClibzdx2FOc,1055
1677
+ fastlife/templates/pydantic_form/Union.jinja,sha256=-FmtWABBNezkiG3yGcmgvWLAETN9NT9LJySwBgEvBLc,1477
1678
+ fastlife/templates/pydantic_form/Widget.jinja,sha256=kT2SDB5yq5yHEwhL7SG4mmRXCtRPn4Nd3vVuQmqJ9S8,401
1677
1679
  fastlife/templating/__init__.py,sha256=UY_hSTlJKDZnkSIK-BzRD4_AXOWgHbRuvJsKAS9ljgE,307
1678
- fastlife/templating/binding.py,sha256=noY9QrArJGqB1X80Ny-0zk1Dg6T9mMXahjEcIiHvioo,1648
1679
- fastlife/templating/renderer/__init__.py,sha256=6z7MTmj3-TgP_-cKtjhUypJcXvMOmaWaPHuoROyhobE,231
1680
- fastlife/templating/renderer/abstract.py,sha256=9eQgshUMiVTaMcICr-RtP3Zqpu7Bji_sLif2InrxMek,3519
1681
- fastlife/templating/renderer/constants.py,sha256=A1DY6D5f32j7exAIgnuiLHbQHaq8BOcFt9xZHQHUBuU,6131
1682
- fastlife/templating/renderer/jinjax.py,sha256=oYMsmrY7ksuDNCRNtuy4W1_meObiNFDNHFteB-cteY0,4042
1680
+ fastlife/templating/binding.py,sha256=Ox4tjmwIykpnU1ZzyAqeLYMunlVQwHVxuNvhuYKh6AA,1920
1681
+ fastlife/templating/renderer/__init__.py,sha256=10RHpo4S6ehjd-90dFq2mDul8vIK15o-WdMpc-NXdA0,257
1682
+ fastlife/templating/renderer/abstract.py,sha256=eiTEm7a7f42gfYhTAopMUZMMVVG1fkTZCZ3Sdp49vKA,3971
1683
+ fastlife/templating/renderer/constants.py,sha256=MGdUjkF9hsPMN8rOS49eWbAApcb8FL-FAeFvJU8k90M,8387
1684
+ fastlife/templating/renderer/jinjax.py,sha256=2248WYc0lCYCEBmsQqx0VxjJCFVynIBw7KNZ9gcoQOM,12270
1683
1685
  fastlife/templating/renderer/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1684
- fastlife/templating/renderer/widgets/base.py,sha256=XtD-NRacHMn9Xt_dSfWb1Emk3XEXz5jExglx23Rzzpw,2808
1685
- fastlife/templating/renderer/widgets/boolean.py,sha256=1Cnrs6Sqf7CJURrCRkDL2NDQZWO9dvac350w0PcZtDg,544
1686
- fastlife/templating/renderer/widgets/checklist.py,sha256=Qit-k4RnW9Y3xOyE9BevBRuFZ8XN5jH3x_sI5fWt43Y,1009
1687
- fastlife/templating/renderer/widgets/dropdown.py,sha256=FyPZzrTprLff6YRqZ031J8-KZpBgidTw0BsKY1Qt7Ts,1009
1688
- fastlife/templating/renderer/widgets/factory.py,sha256=iOBuxWlY1d9WfCqcm5f5Ck5NwoK9uDkioCSPyu5HsQo,14787
1689
- fastlife/templating/renderer/widgets/hidden.py,sha256=2fsbTQKsACV0JVYpCjXaQAV7VnQTIBPCi4lJPdWCRHc,308
1690
- fastlife/templating/renderer/widgets/model.py,sha256=BNM6dPPN9jzM26LreeOw7wiCsZun1uSMMFXMNcO2hII,1094
1691
- fastlife/templating/renderer/widgets/sequence.py,sha256=rYXsUZokV3wnKa-26BmgAu7sVCtFf8FdBmhvrnqR-gM,1455
1692
- fastlife/templating/renderer/widgets/text.py,sha256=OWFFA0muZCznrlUrBRRUKVj60TdWtsdgw0bURdOA3lE,879
1693
- fastlife/templating/renderer/widgets/union.py,sha256=xNDctq0SRXfRyMHXL8FgRKyUOUreR1xENnt6onkZJ9I,1797
1686
+ fastlife/templating/renderer/widgets/base.py,sha256=Act7A72nKq4paI6dh0A8nL4ywfTii4DYeu7Ky3T5x68,4000
1687
+ fastlife/templating/renderer/widgets/boolean.py,sha256=tOztwSLrJRD_bqG_m_QmY1yKlBB1oPw5j4I9QHP-J1M,1139
1688
+ fastlife/templating/renderer/widgets/checklist.py,sha256=Zl0Qu7wFK7nh_ORmjTNalZvnsGNn78rc5EOPmsEtqTc,1649
1689
+ fastlife/templating/renderer/widgets/dropdown.py,sha256=uel-7CWZGTerl2rD0-M54Nhg7ZWC7YYkWaJ_aPqkC2I,1616
1690
+ fastlife/templating/renderer/widgets/factory.py,sha256=hteucZEdxPkAU2BPFPXTNNKxSzzE9ZbHL4kUpJmNbP4,17604
1691
+ fastlife/templating/renderer/widgets/hidden.py,sha256=iEUxB9M9hOz7EPDiIMe5cWmae7cwoq4dSFDpVGgurpI,697
1692
+ fastlife/templating/renderer/widgets/model.py,sha256=imajTbB5ZxdJAy7UFqhPF3NVA6hZyjNL0Zg60uwkJlM,1276
1693
+ fastlife/templating/renderer/widgets/sequence.py,sha256=zvQrCvPIJNRVooNX16hM64sXCivclDlVS1MnGH4_Rq8,1516
1694
+ fastlife/templating/renderer/widgets/text.py,sha256=lyc_aje_Yx0EpiYFbWtOLdLIfU8_5SLor4QvF3RIACY,3177
1695
+ fastlife/templating/renderer/widgets/union.py,sha256=HN16dZxel5LHaZWnPE1izPohaEDTWxjcbFuoSqOFCO8,2530
1694
1696
  fastlife/testing/__init__.py,sha256=vuqwoNUd3BuIp3fm7nkvmYkIGjIimf5zUGhDkeWrg2s,98
1695
- fastlife/testing/testclient.py,sha256=izNTkFgArIUrdSemNl3iiEDdsiUfnb2TtfKnZi3Jwv8,20546
1697
+ fastlife/testing/testclient.py,sha256=BC7lLQ_jc59UmknAKzgRtW9a3cpX_V_QLp9Mg2ScLA8,20546
1696
1698
  fastlife/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1697
- fastlife/views/pydantic_form.py,sha256=KJtH_DK8em0czGPsv0XpzGUFhtycyXdeRldwiU7d_j4,1257
1698
- fastlifeweb-0.9.7.dist-info/LICENSE,sha256=F75xSseSKMwqzFj8rswYU6NWS3VoWOc_gY3fJYf9_LI,1504
1699
- fastlifeweb-0.9.7.dist-info/METADATA,sha256=Wm-IDhXKykc8zqCMA_lTRezj8WN86oXz7MlarEX7Wu0,1885
1700
- fastlifeweb-0.9.7.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1701
- fastlifeweb-0.9.7.dist-info/RECORD,,
1699
+ fastlife/views/pydantic_form.py,sha256=WjRqtwc30g3W_4vqkVj0zzaK-vEWX4ZbtBV5vMpT9Xo,1267
1700
+ fastlifeweb-0.11.0.dist-info/LICENSE,sha256=F75xSseSKMwqzFj8rswYU6NWS3VoWOc_gY3fJYf9_LI,1504
1701
+ fastlifeweb-0.11.0.dist-info/METADATA,sha256=wzlejQlx8pvO4_sjNGkntJHTdKEx28RHTk_20h8J9oA,2006
1702
+ fastlifeweb-0.11.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
1703
+ fastlifeweb-0.11.0.dist-info/RECORD,,
@@ -1,4 +0,0 @@
1
- """Configure fastlife app for dependency injection."""
2
- from .configurator import Configurator, configure
3
-
4
- __all__ = ["Configurator", "configure"]
@@ -1,9 +0,0 @@
1
- import abc
2
-
3
- from starlette.types import Receive, Scope, Send
4
-
5
-
6
- class AbstractMiddleware(abc.ABC):
7
- @abc.abstractmethod
8
- async def __call__(self, scope: Scope, receive: Receive, send: Send) -> None:
9
- ...
@@ -1,29 +0,0 @@
1
- from typing import TYPE_CHECKING, Any, Callable, Coroutine
2
-
3
- from fastapi import Request as BaseRequest
4
- from fastapi.routing import APIRoute
5
- from starlette.responses import Response
6
-
7
- if TYPE_CHECKING:
8
- from .registry import AppRegistry # coverage: ignore
9
-
10
-
11
- class FastlifeRequest(BaseRequest):
12
- def __init__(self, registry: "AppRegistry", request: BaseRequest) -> None:
13
- super().__init__(request.scope, request.receive)
14
- self.registry = registry
15
-
16
-
17
- class FastlifeRoute(APIRoute):
18
- registry: "AppRegistry" = None # type: ignore
19
-
20
- def get_route_handler( # type: ignore
21
- self,
22
- ) -> Callable[[FastlifeRequest], Coroutine[Any, Any, Response]]:
23
- orig_route_handler = super().get_route_handler()
24
-
25
- async def route_handler(request: BaseRequest) -> FastlifeRequest:
26
- req = FastlifeRequest(self.registry, request)
27
- return await orig_route_handler(req) # type: ignore
28
-
29
- return route_handler # type: ignore
File without changes