django-cfg 1.5.8__py3-none-any.whl → 1.5.20__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.

Files changed (159) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/api/commands/serializers.py +152 -0
  3. django_cfg/apps/api/commands/views.py +32 -0
  4. django_cfg/apps/business/accounts/management/commands/otp_test.py +5 -2
  5. django_cfg/apps/business/accounts/serializers/profile.py +42 -0
  6. django_cfg/apps/business/agents/management/commands/create_agent.py +5 -194
  7. django_cfg/apps/business/agents/management/commands/load_agent_templates.py +205 -0
  8. django_cfg/apps/business/agents/management/commands/orchestrator_status.py +4 -2
  9. django_cfg/apps/business/knowbase/management/commands/knowbase_stats.py +4 -2
  10. django_cfg/apps/business/knowbase/management/commands/setup_knowbase.py +4 -2
  11. django_cfg/apps/business/newsletter/management/commands/test_newsletter.py +5 -2
  12. django_cfg/apps/business/payments/management/commands/check_payment_status.py +4 -2
  13. django_cfg/apps/business/payments/management/commands/create_payment.py +4 -2
  14. django_cfg/apps/business/payments/management/commands/sync_currencies.py +4 -2
  15. django_cfg/apps/business/support/serializers.py +3 -2
  16. django_cfg/apps/integrations/centrifugo/apps.py +2 -1
  17. django_cfg/apps/integrations/centrifugo/codegen/generators/typescript_thin/templates/rpc-client.ts.j2 +151 -12
  18. django_cfg/apps/integrations/centrifugo/management/commands/generate_centrifugo_clients.py +6 -6
  19. django_cfg/apps/integrations/centrifugo/serializers/__init__.py +2 -1
  20. django_cfg/apps/integrations/centrifugo/serializers/publishes.py +22 -2
  21. django_cfg/apps/integrations/centrifugo/services/__init__.py +6 -0
  22. django_cfg/apps/integrations/centrifugo/services/client/__init__.py +6 -1
  23. django_cfg/apps/integrations/centrifugo/services/client/direct_client.py +282 -0
  24. django_cfg/apps/integrations/centrifugo/services/publisher.py +371 -0
  25. django_cfg/apps/integrations/centrifugo/services/token_generator.py +122 -0
  26. django_cfg/apps/integrations/centrifugo/urls.py +8 -0
  27. django_cfg/apps/integrations/centrifugo/views/__init__.py +2 -0
  28. django_cfg/apps/integrations/centrifugo/views/monitoring.py +25 -40
  29. django_cfg/apps/integrations/centrifugo/views/testing_api.py +0 -79
  30. django_cfg/apps/integrations/centrifugo/views/token_api.py +101 -0
  31. django_cfg/apps/integrations/centrifugo/views/wrapper.py +257 -0
  32. django_cfg/apps/integrations/grpc/admin/__init__.py +7 -1
  33. django_cfg/apps/integrations/grpc/admin/config.py +113 -9
  34. django_cfg/apps/integrations/grpc/admin/grpc_api_key.py +129 -0
  35. django_cfg/apps/integrations/grpc/admin/grpc_request_log.py +72 -63
  36. django_cfg/apps/integrations/grpc/admin/grpc_server_status.py +236 -0
  37. django_cfg/apps/integrations/grpc/auth/__init__.py +11 -3
  38. django_cfg/apps/integrations/grpc/auth/api_key_auth.py +320 -0
  39. django_cfg/apps/integrations/grpc/centrifugo/__init__.py +29 -0
  40. django_cfg/apps/integrations/grpc/centrifugo/bridge.py +277 -0
  41. django_cfg/apps/integrations/grpc/centrifugo/config.py +167 -0
  42. django_cfg/apps/integrations/grpc/centrifugo/demo.py +626 -0
  43. django_cfg/apps/integrations/grpc/centrifugo/test_publish.py +229 -0
  44. django_cfg/apps/integrations/grpc/centrifugo/transformers.py +89 -0
  45. django_cfg/apps/integrations/grpc/interceptors/__init__.py +3 -1
  46. django_cfg/apps/integrations/grpc/interceptors/centrifugo.py +541 -0
  47. django_cfg/apps/integrations/grpc/interceptors/logging.py +17 -20
  48. django_cfg/apps/integrations/grpc/interceptors/metrics.py +15 -14
  49. django_cfg/apps/integrations/grpc/interceptors/request_logger.py +79 -59
  50. django_cfg/apps/integrations/grpc/management/commands/compile_proto.py +105 -0
  51. django_cfg/apps/integrations/grpc/management/commands/generate_protos.py +185 -0
  52. django_cfg/apps/integrations/grpc/management/commands/rungrpc.py +474 -95
  53. django_cfg/apps/integrations/grpc/management/commands/test_grpc_integration.py +75 -0
  54. django_cfg/apps/integrations/grpc/management/proto/__init__.py +3 -0
  55. django_cfg/apps/integrations/grpc/management/proto/compiler.py +194 -0
  56. django_cfg/apps/integrations/grpc/managers/__init__.py +2 -0
  57. django_cfg/apps/integrations/grpc/managers/grpc_api_key.py +192 -0
  58. django_cfg/apps/integrations/grpc/managers/grpc_server_status.py +19 -11
  59. django_cfg/apps/integrations/grpc/migrations/0005_grpcapikey.py +143 -0
  60. django_cfg/apps/integrations/grpc/migrations/0006_grpcrequestlog_api_key_and_more.py +34 -0
  61. django_cfg/apps/integrations/grpc/models/__init__.py +2 -0
  62. django_cfg/apps/integrations/grpc/models/grpc_api_key.py +198 -0
  63. django_cfg/apps/integrations/grpc/models/grpc_request_log.py +11 -0
  64. django_cfg/apps/integrations/grpc/models/grpc_server_status.py +39 -4
  65. django_cfg/apps/integrations/grpc/serializers/__init__.py +22 -6
  66. django_cfg/apps/integrations/grpc/serializers/api_keys.py +63 -0
  67. django_cfg/apps/integrations/grpc/serializers/charts.py +118 -120
  68. django_cfg/apps/integrations/grpc/serializers/config.py +65 -51
  69. django_cfg/apps/integrations/grpc/serializers/health.py +7 -7
  70. django_cfg/apps/integrations/grpc/serializers/proto_files.py +74 -0
  71. django_cfg/apps/integrations/grpc/serializers/requests.py +13 -7
  72. django_cfg/apps/integrations/grpc/serializers/service_registry.py +181 -112
  73. django_cfg/apps/integrations/grpc/serializers/services.py +14 -32
  74. django_cfg/apps/integrations/grpc/serializers/stats.py +50 -12
  75. django_cfg/apps/integrations/grpc/serializers/testing.py +66 -58
  76. django_cfg/apps/integrations/grpc/services/__init__.py +2 -0
  77. django_cfg/apps/integrations/grpc/services/discovery.py +7 -1
  78. django_cfg/apps/integrations/grpc/services/monitoring_service.py +149 -43
  79. django_cfg/apps/integrations/grpc/services/proto_files_manager.py +268 -0
  80. django_cfg/apps/integrations/grpc/services/service_registry.py +48 -46
  81. django_cfg/apps/integrations/grpc/services/testing_service.py +10 -15
  82. django_cfg/apps/integrations/grpc/urls.py +8 -0
  83. django_cfg/apps/integrations/grpc/utils/SERVER_LOGGING.md +164 -0
  84. django_cfg/apps/integrations/grpc/utils/__init__.py +4 -13
  85. django_cfg/apps/integrations/grpc/utils/integration_test.py +334 -0
  86. django_cfg/apps/integrations/grpc/utils/proto_gen.py +48 -8
  87. django_cfg/apps/integrations/grpc/utils/streaming_logger.py +378 -0
  88. django_cfg/apps/integrations/grpc/views/__init__.py +4 -0
  89. django_cfg/apps/integrations/grpc/views/api_keys.py +255 -0
  90. django_cfg/apps/integrations/grpc/views/charts.py +21 -14
  91. django_cfg/apps/integrations/grpc/views/config.py +8 -6
  92. django_cfg/apps/integrations/grpc/views/monitoring.py +51 -79
  93. django_cfg/apps/integrations/grpc/views/proto_files.py +214 -0
  94. django_cfg/apps/integrations/grpc/views/services.py +30 -21
  95. django_cfg/apps/integrations/grpc/views/testing.py +45 -43
  96. django_cfg/apps/integrations/rq/views/jobs.py +19 -9
  97. django_cfg/apps/integrations/rq/views/schedule.py +7 -3
  98. django_cfg/apps/system/dashboard/serializers/commands.py +25 -1
  99. django_cfg/apps/system/dashboard/serializers/config.py +95 -9
  100. django_cfg/apps/system/dashboard/serializers/statistics.py +9 -4
  101. django_cfg/apps/system/dashboard/services/commands_service.py +12 -1
  102. django_cfg/apps/system/frontend/views.py +87 -6
  103. django_cfg/apps/system/maintenance/management/commands/maintenance.py +5 -2
  104. django_cfg/apps/system/maintenance/management/commands/process_scheduled_maintenance.py +4 -2
  105. django_cfg/apps/system/maintenance/management/commands/sync_cloudflare.py +5 -2
  106. django_cfg/config.py +33 -0
  107. django_cfg/core/builders/security_builder.py +1 -0
  108. django_cfg/core/generation/integration_generators/api.py +2 -0
  109. django_cfg/core/generation/integration_generators/grpc_generator.py +30 -32
  110. django_cfg/management/commands/check_endpoints.py +2 -2
  111. django_cfg/management/commands/check_settings.py +3 -10
  112. django_cfg/management/commands/clear_constance.py +3 -10
  113. django_cfg/management/commands/create_token.py +4 -11
  114. django_cfg/management/commands/list_urls.py +4 -10
  115. django_cfg/management/commands/migrate_all.py +18 -12
  116. django_cfg/management/commands/migrator.py +4 -11
  117. django_cfg/management/commands/script.py +4 -10
  118. django_cfg/management/commands/show_config.py +8 -16
  119. django_cfg/management/commands/show_urls.py +5 -11
  120. django_cfg/management/commands/superuser.py +4 -11
  121. django_cfg/management/commands/tree.py +5 -10
  122. django_cfg/management/utils/README.md +402 -0
  123. django_cfg/management/utils/__init__.py +29 -0
  124. django_cfg/management/utils/mixins.py +176 -0
  125. django_cfg/middleware/pagination.py +53 -54
  126. django_cfg/models/api/grpc/__init__.py +15 -21
  127. django_cfg/models/api/grpc/config.py +155 -73
  128. django_cfg/models/ngrok/config.py +7 -6
  129. django_cfg/modules/django_client/core/generator/python/files_generator.py +5 -13
  130. django_cfg/modules/django_client/core/generator/python/templates/api_wrapper.py.jinja +16 -4
  131. django_cfg/modules/django_client/core/generator/python/templates/main_init.py.jinja +2 -3
  132. django_cfg/modules/django_client/core/generator/typescript/files_generator.py +6 -5
  133. django_cfg/modules/django_client/core/generator/typescript/generator.py +26 -0
  134. django_cfg/modules/django_client/core/generator/typescript/hooks_generator.py +7 -1
  135. django_cfg/modules/django_client/core/generator/typescript/models_generator.py +5 -0
  136. django_cfg/modules/django_client/core/generator/typescript/schemas_generator.py +11 -0
  137. django_cfg/modules/django_client/core/generator/typescript/templates/fetchers/fetchers.ts.jinja +1 -0
  138. django_cfg/modules/django_client/core/generator/typescript/templates/fetchers/function.ts.jinja +29 -1
  139. django_cfg/modules/django_client/core/generator/typescript/templates/hooks/hooks.ts.jinja +4 -0
  140. django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja +12 -8
  141. django_cfg/modules/django_client/core/ir/schema.py +15 -1
  142. django_cfg/modules/django_client/core/parser/base.py +126 -30
  143. django_cfg/modules/django_client/management/commands/generate_client.py +5 -2
  144. django_cfg/modules/django_client/management/commands/validate_openapi.py +5 -2
  145. django_cfg/modules/django_email/management/commands/test_email.py +4 -10
  146. django_cfg/modules/django_ngrok/management/commands/runserver_ngrok.py +16 -13
  147. django_cfg/modules/django_telegram/management/commands/test_telegram.py +4 -11
  148. django_cfg/modules/django_twilio/management/commands/test_twilio.py +4 -11
  149. django_cfg/modules/django_unfold/navigation.py +6 -18
  150. django_cfg/pyproject.toml +1 -1
  151. django_cfg/registry/modules.py +1 -4
  152. django_cfg/requirements.txt +52 -0
  153. django_cfg/static/frontend/admin.zip +0 -0
  154. {django_cfg-1.5.8.dist-info → django_cfg-1.5.20.dist-info}/METADATA +1 -1
  155. {django_cfg-1.5.8.dist-info → django_cfg-1.5.20.dist-info}/RECORD +158 -121
  156. django_cfg/apps/integrations/grpc/auth/jwt_auth.py +0 -295
  157. {django_cfg-1.5.8.dist-info → django_cfg-1.5.20.dist-info}/WHEEL +0 -0
  158. {django_cfg-1.5.8.dist-info → django_cfg-1.5.20.dist-info}/entry_points.txt +0 -0
  159. {django_cfg-1.5.8.dist-info → django_cfg-1.5.20.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,185 @@
1
+ """
2
+ Management command to generate .proto files from Django models.
3
+
4
+ Usage:
5
+ python manage.py generate_protos [app_label ...]
6
+ python manage.py generate_protos crypto
7
+ python manage.py generate_protos crypto accounts
8
+ python manage.py generate_protos --all
9
+ """
10
+
11
+ from django.core.management.base import CommandError
12
+ from django.apps import apps
13
+
14
+ from django_cfg.management.utils import AdminCommand
15
+
16
+
17
+ class Command(AdminCommand):
18
+ command_name = 'generate_protos'
19
+ help = "Generate .proto files from Django models"
20
+
21
+ def add_arguments(self, parser):
22
+ parser.add_argument(
23
+ "apps",
24
+ nargs="*",
25
+ type=str,
26
+ help="App labels to generate protos for",
27
+ )
28
+ parser.add_argument(
29
+ "--all",
30
+ action="store_true",
31
+ help="Generate protos for all enabled apps from GRPC config",
32
+ )
33
+ parser.add_argument(
34
+ "--output-dir",
35
+ type=str,
36
+ default=None,
37
+ help="Custom output directory (overrides config)",
38
+ )
39
+ parser.add_argument(
40
+ "--compile",
41
+ action="store_true",
42
+ help="Automatically compile generated .proto files to Python",
43
+ )
44
+ parser.add_argument(
45
+ "--no-fix-imports",
46
+ action="store_false",
47
+ dest="fix_imports",
48
+ help="Disable import fixing when compiling (only with --compile)",
49
+ )
50
+
51
+ def handle(self, *args, **options):
52
+ from django_cfg.apps.integrations.grpc.utils.proto_gen import generate_proto_for_app
53
+ from django_cfg.apps.integrations.grpc.services.config_helper import get_grpc_config
54
+
55
+ # Get gRPC config
56
+ grpc_config = get_grpc_config()
57
+ if not grpc_config or not grpc_config.enabled:
58
+ raise CommandError("gRPC is not enabled in configuration")
59
+
60
+ # Determine which apps to generate
61
+ app_labels = options["apps"]
62
+
63
+ if options["all"]:
64
+ # Use enabled_apps from config
65
+ app_labels = grpc_config.enabled_apps
66
+ if not app_labels:
67
+ raise CommandError("No enabled_apps configured in GRPCConfig")
68
+ self.stdout.write(
69
+ self.style.SUCCESS(
70
+ f"Generating protos for all enabled apps: {', '.join(app_labels)}"
71
+ )
72
+ )
73
+ elif not app_labels:
74
+ # No apps specified - show help
75
+ raise CommandError(
76
+ "Please specify app labels or use --all flag\n"
77
+ "Examples:\n"
78
+ " python manage.py generate_protos crypto\n"
79
+ " python manage.py generate_protos crypto accounts\n"
80
+ " python manage.py generate_protos --all"
81
+ )
82
+
83
+ # Validate apps exist
84
+ for app_label in app_labels:
85
+ try:
86
+ apps.get_app_config(app_label)
87
+ except LookupError:
88
+ raise CommandError(f"App '{app_label}' not found")
89
+
90
+ # Get output directory from options or config
91
+ output_dir = None
92
+ if options["output_dir"]:
93
+ from pathlib import Path
94
+ output_dir = Path(options["output_dir"])
95
+ self.stdout.write(
96
+ self.style.WARNING(f"Using custom output directory: {output_dir}")
97
+ )
98
+
99
+ # Generate protos
100
+ total_generated = 0
101
+ for app_label in app_labels:
102
+ self.stdout.write(f"\nšŸ“¦ Generating proto for app: {app_label}")
103
+
104
+ try:
105
+ count = generate_proto_for_app(app_label, output_dir=output_dir)
106
+ if count > 0:
107
+ total_generated += count
108
+ self.stdout.write(
109
+ self.style.SUCCESS(f" āœ… Generated {app_label}.proto")
110
+ )
111
+ else:
112
+ self.stdout.write(
113
+ self.style.WARNING(f" āš ļø No models found in {app_label}")
114
+ )
115
+ except Exception as e:
116
+ self.stdout.write(
117
+ self.style.ERROR(f" āŒ Failed: {e}")
118
+ )
119
+
120
+ # Summary
121
+ self.stdout.write("\n" + "=" * 70)
122
+ if total_generated > 0:
123
+ # Show output location
124
+ if output_dir:
125
+ output_location = output_dir
126
+ elif grpc_config.proto and grpc_config.proto.output_dir:
127
+ output_location = grpc_config.proto.output_dir
128
+ else:
129
+ output_location = "media/protos"
130
+
131
+ self.stdout.write(
132
+ self.style.SUCCESS(
133
+ f"šŸŽ‰ Generated {total_generated} proto file(s)\n"
134
+ f"šŸ“‚ Output directory: {output_location}"
135
+ )
136
+ )
137
+
138
+ # Compile proto files if requested
139
+ if options["compile"]:
140
+ self.stdout.write("\n" + "=" * 70)
141
+ self.stdout.write(self.style.SUCCESS("šŸ”§ Compiling generated proto files..."))
142
+ self._compile_protos(output_location, options.get("fix_imports", True))
143
+ else:
144
+ self.stdout.write(
145
+ self.style.WARNING("āš ļø No proto files generated")
146
+ )
147
+ self.stdout.write("=" * 70)
148
+
149
+ def _compile_protos(self, output_dir, fix_imports: bool):
150
+ """Compile all .proto files in output directory."""
151
+ from pathlib import Path
152
+ from django_cfg.apps.integrations.grpc.management.proto.compiler import ProtoCompiler
153
+
154
+ output_path = Path(output_dir)
155
+ if not output_path.exists():
156
+ self.stdout.write(self.style.ERROR(f" āŒ Output directory not found: {output_dir}"))
157
+ return
158
+
159
+ # Create compiler
160
+ compiler = ProtoCompiler(
161
+ output_dir=output_path / "generated", # Compile to generated/ subdirectory
162
+ proto_import_path=output_path,
163
+ fix_imports=fix_imports,
164
+ verbose=True,
165
+ )
166
+
167
+ # Compile all proto files
168
+ success_count, failure_count = compiler.compile_directory(
169
+ output_path,
170
+ recursive=False,
171
+ )
172
+
173
+ if failure_count > 0:
174
+ self.stdout.write(
175
+ self.style.ERROR(
176
+ f" āŒ Failed to compile {failure_count} proto file(s) "
177
+ f"({success_count} succeeded)"
178
+ )
179
+ )
180
+ else:
181
+ self.stdout.write(
182
+ self.style.SUCCESS(
183
+ f" āœ… Compiled {success_count} proto file(s) successfully"
184
+ )
185
+ )