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.
- django_cfg/__init__.py +1 -1
- django_cfg/apps/api/commands/serializers.py +152 -0
- django_cfg/apps/api/commands/views.py +32 -0
- django_cfg/apps/business/accounts/management/commands/otp_test.py +5 -2
- django_cfg/apps/business/accounts/serializers/profile.py +42 -0
- django_cfg/apps/business/agents/management/commands/create_agent.py +5 -194
- django_cfg/apps/business/agents/management/commands/load_agent_templates.py +205 -0
- django_cfg/apps/business/agents/management/commands/orchestrator_status.py +4 -2
- django_cfg/apps/business/knowbase/management/commands/knowbase_stats.py +4 -2
- django_cfg/apps/business/knowbase/management/commands/setup_knowbase.py +4 -2
- django_cfg/apps/business/newsletter/management/commands/test_newsletter.py +5 -2
- django_cfg/apps/business/payments/management/commands/check_payment_status.py +4 -2
- django_cfg/apps/business/payments/management/commands/create_payment.py +4 -2
- django_cfg/apps/business/payments/management/commands/sync_currencies.py +4 -2
- django_cfg/apps/business/support/serializers.py +3 -2
- django_cfg/apps/integrations/centrifugo/apps.py +2 -1
- django_cfg/apps/integrations/centrifugo/codegen/generators/typescript_thin/templates/rpc-client.ts.j2 +151 -12
- django_cfg/apps/integrations/centrifugo/management/commands/generate_centrifugo_clients.py +6 -6
- django_cfg/apps/integrations/centrifugo/serializers/__init__.py +2 -1
- django_cfg/apps/integrations/centrifugo/serializers/publishes.py +22 -2
- django_cfg/apps/integrations/centrifugo/services/__init__.py +6 -0
- django_cfg/apps/integrations/centrifugo/services/client/__init__.py +6 -1
- django_cfg/apps/integrations/centrifugo/services/client/direct_client.py +282 -0
- django_cfg/apps/integrations/centrifugo/services/publisher.py +371 -0
- django_cfg/apps/integrations/centrifugo/services/token_generator.py +122 -0
- django_cfg/apps/integrations/centrifugo/urls.py +8 -0
- django_cfg/apps/integrations/centrifugo/views/__init__.py +2 -0
- django_cfg/apps/integrations/centrifugo/views/monitoring.py +25 -40
- django_cfg/apps/integrations/centrifugo/views/testing_api.py +0 -79
- django_cfg/apps/integrations/centrifugo/views/token_api.py +101 -0
- django_cfg/apps/integrations/centrifugo/views/wrapper.py +257 -0
- django_cfg/apps/integrations/grpc/admin/__init__.py +7 -1
- django_cfg/apps/integrations/grpc/admin/config.py +113 -9
- django_cfg/apps/integrations/grpc/admin/grpc_api_key.py +129 -0
- django_cfg/apps/integrations/grpc/admin/grpc_request_log.py +72 -63
- django_cfg/apps/integrations/grpc/admin/grpc_server_status.py +236 -0
- django_cfg/apps/integrations/grpc/auth/__init__.py +11 -3
- django_cfg/apps/integrations/grpc/auth/api_key_auth.py +320 -0
- django_cfg/apps/integrations/grpc/centrifugo/__init__.py +29 -0
- django_cfg/apps/integrations/grpc/centrifugo/bridge.py +277 -0
- django_cfg/apps/integrations/grpc/centrifugo/config.py +167 -0
- django_cfg/apps/integrations/grpc/centrifugo/demo.py +626 -0
- django_cfg/apps/integrations/grpc/centrifugo/test_publish.py +229 -0
- django_cfg/apps/integrations/grpc/centrifugo/transformers.py +89 -0
- django_cfg/apps/integrations/grpc/interceptors/__init__.py +3 -1
- django_cfg/apps/integrations/grpc/interceptors/centrifugo.py +541 -0
- django_cfg/apps/integrations/grpc/interceptors/logging.py +17 -20
- django_cfg/apps/integrations/grpc/interceptors/metrics.py +15 -14
- django_cfg/apps/integrations/grpc/interceptors/request_logger.py +79 -59
- django_cfg/apps/integrations/grpc/management/commands/compile_proto.py +105 -0
- django_cfg/apps/integrations/grpc/management/commands/generate_protos.py +185 -0
- django_cfg/apps/integrations/grpc/management/commands/rungrpc.py +474 -95
- django_cfg/apps/integrations/grpc/management/commands/test_grpc_integration.py +75 -0
- django_cfg/apps/integrations/grpc/management/proto/__init__.py +3 -0
- django_cfg/apps/integrations/grpc/management/proto/compiler.py +194 -0
- django_cfg/apps/integrations/grpc/managers/__init__.py +2 -0
- django_cfg/apps/integrations/grpc/managers/grpc_api_key.py +192 -0
- django_cfg/apps/integrations/grpc/managers/grpc_server_status.py +19 -11
- django_cfg/apps/integrations/grpc/migrations/0005_grpcapikey.py +143 -0
- django_cfg/apps/integrations/grpc/migrations/0006_grpcrequestlog_api_key_and_more.py +34 -0
- django_cfg/apps/integrations/grpc/models/__init__.py +2 -0
- django_cfg/apps/integrations/grpc/models/grpc_api_key.py +198 -0
- django_cfg/apps/integrations/grpc/models/grpc_request_log.py +11 -0
- django_cfg/apps/integrations/grpc/models/grpc_server_status.py +39 -4
- django_cfg/apps/integrations/grpc/serializers/__init__.py +22 -6
- django_cfg/apps/integrations/grpc/serializers/api_keys.py +63 -0
- django_cfg/apps/integrations/grpc/serializers/charts.py +118 -120
- django_cfg/apps/integrations/grpc/serializers/config.py +65 -51
- django_cfg/apps/integrations/grpc/serializers/health.py +7 -7
- django_cfg/apps/integrations/grpc/serializers/proto_files.py +74 -0
- django_cfg/apps/integrations/grpc/serializers/requests.py +13 -7
- django_cfg/apps/integrations/grpc/serializers/service_registry.py +181 -112
- django_cfg/apps/integrations/grpc/serializers/services.py +14 -32
- django_cfg/apps/integrations/grpc/serializers/stats.py +50 -12
- django_cfg/apps/integrations/grpc/serializers/testing.py +66 -58
- django_cfg/apps/integrations/grpc/services/__init__.py +2 -0
- django_cfg/apps/integrations/grpc/services/discovery.py +7 -1
- django_cfg/apps/integrations/grpc/services/monitoring_service.py +149 -43
- django_cfg/apps/integrations/grpc/services/proto_files_manager.py +268 -0
- django_cfg/apps/integrations/grpc/services/service_registry.py +48 -46
- django_cfg/apps/integrations/grpc/services/testing_service.py +10 -15
- django_cfg/apps/integrations/grpc/urls.py +8 -0
- django_cfg/apps/integrations/grpc/utils/SERVER_LOGGING.md +164 -0
- django_cfg/apps/integrations/grpc/utils/__init__.py +4 -13
- django_cfg/apps/integrations/grpc/utils/integration_test.py +334 -0
- django_cfg/apps/integrations/grpc/utils/proto_gen.py +48 -8
- django_cfg/apps/integrations/grpc/utils/streaming_logger.py +378 -0
- django_cfg/apps/integrations/grpc/views/__init__.py +4 -0
- django_cfg/apps/integrations/grpc/views/api_keys.py +255 -0
- django_cfg/apps/integrations/grpc/views/charts.py +21 -14
- django_cfg/apps/integrations/grpc/views/config.py +8 -6
- django_cfg/apps/integrations/grpc/views/monitoring.py +51 -79
- django_cfg/apps/integrations/grpc/views/proto_files.py +214 -0
- django_cfg/apps/integrations/grpc/views/services.py +30 -21
- django_cfg/apps/integrations/grpc/views/testing.py +45 -43
- django_cfg/apps/integrations/rq/views/jobs.py +19 -9
- django_cfg/apps/integrations/rq/views/schedule.py +7 -3
- django_cfg/apps/system/dashboard/serializers/commands.py +25 -1
- django_cfg/apps/system/dashboard/serializers/config.py +95 -9
- django_cfg/apps/system/dashboard/serializers/statistics.py +9 -4
- django_cfg/apps/system/dashboard/services/commands_service.py +12 -1
- django_cfg/apps/system/frontend/views.py +87 -6
- django_cfg/apps/system/maintenance/management/commands/maintenance.py +5 -2
- django_cfg/apps/system/maintenance/management/commands/process_scheduled_maintenance.py +4 -2
- django_cfg/apps/system/maintenance/management/commands/sync_cloudflare.py +5 -2
- django_cfg/config.py +33 -0
- django_cfg/core/builders/security_builder.py +1 -0
- django_cfg/core/generation/integration_generators/api.py +2 -0
- django_cfg/core/generation/integration_generators/grpc_generator.py +30 -32
- django_cfg/management/commands/check_endpoints.py +2 -2
- django_cfg/management/commands/check_settings.py +3 -10
- django_cfg/management/commands/clear_constance.py +3 -10
- django_cfg/management/commands/create_token.py +4 -11
- django_cfg/management/commands/list_urls.py +4 -10
- django_cfg/management/commands/migrate_all.py +18 -12
- django_cfg/management/commands/migrator.py +4 -11
- django_cfg/management/commands/script.py +4 -10
- django_cfg/management/commands/show_config.py +8 -16
- django_cfg/management/commands/show_urls.py +5 -11
- django_cfg/management/commands/superuser.py +4 -11
- django_cfg/management/commands/tree.py +5 -10
- django_cfg/management/utils/README.md +402 -0
- django_cfg/management/utils/__init__.py +29 -0
- django_cfg/management/utils/mixins.py +176 -0
- django_cfg/middleware/pagination.py +53 -54
- django_cfg/models/api/grpc/__init__.py +15 -21
- django_cfg/models/api/grpc/config.py +155 -73
- django_cfg/models/ngrok/config.py +7 -6
- django_cfg/modules/django_client/core/generator/python/files_generator.py +5 -13
- django_cfg/modules/django_client/core/generator/python/templates/api_wrapper.py.jinja +16 -4
- django_cfg/modules/django_client/core/generator/python/templates/main_init.py.jinja +2 -3
- django_cfg/modules/django_client/core/generator/typescript/files_generator.py +6 -5
- django_cfg/modules/django_client/core/generator/typescript/generator.py +26 -0
- django_cfg/modules/django_client/core/generator/typescript/hooks_generator.py +7 -1
- django_cfg/modules/django_client/core/generator/typescript/models_generator.py +5 -0
- django_cfg/modules/django_client/core/generator/typescript/schemas_generator.py +11 -0
- django_cfg/modules/django_client/core/generator/typescript/templates/fetchers/fetchers.ts.jinja +1 -0
- django_cfg/modules/django_client/core/generator/typescript/templates/fetchers/function.ts.jinja +29 -1
- django_cfg/modules/django_client/core/generator/typescript/templates/hooks/hooks.ts.jinja +4 -0
- django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja +12 -8
- django_cfg/modules/django_client/core/ir/schema.py +15 -1
- django_cfg/modules/django_client/core/parser/base.py +126 -30
- django_cfg/modules/django_client/management/commands/generate_client.py +5 -2
- django_cfg/modules/django_client/management/commands/validate_openapi.py +5 -2
- django_cfg/modules/django_email/management/commands/test_email.py +4 -10
- django_cfg/modules/django_ngrok/management/commands/runserver_ngrok.py +16 -13
- django_cfg/modules/django_telegram/management/commands/test_telegram.py +4 -11
- django_cfg/modules/django_twilio/management/commands/test_twilio.py +4 -11
- django_cfg/modules/django_unfold/navigation.py +6 -18
- django_cfg/pyproject.toml +1 -1
- django_cfg/registry/modules.py +1 -4
- django_cfg/requirements.txt +52 -0
- django_cfg/static/frontend/admin.zip +0 -0
- {django_cfg-1.5.8.dist-info ā django_cfg-1.5.20.dist-info}/METADATA +1 -1
- {django_cfg-1.5.8.dist-info ā django_cfg-1.5.20.dist-info}/RECORD +158 -121
- django_cfg/apps/integrations/grpc/auth/jwt_auth.py +0 -295
- {django_cfg-1.5.8.dist-info ā django_cfg-1.5.20.dist-info}/WHEEL +0 -0
- {django_cfg-1.5.8.dist-info ā django_cfg-1.5.20.dist-info}/entry_points.txt +0 -0
- {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
|
+
)
|