""" Code Generator for Agents """ import shutil from pathlib import Path from typing import Dict class CodeGenerator: """ کلاس تولیدکننده کد برای ایجاد ساختار اپلیکیشن‌ها """ def __init__(self, base_path: str = "/workspace/unified_agent"): self.base_path = Path(base_path) self.templates_path = self.base_path / "templates" self.app_standards_path = self.base_path / "app_standards" def create_app_structure(self, app_name: str) -> Dict[str, str]: """ ایجاد ساختار کامل یک اپلیکیشن Args: app_name: نام اپلیکیشن Returns: دیکشنری حاوی مسیرهای ایجاد شده """ app_path = self.base_path / "apps" / app_name created_paths = {} # ایجاد ساختار پوشه‌ها directories = [ "app_code", "app_code/cores", "app_code/services", "app_code/migrations", "app_code/tests", "deployment", "docs", "charts" ] for directory in directories: dir_path = app_path / directory dir_path.mkdir(parents=True, exist_ok=True) created_paths[directory] = str(dir_path) # ایجاد __init__.py برای پوشه‌های Python if "app_code" in directory and directory != "app_code/migrations": init_file = dir_path / "__init__.py" init_file.touch() # کپی قالب‌ها self._copy_templates(app_path) # ایجاد فایل‌های پایه self._create_base_files(app_path, app_name) return created_paths def _copy_templates(self, app_path: Path): """کپی قالب‌ها به پوشه اپ""" template_files = [ "PLAN.md.template", "CHECKLIST.json.template", "PROGRESS.json.template", "LOG.md.template", "README.md.template" ] for template in template_files: src = self.templates_path / template dst = app_path / template.replace(".template", "") if src.exists(): shutil.copy2(src, dst) def _create_base_files(self, app_path: Path, app_name: str): """ایجاد فایل‌های پایه برای اپ""" # apps.py apps_content = f'''""" {app_name.replace('_', ' ').title()} Application """ from django.apps import AppConfig class {self._to_camel_case(app_name)}Config(AppConfig): default_auto_field = 'django.db.models.BigAutoField' name = '{app_name}' verbose_name = '{app_name.replace("_", " ").title()}' def ready(self): """آماده‌سازی اپلیکیشن""" pass ''' # models.py models_content = '''""" مدل‌های اپلیکیشن Application Models """ from django.db import models from django.contrib.auth import get_user_model from app_standards.models.base_models import BaseModel User = get_user_model() # مدل‌های اپلیکیشن را اینجا تعریف کنید ''' # views.py views_content = '''""" ویوهای اپلیکیشن Application Views """ from rest_framework import status from rest_framework.decorators import api_view, permission_classes from rest_framework.permissions import IsAuthenticated from rest_framework.response import Response from app_standards.four_cores import APIIngressCore, CentralOrchestrator # ویوهای اپلیکیشن را اینجا تعریف کنید ''' # serializers.py serializers_content = '''""" سریالایزرهای اپلیکیشن Application Serializers """ from rest_framework import serializers from app_standards.serializers.base_serializers import BaseModelSerializer # سریالایزرهای اپلیکیشن را اینجا تعریف کنید ''' # urls.py urls_content = f'''""" URL patterns for {app_name} """ from django.urls import path from . import views app_name = '{app_name}' urlpatterns = [ # URL patterns را اینجا تعریف کنید ] ''' # permissions.py permissions_content = '''""" دسترسی‌های سفارشی اپلیکیشن Custom Permissions """ from app_standards.views.permissions import BasePermission # دسترسی‌های سفارشی را اینجا تعریف کنید ''' # ذخیره فایل‌ها files = { "app_code/apps.py": apps_content, "app_code/models.py": models_content, "app_code/views.py": views_content, "app_code/serializers.py": serializers_content, "app_code/urls.py": urls_content, "app_code/permissions.py": permissions_content, } for file_path, content in files.items(): full_path = app_path / file_path with open(full_path, 'w', encoding='utf-8') as f: f.write(content) # ایجاد فایل‌های چهار هسته self._create_core_files(app_path) # ایجاد فایل‌های deployment self._create_deployment_files(app_path, app_name) def _create_core_files(self, app_path: Path): """ایجاد فایل‌های چهار هسته""" # api_ingress.py api_ingress_content = '''""" هسته API Ingress برای اپلیکیشن API Ingress Core for Application """ from app_standards.four_cores import APIIngressCore # پیاده‌سازی خاص اپلیکیشن را اینجا اضافه کنید ''' # text_processor.py text_processor_content = '''""" هسته پردازش متن برای اپلیکیشن Text Processing Core for Application """ from app_standards.four_cores import TextProcessorCore # پیاده‌سازی خاص اپلیکیشن را اینجا اضافه کنید ''' # speech_processor.py speech_processor_content = '''""" هسته پردازش صوت برای اپلیکیشن Speech Processing Core for Application """ from app_standards.four_cores import SpeechProcessorCore # پیاده‌سازی خاص اپلیکیشن را اینجا اضافه کنید ''' # orchestrator.py orchestrator_content = '''""" هماهنگ‌کننده مرکزی برای اپلیکیشن Central Orchestrator for Application """ from app_standards.four_cores import CentralOrchestrator # پیاده‌سازی خاص اپلیکیشن را اینجا اضافه کنید ''' cores = { "api_ingress.py": api_ingress_content, "text_processor.py": text_processor_content, "speech_processor.py": speech_processor_content, "orchestrator.py": orchestrator_content, } for file_name, content in cores.items(): file_path = app_path / "app_code" / "cores" / file_name with open(file_path, 'w', encoding='utf-8') as f: f.write(content) def _create_deployment_files(self, app_path: Path, app_name: str): """ایجاد فایل‌های deployment""" # settings_additions.py settings_content = f'''""" تنظیمات اضافی برای {app_name} Additional Settings for {app_name} """ # اضافه کردن به INSTALLED_APPS INSTALLED_APPS += [ '{app_name}.apps.{self._to_camel_case(app_name)}Config', ] # Rate limiting RATE_LIMIT_{app_name.upper()} = {{ 'api_calls': '100/minute', 'ai_requests': '20/minute', }} # Logging LOGGING['loggers']['{app_name}'] = {{ 'handlers': ['file', 'console'], 'level': 'INFO', 'propagate': False, }} ''' # urls_additions.py urls_content = f'''""" URL additions for {app_name} """ from django.urls import path, include urlpatterns += [ path('api/{app_name}/', include('{app_name}.urls')), ] ''' # requirements_additions.txt requirements_content = '''# وابستگی‌های اضافی برای این اپلیکیشن # Additional dependencies for this application ''' deployment_files = { "deployment/settings_additions.py": settings_content, "deployment/urls_additions.py": urls_content, "deployment/requirements_additions.txt": requirements_content, } for file_path, content in deployment_files.items(): full_path = app_path / file_path with open(full_path, 'w', encoding='utf-8') as f: f.write(content) # api_spec.yaml api_spec_content = f'''openapi: 3.0.0 info: title: {app_name.replace('_', ' ').title()} API version: 1.0.0 description: API documentation for {app_name} servers: - url: /api/{app_name} description: API endpoint paths: # API paths را اینجا تعریف کنید components: schemas: # Schema definitions را اینجا تعریف کنید securitySchemes: bearerAuth: type: http scheme: bearer bearerFormat: JWT security: - bearerAuth: [] ''' api_spec_path = app_path / "docs" / "api_spec.yaml" with open(api_spec_path, 'w', encoding='utf-8') as f: f.write(api_spec_content) def _to_camel_case(self, snake_str: str) -> str: """تبدیل snake_case به CamelCase""" components = snake_str.split('_') return ''.join(x.title() for x in components) def generate_test_structure(self, app_path: Path, app_name: str): """ایجاد ساختار تست‌ها""" test_files = [ "test_models.py", "test_views.py", "test_serializers.py", "test_integration.py" ] base_test_content = f'''""" تست‌های {{}} برای {app_name} {{}} Tests for {app_name} """ from django.test import TestCase from rest_framework.test import APITestCase from django.contrib.auth import get_user_model User = get_user_model() # تست‌ها را اینجا تعریف کنید ''' for test_file in test_files: test_type = test_file.replace('test_', '').replace('.py', '') content = base_test_content.format(test_type.title(), test_type.title()) file_path = app_path / "app_code" / "tests" / test_file with open(file_path, 'w', encoding='utf-8') as f: f.write(content) # نمونه استفاده if __name__ == "__main__": generator = CodeGenerator() # ایجاد ساختار برای patient_chatbot paths = generator.create_app_structure("patient_chatbot") print("ساختار اپلیکیشن ایجاد شد:") for key, path in paths.items(): print(f" {key}: {path}")