clear-skies 2.0.0__py3-none-any.whl → 2.0.2__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.

Potentially problematic release.


This version of clear-skies might be problematic. Click here for more details.

Files changed (78) hide show
  1. {clear_skies-2.0.0.dist-info → clear_skies-2.0.2.dist-info}/METADATA +2 -2
  2. {clear_skies-2.0.0.dist-info → clear_skies-2.0.2.dist-info}/RECORD +78 -77
  3. clearskies/__init__.py +5 -8
  4. clearskies/authentication/authentication.py +4 -0
  5. clearskies/authentication/authorization.py +4 -0
  6. clearskies/authentication/jwks.py +8 -3
  7. clearskies/authentication/secret_bearer.py +3 -3
  8. clearskies/backends/api_backend.py +2 -2
  9. clearskies/backends/backend.py +13 -0
  10. clearskies/backends/secrets_backend.py +0 -1
  11. clearskies/column.py +9 -8
  12. clearskies/columns/audit.py +3 -2
  13. clearskies/columns/belongs_to_id.py +2 -2
  14. clearskies/columns/belongs_to_model.py +6 -2
  15. clearskies/columns/belongs_to_self.py +2 -2
  16. clearskies/columns/boolean.py +6 -2
  17. clearskies/columns/category_tree.py +2 -2
  18. clearskies/columns/category_tree_children.py +2 -2
  19. clearskies/columns/created.py +3 -2
  20. clearskies/columns/created_by_authorization_data.py +2 -2
  21. clearskies/columns/created_by_header.py +2 -2
  22. clearskies/columns/created_by_ip.py +2 -2
  23. clearskies/columns/created_by_routing_data.py +3 -2
  24. clearskies/columns/created_by_user_agent.py +2 -2
  25. clearskies/columns/date.py +6 -2
  26. clearskies/columns/datetime.py +6 -2
  27. clearskies/columns/float.py +6 -2
  28. clearskies/columns/has_many.py +2 -2
  29. clearskies/columns/has_many_self.py +2 -2
  30. clearskies/columns/integer.py +6 -2
  31. clearskies/columns/json.py +6 -2
  32. clearskies/columns/many_to_many_ids.py +6 -2
  33. clearskies/columns/many_to_many_ids_with_data.py +6 -2
  34. clearskies/columns/many_to_many_models.py +6 -2
  35. clearskies/columns/many_to_many_pivots.py +3 -2
  36. clearskies/columns/phone.py +3 -2
  37. clearskies/columns/select.py +3 -2
  38. clearskies/columns/string.py +4 -0
  39. clearskies/columns/timestamp.py +6 -2
  40. clearskies/columns/updated.py +2 -2
  41. clearskies/columns/uuid.py +2 -2
  42. clearskies/configs/__init__.py +4 -1
  43. clearskies/configs/config.py +4 -1
  44. clearskies/configs/endpoint_list.py +28 -0
  45. clearskies/contexts/cli.py +4 -0
  46. clearskies/contexts/context.py +13 -0
  47. clearskies/contexts/wsgi.py +4 -0
  48. clearskies/contexts/wsgi_ref.py +4 -0
  49. clearskies/{parameters_to_properties.py → decorators.py} +2 -0
  50. clearskies/di/di.py +2 -2
  51. clearskies/di/injectable_properties.py +2 -2
  52. clearskies/endpoint.py +7 -6
  53. clearskies/endpoint_group.py +14 -1
  54. clearskies/endpoints/callable.py +5 -4
  55. clearskies/endpoints/create.py +1 -1
  56. clearskies/endpoints/delete.py +1 -1
  57. clearskies/endpoints/get.py +1 -1
  58. clearskies/endpoints/health_check.py +1 -1
  59. clearskies/endpoints/list.py +1 -1
  60. clearskies/endpoints/restful_api.py +2 -2
  61. clearskies/endpoints/simple_search.py +1 -1
  62. clearskies/endpoints/update.py +1 -1
  63. clearskies/model.py +1214 -64
  64. clearskies/query/query.py +4 -4
  65. clearskies/security_header.py +7 -0
  66. clearskies/security_headers/cache_control.py +2 -2
  67. clearskies/security_headers/cors.py +2 -2
  68. clearskies/security_headers/csp.py +2 -2
  69. clearskies/security_headers/hsts.py +2 -2
  70. clearskies/validator.py +12 -0
  71. clearskies/validators/after_column.py +2 -2
  72. clearskies/validators/in_the_future.py +1 -1
  73. clearskies/validators/in_the_past.py +1 -1
  74. clearskies/validators/required.py +0 -1
  75. clearskies/validators/timedelta.py +2 -2
  76. clearskies/validators/unique.py +0 -1
  77. {clear_skies-2.0.0.dist-info → clear_skies-2.0.2.dist-info}/LICENSE +0 -0
  78. {clear_skies-2.0.0.dist-info → clear_skies-2.0.2.dist-info}/WHEEL +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: clear-skies
3
- Version: 2.0.0
3
+ Version: 2.0.2
4
4
  Summary: A framework for building backends in the cloud
5
5
  License: MIT
6
6
  Author: Conor Mancone
@@ -25,7 +25,7 @@ Requires-Dist: pymysql (>=1.1.0,<2.0.0) ; extra == "mysql"
25
25
  Requires-Dist: requests (>=2.31.0,<3.0.0)
26
26
  Requires-Dist: typing-extensions (>=4.12.0,<5.0.0) ; python_version == "3.10"
27
27
  Requires-Dist: wrapt (>=1.16.0,<2.0.0)
28
- Project-URL: Repository, https://github.com/cmancone/clearskies
28
+ Project-URL: Repository, https://github.com/clearskies-py/clearskies
29
29
  Description-Content-Type: text/markdown
30
30
 
31
31
  # clearskies
@@ -1,12 +1,12 @@
1
- clearskies/__init__.py,sha256=HLBu0CXipIp-Cr_-iBfpN4UlrFwsjTNFOwF9i0iN5i0,1241
1
+ clearskies/__init__.py,sha256=x9m4Bu6Fs4YwaT6p1i7R-6juPugmYyKYtoiyOaL_QbU,1083
2
2
  clearskies/action.py,sha256=x_T05XaC0m-BYPZWaSR94XbE7T5ZK1vRtSfEszfZuDg,121
3
3
  clearskies/authentication/__init__.py,sha256=MxXNCWhKbha7TPu_MAyssfTdOCEDSNBwzshEHx8gfHo,525
4
- clearskies/authentication/authentication.py,sha256=rMzX5pveW00RXrAujLGqxOhCMLnvOlAxdQTwl-kCEQk,1203
5
- clearskies/authentication/authorization.py,sha256=SMbEhX-kwvV5ivFToEVcGR7xqm95DkRg4RAPVLLStOc,534
4
+ clearskies/authentication/authentication.py,sha256=N-g2qNDGuJaSlMwc_SRwsjAuqOMLI2nKfUzSCF7HOFo,1240
5
+ clearskies/authentication/authorization.py,sha256=3XEOUlQx9XeRPpNEk4GCa-xWafrz-3Xd0T1PCSFuVxY,570
6
6
  clearskies/authentication/authorization_pass_through.py,sha256=d3XKcUWmI_u9QBBTGKrU1hdD-LM56iH60Qv_xc8TE6k,512
7
- clearskies/authentication/jwks.py,sha256=LPDYjZVVK8aoDUERSyE5pjoac8nA9_TaQtiZRLIZLcs,4826
7
+ clearskies/authentication/jwks.py,sha256=V_Kgcb0peoPRqEej-Ii1GiPF3qoed_ub0nuc_Rx8_EU,4860
8
8
  clearskies/authentication/public.py,sha256=GSNl4X4fnB25BZoXSo8nqL0iZCa9rzfvPfIsJ2Y34B4,84
9
- clearskies/authentication/secret_bearer.py,sha256=DP3M5rMW48CToD_ITlrYpaHGyOanyBVGMQQmLo6BK6Y,17608
9
+ clearskies/authentication/secret_bearer.py,sha256=JoGBD2s7MubidFi1L0hyB_A4V3w5n1LKsokLiT44fBc,17590
10
10
  clearskies/autodoc/__init__.py,sha256=JRUAmd0he8iGlgiZvxewLMIXJqnOFEdvlaKAtHpC2lo,124
11
11
  clearskies/autodoc/formats/__init__.py,sha256=3rhoLKmEwT6PljaHvOl9qdeMIXyD7PQBZbqZKy5Mb5I,56
12
12
  clearskies/autodoc/formats/oai3_json/__init__.py,sha256=C9DzR38Uu0t41osMzhQx6K-hyaNWA1t6agTzOXW9k88,142
@@ -47,49 +47,49 @@ clearskies/autodoc/schema/password.py,sha256=hSXPvHoXEbG-KHQFxXubEarxSMg9Cki_n8t
47
47
  clearskies/autodoc/schema/schema.py,sha256=KZ4r88OUMzbeV4DQ3yUhK8bHS_zJiimsWPWc1rJVDZs,244
48
48
  clearskies/autodoc/schema/string.py,sha256=GXRI-aU8PYmjfnhmfaOe4vq7JASb-aB4SiFeG-EmJY0,60
49
49
  clearskies/backends/__init__.py,sha256=krBB3gHLP-lVYkm5ksdK7teEtouAHhL3EC__WGVnF4A,3157
50
- clearskies/backends/api_backend.py,sha256=fRt0U5pZn41ltZUKjbYguJrtNxchSJICLOYIV1bJV7A,54901
51
- clearskies/backends/backend.py,sha256=1IgX4ts9x8qxoVS2csdDflimVQx0leeVNhvgeUaFn40,5050
50
+ clearskies/backends/api_backend.py,sha256=IOT4JqSxtKGqyBawg0TvE8rQJpHcHdQ8t0LDaLXfxow,54879
51
+ clearskies/backends/backend.py,sha256=_TFMXAHgIY-vPGhx8SYjSTbVd9r-6KpLbLnfNsCXuV8,5874
52
52
  clearskies/backends/cursor_backend.py,sha256=lMnkHATU2Fxr0ihgrVnvI9IVnUPxNfjzpkdJIok2mXY,14360
53
53
  clearskies/backends/memory_backend.py,sha256=fXgbFcTvbZeKHs4CsI_yNsofHSjWqZqY9QWI7uJzVws,34260
54
- clearskies/backends/secrets_backend.py,sha256=zlS2ELM6pgS18tt6KvyOPqHWMMFCqsu76prEnZ8GeE0,4323
55
- clearskies/column.py,sha256=PKpHsGihsMP4Ph1xzbCvvgjpt5NuiNpGZUGLKvXlNVM,52091
54
+ clearskies/backends/secrets_backend.py,sha256=r1k7YfZ7AKMsN2wWwx939QKeYWgh6PVkdiKayzPBDv0,4275
55
+ clearskies/column.py,sha256=_VkvfD_6d4brTkChUbevJe9e7sla8ovsiJ5cH1evoH4,52070
56
56
  clearskies/columns/__init__.py,sha256=a__-1hv-aMV3RU0Sd-BEkfItSJaG51EF2VeRQoTdka8,1990
57
- clearskies/columns/audit.py,sha256=vwWQR_lNKonihb71qUoKQwzLQ5VA1ASFOm7ggA9jJ3Y,7628
58
- clearskies/columns/belongs_to_id.py,sha256=H6yWsnMgr1za8hRWW40R499SVuTd11Ixb1YCacqCTHM,17820
59
- clearskies/columns/belongs_to_model.py,sha256=gahATn7dyLsqtS9A1S2ggBOhy6t-x6m84-BjQaPywZk,5703
60
- clearskies/columns/belongs_to_self.py,sha256=PbSsZVeHe_oex5_aVo059QI4-NjI3ZMGwzPjxNfCwJE,3784
61
- clearskies/columns/boolean.py,sha256=VJWWgX_QUoc8Otk7S3Ddxea59UlDbaUqiCfMo99Ar1g,3831
62
- clearskies/columns/category_tree.py,sha256=e4Ja5O3W0XGJCqnJtoJ4Bi2gnuc51UhfJjPbvQ9FiQs,11142
57
+ clearskies/columns/audit.py,sha256=0BBpBFsxz6JBWDPoyCb73EDJnN95pj1TXtTZqbT1qKU,7628
58
+ clearskies/columns/belongs_to_id.py,sha256=VtI_LjaBRMNGoeZlF4WvTCgWXNdKP06c0ca5BrnnLbs,17792
59
+ clearskies/columns/belongs_to_model.py,sha256=b0eBBP6EoDEVOKP4ZZpdrD4BOadblTHzuH-KLWjOIrA,5807
60
+ clearskies/columns/belongs_to_self.py,sha256=TbcXmRp6_OAycElrnOqaIZK5aDDheTsRoGc1M8pbAm0,3762
61
+ clearskies/columns/boolean.py,sha256=CiYgMWvNdom8KDQk2Jt_kwWDtrLIyymrmLrP9zTYFTE,3938
62
+ clearskies/columns/category_tree.py,sha256=7z6tUi1YKaCH7GjcgaZ9rKXIX4aa0Dqfo6jmpWIxUvU,11114
63
63
  clearskies/columns/category_tree_ancestors.py,sha256=FRFAMD3E6GzOzzLkY-IhWBdiYSpHHnthF5kX8V3iPr8,1380
64
- clearskies/columns/category_tree_children.py,sha256=2I3iOBVzcxPp1_NojsCC0exfQDipxbYzGelOcQeUY1M,5267
64
+ clearskies/columns/category_tree_children.py,sha256=N9E_YUIGRKoLCCGRD58a8HELiKfgsk12VtEZ7D7MCio,5239
65
65
  clearskies/columns/category_tree_descendants.py,sha256=qM3rgqmxpUkOcCz8b-xCsMDRxjrBpPKyQ_FLGG0ItUc,1234
66
- clearskies/columns/created.py,sha256=cQQRjqaVwLIQYWyEbuaYsIwYuZOpAXe7XYmysLzeuqY,2851
67
- clearskies/columns/created_by_authorization_data.py,sha256=7Tp9HOvZXRt6_sUO_8i3UqJ1brp0ZWocYKCCdPW8BSs,4824
68
- clearskies/columns/created_by_header.py,sha256=WQOl3eyC_bcPn646eTXaynDWEhWtJ6Rw3B31ls-f4lg,3672
69
- clearskies/columns/created_by_ip.py,sha256=uyiFCwbYaQPZ0pn8asoI-zUMONBQiPnS4tHvnZHTbfU,2811
70
- clearskies/columns/created_by_routing_data.py,sha256=Joktt9TLFEnqdohKdc11yywE2ZAVNpWA1o6dP-KZyhs,3626
71
- clearskies/columns/created_by_user_agent.py,sha256=a2OaB5tacr-2Dlvzxjw6tDGhlJIBXZTb69hpy4lxVmM,2896
72
- clearskies/columns/date.py,sha256=cW94wJAp2K5Qwc04Rl_HY9VD31ia0VQyFcecuvKrVa8,8719
73
- clearskies/columns/datetime.py,sha256=IJPoCXNMvh_D-KSuE2UBR1dJIfb0EHGooCWonqqvLj0,10463
66
+ clearskies/columns/created.py,sha256=SPQb2rj7H8tpmJUV9c3Q7QyEvWuAhOac5OYMhSuMVvg,2835
67
+ clearskies/columns/created_by_authorization_data.py,sha256=wYTcFUc3sE1T8vp6iPuB7FrEXCSQzEKXkh1ysDsgI3Q,4796
68
+ clearskies/columns/created_by_header.py,sha256=e1gkXljx_vx8ephl7haCjDQJGRyMeoSqlkGV5HYeVrE,3644
69
+ clearskies/columns/created_by_ip.py,sha256=S9Y0o4Ldv9VHSgZhcNRJO_SHzxLJxyPlR8r8wK1awvM,2783
70
+ clearskies/columns/created_by_routing_data.py,sha256=BoUuIQferx60dJlDr1RO57ww7oeNYhTee9dYKlZiGCU,3626
71
+ clearskies/columns/created_by_user_agent.py,sha256=1UzxSQkMtYNVWR3S7vNVIECTysvPofRYQQQMewWGuSI,2868
72
+ clearskies/columns/date.py,sha256=Ilyr_Ho4AA9He_FdooJ2gREJcGajXseFQLSw2H_EcEY,8826
73
+ clearskies/columns/datetime.py,sha256=vURADJYfxyiq0j0Lz5uZtE95t-544G0_uCkl9ppCEcw,10570
74
74
  clearskies/columns/email.py,sha256=74es6fdA4MJQ9cm5WfEgEvqZgj5pdnFE96cKN1YQ4b0,1868
75
- clearskies/columns/float.py,sha256=S5ypL0WfguWzKOQzFq5m7bd31IzndNqwazeUIsGcrtk,4453
76
- clearskies/columns/has_many.py,sha256=RIIks40phXZ_leKoqX4j4w3X6gpRJjDHf7A9SJs9xC0,18670
77
- clearskies/columns/has_many_self.py,sha256=kFr2eEviiKy_G7zTQx-YqBi5qlWKQaxBylRp-CNiOxg,2425
75
+ clearskies/columns/float.py,sha256=1XXxuncEAzqqqtCnshpnt-yp4vgI8WcelwSJ2imo4-8,4560
76
+ clearskies/columns/has_many.py,sha256=Frd1LQRiAyh0o2GVrJBlztuaAOAAF_7FzgDt0ZyuRPM,18642
77
+ clearskies/columns/has_many_self.py,sha256=9EG4A7i3W4atOsHPbEKIahoU0QgWohbRFIA29dBOSxg,2403
78
78
  clearskies/columns/has_one.py,sha256=8cwfNmAFO1DdfBsZ1scpc3LwLoSUHWR_zPn4T-DN0Mg,396
79
- clearskies/columns/integer.py,sha256=qWG6JQhZlhrTrIepbeJRdfgShwNXs2ZMj3vCbBDDrIU,4543
80
- clearskies/columns/json.py,sha256=XZYNs4I2jykYvx8b_jPuRB_x5Ko-AgnnmtV7bjzDzOA,3458
81
- clearskies/columns/many_to_many_ids.py,sha256=d2kW_QBbxOMU37_uO0LvDMSr1rB4sAlavabEgtze2qc,14158
82
- clearskies/columns/many_to_many_ids_with_data.py,sha256=i4D9vh61MfP8PpH68vxHGwQgiYJ2YIWKj-EwejEx_nY,11910
83
- clearskies/columns/many_to_many_models.py,sha256=SUmPcLQqUuj2ptXfNKqHd-DjHBB2yAuklaLbN5dvXFk,7238
84
- clearskies/columns/many_to_many_pivots.py,sha256=qBsHUBpHSNAAtPfEjMw8rJ7_P51117iA4f1Nz_yaQ0Y,5731
85
- clearskies/columns/phone.py,sha256=Cv_gAeREmFbTIln6y6yQZrkxzB8PWvKtK3bneABdEko,5219
86
- clearskies/columns/select.py,sha256=P_nb1n-VQs7-w_GcZ7AAWq0_QA_KQ7EA_kBOng_HgLY,2751
87
- clearskies/columns/string.py,sha256=MeRN5gMf6SjUV1w6U013-QFWMCEx9h5NJz8uZMlvIhQ,2451
88
- clearskies/columns/timestamp.py,sha256=_1T20qTVHeLEqqKlxb7IFwUvcYsLWPrGMylPwvVCGBc,5827
89
- clearskies/columns/updated.py,sha256=_gJw8W_HlNKr-bHTE4eHqMqbFqJ4JcSzTRDLOt7d0Us,3481
90
- clearskies/columns/uuid.py,sha256=WjWqkGHU6MlxjNQYW8lscgsOfG4mDQnJZGxEqQAoeQU,2432
79
+ clearskies/columns/integer.py,sha256=z4o0t13h7MC9vGxsr3fo0_TLHHSZB2uSqE_QDDUakt8,4650
80
+ clearskies/columns/json.py,sha256=4uKs1fu-3ulnW-6iwb6GfvEEuv5uXeWgmiNC7R40M98,3565
81
+ clearskies/columns/many_to_many_ids.py,sha256=kkLfb14EKInkkV5xVM9sXTgf0PLmIQlDOJNRIRlzLCY,14265
82
+ clearskies/columns/many_to_many_ids_with_data.py,sha256=FhXPvAtHtBCne-bcwURQplm374t7tVLcEIicb40LpYg,12017
83
+ clearskies/columns/many_to_many_models.py,sha256=CMrkyja0FWXh5BwlZMLZ5ltl6I5Avpi3K78C3SOgV40,7345
84
+ clearskies/columns/many_to_many_pivots.py,sha256=ECG5GYOE_9mGGmXWHdsFMZF5IcLksPxTq8V33SHzL8M,5715
85
+ clearskies/columns/phone.py,sha256=msrCCha75bAVERQ3TD7dcR78PA2sx27IIPic9qE9BQ0,5219
86
+ clearskies/columns/select.py,sha256=0_0-Qw8vuJKLW6NV5w72FJPB_HP9bDQ0YR3eKfqqpQE,2751
87
+ clearskies/columns/string.py,sha256=0KoknprsC75UWqEXQ60t_CuPJv2vwszXpRWBhh8Hl_Y,2586
88
+ clearskies/columns/timestamp.py,sha256=8ZJhaM-RyiyPHy8ABJLWMRhCrnoA-3ZbterfwTj-e-w,5934
89
+ clearskies/columns/updated.py,sha256=XyhfcjyElX4HeOek4M_qUPuHQZ8IxeK1v130dx12hv0,3453
90
+ clearskies/columns/uuid.py,sha256=des-JoGJ5llYjM5xtnLYoEFRBJPmJkvA-hxBwQAiO4o,2404
91
91
  clearskies/configs/README.md,sha256=4-r2FvkrBTrKkcKgJ5O3Qj1RZ7nnkknenKze4XYlQDs,4827
92
- clearskies/configs/__init__.py,sha256=xoll5EalODwI_W1HtWutAIJ_ndzLyWLqvfZonVUtmYY,5017
92
+ clearskies/configs/__init__.py,sha256=nfaevClmzwsTMYDH4R_6t2VRg4OoeInIocvclIQ-8kY,5079
93
93
  clearskies/configs/actions.py,sha256=5OwrokU8uTSSQ_6SvL94SOP5JVkvRRFGAXNcCdMt8aQ,1388
94
94
  clearskies/configs/any.py,sha256=_nac0cZY9uRhwGQZqj2N72ZFehYqOedb97lPADP3Yg8,352
95
95
  clearskies/configs/any_dict.py,sha256=B8Gd0zwC-6UxvMvPsXMJySzVMADxG3oxnrhgBnJWCGo,871
@@ -101,10 +101,11 @@ clearskies/configs/boolean_or_callable.py,sha256=nvvWD_A5HoxW-6_rZJL23_1517T8IQ6
101
101
  clearskies/configs/callable_config.py,sha256=gcTlRwCppdaj1gFuCugc4ahxMCTEDKD_z_f85eadWpc,650
102
102
  clearskies/configs/columns.py,sha256=WhdpPUiwVqwBO2XCDDiMym2nWr_1-L1JoICyob4T6Wo,1258
103
103
  clearskies/configs/conditions.py,sha256=a09bVac4-10ZtKPQGSu_e9VnHnwITwy_7_T4NekXpgs,1008
104
- clearskies/configs/config.py,sha256=YD7uDn1bbW4TYlcFjKFvx90HoSGbIYn77qjdAHm6z9E,833
104
+ clearskies/configs/config.py,sha256=Mw9wnPzEekHGfmNFH9f2vJ3BOPx3l1ktxwZc95flyQg,873
105
105
  clearskies/configs/datetime.py,sha256=jRYXwLeTUqh8FNwWq_0yYoSH8YU9NEhYhuQScr56nTg,653
106
106
  clearskies/configs/datetime_or_callable.py,sha256=81YCDk0g5cIxdXxgem1Ei6m7gUI213Cfryp3GyBfpD4,799
107
107
  clearskies/configs/endpoint.py,sha256=NEDthtdPzejAot7yzUjC01PvQJR9BIyk5YnWXCi1w9I,759
108
+ clearskies/configs/endpoint_list.py,sha256=I_o5T46XT-I-tbQODJbpCF9LkgEccOz97mYFZuwjx4M,1144
108
109
  clearskies/configs/float.py,sha256=3870-DkoXCyeOSwUGa69BzhG4XI_tNfei5cX-q1b1UQ,585
109
110
  clearskies/configs/float_or_callable.py,sha256=lIOg20Xw0AOB0k3I7f0b98srVgMWQKcyM4aWRT0tUI4,708
110
111
  clearskies/configs/integer.py,sha256=d6uoQaUoE01rrWOsxYl1vHG_raUFmB0AUOgoCWwOVC0,584
@@ -137,14 +138,15 @@ clearskies/configs/writeable_model_column.py,sha256=ZwroRcvmNznggtNMSZiAmKAvllcV
137
138
  clearskies/configs/writeable_model_columns.py,sha256=D8E4aQRg1MX8-TM8lkyrWE-G_YoX2eerX4KLszgk0hA,323
138
139
  clearskies/configurable.py,sha256=FFkKwlQk17KOLnZiTsTF3hrCu2WxRSuuddNNhz9aySY,3049
139
140
  clearskies/contexts/__init__.py,sha256=f7XVUq2UKlDH6fjmcUWk6lbe9p_OaGpZ5ZjM6CuwTGQ,247
140
- clearskies/contexts/cli.py,sha256=1y7g45FiHbI3Q6JEmwskWVuXPWgmddyK49FfgSafR5U,227
141
- clearskies/contexts/context.py,sha256=ESnzmhZ7pjDVsmbT7eZTsR26ZvgV-aeeUGsDsT1oK0s,3109
142
- clearskies/contexts/wsgi.py,sha256=xXHb3m8m44dHKsPX4WLIFExWg5Do2Zv6mQtyb4V4pnM,547
143
- clearskies/contexts/wsgi_ref.py,sha256=awy-J4DELrVyD5E9FysPE5A_W9JLEZOf2g1hIAogJUA,1733
141
+ clearskies/contexts/cli.py,sha256=HSzHieVsD3a0uQb6FBue17HVT4PjSY8LWhjW3rw7lQw,285
142
+ clearskies/contexts/context.py,sha256=jbd8JdDkFruHiAYHZWrLjOvqz31LkvfApArCOVwkyfo,3630
143
+ clearskies/contexts/wsgi.py,sha256=lENadrI53LYUCa3Mn4JjxhTn-53Ry9l6w2kBU3CQ5AM,611
144
+ clearskies/contexts/wsgi_ref.py,sha256=Tkq0QYE7_ZdYvEcRKbyh-6UwwuExUadKdylwdxcCmQQ,1814
145
+ clearskies/decorators.py,sha256=I91l4Iwe2swzkZPWUWywmIV2LfTBlw9IWmUfspKm3yY,1040
144
146
  clearskies/di/__init__.py,sha256=uJ1NkACEIaot7ALr3M6vQ55Pe9By_s_1z52ssAnw28E,466
145
147
  clearskies/di/additional_config.py,sha256=65INxw8aqTZQsyaKPj-aQmd6FBe4_4DwibXGgWYBy14,5139
146
148
  clearskies/di/additional_config_auto_import.py,sha256=XYw0Kcnp6hp-ee-c0YjiATwJvRb2E82xk9PuoX9dGRY,758
147
- clearskies/di/di.py,sha256=g6v2Pjga1EUJ6BaHlX8HL3qoK1z6l_iPl7oNN6eJD9Y,45131
149
+ clearskies/di/di.py,sha256=pWNzUDd2nxnKZP12I5SpAL3PYBWCmnM6jsT7i7cEGCM,45137
148
150
  clearskies/di/inject/__init__.py,sha256=plEkWId-VyhvqX5KM2HhdCqi7_ZJzPmFz69cPAo812Y,643
149
151
  clearskies/di/inject/by_class.py,sha256=dUA_ZseLZWT30wnkg272rWwe5FzUpr0gCMMQP_HFahc,796
150
152
  clearskies/di/inject/by_name.py,sha256=oEfzeotUXPbUAiBrkE7i19nD2ISk59EEwCH3pcgSmqA,639
@@ -157,24 +159,24 @@ clearskies/di/inject/secrets.py,sha256=zK7ZJJwZS4l13OVlbBs8ESL8yMxa6jDa4_tiLUvUT
157
159
  clearskies/di/inject/utcnow.py,sha256=3OAzR82k0yEfQ65bJ-4Q7gCZH-Y_viucPJQtfcHu_AA,365
158
160
  clearskies/di/inject/uuid.py,sha256=ncXvVNevj6CCwxh1r1IGojEPZaOuHnRjYT7B69RTVhs,400
159
161
  clearskies/di/injectable.py,sha256=TTgqhx494470I61-88BUQmHmevfat-wXVseKl8pQOEk,852
160
- clearskies/di/injectable_properties.py,sha256=0cONm04h_PIK-nIVg1UY2kUnO_FlgktJ1Z9up3vij_8,6463
162
+ clearskies/di/injectable_properties.py,sha256=yJP0J7l7tjG2soyXtrfDgktE7M8tQHaP-55Cmtq0b7M,6466
161
163
  clearskies/di/test_module/__init__.py,sha256=7YHQF7JHP0FdI7GdEGANSZ_t1EISQYhUNm1wqOg0NKw,88
162
164
  clearskies/di/test_module/another_module/__init__.py,sha256=8SRmHPDepLKGWTUSc1ucDF6U8mJPsNDsBDmBQCpzPWo,35
163
165
  clearskies/di/test_module/module_class.py,sha256=I_-wnMuHfbsvti-7d2Z4bXnr6deo__uvww9nds9qrlE,46
164
166
  clearskies/end.py,sha256=Z4C9n7OvBky_640oJ8d19jIr_ap1iqjGJqqO6s_zF5g,8919
165
- clearskies/endpoint.py,sha256=4Wzl89zmNwhKDGqMMlQhzy5MJWx5x_hkbYMDdNguFzw,48817
166
- clearskies/endpoint_group.py,sha256=ZAkkUsOyd5GFyh_kWFezuO7f8dOzS49pH9bcaaDuW7A,10997
167
+ clearskies/endpoint.py,sha256=G3oFdAYOFeYVYpMwxib6mMO5FpuF2DtrTBW04spJ-aw,48827
168
+ clearskies/endpoint_group.py,sha256=OiGCxVyhLMORswawtYey9xLtCt4qjK8hGb9tIfPi5sc,11285
167
169
  clearskies/endpoints/__init__.py,sha256=CZJQ3rHF1GA0QvH9CKxUFM1pEnJrg-2wAj5rzIDdzjc,689
168
170
  clearskies/endpoints/advanced_search.py,sha256=c1fj81nohHGqe56t00o6kLN3XIh3kfy-aKy_C1pxwgw,21835
169
- clearskies/endpoints/callable.py,sha256=fdVAa2Dhfg3-OikoE9-PiDnJuZRD0MarQKcdRGwlnaA,13904
170
- clearskies/endpoints/create.py,sha256=Fgm8ZN2WreGTjWreSyty1c80SP8_qHcjK_be9hpWELw,8757
171
- clearskies/endpoints/delete.py,sha256=GWnD5-By_5clJzDi8Mac5aeL7HArDpRet3Qo7GPinWk,5296
172
- clearskies/endpoints/get.py,sha256=w-NWyq9GcQqyBHGS-dTqRdaXRXdvooD-iZ_doDbemNA,10382
173
- clearskies/endpoints/health_check.py,sha256=Dtj_U2gnrXr7lHXEF0fvldAmA0njsbhivXiKJDe7h7o,5520
174
- clearskies/endpoints/list.py,sha256=y1I27NlkneYEQ5pc0bKi-99NhoYQlj8kiMJzw91DGCc,25825
175
- clearskies/endpoints/restful_api.py,sha256=CJZIVEhnTybCwDyQoHmvpvJ7e8p8ays37R1IVX6v79I,16663
176
- clearskies/endpoints/simple_search.py,sha256=44G4GqNwgNDhcmfpQUFierqvgMxqoRc6y4gqvtHn1xw,9728
177
- clearskies/endpoints/update.py,sha256=t8kD5zdmcBFSQBbi7C5VnCNs2AUq6xU1cCkvJAKNlFw,7542
171
+ clearskies/endpoints/callable.py,sha256=J4XhxraxlWi09MPTh5cVJxX0iRb-xn0PIsT8wMzATQ4,13943
172
+ clearskies/endpoints/create.py,sha256=Ex4yciWncdvu7XX__y4rmMXil-07SwPdV5rip8AKkOU,8743
173
+ clearskies/endpoints/delete.py,sha256=voXUUs-BDhI1FqppAV6KJzsL4CLROSBMbb6gLzkNRUY,5282
174
+ clearskies/endpoints/get.py,sha256=RRiNLDyCJdRMOVPpzKcMRNwKnaGehL-ZhDfXtOF9SNg,10368
175
+ clearskies/endpoints/health_check.py,sha256=IRdBVR7CZts5o71dOd3qtP9U_WjHv_1tmceCocJt914,5506
176
+ clearskies/endpoints/list.py,sha256=APek0rCtNZJScbpX6PgPE1rd3Uy5OEgZ3-bsh3LbwiI,25811
177
+ clearskies/endpoints/restful_api.py,sha256=FjNYg4-qeDjjOSc8QPPFQ74SW4b_84zyQ38ck-g5pRU,16635
178
+ clearskies/endpoints/simple_search.py,sha256=J5TT32lvimf9XgO1cGjCpK9Pjy9NjuoihS3CGlcUwrE,9714
179
+ clearskies/endpoints/update.py,sha256=hUch9MgMhxq52AiqqI6NtxeJTOPqIfXsuZ_7XVaCjEw,7528
178
180
  clearskies/environment.py,sha256=LV7XztYYUZhaL8zWXi2EC-u6DLrCPxJTeUzmCy7p-ZA,3703
179
181
  clearskies/exceptions/__init__.py,sha256=invmb0wSTpkUuPSEl49bAjU8ing8jt0vEpF2TTnvd_I,595
180
182
  clearskies/exceptions/authentication.py,sha256=VlNS0Aq2_6LbG0jiE8jULpS54jNW8a8px0gPrK3EZCc,42
@@ -198,13 +200,12 @@ clearskies/input_outputs/input_output.py,sha256=W5h8a9XFEqwi3h6v17okblz8sOozUj-m
198
200
  clearskies/input_outputs/programmatic.py,sha256=gfsNFIfiF5cvxi1aS9SgArcKYUgkL5gyxjCMQLwgivY,1711
199
201
  clearskies/input_outputs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
200
202
  clearskies/input_outputs/wsgi.py,sha256=94tgWxiwpwvJA9G4nG-hCHteg0pq9pIDCVhnheZuAQc,2544
201
- clearskies/model.py,sha256=qdGco45F2icRLxhNy5Chtuww-q72jac6eoUpvFn40bU,26492
202
- clearskies/parameters_to_properties.py,sha256=kbU9Ln2mU3XX4p-QNepGgS4HiQ1BUuJnhx9T6kgB9jw,1004
203
+ clearskies/model.py,sha256=MMeoMvwH_Ijca0hLxEf0f8UTczzliu1Lj91CxYOHogg,73385
203
204
  clearskies/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
204
205
  clearskies/query/__init__.py,sha256=ISF80_cG3rd574sRTdKKPxAdlSjtQh_ClXKKs_MSSSo,277
205
206
  clearskies/query/condition.py,sha256=9RJrYya1Kfzx0L_BMDKQhYkN9dB7NAq5kRK5mz51YdY,8624
206
207
  clearskies/query/join.py,sha256=4lrDUQzck7klKY_VYkc4SVK95SVwyy3SVTvasnsAEyc,4713
207
- clearskies/query/query.py,sha256=J_fJ8XZXvZxZ0nZd276WXaxzOFb-bVZ-PTaAqddGhOk,6076
208
+ clearskies/query/query.py,sha256=t9tV67CeI6I1u5Uhu6KPT_qiFjvLc3GnwVM2acbXuAU,6088
208
209
  clearskies/query/sort.py,sha256=c-EtIkjg3kLjwSTdXD7sfyx-mNUhAepUV-2izprh3iY,754
209
210
  clearskies/schema.py,sha256=9S0RuFBiydsDy4kATy2BBsXJ9aWHILW0ja_q9F4kxb0,2872
210
211
  clearskies/secrets/__init__.py,sha256=WauemayzKCr-guvMu6wCL4hQUIbkDJFuNKEm8Rd6cUs,136
@@ -215,34 +216,34 @@ clearskies/secrets/akeyless.py,sha256=IUI4RYD-XdNQvyhpuElnw_O74ZY4tJUUtCHmd0dArU
215
216
  clearskies/secrets/exceptions/__init__.py,sha256=j-SLHD-DL0CT4cZXibD9kXHk63JEl_UKX6xL_nq1EfE,32
216
217
  clearskies/secrets/exceptions/not_found.py,sha256=_lZwovDrd18dUHDop5pF4mhexBPNr126xF2gOLA2-EA,36
217
218
  clearskies/secrets/secrets.py,sha256=TYN0T7XjmvETtSacDKEkyGGO9kDFCoPl5A7FNkvyNj4,1593
218
- clearskies/security_header.py,sha256=__gPaE6F_MQKpt1cFh_ZOky7I44K3yiy0Z9FeEYscK0,202
219
+ clearskies/security_header.py,sha256=suV3PMGFFJzMIsfDiT4t1sArkLVGzepyoftY0ddBWkM,431
219
220
  clearskies/security_headers/__init__.py,sha256=JUpc4Y8dNBinDQAkP7OOABR7N787-lRR23boSWmY6Us,285
220
- clearskies/security_headers/cache_control.py,sha256=1gxASHq74Azpm_19kDFEyT55KuO7gYeyauuvTAZVeaA,2279
221
- clearskies/security_headers/cors.py,sha256=8cErvdprnT3IlBaoENbNz43UwFpaUWI_NXtJJaYEH3c,1859
222
- clearskies/security_headers/csp.py,sha256=LQOebTB3pCodiTrJGi6rzac62T1jRAM4XSxuFo2rlqo,2993
223
- clearskies/security_headers/hsts.py,sha256=sDMgdFxZkwcNvJS2CxXBKGrAWrhs3JqvuOV0Z8Hy2XA,760
221
+ clearskies/security_headers/cache_control.py,sha256=n_fcN4JPfHH8oCC6iSdBaDcAw-5JgPjZQWbD_lMg6qQ,2251
222
+ clearskies/security_headers/cors.py,sha256=zhTLo1FiCwSTgDOYURz7RB0XqLeP456A8mcP_mHBd48,1831
223
+ clearskies/security_headers/csp.py,sha256=jA0ms1X6w52W86-RXcW6dblI_RL7DlrjKt57gcvoNAM,2965
224
+ clearskies/security_headers/hsts.py,sha256=_2EjHgH-OdQ24NF4eWhIi71wcXz2u2K5Q1wwR4NOTe0,732
224
225
  clearskies/security_headers/x_content_type_options.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
225
226
  clearskies/security_headers/x_frame_options.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
226
227
  clearskies/test_base.py,sha256=Nw6qwsPMOx-QT_6wXn6f9P4BcA7OeGrs83IC2naNMYY,205
227
228
  clearskies/typing.py,sha256=Kme9es5c_lw4qQCbCL7lKXtDemVl0_qBy7jxKIu4yyg,378
228
- clearskies/validator.py,sha256=u9xNOfXbDOTpP1XLu-5O_QGJ6Ja674HRCW6QCxtlD1c,723
229
+ clearskies/validator.py,sha256=nGFwe74LMJnEO7r2mgwd_V25bLpxUDH7IMolm-zk-3w,1332
229
230
  clearskies/validators/__init__.py,sha256=Hz0L5Y7EkeK4Px6WcdQ3ku6VqUGpLHX0ZWwCpT1ts1U,1248
230
- clearskies/validators/after_column.py,sha256=WPbto20CEYaKjjQtO-0t1s5DvTKW7ipDMNYaqNlr1zY,2394
231
+ clearskies/validators/after_column.py,sha256=6qFBodmcrVELDAdvc7w300RDIBFQlsgAmAIJ2-Gv6n4,2366
231
232
  clearskies/validators/before_column.py,sha256=fDXhgPwGvnjk1Xy6iwebE8q--BeD48uu3cVGpRGTSBc,528
232
- clearskies/validators/in_the_future.py,sha256=RLpQvIpng-0eDbOmI5xVLlnXnxS4YwRalYJTDFf_Y74,1012
233
+ clearskies/validators/in_the_future.py,sha256=fKniwgaweKiPrVGqLT1CltmLcdc6zlK9JNA7vwU-w_8,998
233
234
  clearskies/validators/in_the_future_at_least.py,sha256=C8g6xizvjgB9ZYI8lsccqmxiWR-AmZDuV2hW9gJ3w3A,407
234
235
  clearskies/validators/in_the_future_at_most.py,sha256=55Zlw4hEmjm7VbUAesvFpP2Ha1gcEZJuPMZE_15bY0Y,361
235
- clearskies/validators/in_the_past.py,sha256=nj8ytA8zZYCR4paPWvz-DH-NimFAEXkDtT23HIRrXDc,1008
236
+ clearskies/validators/in_the_past.py,sha256=lxUJQ_bcMTW5_NPhbZM1tsOn7ejC1gIBQ_wwD-tK6no,994
236
237
  clearskies/validators/in_the_past_at_least.py,sha256=58oZEWCL9GC-8kC-VyxN_455DQC2IdF2bWLsOxqLVqU,359
237
238
  clearskies/validators/in_the_past_at_most.py,sha256=e78fz7XIBmvbw5EAj-4xjRqiQ-Ul1xKKwMXL-erpxto,357
238
239
  clearskies/validators/maximum_length.py,sha256=lTatC9xFQ2JAiBOJtWCrqNEPh7O5k-_L5--FAc-z05U,877
239
240
  clearskies/validators/maximum_value.py,sha256=dy3h2LdnPlAhQoVDCtlrf9Yd8yIrmax08u_qSmBddmI,889
240
241
  clearskies/validators/minimum_length.py,sha256=gOMbtkoWxvWT4WEPtdP_5xCTn5GsshaaTC1vADpBoao,878
241
242
  clearskies/validators/minimum_value.py,sha256=Vz0e_9U5KYqBGqfrVBOtPiVtmNPWwFEGPAuMH1q7Ky0,890
242
- clearskies/validators/required.py,sha256=gNKEZsYP04PQZc0bE_EpgFw4dWrcKnml2D2QthuD7lY,1410
243
- clearskies/validators/timedelta.py,sha256=TLtFs4KhOmJpDdrf9mmsSiLtt8yz-i0ym30Cw4EcykY,1960
244
- clearskies/validators/unique.py,sha256=m59azxUecp7t3WFCehcmQ6E1ZpyXdcLQ1KOSm_p5Hn4,1077
245
- clear_skies-2.0.0.dist-info/LICENSE,sha256=3Ehd0g3YOpCj8sqj0Xjq5qbOtjjgk9qzhhD9YjRQgOA,1053
246
- clear_skies-2.0.0.dist-info/METADATA,sha256=JLZ7NxtWMmVIm5nNmlP1XYzqAagPw-g11XmJpJ_Ndgo,1757
247
- clear_skies-2.0.0.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
248
- clear_skies-2.0.0.dist-info/RECORD,,
243
+ clearskies/validators/required.py,sha256=f8VE9sbvIorTIC0q_77DyDfDjAJYFJs-uTgJkAwLxX4,1362
244
+ clearskies/validators/timedelta.py,sha256=nFEHefllfMZsguJoSdeWzaBsxBDZfMZoIdt5jZxeg0g,1932
245
+ clearskies/validators/unique.py,sha256=DZA7dbLucYDShtr1bVP2pnmbzciIEMvYSrTjOKCQ4vM,1029
246
+ clear_skies-2.0.2.dist-info/LICENSE,sha256=3Ehd0g3YOpCj8sqj0Xjq5qbOtjjgk9qzhhD9YjRQgOA,1053
247
+ clear_skies-2.0.2.dist-info/METADATA,sha256=jsf2tuLi8kFkZmJENAnP9AIfNC-k_7spE1xaXXaLw0M,1762
248
+ clear_skies-2.0.2.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
249
+ clear_skies-2.0.2.dist-info/RECORD,,
clearskies/__init__.py CHANGED
@@ -5,6 +5,7 @@ from . import (
5
5
  columns,
6
6
  configs,
7
7
  contexts,
8
+ decorators,
8
9
  di,
9
10
  endpoints,
10
11
  exceptions,
@@ -15,25 +16,21 @@ from . import (
15
16
  typing,
16
17
  validators,
17
18
  )
18
- from . import parameters_to_properties as parameters_to_properties_module
19
+ from .action import Action
19
20
  from .column import Column
20
21
  from .configurable import Configurable
21
22
  from .end import End # type: ignore
22
23
  from .endpoint import Endpoint
23
24
  from .endpoint_group import EndpointGroup
24
- from .schema import Schema
25
-
26
- parameters_to_properties = parameters_to_properties_module.parameters_to_properties
27
-
28
- from .action import Action
29
25
  from .environment import Environment
30
26
  from .model import Model
27
+ from .schema import Schema
31
28
  from .security_header import SecurityHeader
32
29
  from .validator import Validator
33
30
 
34
31
  __all__ = [
35
32
  "Action",
36
- "Authentication",
33
+ "authentication",
37
34
  "autodoc",
38
35
  "backends",
39
36
  "Column",
@@ -50,7 +47,6 @@ __all__ = [
50
47
  "exceptions",
51
48
  "functional",
52
49
  "Model",
53
- "parameters_to_properties",
54
50
  "Schema",
55
51
  "typing",
56
52
  "Validator",
@@ -59,4 +55,5 @@ __all__ = [
59
55
  "SecurityHeader",
60
56
  "security_headers",
61
57
  "validators",
58
+ "decorators",
62
59
  ]
@@ -12,6 +12,10 @@ if TYPE_CHECKING:
12
12
 
13
13
 
14
14
  class Authentication(clearskies.configurable.Configurable, requests.auth.AuthBase):
15
+ """
16
+ Authentication!
17
+ """
18
+
15
19
  is_public = True
16
20
  can_authorize = False
17
21
  has_dynamic_credentials = False
@@ -1,4 +1,8 @@
1
1
  class Authorization:
2
+ """
3
+ Authorization!
4
+ """
5
+
2
6
  def gate(self, authorization_data, input_output):
3
7
  """
4
8
  Return True/False to denote if the given user, as represented by the authorization data, should be allowed access.
@@ -2,16 +2,21 @@ import json
2
2
  from typing import Any
3
3
 
4
4
  import clearskies.configs
5
+ import clearskies.decorators
5
6
  import clearskies.di
6
- import clearskies.parameters_to_properties
7
7
  from clearskies.authentication.authentication import Authentication
8
8
  from clearskies.exceptions import ClientError
9
9
  from clearskies.security_headers.cors import Cors
10
10
 
11
11
 
12
12
  class Jwks(Authentication, clearskies.di.InjectableProperties):
13
- """The URL where the JWKS can be found."""
13
+ """
14
+ Validate a JWT against a JWKS (JSON Web Key Set)
15
+ """
14
16
 
17
+ """
18
+ The URL of the JWKS
19
+ """
15
20
  jwks_url = clearskies.configs.String(required=True)
16
21
 
17
22
  """
@@ -74,7 +79,7 @@ class Jwks(Authentication, clearskies.di.InjectableProperties):
74
79
  """
75
80
  _jwks_fetched = None
76
81
 
77
- @clearskies.parameters_to_properties.parameters_to_properties
82
+ @clearskies.decorators.parameters_to_properties
78
83
  def __init__(
79
84
  self,
80
85
  jwks_url: str,
@@ -1,6 +1,6 @@
1
1
  import clearskies.configs
2
+ import clearskies.decorators
2
3
  import clearskies.di
3
- import clearskies.parameters_to_properties
4
4
  from clearskies import autodoc
5
5
  from clearskies.authentication.authentication import Authentication
6
6
 
@@ -460,7 +460,7 @@ class SecretBearer(Authentication, clearskies.di.InjectableProperties):
460
460
  _secret: str = None # type: ignore
461
461
  _alternate_secret: str = None # type: ignore
462
462
 
463
- @clearskies.parameters_to_properties.parameters_to_properties
463
+ @clearskies.decorators.parameters_to_properties
464
464
  def __init__(
465
465
  self,
466
466
  secret_key: str = "",
@@ -495,7 +495,7 @@ class SecretBearer(Authentication, clearskies.di.InjectableProperties):
495
495
  if not self._alternate_secret:
496
496
  self._alternate_secret = (
497
497
  self.secrets.get(self.alternate_secret_key)
498
- if self.secret_key
498
+ if self.alternate_secret_key
499
499
  else self.environment.get(self.alternate_environment_key)
500
500
  )
501
501
  return self._alternate_secret
@@ -9,9 +9,9 @@ import clearskies.columns.datetime
9
9
  import clearskies.columns.json
10
10
  import clearskies.configs
11
11
  import clearskies.configurable
12
+ import clearskies.decorators
12
13
  import clearskies.model
13
14
  import clearskies.query
14
- from clearskies import parameters_to_properties
15
15
  from clearskies.autodoc.schema import Integer as AutoDocInteger
16
16
  from clearskies.autodoc.schema import Schema as AutoDocSchema
17
17
  from clearskies.autodoc.schema import String as AutoDocString
@@ -586,7 +586,7 @@ class ApiBackend(clearskies.configurable.Configurable, Backend, InjectableProper
586
586
  _auth_injected = False
587
587
  _response_to_model_map: dict[str, str] = None # type: ignore
588
588
 
589
- @parameters_to_properties.parameters_to_properties
589
+ @clearskies.decorators.parameters_to_properties
590
590
  def __init__(
591
591
  self,
592
592
  base_url: str,
@@ -9,6 +9,19 @@ from clearskies.autodoc.schema import Schema as AutoDocSchema
9
9
 
10
10
 
11
11
  class Backend(ABC):
12
+ """
13
+ Conecting models to their data since 2020!
14
+
15
+ The backend system acts as a flexible layer between models and their data sources. By changing the backend attached to a model,
16
+ you change where the model fetches and saves data. This might be a database, an in-memory data store, a dynamodb table,
17
+ an API, and more. This allows you to interact with a variety of data sources with the models acting as a standardized API.
18
+ Since endpoints also rely on the models for their functionality, this means that you can easily build API endpoints and
19
+ more for a variety of data sources with a minimal amount of code.
20
+
21
+ Of course, not all data sources support all functionality present in the model. Therefore, you do still need to have
22
+ a fair understanding of how your data sources work.
23
+ """
24
+
12
25
  supports_n_plus_one = False
13
26
  can_count = True
14
27
 
@@ -1,7 +1,6 @@
1
1
  from typing import Any, Callable
2
2
 
3
3
  import clearskies
4
- from clearskies import parameters_to_properties
5
4
  from clearskies.autodoc.schema import Integer as AutoDocInteger
6
5
  from clearskies.autodoc.schema import Schema as AutoDocSchema
7
6
  from clearskies.autodoc.schema import String as AutoDocString
clearskies/column.py CHANGED
@@ -9,9 +9,9 @@ import clearskies.configs.string
9
9
  import clearskies.configs.string_or_callable
10
10
  import clearskies.configs.validators
11
11
  import clearskies.configurable
12
+ import clearskies.decorators
12
13
  import clearskies.di
13
14
  import clearskies.model
14
- import clearskies.parameters_to_properties
15
15
  import clearskies.typing
16
16
  from clearskies.autodoc.schema import Schema as AutoDocSchema
17
17
  from clearskies.autodoc.schema import String as AutoDocString
@@ -24,13 +24,10 @@ if TYPE_CHECKING:
24
24
 
25
25
  class Column(clearskies.configurable.Configurable, clearskies.di.InjectableProperties):
26
26
  """
27
- The base column.
27
+ Columns are used to build schemes and enable a variety of levels of automation with clearskies.
28
28
 
29
- This class (well, the children that extend it) are used to define the columns that exist in a given model class -
30
- they help you build your schema. The column definitions are then used by handlers and other aspects of the
31
- clearskies framework to automate things like input validation, front-end/backend-transformations, and more.
32
- Many column classes have their own configuration settings, but there are also some common configuration settings
33
- defined here.
29
+ Columns are used to define your schemas in clearskies, especially via models. The column definitions are then used by endpoints
30
+ and other aspects of the clearskies framework to automate things like input validation, front-end/backend-transformations, and more.
34
31
  """
35
32
 
36
33
  """
@@ -672,7 +669,7 @@ class Column(clearskies.configurable.Configurable, clearskies.di.InjectablePrope
672
669
  """
673
670
  auto_doc_class: type[AutoDocSchema] = AutoDocString
674
671
 
675
- @clearskies.parameters_to_properties.parameters_to_properties
672
+ @clearskies.decorators.parameters_to_properties
676
673
  def __init__(
677
674
  self,
678
675
  default: str | None = None,
@@ -760,6 +757,10 @@ class Column(clearskies.configurable.Configurable, clearskies.di.InjectablePrope
760
757
  return instance._transformed_data[self.name]
761
758
 
762
759
  def __set__(self, instance: Model, value) -> None:
760
+ # this makes sure we're initialized
761
+ if "name" not in self._config: # type: ignore
762
+ instance.get_columns()
763
+
763
764
  instance._next_data[self.name] = value
764
765
 
765
766
  def finalize_and_validate_configuration(self):
@@ -2,8 +2,9 @@ from __future__ import annotations
2
2
 
3
3
  from typing import Any
4
4
 
5
+ import clearskies.decorators
5
6
  import clearskies.typing
6
- from clearskies import configs, parameters_to_properties
7
+ from clearskies import configs
7
8
  from clearskies.column import Column
8
9
  from clearskies.columns.has_many import HasMany
9
10
 
@@ -65,7 +66,7 @@ class Audit(HasMany):
65
66
  _descriptor_config_map = None
66
67
  _parent_columns: dict[str, Column] | None
67
68
 
68
- @parameters_to_properties.parameters_to_properties
69
+ @clearskies.decorators.parameters_to_properties
69
70
  def __init__(
70
71
  self,
71
72
  audit_model_class,
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from collections import OrderedDict
4
4
  from typing import TYPE_CHECKING, Any, Callable
5
5
 
6
- import clearskies.parameters_to_properties
6
+ import clearskies.decorators
7
7
  import clearskies.typing
8
8
  from clearskies import configs
9
9
  from clearskies.autodoc.schema import Object as AutoDocObject
@@ -299,7 +299,7 @@ class BelongsToId(String):
299
299
  _allowed_search_operators = ["="]
300
300
  _descriptor_config_map = None
301
301
 
302
- @clearskies.parameters_to_properties.parameters_to_properties
302
+ @clearskies.decorators.parameters_to_properties
303
303
  def __init__(
304
304
  self,
305
305
  parent_model_class,
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from collections import OrderedDict
4
4
  from typing import TYPE_CHECKING, Any, Self, overload
5
5
 
6
- import clearskies.parameters_to_properties
6
+ import clearskies.decorators
7
7
  from clearskies import configs
8
8
  from clearskies.column import Column
9
9
  from clearskies.columns.belongs_to_id import BelongsToId
@@ -22,7 +22,7 @@ class BelongsToModel(Column):
22
22
  is_temporary = clearskies.configs.boolean.Boolean(default=True)
23
23
  _descriptor_config_map = None
24
24
 
25
- @clearskies.parameters_to_properties.parameters_to_properties
25
+ @clearskies.decorators.parameters_to_properties
26
26
  def __init__(
27
27
  self,
28
28
  belongs_to_column_name: str,
@@ -84,6 +84,10 @@ class BelongsToModel(Column):
84
84
  return parent_model.find(f"{parent_id_column_name}={parent_id}")
85
85
 
86
86
  def __set__(self, model: Model, value: Model) -> None:
87
+ # this makes sure we're initialized
88
+ if "name" not in self._config: # type: ignore
89
+ model.get_columns()
90
+
87
91
  setattr(model, self.belongs_to_column_name, getattr(value, value.id_column_name))
88
92
 
89
93
  def pre_save(self, data: dict[str, Any], model: Model) -> dict[str, Any]:
@@ -1,7 +1,7 @@
1
1
  from typing import Callable
2
2
 
3
+ import clearskies.decorators
3
4
  import clearskies.typing
4
- from clearskies import parameters_to_properties
5
5
  from clearskies.columns.belongs_to_id import BelongsToId
6
6
 
7
7
 
@@ -69,7 +69,7 @@ class BelongsToSelf(BelongsToId):
69
69
 
70
70
  _descriptor_config_map = None
71
71
 
72
- @parameters_to_properties.parameters_to_properties
72
+ @clearskies.decorators.parameters_to_properties
73
73
  def __init__(
74
74
  self,
75
75
  readable_parent_columns: list[str] = [],
@@ -3,7 +3,7 @@ from __future__ import annotations
3
3
  from typing import TYPE_CHECKING, Callable, Self, overload
4
4
 
5
5
  import clearskies.configs.actions
6
- import clearskies.parameters_to_properties
6
+ import clearskies.decorators
7
7
  import clearskies.typing
8
8
  from clearskies import configs
9
9
  from clearskies.autodoc.schema import Boolean as AutoDocBoolean
@@ -38,7 +38,7 @@ class Boolean(Column):
38
38
  setable = configs.BooleanOrCallable() # type: ignore
39
39
  _descriptor_config_map = None
40
40
 
41
- @clearskies.parameters_to_properties.parameters_to_properties
41
+ @clearskies.decorators.parameters_to_properties
42
42
  def __init__(
43
43
  self,
44
44
  default: bool | None = None,
@@ -82,6 +82,10 @@ class Boolean(Column):
82
82
  return super().__get__(instance, cls)
83
83
 
84
84
  def __set__(self, instance, value: bool) -> None:
85
+ # this makes sure we're initialized
86
+ if "name" not in self._config: # type: ignore
87
+ instance.get_columns()
88
+
85
89
  instance._next_data[self.name] = value
86
90
 
87
91
  def input_error_for_value(self, value: str, operator: str | None = None) -> str:
@@ -2,7 +2,7 @@ from __future__ import annotations
2
2
 
3
3
  from typing import TYPE_CHECKING, Any, Callable
4
4
 
5
- import clearskies.parameters_to_properties
5
+ import clearskies.decorators
6
6
  import clearskies.typing
7
7
  from clearskies import configs
8
8
  from clearskies.columns.belongs_to_id import BelongsToId
@@ -163,7 +163,7 @@ class CategoryTree(BelongsToId):
163
163
 
164
164
  _descriptor_config_map = None
165
165
 
166
- @clearskies.parameters_to_properties.parameters_to_properties
166
+ @clearskies.decorators.parameters_to_properties
167
167
  def __init__(
168
168
  self,
169
169
  tree_model_class,