django-cfg 1.4.119__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.
Potentially problematic release.
This version of django-cfg might be problematic. Click here for more details.
- django_cfg/__init__.py +8 -4
- django_cfg/apps/centrifugo/admin/centrifugo_log.py +33 -71
- django_cfg/apps/grpc/__init__.py +9 -0
- django_cfg/apps/grpc/admin/__init__.py +11 -0
- django_cfg/apps/grpc/admin/config.py +89 -0
- django_cfg/apps/grpc/admin/grpc_request_log.py +252 -0
- django_cfg/apps/grpc/apps.py +28 -0
- django_cfg/apps/grpc/auth/__init__.py +9 -0
- django_cfg/apps/grpc/auth/jwt_auth.py +295 -0
- django_cfg/apps/grpc/interceptors/__init__.py +19 -0
- django_cfg/apps/grpc/interceptors/errors.py +241 -0
- django_cfg/apps/grpc/interceptors/logging.py +270 -0
- django_cfg/apps/grpc/interceptors/metrics.py +306 -0
- django_cfg/apps/grpc/interceptors/request_logger.py +515 -0
- django_cfg/apps/grpc/management/__init__.py +1 -0
- django_cfg/apps/grpc/management/commands/__init__.py +0 -0
- django_cfg/apps/grpc/management/commands/rungrpc.py +302 -0
- django_cfg/apps/grpc/managers/__init__.py +10 -0
- django_cfg/apps/grpc/managers/grpc_request_log.py +310 -0
- django_cfg/apps/grpc/migrations/0001_initial.py +69 -0
- django_cfg/apps/grpc/migrations/0002_rename_django_cfg__service_4c4a8e_idx_django_cfg__service_584308_idx_and_more.py +38 -0
- django_cfg/apps/grpc/migrations/__init__.py +0 -0
- django_cfg/apps/grpc/models/__init__.py +9 -0
- django_cfg/apps/grpc/models/grpc_request_log.py +219 -0
- django_cfg/apps/grpc/serializers/__init__.py +23 -0
- django_cfg/apps/grpc/serializers/health.py +18 -0
- django_cfg/apps/grpc/serializers/requests.py +18 -0
- django_cfg/apps/grpc/serializers/services.py +50 -0
- django_cfg/apps/grpc/serializers/stats.py +22 -0
- django_cfg/apps/grpc/services/__init__.py +16 -0
- django_cfg/apps/grpc/services/base.py +375 -0
- django_cfg/apps/grpc/services/discovery.py +415 -0
- django_cfg/apps/grpc/urls.py +23 -0
- django_cfg/apps/grpc/utils/__init__.py +13 -0
- django_cfg/apps/grpc/utils/proto_gen.py +423 -0
- django_cfg/apps/grpc/views/__init__.py +9 -0
- django_cfg/apps/grpc/views/monitoring.py +497 -0
- django_cfg/apps/maintenance/admin/api_key_admin.py +7 -8
- django_cfg/apps/maintenance/admin/site_admin.py +5 -4
- django_cfg/apps/payments/admin/balance_admin.py +26 -36
- django_cfg/apps/payments/admin/payment_admin.py +65 -85
- django_cfg/apps/payments/admin/withdrawal_admin.py +65 -100
- django_cfg/apps/tasks/admin/task_log.py +20 -47
- django_cfg/apps/urls.py +7 -1
- django_cfg/config.py +106 -0
- django_cfg/core/base/config_model.py +6 -0
- django_cfg/core/builders/apps_builder.py +3 -0
- django_cfg/core/generation/integration_generators/grpc_generator.py +318 -0
- django_cfg/core/generation/orchestrator.py +10 -0
- django_cfg/models/api/grpc/__init__.py +59 -0
- django_cfg/models/api/grpc/config.py +364 -0
- django_cfg/modules/base.py +15 -0
- django_cfg/modules/django_admin/__init__.py +2 -0
- django_cfg/modules/django_admin/base/pydantic_admin.py +2 -2
- django_cfg/modules/django_admin/config/__init__.py +2 -0
- django_cfg/modules/django_admin/config/field_config.py +24 -0
- django_cfg/modules/django_admin/utils/__init__.py +41 -3
- django_cfg/modules/django_admin/utils/badges/__init__.py +13 -0
- django_cfg/modules/django_admin/utils/{badges.py → badges/status_badges.py} +3 -3
- django_cfg/modules/django_admin/utils/displays/__init__.py +13 -0
- django_cfg/modules/django_admin/utils/{displays.py → displays/data_displays.py} +2 -2
- django_cfg/modules/django_admin/utils/html/__init__.py +26 -0
- django_cfg/modules/django_admin/utils/html/badges.py +47 -0
- django_cfg/modules/django_admin/utils/html/base.py +167 -0
- django_cfg/modules/django_admin/utils/html/code.py +87 -0
- django_cfg/modules/django_admin/utils/html/composition.py +198 -0
- django_cfg/modules/django_admin/utils/html/formatting.py +231 -0
- django_cfg/modules/django_admin/utils/html/keyvalue.py +219 -0
- django_cfg/modules/django_admin/utils/html/markdown_integration.py +108 -0
- django_cfg/modules/django_admin/utils/html/progress.py +127 -0
- django_cfg/modules/django_admin/utils/html_builder.py +55 -408
- django_cfg/modules/django_admin/utils/markdown/__init__.py +21 -0
- django_cfg/modules/django_admin/widgets/registry.py +42 -0
- django_cfg/modules/django_unfold/navigation.py +28 -0
- django_cfg/pyproject.toml +3 -5
- django_cfg/registry/modules.py +6 -0
- {django_cfg-1.4.119.dist-info → django_cfg-1.5.1.dist-info}/METADATA +10 -1
- {django_cfg-1.4.119.dist-info → django_cfg-1.5.1.dist-info}/RECORD +83 -34
- django_cfg/modules/django_admin/utils/CODE_BLOCK_DOCS.md +0 -396
- /django_cfg/modules/django_admin/utils/{mermaid_plugin.py → markdown/mermaid_plugin.py} +0 -0
- /django_cfg/modules/django_admin/utils/{markdown_renderer.py → markdown/renderer.py} +0 -0
- {django_cfg-1.4.119.dist-info → django_cfg-1.5.1.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.119.dist-info → django_cfg-1.5.1.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.119.dist-info → django_cfg-1.5.1.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
django_cfg/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
django_cfg/__init__.py,sha256=
|
|
2
|
+
django_cfg/__init__.py,sha256=mpY7XOaDnNfCaqOu98wZDVwBaishlliqu2fYJgJQ2pU,1777
|
|
3
3
|
django_cfg/apps.py,sha256=72m3uuvyqGiLx6gOfE-BD3P61jddCCERuBOYpxTX518,1605
|
|
4
|
-
django_cfg/config.py,sha256=
|
|
4
|
+
django_cfg/config.py,sha256=eIzEviUGuqgrwUqea7R2VUwmNmapbFYRXLzlRuenw4A,4446
|
|
5
5
|
django_cfg/apps/__init__.py,sha256=JtDmEYt1OcleWM2ZaeX0LKDnRQzPOavfaXBWG4ECB5Q,26
|
|
6
|
-
django_cfg/apps/urls.py,sha256=
|
|
6
|
+
django_cfg/apps/urls.py,sha256=eV1OW1mGGo9JYqBK76tIW8S83Il92OwxDsLI3s2U7G4,6891
|
|
7
7
|
django_cfg/apps/accounts/README.md,sha256=YkUYJ3iKMYTmm9ALK2PDnX75SDqZxgnkzNLCD5efxRs,8227
|
|
8
8
|
django_cfg/apps/accounts/__init__.py,sha256=I9pq6H5oOFv59Du0VP-g7KsAUDhjKeUcP0spMvhtIjk,99
|
|
9
9
|
django_cfg/apps/accounts/__models.py,sha256=fYhobXbGIYKnG4mZ_pwNePei8O-SHHqgBMhe6qhH3KQ,10075
|
|
@@ -131,7 +131,7 @@ django_cfg/apps/centrifugo/registry.py,sha256=HRaBN39UlCMX6ZAysYhdCWMlzAx1scGTvg
|
|
|
131
131
|
django_cfg/apps/centrifugo/router.py,sha256=HyiJF0t3w085Upu9SPaTJ-qcSW8JYND71rXtuEFAt2g,3116
|
|
132
132
|
django_cfg/apps/centrifugo/urls.py,sha256=wb7MwTmsZC1uewLQrUBpULpCVwzwh9YztUEgmMnLDQ4,902
|
|
133
133
|
django_cfg/apps/centrifugo/admin/__init__.py,sha256=JoDpJaJwT4f0ntWi8eNgNN5RRzWRty2fKdbDm-7PwEY,254
|
|
134
|
-
django_cfg/apps/centrifugo/admin/centrifugo_log.py,sha256=
|
|
134
|
+
django_cfg/apps/centrifugo/admin/centrifugo_log.py,sha256=1tcwB2bsJpklbVHOQOGR3vNwvGaSS94sRiZTjQiVzTE,6963
|
|
135
135
|
django_cfg/apps/centrifugo/admin/config.py,sha256=W_2x55AY8X8xxDxn92UU2jdVzRDlHSu9p3l4VtSAy1M,2005
|
|
136
136
|
django_cfg/apps/centrifugo/codegen/IMPLEMENTATION_SUMMARY.md,sha256=8AGzxD-5i7auP0OGIoCAwm5WSxzWvVaio6xNjatAT6s,13239
|
|
137
137
|
django_cfg/apps/centrifugo/codegen/README.md,sha256=2UUicvh_wVAyMoR9wZlO5F98TlN_Jx2imzKklYEiJQE,7149
|
|
@@ -233,6 +233,41 @@ django_cfg/apps/frontend/test_routing.py,sha256=fshJOR9ln7m3gXY9EI1_ix_6E5xua6DR
|
|
|
233
233
|
django_cfg/apps/frontend/urls.py,sha256=Vz22_2i2w1J0KQYDCxHnTF5rUf32kUUSBDJZrP07XgY,284
|
|
234
234
|
django_cfg/apps/frontend/views.py,sha256=JPTJRPCGY3zLLiiz1F9CsZiLkXbQ5RfnViJZzBUpV7o,15023
|
|
235
235
|
django_cfg/apps/frontend/templates/frontend/404.html,sha256=LCFig_dcgDDmYKhgOLu8R2KDs_aQS6Es6rAxLTAEXWs,2175
|
|
236
|
+
django_cfg/apps/grpc/__init__.py,sha256=Sen6KfKksoyO3ov9uguK4alr3oWZRyVuxxS2kIL4TvI,209
|
|
237
|
+
django_cfg/apps/grpc/apps.py,sha256=jrGDKmsZyfcRB15C9lJ0H_CCvKEF7ZIVkWOnTYwmoPc,649
|
|
238
|
+
django_cfg/apps/grpc/urls.py,sha256=GCkgA-dIIVpIb3_TjLamzssUrNtpE3k7_idDZacygus,478
|
|
239
|
+
django_cfg/apps/grpc/admin/__init__.py,sha256=ZdlCRR_RYyiFoRaEzeKqQLxWoW86DkczADf67ofIcwQ,202
|
|
240
|
+
django_cfg/apps/grpc/admin/config.py,sha256=_eJDj7IFChSpkShjD05UaXBRS_e7Iu49v3IT_DWoXNY,2330
|
|
241
|
+
django_cfg/apps/grpc/admin/grpc_request_log.py,sha256=rI2b3QjCOKGXn6sD0JWKkUqAukUWHEcIEK4TUsB8BfY,8524
|
|
242
|
+
django_cfg/apps/grpc/auth/__init__.py,sha256=iCw1EBiyfM_SfSTzQEM1wtTSFTX0Qi4ZiW26oz9J7X8,164
|
|
243
|
+
django_cfg/apps/grpc/auth/jwt_auth.py,sha256=sU_meAIiXipQUG8FYp0bzSiLTbQHnu_bIAK1sKznIfc,10277
|
|
244
|
+
django_cfg/apps/grpc/interceptors/__init__.py,sha256=Ahd1CW97P2NfBBTNhucbc1cBmSc4PlypMbcgljE_Aak,505
|
|
245
|
+
django_cfg/apps/grpc/interceptors/errors.py,sha256=IAH8si_bAmK90WISeNPZPX7HlMUvSEMj8FCCA3WreQU,7955
|
|
246
|
+
django_cfg/apps/grpc/interceptors/logging.py,sha256=w9IGyGFzg1xAbfEZovOC796M38xgWfzolxRtRaiHZek,9527
|
|
247
|
+
django_cfg/apps/grpc/interceptors/metrics.py,sha256=crWSL2i-F7aJK9LRT7G7Z6qvkvkMQf2bv_lY9w7-7AM,9843
|
|
248
|
+
django_cfg/apps/grpc/interceptors/request_logger.py,sha256=ciWKjx81i4c8rQvyAqlIIcP48GCx6slTn0OOj4y4rsI,16673
|
|
249
|
+
django_cfg/apps/grpc/management/__init__.py,sha256=qeaIQO1EY_-VkrUFRigi-UGbrHmN6U_0ZetCQkjDGvk,40
|
|
250
|
+
django_cfg/apps/grpc/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
251
|
+
django_cfg/apps/grpc/management/commands/rungrpc.py,sha256=mHCSgCn8abhA3pb4oefysEklKbEsgwXeSeGGbtEGbqw,9653
|
|
252
|
+
django_cfg/apps/grpc/managers/__init__.py,sha256=SsQkxSYpwIA1W9UOZxL51wiIHjqQVX8VLGVI0zNJx6I,189
|
|
253
|
+
django_cfg/apps/grpc/managers/grpc_request_log.py,sha256=QvRgXmPkSkJKdOOguiPIhwWzmXKx7gF30MfR52rVDfQ,9315
|
|
254
|
+
django_cfg/apps/grpc/migrations/0001_initial.py,sha256=UeDDdEQBEpW7-11bGaohVxVh9ii0ssUoj_59tLL0YmM,4549
|
|
255
|
+
django_cfg/apps/grpc/migrations/0002_rename_django_cfg__service_4c4a8e_idx_django_cfg__service_584308_idx_and_more.py,sha256=88Ox17gYjdhYEymiKbt8F8-clVoad56gm7xSaJCtNvQ,1179
|
|
256
|
+
django_cfg/apps/grpc/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
257
|
+
django_cfg/apps/grpc/models/__init__.py,sha256=epjZUfI7Q55e5RYnElxWuIM22FA7IS_jDiJ_hzQcz1k,112
|
|
258
|
+
django_cfg/apps/grpc/models/grpc_request_log.py,sha256=R_00D_WaxhFzCSMZQsCbmNJ6Oyce_DxZP8WKkuulWN8,5742
|
|
259
|
+
django_cfg/apps/grpc/serializers/__init__.py,sha256=wiXXMgDzj5WzA6FORqSNnPWTzFs3wvTPk3B1EAShcF0,544
|
|
260
|
+
django_cfg/apps/grpc/serializers/health.py,sha256=0xIXOBvD6uGmmm_KMqlR8JiQuhpOGsitp9ietTl3TIs,554
|
|
261
|
+
django_cfg/apps/grpc/serializers/requests.py,sha256=Z6xue882pmyjH_7tUFUS9OmbWNZSbDSzR74umMdWgII,600
|
|
262
|
+
django_cfg/apps/grpc/serializers/services.py,sha256=VlV2rMRj4dIC8_uxyU7CH90vHbxx3EYFbbDy3kkua40,1704
|
|
263
|
+
django_cfg/apps/grpc/serializers/stats.py,sha256=X41Vz3T0yQWCjgbhaurXTpHMysmtinMUoGkfq71NWEs,851
|
|
264
|
+
django_cfg/apps/grpc/services/__init__.py,sha256=dIVywzIvzbJNp7xaLhPsYI4Om2zDzL1WdpAKfjBkRLM,384
|
|
265
|
+
django_cfg/apps/grpc/services/base.py,sha256=U1VClr9pASuc0wdhZk8z6CR19G3qLoq-5PhHdCDyK8c,11135
|
|
266
|
+
django_cfg/apps/grpc/services/discovery.py,sha256=IkWtr-4LnvDMCSlqjxxL2lMQZXcd4W2ogXVbqp-rslA,13698
|
|
267
|
+
django_cfg/apps/grpc/utils/__init__.py,sha256=NX8vLgAVI5ymsL3awZiQhIRstYVxcSAErL4x18jqs3I,251
|
|
268
|
+
django_cfg/apps/grpc/utils/proto_gen.py,sha256=IDJHf8msoGzsTWCiblNwem_7eIRvZujAsuHlTl2vvwQ,12656
|
|
269
|
+
django_cfg/apps/grpc/views/__init__.py,sha256=IZWj31gnice6VOBZ1hkunPnnA5pXwJFTdzxuOk7OVAw,124
|
|
270
|
+
django_cfg/apps/grpc/views/monitoring.py,sha256=sVulfX_r5TIITisRea-jzLTcql9PQPN4txXY3fNM9NE,18125
|
|
236
271
|
django_cfg/apps/knowbase/README.md,sha256=HXt_J6WCN-LsMhA7p9mdvih07_vp_r_hkPdmqHhNEeo,3965
|
|
237
272
|
django_cfg/apps/knowbase/__init__.py,sha256=XLhl7_wweUm1nqmA_xVlPxiCSuARxtCro-uY41JFQgs,1039
|
|
238
273
|
django_cfg/apps/knowbase/apps.py,sha256=Y1n4ZoEP5oL-lDGLNRHtxhPClEcBElMX8iXFFS4OsPE,3052
|
|
@@ -370,10 +405,10 @@ django_cfg/apps/maintenance/urls.py,sha256=wOd5n5Ky62gUx-TVaIC5OZcH9K6plsC2pCAJH
|
|
|
370
405
|
django_cfg/apps/maintenance/urls_admin.py,sha256=E61etVCrwAzWZdPckWWX5yMDPsZzi3cQtAXn_zzZNL4,226
|
|
371
406
|
django_cfg/apps/maintenance/admin/__init__.py,sha256=9EDtPitnC45uazpAky927lzo0jW7Qg-qfzv5LCxMW_I,463
|
|
372
407
|
django_cfg/apps/maintenance/admin/actions.py,sha256=a2y5Gg7m806yAg8J4V_i-jxbFN6A47L5Qa7a1sYVZrg,5304
|
|
373
|
-
django_cfg/apps/maintenance/admin/api_key_admin.py,sha256=
|
|
408
|
+
django_cfg/apps/maintenance/admin/api_key_admin.py,sha256=QIomApJZhzeFyxWrxw1vuMYiLbLXmatNH9RhYAI_I2A,5628
|
|
374
409
|
django_cfg/apps/maintenance/admin/log_admin.py,sha256=9Kb9IN95QATKVn0yVfFmn5VsvoxJ6B9BeQFUZ-HCd_Y,5551
|
|
375
410
|
django_cfg/apps/maintenance/admin/scheduled_admin.py,sha256=Vn9qLlC7XjYntAfdSHJbchZ32t3913yZiC8dHjWAhjc,6630
|
|
376
|
-
django_cfg/apps/maintenance/admin/site_admin.py,sha256=
|
|
411
|
+
django_cfg/apps/maintenance/admin/site_admin.py,sha256=LDG2XXmoBmZnbkCpLX1yUXra8ibjZTK57exVVzm6y2c,8280
|
|
377
412
|
django_cfg/apps/maintenance/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
378
413
|
django_cfg/apps/maintenance/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
379
414
|
django_cfg/apps/maintenance/management/commands/maintenance.py,sha256=axNv5oBR5_rncTddGT0Ued_YH4O84EQWe7dMz7G77ak,11008
|
|
@@ -436,13 +471,13 @@ django_cfg/apps/payments/urls.py,sha256=MGIK3zzYemgZd4sVuL6kUi8gXhsxZfMQF-g7_05U
|
|
|
436
471
|
django_cfg/apps/payments/admin/__init__.py,sha256=7jmi4x7PqtdNdhw4ckhVZnHklh-L63x49J2Gl_Xmin0,985
|
|
437
472
|
django_cfg/apps/payments/admin/actions.py,sha256=_uj30lTKLmQ1TfyF1Hj36tgSNz5axcS7LG7TY4Tv8tE,582
|
|
438
473
|
django_cfg/apps/payments/admin/balance_actions.py,sha256=BGCwvXOETj0KN3EVIYicVqeXuOCsut-H5fT7og07iDg,422
|
|
439
|
-
django_cfg/apps/payments/admin/balance_admin.py,sha256=
|
|
474
|
+
django_cfg/apps/payments/admin/balance_admin.py,sha256=24go6i5fF9lskTl9VPTtYV9KaJCxCoXZjxjxgoBDAyo,9420
|
|
440
475
|
django_cfg/apps/payments/admin/currency_admin.py,sha256=NrmwaYwANESvcsW1ENLCR0H-e_MiawLkIzgc3xZAJCY,3073
|
|
441
476
|
django_cfg/apps/payments/admin/filters.py,sha256=YA3zP8gxVNb50ObmGV5YRBybn5Sih4crJi9zFqHBSGs,7379
|
|
442
477
|
django_cfg/apps/payments/admin/payment_actions.py,sha256=oAUtmRxJZVFktXmFUxDGfwVy0dxdbR2lyH_EzghhKtM,1677
|
|
443
|
-
django_cfg/apps/payments/admin/payment_admin.py,sha256=
|
|
478
|
+
django_cfg/apps/payments/admin/payment_admin.py,sha256=Mq2PId7W3WhZu-3oBUDvR_KNE4hab8WnndEVNhEnxSo,8979
|
|
444
479
|
django_cfg/apps/payments/admin/withdrawal_actions.py,sha256=Hhv6FXZfGAUTVmoWkmRLNOWTWK9e2X03rZtrGuZs02s,1873
|
|
445
|
-
django_cfg/apps/payments/admin/withdrawal_admin.py,sha256=
|
|
480
|
+
django_cfg/apps/payments/admin/withdrawal_admin.py,sha256=4CXq3p-Jl_90CiaqNPN8w7Fi3hRk15cQ4R6Es3l0qSM,9330
|
|
446
481
|
django_cfg/apps/payments/api/__init__.py,sha256=GxB5Tn-W_Sr1Ki7OcCE6iq61or9ELOVMpLmd1nmni3w,78
|
|
447
482
|
django_cfg/apps/payments/api/serializers.py,sha256=zjxIfekOJMJ5bEjeo_6Jc2YMHMQxMBshQlOb9rP-XOA,6640
|
|
448
483
|
django_cfg/apps/payments/api/urls.py,sha256=TVimVX_ba-0YnqzNeNn9DRDzppT9snNzmAcikp_um-I,1085
|
|
@@ -505,7 +540,7 @@ django_cfg/apps/tasks/apps.py,sha256=jcl4NO8t37_RNHyaCh2GJXXlZqYIMLwpiAY26lnMO8M
|
|
|
505
540
|
django_cfg/apps/tasks/urls.py,sha256=4KA6on-Hii-4mQLJaSQ58iPrYBZL4apSsvksLbyhzWU,344
|
|
506
541
|
django_cfg/apps/tasks/admin/__init__.py,sha256=h4Hx8VGvbohLLS6nt0OFE7mi0JBx1pHA0lbjjcaXPgU,106
|
|
507
542
|
django_cfg/apps/tasks/admin/config.py,sha256=SZ4gh2omc5sPEa3VLz7ewUjV-_O4qPFgHe_e0AkEm9c,2161
|
|
508
|
-
django_cfg/apps/tasks/admin/task_log.py,sha256=
|
|
543
|
+
django_cfg/apps/tasks/admin/task_log.py,sha256=a9XYEvdFfsLcMeaw12o66dLtww9tmv6VTYwDw785Uys,7604
|
|
509
544
|
django_cfg/apps/tasks/filters/__init__.py,sha256=9H6dh9ryI_zJ0_tPENjsSS2V3Mx8MMcWze8hyHokfhc,151
|
|
510
545
|
django_cfg/apps/tasks/filters/task_log.py,sha256=BY67R3jyzHR6XdhNty8gjGmLTC5VDTx2_tGeGODOJXE,4929
|
|
511
546
|
django_cfg/apps/tasks/migrations/0001_initial.py,sha256=dVbEPP7umgjsJsubxaTYsrDq7dvwv2xf6_K8hfju-lE,7367
|
|
@@ -542,16 +577,16 @@ django_cfg/core/validation.py,sha256=QmwGlNDa0MFG2OUmgykIUAaEotT55YNh-wAWSVxOAos
|
|
|
542
577
|
django_cfg/core/backends/__init__.py,sha256=5Qfza7oKQ8_UIHOs4ibhYvwtgAjngUqLrlwjKl_q124,38
|
|
543
578
|
django_cfg/core/backends/smtp.py,sha256=kWkNMG7UwLsHcFYSKRgrk1HbP9mU1fxzWYnalHXqoL8,2308
|
|
544
579
|
django_cfg/core/base/__init__.py,sha256=Z3bZvxejxk4vvWqmqTBLUi9XJpo6A_5Bq4R0J8q81Y4,116
|
|
545
|
-
django_cfg/core/base/config_model.py,sha256=
|
|
580
|
+
django_cfg/core/base/config_model.py,sha256=WokIZUa-CPmDQUOqyi8UCO44e5BNfV3x5O1tZfNwFig,22016
|
|
546
581
|
django_cfg/core/builders/__init__.py,sha256=jkInI7_jbxcjitapohw6QmbJPpacnnID6V1JovqtOFM,282
|
|
547
|
-
django_cfg/core/builders/apps_builder.py,sha256=
|
|
582
|
+
django_cfg/core/builders/apps_builder.py,sha256=Ue6RQDVF4bZFkO3FXD-E48uo9Rc-zHczRbv9xGyv2dU,6917
|
|
548
583
|
django_cfg/core/builders/middleware_builder.py,sha256=OwqQRoJKYWlXsQNPFBfUvVMYdppUHCPw-UDczV_esYg,3101
|
|
549
584
|
django_cfg/core/builders/security_builder.py,sha256=W8Lk9eTMi3PuNK5qH-BIHegeE0cbvmuHKTumLcwOAh8,23961
|
|
550
585
|
django_cfg/core/environment/__init__.py,sha256=sMOIe9z1i51j8B1VGjpLHJMaeDsBfsgn1TmL03FIeNo,141
|
|
551
586
|
django_cfg/core/environment/detector.py,sha256=bI9k4fdK8Nbfl61ZcQ3yNbm3WlmK-L0xB-g-aXKUdhA,8923
|
|
552
587
|
django_cfg/core/generation/__init__.py,sha256=0cYgeQ5EDN6sscQuFnXsFCy6m1BKgv_izNz0a1TlYSc,1355
|
|
553
588
|
django_cfg/core/generation/generation.py,sha256=uLLJnJ_9kq8zV_auySK05dXwZB-BJx920mID0Pm4RCo,2524
|
|
554
|
-
django_cfg/core/generation/orchestrator.py,sha256=
|
|
589
|
+
django_cfg/core/generation/orchestrator.py,sha256=a6U4fsRlM1deKSBdcjoi-sWs7DwgmDugE3LyUVG8Z3Q,12526
|
|
555
590
|
django_cfg/core/generation/protocols.py,sha256=9pqGsZD_Y5v3jdYp4YdkL-i--8feuvX_iKXxV-Cc4Bg,676
|
|
556
591
|
django_cfg/core/generation/core_generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
557
592
|
django_cfg/core/generation/core_generators/settings.py,sha256=Rto9qjqQC-MeQJMNyoflS91RrNDS_lBNH4d4ZtgER-8,2632
|
|
@@ -563,6 +598,7 @@ django_cfg/core/generation/data_generators/database.py,sha256=mYR2mBvqWU93YP9XUU
|
|
|
563
598
|
django_cfg/core/generation/integration_generators/__init__.py,sha256=wPPiVQnmCEXKigp-d_jKznU2i1M6aP4P2YOVYipuMDk,737
|
|
564
599
|
django_cfg/core/generation/integration_generators/api.py,sha256=Xsyu3mYyq9mje8QGNSU0Yp4tLbtF0ckq4lEf_Rj5pLc,11062
|
|
565
600
|
django_cfg/core/generation/integration_generators/django_q2.py,sha256=ZRIApW0lQWHOizd9jvFBSckk_O-bhrgr7rCnKg7M8U0,4155
|
|
601
|
+
django_cfg/core/generation/integration_generators/grpc_generator.py,sha256=UpeumEd7ASWiWUUTsyWu35scOP3kVz14CDIxyc4AszU,10423
|
|
566
602
|
django_cfg/core/generation/integration_generators/sessions.py,sha256=GbRC72Gny4dzj7oTIrbuhYyvhCQBoWI-0GxB8ZHTrEU,1644
|
|
567
603
|
django_cfg/core/generation/integration_generators/tailwind.py,sha256=YgiV5c-l0DDJnMKx6mWcUtH5zyMdewAJXjLDwmHrSuc,1208
|
|
568
604
|
django_cfg/core/generation/integration_generators/tasks.py,sha256=fMbuIdjRenuZQ6rfco7imLzDbCdX4WEO1aLslBpxjTQ,2253
|
|
@@ -637,6 +673,8 @@ django_cfg/models/api/drf/config.py,sha256=PXDfFtwcYh_QHG54FYLKynPhByT28fGr8hsCV
|
|
|
637
673
|
django_cfg/models/api/drf/redoc.py,sha256=XNNWnMwkfIhtkCUt_KiPtc0-Nw0E3jvQOIjwcdie5a0,762
|
|
638
674
|
django_cfg/models/api/drf/spectacular.py,sha256=UYBATiEY3qzx0IlTvCyhpymASO2Wej_j-gQsgL03Nec,5020
|
|
639
675
|
django_cfg/models/api/drf/swagger.py,sha256=ku_eE7bWgHxjXD6Z2sEKSYE-bIzmZfAR0vQW9xqlG4Q,2127
|
|
676
|
+
django_cfg/models/api/grpc/__init__.py,sha256=-yX9qAaBalmaRj9f88lUzrAW55a2ghydHJvTEsZ8CNA,1510
|
|
677
|
+
django_cfg/models/api/grpc/config.py,sha256=YY0KKCzPiLxV3l-l7oXoKN-n-CbcH11Iala-s3A3bwI,9884
|
|
640
678
|
django_cfg/models/base/__init__.py,sha256=f6sMVyd-YEFdLebmIKOOPviu1Ovn4BHGp7j7ZVNqFDo,271
|
|
641
679
|
django_cfg/models/base/config.py,sha256=hfpf35yMR8oOE1J0SBPNNSBwXckK3F2-Iv0Vw6cNX4E,10114
|
|
642
680
|
django_cfg/models/base/module.py,sha256=nxN1Y9J4l94kOfSXLQJ2eGgIGWTq8kyh7hUGvCQNyIs,2674
|
|
@@ -673,18 +711,18 @@ django_cfg/models/tasks/backends.py,sha256=r5VcuAxyyxqd5grpktEd-0yJNvSJu2jv0IBgr
|
|
|
673
711
|
django_cfg/models/tasks/config.py,sha256=0Tc7O2mVQLc8IYXMm__cdeP0ytYn_NucL2xyA95wyT4,5892
|
|
674
712
|
django_cfg/models/tasks/utils.py,sha256=9TEbdxgd0N_O2T_7GGwkyPeDg4H7tSKLHoHG_n8edqg,4459
|
|
675
713
|
django_cfg/modules/__init__.py,sha256=Ip9WMpzImEwIAywpFwU056_v0O9oIGG7nCT1YSArxkw,316
|
|
676
|
-
django_cfg/modules/base.py,sha256=
|
|
677
|
-
django_cfg/modules/django_admin/__init__.py,sha256=
|
|
714
|
+
django_cfg/modules/base.py,sha256=03SUBaSOduJjhJRdG5bUdmQrcgKxNtliSUd7mHSpTic,6684
|
|
715
|
+
django_cfg/modules/django_admin/__init__.py,sha256=0g5SJPtmMhM57MMZG4msvhKbgDTqabf5r95_EsQMQuY,3370
|
|
678
716
|
django_cfg/modules/django_admin/apps.py,sha256=xJjgIRgS_I1ehyq7ZbFpZY_L4umRa5ZPQP3mf0alUaU,526
|
|
679
717
|
django_cfg/modules/django_admin/base/__init__.py,sha256=tzre09bnD_SlS-pA30WzYZRxyvch7eLq3q0wLEcZOmc,118
|
|
680
|
-
django_cfg/modules/django_admin/base/pydantic_admin.py,sha256=
|
|
718
|
+
django_cfg/modules/django_admin/base/pydantic_admin.py,sha256=mD8LWqRWZXiGO6QLVGmECsf-9UhvuJhmn4CMqzwVJBg,25382
|
|
681
719
|
django_cfg/modules/django_admin/base/unfold_admin.py,sha256=iqpRWSkzW5HktXDuuG7G3J6RoIfW48dWPMJTa7Yk08g,729
|
|
682
|
-
django_cfg/modules/django_admin/config/__init__.py,sha256=
|
|
720
|
+
django_cfg/modules/django_admin/config/__init__.py,sha256=yhoZcTjgl40bDnaPe1MFdNLqYQj02cdE48aVrfGCmXU,968
|
|
683
721
|
django_cfg/modules/django_admin/config/action_config.py,sha256=JjS01JxLT-FzUVq7RlKaB7L38wmVL8uibXO_iXZcljo,1668
|
|
684
722
|
django_cfg/modules/django_admin/config/admin_config.py,sha256=L48YHLt-JyNyL-XOltqIZVh1ALoG4wXQsvi_WIbhuFw,5577
|
|
685
723
|
django_cfg/modules/django_admin/config/background_task_config.py,sha256=7-8B1rhpeafanVxtjFQUx0mVjcA5xmxZIxqKzaBwMX0,1760
|
|
686
724
|
django_cfg/modules/django_admin/config/documentation_config.py,sha256=lI_gMSWCtyKmdyttLNdgbg_zbGgrwXA-QoLxVOXJj9A,14189
|
|
687
|
-
django_cfg/modules/django_admin/config/field_config.py,sha256=
|
|
725
|
+
django_cfg/modules/django_admin/config/field_config.py,sha256=J-CTdhJFP0CLw8T0cOb1FvYwTPpdawv9qVam69QbO4s,12638
|
|
688
726
|
django_cfg/modules/django_admin/config/fieldset_config.py,sha256=5BPUWO_HvS6YhPU_vqQPzRT2y3OIPrBCioFuer5-mrA,1249
|
|
689
727
|
django_cfg/modules/django_admin/config/resource_config.py,sha256=6ELWSuHlrpNqV2wO2sL_o2mE2DXLd_solcsdN5O6eQg,3962
|
|
690
728
|
django_cfg/modules/django_admin/icons/README.md,sha256=j-NUixSC1QJh7PqYKxLZpPrTxKrAnx0urQraXgv4JHI,5612
|
|
@@ -702,17 +740,28 @@ django_cfg/modules/django_admin/templates/django_admin/documentation_block.html,
|
|
|
702
740
|
django_cfg/modules/django_admin/templates/django_admin/markdown_docs_block.html,sha256=nO9oEyDYozYF-euaLzE0Cn_Yo_LGUlta-BsRgShDG10,1992
|
|
703
741
|
django_cfg/modules/django_admin/templates/django_admin/widgets/encrypted_field.html,sha256=-Kd4twY0sav2M5x_0oDj8ElA7CBccToVHFiwGa2WF-w,2774
|
|
704
742
|
django_cfg/modules/django_admin/templates/django_admin/widgets/encrypted_password.html,sha256=BdiM0CqRyBH1aHGf6iLSfSKOoADY5qaqetbC9AktzaI,2154
|
|
705
|
-
django_cfg/modules/django_admin/utils/
|
|
706
|
-
django_cfg/modules/django_admin/utils/__init__.py,sha256=5V1Og6fpIpRqDIoqF7jYnBmPl9TjV5kByghzT6iOpPs,745
|
|
707
|
-
django_cfg/modules/django_admin/utils/badges.py,sha256=eZ1UThdwvv2cHAIDc4vTrD5xAet7fmeb9h9yj4ZXJ-c,6328
|
|
743
|
+
django_cfg/modules/django_admin/utils/__init__.py,sha256=Y0c62CUe41GNsz6ibbYaj7rSOg5Cq8kHDUvAH4eySTo,1712
|
|
708
744
|
django_cfg/modules/django_admin/utils/decorators.py,sha256=s4jTcgPklY4T4xjXsMHpShd71K_LzgKogem9JKBgNzk,8371
|
|
709
|
-
django_cfg/modules/django_admin/utils/
|
|
710
|
-
django_cfg/modules/django_admin/utils/
|
|
711
|
-
django_cfg/modules/django_admin/utils/
|
|
712
|
-
django_cfg/modules/django_admin/utils/
|
|
745
|
+
django_cfg/modules/django_admin/utils/html_builder.py,sha256=Xm0U0kn02Et8Ml1c1AXAEFpPCvXeIerpiSnVcQbiMBs,2190
|
|
746
|
+
django_cfg/modules/django_admin/utils/badges/__init__.py,sha256=_S5uUxavLG0ouUWrsVqBF1CSLrcxWTb5GlRmTuev_l0,250
|
|
747
|
+
django_cfg/modules/django_admin/utils/badges/status_badges.py,sha256=kOShlu3MZv7kjhtpxPgub0t91CBMb8Mm3ZZvTMh_Gyo,6331
|
|
748
|
+
django_cfg/modules/django_admin/utils/displays/__init__.py,sha256=q0N2kForOp2IRhnMTmj2tJRx7P1ekTu425vHHZ63UI8,258
|
|
749
|
+
django_cfg/modules/django_admin/utils/displays/data_displays.py,sha256=NFy94qaJJER_BhXSifsAFKuHAZFVUDtbmTSGjLrRrGk,7864
|
|
750
|
+
django_cfg/modules/django_admin/utils/html/__init__.py,sha256=22_xZ2Mlec5U-eSRZw1T2j2eo2ahTTRana0VuDtX_zg,646
|
|
751
|
+
django_cfg/modules/django_admin/utils/html/badges.py,sha256=fAEW_4U44xcrbQg7wvk3bQb1BYUAp-nWCbDFm8WNBOw,1769
|
|
752
|
+
django_cfg/modules/django_admin/utils/html/base.py,sha256=HWhGTRy1pXFcK2v2Gds7psFDze1S-GS89HDlrmWLq3M,5302
|
|
753
|
+
django_cfg/modules/django_admin/utils/html/code.py,sha256=yBhBjEWI0o9NlB-EJiHFmyxzPDh8wH3iJwv7kB6HDw8,3012
|
|
754
|
+
django_cfg/modules/django_admin/utils/html/composition.py,sha256=BqKB1aiX2-iyDk-gS35hQZR9-X2y4BzcaEixfLJiqU8,7061
|
|
755
|
+
django_cfg/modules/django_admin/utils/html/formatting.py,sha256=EeSHyObFGPr2Ie6KbySE8WBQtqUFT_BQfXf0oucigIU,8613
|
|
756
|
+
django_cfg/modules/django_admin/utils/html/keyvalue.py,sha256=cBw2RPE3J_3kENYSYNxpm8eY56bwp5yityxBl6N4_q8,7299
|
|
757
|
+
django_cfg/modules/django_admin/utils/html/markdown_integration.py,sha256=r28EyVtma9YfCnSoDDbBthWrZtT9LVmhcXSwe4OG4Ws,3372
|
|
758
|
+
django_cfg/modules/django_admin/utils/html/progress.py,sha256=gAqvZd4bLw7CRJf4f_5UbHHkEzIJrGj_2Ygn8SdNLBk,4348
|
|
759
|
+
django_cfg/modules/django_admin/utils/markdown/__init__.py,sha256=2wA0orNx13WBAy26yJ8d88FGFWDiuu9pmO0ZIdey7To,419
|
|
760
|
+
django_cfg/modules/django_admin/utils/markdown/mermaid_plugin.py,sha256=37x_0FQE5IyR6TiaDZDrQQHeQmAsPtlZBnq5N8eAKqA,8889
|
|
761
|
+
django_cfg/modules/django_admin/utils/markdown/renderer.py,sha256=eMYde8cDo9y5CO5qNjy7juYe_OPpSpFB1-d84ylpbk4,14324
|
|
713
762
|
django_cfg/modules/django_admin/widgets/__init__.py,sha256=SVVytNURG_TlWePwhws9FYeDe_xp4Ob_CYVA88Y08es,256
|
|
714
763
|
django_cfg/modules/django_admin/widgets/encrypted_field_widget.py,sha256=h4bSAI2sLjKuBFDufWhtQQQ-eMIAqUzsUezi1p0ERuM,2146
|
|
715
|
-
django_cfg/modules/django_admin/widgets/registry.py,sha256=
|
|
764
|
+
django_cfg/modules/django_admin/widgets/registry.py,sha256=P2kQiB3eYXhjRiCXlcImHAoCDyQjZNNoF_-FyQyBZ1w,6864
|
|
716
765
|
django_cfg/modules/django_client/__init__.py,sha256=iHaGKbsyR2wMmVCWNsETC7cwB60fZudvnFMiK1bchW8,529
|
|
717
766
|
django_cfg/modules/django_client/apps.py,sha256=xfkw2aXy08xXlkFhbCiTFveMmRwlDk3SQOAWdqXraFM,1952
|
|
718
767
|
django_cfg/modules/django_client/pytest.ini,sha256=yC1PeQKS4nWQD-jVo5fWF9y1Uv6rywcH0mtHREsiAp0,668
|
|
@@ -995,7 +1044,7 @@ django_cfg/modules/django_twilio/templates/guide.md,sha256=nZfwx-sgWyK5NApm93zOe
|
|
|
995
1044
|
django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html,sha256=sXR6_D9hmOFfk9CrfPizpLddVhkRirBWpZd_ioEsxVk,6671
|
|
996
1045
|
django_cfg/modules/django_twilio/templates/sendgrid_test_data.json,sha256=fh1VyuSiDELHsS_CIz9gp7tlsMAEjaDOoqbAPSZ3yyo,339
|
|
997
1046
|
django_cfg/modules/django_unfold/__init__.py,sha256=Uquez6xgPUIc8FBMP7qif-adRYQSjQ2dBHxnJPom3eQ,1337
|
|
998
|
-
django_cfg/modules/django_unfold/navigation.py,sha256=
|
|
1047
|
+
django_cfg/modules/django_unfold/navigation.py,sha256=0iZnp5q1ghsFisur54HMCukaIzQGe7THZrB0W_aMgIE,15362
|
|
999
1048
|
django_cfg/modules/django_unfold/system_monitor.py,sha256=KcrTa5irstdB1pDKe3sC0zl4tz9LVjhp7xvbqUM4YVk,6781
|
|
1000
1049
|
django_cfg/modules/django_unfold/tailwind.py,sha256=NY8nWcUdQw61oNmjPoPl7agcTb-r5IqcpFYy35MNsTM,9107
|
|
1001
1050
|
django_cfg/modules/django_unfold/utils.py,sha256=5aFaceRc9B3eXfpOVyKRD2wWqFt8KcHxjQg54oD7Oyg,4482
|
|
@@ -1014,7 +1063,7 @@ django_cfg/modules/nextjs_admin/templatetags/nextjs_admin.py,sha256=aAekrlu3pvvx
|
|
|
1014
1063
|
django_cfg/registry/__init__.py,sha256=CaiL9KwqPzXlIe5-4Qr7PQu5ZxAW1HtuDIXZ7-ktRQg,538
|
|
1015
1064
|
django_cfg/registry/core.py,sha256=LqqmWwaOo-0KivPD61yolBwxxigvKARZflOv6rLAcHM,3546
|
|
1016
1065
|
django_cfg/registry/exceptions.py,sha256=b4pIakeRxhT1-ST3lbAnmAQaASRBARCoah_w6vb3VF0,399
|
|
1017
|
-
django_cfg/registry/modules.py,sha256=
|
|
1066
|
+
django_cfg/registry/modules.py,sha256=OXQ9Ls7KM28kmW2yjT_xPNA_3BsDQyXJFxCmmQpzL7s,2220
|
|
1018
1067
|
django_cfg/registry/services.py,sha256=l0V2twGpF9BwVlo-TTfFu8dV7GVBS7XKCsScIZXWWbc,2457
|
|
1019
1068
|
django_cfg/registry/third_party.py,sha256=YPcj0IsxEmh_gpJAcPvIFa21ZWnoFjcreHlXtS4UR-I,2239
|
|
1020
1069
|
django_cfg/routing/__init__.py,sha256=94No0CWltLJJvKDwqFfKU5CHo_S1OynghWqpx7PsyBY,272
|
|
@@ -1070,9 +1119,9 @@ django_cfg/utils/version_check.py,sha256=WO51J2m2e-wVqWCRwbultEwu3q1lQasV67Mw2aa
|
|
|
1070
1119
|
django_cfg/CHANGELOG.md,sha256=jtT3EprqEJkqSUh7IraP73vQ8PmKUMdRtznQsEnqDZk,2052
|
|
1071
1120
|
django_cfg/CONTRIBUTING.md,sha256=DU2kyQ6PU0Z24ob7O_OqKWEYHcZmJDgzw-lQCmu6uBg,3041
|
|
1072
1121
|
django_cfg/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
|
|
1073
|
-
django_cfg/pyproject.toml,sha256=
|
|
1074
|
-
django_cfg-1.
|
|
1075
|
-
django_cfg-1.
|
|
1076
|
-
django_cfg-1.
|
|
1077
|
-
django_cfg-1.
|
|
1078
|
-
django_cfg-1.
|
|
1122
|
+
django_cfg/pyproject.toml,sha256=L1IZT2BI_W7lLh_LF4LiZhCIdxKtxTfj15zLIqh2gmc,8844
|
|
1123
|
+
django_cfg-1.5.1.dist-info/METADATA,sha256=-BLq93lmM19G7ej38baJZOozOTDza884zWY7mI23yb4,24341
|
|
1124
|
+
django_cfg-1.5.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
1125
|
+
django_cfg-1.5.1.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
|
|
1126
|
+
django_cfg-1.5.1.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
|
|
1127
|
+
django_cfg-1.5.1.dist-info/RECORD,,
|
|
@@ -1,396 +0,0 @@
|
|
|
1
|
-
# Code Block Methods Documentation
|
|
2
|
-
|
|
3
|
-
New methods added to `HtmlBuilder` for displaying code in Django Admin.
|
|
4
|
-
|
|
5
|
-
## Methods Added
|
|
6
|
-
|
|
7
|
-
### 1. `code()` - Inline Code
|
|
8
|
-
|
|
9
|
-
Display short code snippets inline.
|
|
10
|
-
|
|
11
|
-
**Signature:**
|
|
12
|
-
```python
|
|
13
|
-
def code(text: Any, css_class: str = "") -> SafeString
|
|
14
|
-
```
|
|
15
|
-
|
|
16
|
-
**Parameters:**
|
|
17
|
-
- `text`: Code text to display
|
|
18
|
-
- `css_class`: Additional CSS classes (optional)
|
|
19
|
-
|
|
20
|
-
**Usage:**
|
|
21
|
-
```python
|
|
22
|
-
from django_cfg.modules.django_admin.base import PydanticAdmin
|
|
23
|
-
|
|
24
|
-
class MyAdmin(PydanticAdmin):
|
|
25
|
-
@computed_field("Command")
|
|
26
|
-
def command_display(self, obj):
|
|
27
|
-
return self.html.code(obj.full_command)
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
**Examples:**
|
|
31
|
-
```python
|
|
32
|
-
# File path
|
|
33
|
-
self.html.code("/path/to/file")
|
|
34
|
-
|
|
35
|
-
# Command
|
|
36
|
-
self.html.code("python manage.py migrate")
|
|
37
|
-
|
|
38
|
-
# Configuration value
|
|
39
|
-
self.html.code("DEBUG=True")
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
**Renders as:**
|
|
43
|
-
```html
|
|
44
|
-
<code class="font-mono text-xs bg-base-100 dark:bg-base-800 px-1.5 py-0.5 rounded">
|
|
45
|
-
/path/to/file
|
|
46
|
-
</code>
|
|
47
|
-
```
|
|
48
|
-
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
### 2. `code_block()` - Multi-line Code Block
|
|
52
|
-
|
|
53
|
-
Display multi-line code with syntax highlighting hints, scrolling, and color variants.
|
|
54
|
-
|
|
55
|
-
**Signature:**
|
|
56
|
-
```python
|
|
57
|
-
def code_block(
|
|
58
|
-
text: Any,
|
|
59
|
-
language: Optional[str] = None,
|
|
60
|
-
max_height: Optional[str] = None,
|
|
61
|
-
variant: str = "default"
|
|
62
|
-
) -> SafeString
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
**Parameters:**
|
|
66
|
-
- `text`: Code content (multi-line supported)
|
|
67
|
-
- `language`: Programming language hint (`"json"`, `"python"`, `"bash"`, etc.) - for future syntax highlighting
|
|
68
|
-
- `max_height`: Maximum height with overflow scroll (e.g., `"400px"`, `"20rem"`)
|
|
69
|
-
- `variant`: Color variant - `"default"`, `"warning"`, `"danger"`, `"success"`, `"info"`
|
|
70
|
-
|
|
71
|
-
**Usage:**
|
|
72
|
-
```python
|
|
73
|
-
from django_cfg.modules.django_admin.base import PydanticAdmin
|
|
74
|
-
import json
|
|
75
|
-
|
|
76
|
-
class MyAdmin(PydanticAdmin):
|
|
77
|
-
@computed_field("Configuration")
|
|
78
|
-
def config_display(self, obj):
|
|
79
|
-
if not obj.config:
|
|
80
|
-
return self.html.empty()
|
|
81
|
-
|
|
82
|
-
return self.html.code_block(
|
|
83
|
-
json.dumps(obj.config, indent=2),
|
|
84
|
-
language="json"
|
|
85
|
-
)
|
|
86
|
-
|
|
87
|
-
@computed_field("Standard Output")
|
|
88
|
-
def stdout_display(self, obj):
|
|
89
|
-
if not obj.stdout:
|
|
90
|
-
return self.html.empty()
|
|
91
|
-
|
|
92
|
-
return self.html.code_block(
|
|
93
|
-
obj.stdout,
|
|
94
|
-
max_height="400px"
|
|
95
|
-
)
|
|
96
|
-
|
|
97
|
-
@computed_field("Error Message")
|
|
98
|
-
def error_display(self, obj):
|
|
99
|
-
if not obj.error_message:
|
|
100
|
-
return self.html.empty()
|
|
101
|
-
|
|
102
|
-
return self.html.code_block(
|
|
103
|
-
obj.error_message,
|
|
104
|
-
max_height="200px",
|
|
105
|
-
variant="danger"
|
|
106
|
-
)
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
**Examples:**
|
|
110
|
-
|
|
111
|
-
#### JSON Display
|
|
112
|
-
```python
|
|
113
|
-
# Display JSON configuration
|
|
114
|
-
self.html.code_block(
|
|
115
|
-
json.dumps({"key": "value", "nested": {"foo": "bar"}}, indent=2),
|
|
116
|
-
language="json"
|
|
117
|
-
)
|
|
118
|
-
```
|
|
119
|
-
|
|
120
|
-
#### Log Output with Scrolling
|
|
121
|
-
```python
|
|
122
|
-
# Display command output with scroll
|
|
123
|
-
self.html.code_block(
|
|
124
|
-
"Line 1\nLine 2\nLine 3\n...",
|
|
125
|
-
max_height="400px"
|
|
126
|
-
)
|
|
127
|
-
```
|
|
128
|
-
|
|
129
|
-
#### Error Messages
|
|
130
|
-
```python
|
|
131
|
-
# Display error with danger styling
|
|
132
|
-
self.html.code_block(
|
|
133
|
-
"Traceback (most recent call last):\n File ...",
|
|
134
|
-
variant="danger",
|
|
135
|
-
max_height="300px"
|
|
136
|
-
)
|
|
137
|
-
```
|
|
138
|
-
|
|
139
|
-
#### Warnings
|
|
140
|
-
```python
|
|
141
|
-
# Display warnings with warning styling
|
|
142
|
-
self.html.code_block(
|
|
143
|
-
"Warning: This is deprecated\nUse new_method() instead",
|
|
144
|
-
variant="warning"
|
|
145
|
-
)
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
**Renders as:**
|
|
149
|
-
```html
|
|
150
|
-
<!-- Default variant -->
|
|
151
|
-
<pre class="font-mono text-xs whitespace-pre-wrap break-words border rounded-md p-3
|
|
152
|
-
bg-base-50 dark:bg-base-900 border-base-200 dark:border-base-700"
|
|
153
|
-
style="max-height: 400px; overflow-y: auto;">
|
|
154
|
-
<code>{"key": "value"}</code>
|
|
155
|
-
</pre>
|
|
156
|
-
|
|
157
|
-
<!-- Danger variant -->
|
|
158
|
-
<pre class="font-mono text-xs whitespace-pre-wrap break-words border rounded-md p-3
|
|
159
|
-
bg-danger-50 dark:bg-danger-900/20 border-danger-200 dark:border-danger-700"
|
|
160
|
-
style="max-height: 200px; overflow-y: auto;">
|
|
161
|
-
<code>Error: Something went wrong</code>
|
|
162
|
-
</pre>
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## Color Variants
|
|
168
|
-
|
|
169
|
-
| Variant | Background | Border | Use Case |
|
|
170
|
-
|---------|-----------|--------|----------|
|
|
171
|
-
| `default` | Gray | Gray | Standard code, JSON, logs |
|
|
172
|
-
| `warning` | Yellow/Orange | Yellow/Orange | Warnings, stderr output |
|
|
173
|
-
| `danger` | Red | Red | Errors, exceptions, failures |
|
|
174
|
-
| `success` | Green | Green | Success messages, confirmations |
|
|
175
|
-
| `info` | Blue | Blue | Info messages, metadata |
|
|
176
|
-
|
|
177
|
-
---
|
|
178
|
-
|
|
179
|
-
## Use Cases
|
|
180
|
-
|
|
181
|
-
### 1. Command Execution Logs
|
|
182
|
-
```python
|
|
183
|
-
@computed_field("Output")
|
|
184
|
-
def output_display(self, obj):
|
|
185
|
-
return self.html.code_block(
|
|
186
|
-
obj.stdout,
|
|
187
|
-
max_height="400px"
|
|
188
|
-
)
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
### 2. JSON Configuration
|
|
192
|
-
```python
|
|
193
|
-
@computed_field("Settings")
|
|
194
|
-
def settings_display(self, obj):
|
|
195
|
-
return self.html.code_block(
|
|
196
|
-
json.dumps(obj.settings, indent=2),
|
|
197
|
-
language="json"
|
|
198
|
-
)
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
### 3. Error Details
|
|
202
|
-
```python
|
|
203
|
-
@computed_field("Error")
|
|
204
|
-
def error_display(self, obj):
|
|
205
|
-
if not obj.error_message:
|
|
206
|
-
return self.html.empty()
|
|
207
|
-
|
|
208
|
-
return self.html.code_block(
|
|
209
|
-
obj.error_message,
|
|
210
|
-
max_height="300px",
|
|
211
|
-
variant="danger"
|
|
212
|
-
)
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
### 4. API Request/Response
|
|
216
|
-
```python
|
|
217
|
-
@computed_field("Request Body")
|
|
218
|
-
def request_body_display(self, obj):
|
|
219
|
-
return self.html.code_block(
|
|
220
|
-
obj.request_body,
|
|
221
|
-
language="json",
|
|
222
|
-
max_height="300px"
|
|
223
|
-
)
|
|
224
|
-
```
|
|
225
|
-
|
|
226
|
-
### 5. SQL Queries
|
|
227
|
-
```python
|
|
228
|
-
@computed_field("Query")
|
|
229
|
-
def query_display(self, obj):
|
|
230
|
-
return self.html.code_block(
|
|
231
|
-
obj.sql_query,
|
|
232
|
-
language="sql",
|
|
233
|
-
max_height="200px"
|
|
234
|
-
)
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
---
|
|
238
|
-
|
|
239
|
-
## Styling Details
|
|
240
|
-
|
|
241
|
-
### Tailwind Classes Used
|
|
242
|
-
|
|
243
|
-
**Base Classes:**
|
|
244
|
-
- `font-mono` - Monospace font
|
|
245
|
-
- `text-xs` - Small text size
|
|
246
|
-
- `whitespace-pre-wrap` - Preserve whitespace, wrap long lines
|
|
247
|
-
- `break-words` - Break long words
|
|
248
|
-
- `border` - Border
|
|
249
|
-
- `rounded-md` - Rounded corners
|
|
250
|
-
- `p-3` - Padding
|
|
251
|
-
|
|
252
|
-
**Variant-specific:**
|
|
253
|
-
- Light mode: `bg-{variant}-50 border-{variant}-200`
|
|
254
|
-
- Dark mode: `dark:bg-{variant}-900/20 dark:border-{variant}-700`
|
|
255
|
-
|
|
256
|
-
**Scrolling:**
|
|
257
|
-
- Applied via inline `style` attribute
|
|
258
|
-
- `max-height` and `overflow-y: auto`
|
|
259
|
-
|
|
260
|
-
---
|
|
261
|
-
|
|
262
|
-
## Implementation Notes
|
|
263
|
-
|
|
264
|
-
1. **Escaping**: All text is automatically escaped using Django's `escape()` to prevent XSS
|
|
265
|
-
2. **SafeString**: Returns Django's `SafeString` for safe HTML rendering
|
|
266
|
-
3. **Dark Mode**: Full dark mode support with Tailwind's dark: prefix
|
|
267
|
-
4. **Responsive**: Works on mobile with `break-words` and `whitespace-pre-wrap`
|
|
268
|
-
5. **Future-proof**: `language` parameter allows for syntax highlighting integration later
|
|
269
|
-
|
|
270
|
-
---
|
|
271
|
-
|
|
272
|
-
## Complete Example: Command Execution Admin
|
|
273
|
-
|
|
274
|
-
```python
|
|
275
|
-
from django.contrib import admin
|
|
276
|
-
from django_cfg.modules.django_admin import (
|
|
277
|
-
AdminConfig, BadgeField, DateTimeField, Icons, computed_field
|
|
278
|
-
)
|
|
279
|
-
from django_cfg.modules.django_admin.base import PydanticAdmin
|
|
280
|
-
import json
|
|
281
|
-
|
|
282
|
-
commandexecution_config = AdminConfig(
|
|
283
|
-
model=CommandExecution,
|
|
284
|
-
list_display=["id", "command", "status", "created_at"],
|
|
285
|
-
readonly_fields=[
|
|
286
|
-
"command_display",
|
|
287
|
-
"args_display",
|
|
288
|
-
"stdout_display",
|
|
289
|
-
"stderr_display",
|
|
290
|
-
"error_display",
|
|
291
|
-
],
|
|
292
|
-
)
|
|
293
|
-
|
|
294
|
-
@admin.register(CommandExecution)
|
|
295
|
-
class CommandExecutionAdmin(PydanticAdmin):
|
|
296
|
-
config = commandexecution_config
|
|
297
|
-
|
|
298
|
-
@computed_field("Command")
|
|
299
|
-
def command_display(self, obj):
|
|
300
|
-
"""Inline code for command."""
|
|
301
|
-
return self.html.code(obj.full_command)
|
|
302
|
-
|
|
303
|
-
@computed_field("Arguments")
|
|
304
|
-
def args_display(self, obj):
|
|
305
|
-
"""JSON code block for args."""
|
|
306
|
-
if not obj.args:
|
|
307
|
-
return self.html.empty()
|
|
308
|
-
|
|
309
|
-
return self.html.code_block(
|
|
310
|
-
json.dumps(obj.args, indent=2),
|
|
311
|
-
language="json"
|
|
312
|
-
)
|
|
313
|
-
|
|
314
|
-
@computed_field("Standard Output")
|
|
315
|
-
def stdout_display(self, obj):
|
|
316
|
-
"""Scrollable output."""
|
|
317
|
-
if not obj.stdout:
|
|
318
|
-
return self.html.empty()
|
|
319
|
-
|
|
320
|
-
return self.html.code_block(
|
|
321
|
-
obj.stdout,
|
|
322
|
-
max_height="400px"
|
|
323
|
-
)
|
|
324
|
-
|
|
325
|
-
@computed_field("Standard Error")
|
|
326
|
-
def stderr_display(self, obj):
|
|
327
|
-
"""Warning-styled error output."""
|
|
328
|
-
if not obj.stderr:
|
|
329
|
-
return self.html.empty()
|
|
330
|
-
|
|
331
|
-
return self.html.code_block(
|
|
332
|
-
obj.stderr,
|
|
333
|
-
max_height="400px",
|
|
334
|
-
variant="warning"
|
|
335
|
-
)
|
|
336
|
-
|
|
337
|
-
@computed_field("Error Message")
|
|
338
|
-
def error_display(self, obj):
|
|
339
|
-
"""Danger-styled error message."""
|
|
340
|
-
if not obj.error_message:
|
|
341
|
-
return self.html.empty()
|
|
342
|
-
|
|
343
|
-
return self.html.code_block(
|
|
344
|
-
obj.error_message,
|
|
345
|
-
max_height="200px",
|
|
346
|
-
variant="danger"
|
|
347
|
-
)
|
|
348
|
-
```
|
|
349
|
-
|
|
350
|
-
---
|
|
351
|
-
|
|
352
|
-
## Testing
|
|
353
|
-
|
|
354
|
-
```python
|
|
355
|
-
# Test inline code
|
|
356
|
-
assert 'font-mono' in str(html.code("test"))
|
|
357
|
-
|
|
358
|
-
# Test code block
|
|
359
|
-
assert '<pre' in str(html.code_block("test"))
|
|
360
|
-
assert 'overflow-y: auto' in str(html.code_block("test", max_height="400px"))
|
|
361
|
-
|
|
362
|
-
# Test variants
|
|
363
|
-
assert 'bg-danger' in str(html.code_block("error", variant="danger"))
|
|
364
|
-
assert 'bg-warning' in str(html.code_block("warn", variant="warning"))
|
|
365
|
-
```
|
|
366
|
-
|
|
367
|
-
---
|
|
368
|
-
|
|
369
|
-
## Migration from Old Format
|
|
370
|
-
|
|
371
|
-
**Before (manual HTML):**
|
|
372
|
-
```python
|
|
373
|
-
def output_display(self, obj):
|
|
374
|
-
return format_html(
|
|
375
|
-
'<pre style="max-height: 400px; overflow-y: auto; '
|
|
376
|
-
'background: #f8f9fa; padding: 10px; border-radius: 4px;">{}</pre>',
|
|
377
|
-
obj.stdout
|
|
378
|
-
)
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
**After (with code_block):**
|
|
382
|
-
```python
|
|
383
|
-
def output_display(self, obj):
|
|
384
|
-
return self.html.code_block(
|
|
385
|
-
obj.stdout,
|
|
386
|
-
max_height="400px"
|
|
387
|
-
)
|
|
388
|
-
```
|
|
389
|
-
|
|
390
|
-
Benefits:
|
|
391
|
-
- ✅ Cleaner, more readable code
|
|
392
|
-
- ✅ Consistent styling across project
|
|
393
|
-
- ✅ Dark mode support
|
|
394
|
-
- ✅ Proper escaping
|
|
395
|
-
- ✅ Tailwind CSS classes
|
|
396
|
-
- ✅ Variant support for different contexts
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|