coding-client 1.21.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.
- coding_client/__init__.py +1 -0
- coding_client/api/__init__.py +19 -0
- coding_client/api/exception_handlers.py +158 -0
- coding_client/api/logging_setup.py +44 -0
- coding_client/api/metrics.py +40 -0
- coding_client/api/openapi_config.py +124 -0
- coding_client/api/request_logging.py +60 -0
- coding_client/api/validation.py +150 -0
- coding_client/auth/__init__.py +78 -0
- coding_client/auth/_default_tenant.py +132 -0
- coding_client/auth/_header_trust.py +98 -0
- coding_client/auth/_onbehalf.py +315 -0
- coding_client/auth/_trusted_networks.py +94 -0
- coding_client/auth/dependencies.py +61 -0
- coding_client/auth/middleware.py +445 -0
- coding_client/auth/models.py +83 -0
- coding_client/auth/outbound.py +137 -0
- coding_client/auth/rbac.py +21 -0
- coding_client/auth/rbac_coding.py +5 -0
- coding_client/auth/tenant.py +650 -0
- coding_client/auth/websocket.py +148 -0
- coding_client/clients/__init__.py +24 -0
- coding_client/clients/base.py +131 -0
- coding_client/clients/coding_ai.py +33 -0
- coding_client/clients/coding_analysis.py +36 -0
- coding_client/clients/coding_containers.py +45 -0
- coding_client/clients/coding_github.py +127 -0
- coding_client/clients/coding_realtime.py +127 -0
- coding_client/clients/coding_security.py +51 -0
- coding_client/clients/coding_testing.py +31 -0
- coding_client/clients/coding_workspaces.py +265 -0
- coding_client/config/__init__.py +12 -0
- coding_client/config/base_settings.py +61 -0
- coding_client/config/yaml_config_loader.py +172 -0
- coding_client/db/__init__.py +42 -0
- coding_client/db/db_types.py +122 -0
- coding_client/db/exceptions.py +59 -0
- coding_client/db/postgres_connection.py +572 -0
- coding_client/db/tenant_query_helper.py +417 -0
- coding_client/db_init.py +49 -0
- coding_client/exceptions/__init__.py +67 -0
- coding_client/exceptions/api_exceptions.py +395 -0
- coding_client/exceptions/pydantic_ai_exceptions.py +533 -0
- coding_client/interfaces/__init__.py +22 -0
- coding_client/interfaces/cache_interface.py +179 -0
- coding_client/interfaces/container_interface.py +49 -0
- coding_client/interfaces/docker_interface.py +283 -0
- coding_client/interfaces/graph_interface.py +28 -0
- coding_client/interfaces/security_interface.py +72 -0
- coding_client/interfaces/webhook_interface.py +67 -0
- coding_client/llm/__init__.py +54 -0
- coding_client/llm/base_agent.py +195 -0
- coding_client/llm/context.py +121 -0
- coding_client/llm/responses.py +102 -0
- coding_client/llm/routing.py +82 -0
- coding_client/llm/settings.py +102 -0
- coding_client/models/__init__.py +62 -0
- coding_client/models/agent.py +38 -0
- coding_client/models/ai_test_failure.py +745 -0
- coding_client/models/analysis.py +330 -0
- coding_client/models/architecture.py +685 -0
- coding_client/models/bug.py +128 -0
- coding_client/models/code_graph.py +317 -0
- coding_client/models/container.py +241 -0
- coding_client/models/core.py +878 -0
- coding_client/models/docker_container.py +104 -0
- coding_client/models/github.py +293 -0
- coding_client/models/logging.py +29 -0
- coding_client/models/package_manager.py +257 -0
- coding_client/models/pr_validation.py +440 -0
- coding_client/models/pydantic_ai.py +395 -0
- coding_client/models/repo_scanner.py +249 -0
- coding_client/models/responses.py +431 -0
- coding_client/models/security.py +185 -0
- coding_client/models/static_analysis.py +508 -0
- coding_client/models/system.py +48 -0
- coding_client/models/test_executor.py +204 -0
- coding_client/models/testing.py +673 -0
- coding_client/models/testing_config.py +200 -0
- coding_client/models/validation.py +127 -0
- coding_client/models_init.py +272 -0
- coding_client/telemetry.py +195 -0
- coding_client/testing.py +180 -0
- coding_client/types/__init__.py +130 -0
- coding_client/types/constraint_types.py +276 -0
- coding_client/types/core_types.py +112 -0
- coding_client/types/state_machine.py +443 -0
- coding_client/utils/__init__.py +86 -0
- coding_client/utils/archive_utils.py +387 -0
- coding_client/utils/ast_debug.py +45 -0
- coding_client/utils/async_timeout.py +364 -0
- coding_client/utils/constants.py +518 -0
- coding_client/utils/content_processing.py +326 -0
- coding_client/utils/database.py +916 -0
- coding_client/utils/encoding_helper.py +222 -0
- coding_client/utils/enum_helpers.py +166 -0
- coding_client/utils/file_operations.py +177 -0
- coding_client/utils/filesystem_ops.py +528 -0
- coding_client/utils/http_client.py +562 -0
- coding_client/utils/path_utils.py +471 -0
- coding_client/utils/profiling.py +421 -0
- coding_client/utils/response_builder.py +240 -0
- coding_client/utils/retry_helper.py +712 -0
- coding_client/utils/security_validation.py +423 -0
- coding_client-1.21.2.dist-info/METADATA +234 -0
- coding_client-1.21.2.dist-info/RECORD +109 -0
- coding_client-1.21.2.dist-info/WHEEL +5 -0
- coding_client-1.21.2.dist-info/licenses/LICENSE +201 -0
- coding_client-1.21.2.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
"""Shared constants and configuration values used across the application.
|
|
2
|
+
|
|
3
|
+
This module centralizes commonly used constants, configuration values, and
|
|
4
|
+
magic numbers to avoid duplication and improve maintainability.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import re
|
|
10
|
+
from datetime import timedelta
|
|
11
|
+
|
|
12
|
+
# HTTP Related Constants
|
|
13
|
+
HTTP_TIMEOUT_DEFAULT = 30.0 # seconds
|
|
14
|
+
HTTP_TIMEOUT_LONG = 300.0 # 5 minutes for long operations
|
|
15
|
+
HTTP_TIMEOUT_SHORT = 10.0 # Quick operations
|
|
16
|
+
HTTP_RETRY_COUNT = 3
|
|
17
|
+
HTTP_RETRY_BACKOFF = 0.3
|
|
18
|
+
HTTP_RETRY_STATUS_CODES = [429, 500, 502, 503, 504]
|
|
19
|
+
|
|
20
|
+
# API Response Headers
|
|
21
|
+
HEADERS_JSON = {"Content-Type": "application/json"}
|
|
22
|
+
HEADERS_ACCEPT_JSON = {"Accept": "application/json"}
|
|
23
|
+
HEADERS_GITHUB = {"Accept": "application/vnd.github.v3+json"}
|
|
24
|
+
|
|
25
|
+
# Pagination Constants
|
|
26
|
+
DEFAULT_PAGE_SIZE = 20
|
|
27
|
+
MAX_PAGE_SIZE = 100
|
|
28
|
+
MIN_PAGE_SIZE = 1
|
|
29
|
+
DEFAULT_PAGE_NUMBER = 1
|
|
30
|
+
|
|
31
|
+
# Cache Configuration
|
|
32
|
+
CACHE_TTL_SHORT = timedelta(minutes=5)
|
|
33
|
+
CACHE_TTL_MEDIUM = timedelta(minutes=30)
|
|
34
|
+
CACHE_TTL_LONG = timedelta(hours=1)
|
|
35
|
+
CACHE_TTL_VERY_LONG = timedelta(hours=24)
|
|
36
|
+
CACHE_KEY_PREFIX = "cgh:" # code_graph_helper
|
|
37
|
+
|
|
38
|
+
# File Operation Constants
|
|
39
|
+
MAX_FILE_SIZE = 50 * 1024 * 1024 # 50MB
|
|
40
|
+
CHUNK_SIZE = 8192 # 8KB chunks for file reading
|
|
41
|
+
TEMP_DIR_PREFIX = "cgh_temp_"
|
|
42
|
+
LOG_FILE_EXTENSION = ".log"
|
|
43
|
+
JSON_FILE_EXTENSION = ".json"
|
|
44
|
+
|
|
45
|
+
# Path Patterns
|
|
46
|
+
IGNORE_PATTERNS = {
|
|
47
|
+
"__pycache__",
|
|
48
|
+
".git",
|
|
49
|
+
".idea",
|
|
50
|
+
".vscode",
|
|
51
|
+
"node_modules",
|
|
52
|
+
".pytest_cache",
|
|
53
|
+
".mypy_cache",
|
|
54
|
+
"*.pyc",
|
|
55
|
+
"*.pyo",
|
|
56
|
+
".DS_Store",
|
|
57
|
+
"Thumbs.db",
|
|
58
|
+
".env",
|
|
59
|
+
".env.*",
|
|
60
|
+
"venv",
|
|
61
|
+
"env",
|
|
62
|
+
".venv",
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# File Extensions by Language
|
|
66
|
+
PYTHON_EXTENSIONS = {".py", ".pyw", ".pyi"}
|
|
67
|
+
JAVASCRIPT_EXTENSIONS = {".js", ".jsx", ".mjs"}
|
|
68
|
+
TYPESCRIPT_EXTENSIONS = {".ts", ".tsx", ".d.ts"}
|
|
69
|
+
JAVA_EXTENSIONS = {".java"}
|
|
70
|
+
GO_EXTENSIONS = {".go"}
|
|
71
|
+
RUST_EXTENSIONS = {".rs"}
|
|
72
|
+
C_EXTENSIONS = {".c", ".h"}
|
|
73
|
+
CPP_EXTENSIONS = {".cpp", ".cc", ".cxx", ".hpp", ".hh", ".hxx"}
|
|
74
|
+
CSHARP_EXTENSIONS = {".cs"}
|
|
75
|
+
RUBY_EXTENSIONS = {".rb"}
|
|
76
|
+
PHP_EXTENSIONS = {".php"}
|
|
77
|
+
SWIFT_EXTENSIONS = {".swift"}
|
|
78
|
+
KOTLIN_EXTENSIONS = {".kt", ".kts"}
|
|
79
|
+
|
|
80
|
+
# Language Mapping
|
|
81
|
+
LANGUAGE_EXTENSIONS: dict[str, set[str]] = {
|
|
82
|
+
"python": PYTHON_EXTENSIONS,
|
|
83
|
+
"javascript": JAVASCRIPT_EXTENSIONS,
|
|
84
|
+
"typescript": TYPESCRIPT_EXTENSIONS,
|
|
85
|
+
"java": JAVA_EXTENSIONS,
|
|
86
|
+
"go": GO_EXTENSIONS,
|
|
87
|
+
"rust": RUST_EXTENSIONS,
|
|
88
|
+
"c": C_EXTENSIONS,
|
|
89
|
+
"cpp": CPP_EXTENSIONS,
|
|
90
|
+
"csharp": CSHARP_EXTENSIONS,
|
|
91
|
+
"ruby": RUBY_EXTENSIONS,
|
|
92
|
+
"php": PHP_EXTENSIONS,
|
|
93
|
+
"swift": SWIFT_EXTENSIONS,
|
|
94
|
+
"kotlin": KOTLIN_EXTENSIONS,
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
# Supported Languages
|
|
98
|
+
SUPPORTED_LANGUAGES = set(LANGUAGE_EXTENSIONS.keys())
|
|
99
|
+
|
|
100
|
+
# Database Constants
|
|
101
|
+
DB_POOL_SIZE = 20
|
|
102
|
+
DB_MAX_OVERFLOW = 10
|
|
103
|
+
DB_POOL_TIMEOUT = 30
|
|
104
|
+
DB_ECHO = False
|
|
105
|
+
DB_TRANSACTION_TIMEOUT = 60 # seconds
|
|
106
|
+
|
|
107
|
+
# Container Configuration
|
|
108
|
+
CONTAINER_BASE_PORT = 8700
|
|
109
|
+
CONTAINER_PORT_RANGE = 100 # Ports 8700-8799
|
|
110
|
+
CONTAINER_HEALTH_CHECK_INTERVAL = 5 # seconds
|
|
111
|
+
CONTAINER_HEALTH_CHECK_TIMEOUT = 30 # seconds
|
|
112
|
+
CONTAINER_HEALTH_CHECK_RETRIES = 6
|
|
113
|
+
CONTAINER_STOP_TIMEOUT = 10 # seconds
|
|
114
|
+
CONTAINER_NAME_PREFIX = "cgh_"
|
|
115
|
+
CONTAINER_LABEL_PREFIX = "com.codegraphhelper"
|
|
116
|
+
|
|
117
|
+
# Docker Constants
|
|
118
|
+
DOCKER_IMAGE_NAME = "code_graph_helper-api:latest"
|
|
119
|
+
DOCKER_NETWORK_NAME = "code_graph_network"
|
|
120
|
+
DOCKER_VOLUME_PREFIX = "cgh_volume_"
|
|
121
|
+
DOCKER_BUILD_TIMEOUT = 600 # 10 minutes
|
|
122
|
+
DOCKER_PULL_TIMEOUT = 300 # 5 minutes
|
|
123
|
+
|
|
124
|
+
# Quality Analysis Constants
|
|
125
|
+
MAX_FUNCTION_LENGTH = 50 # lines
|
|
126
|
+
MAX_FILE_LENGTH = 500 # lines
|
|
127
|
+
MAX_CYCLOMATIC_COMPLEXITY = 10
|
|
128
|
+
MAX_COGNITIVE_COMPLEXITY = 15
|
|
129
|
+
MAX_PARAMETERS = 5
|
|
130
|
+
MAX_NESTING_DEPTH = 4
|
|
131
|
+
MIN_FUNCTION_NAME_LENGTH = 3
|
|
132
|
+
MAX_LINE_LENGTH = 120
|
|
133
|
+
|
|
134
|
+
# Security Constants
|
|
135
|
+
MAX_REQUEST_SIZE = 10 * 1024 * 1024 # 10MB
|
|
136
|
+
ALLOWED_UPLOAD_EXTENSIONS = {
|
|
137
|
+
*PYTHON_EXTENSIONS,
|
|
138
|
+
*JAVASCRIPT_EXTENSIONS,
|
|
139
|
+
*TYPESCRIPT_EXTENSIONS,
|
|
140
|
+
*JAVA_EXTENSIONS,
|
|
141
|
+
*GO_EXTENSIONS,
|
|
142
|
+
*RUST_EXTENSIONS,
|
|
143
|
+
*C_EXTENSIONS,
|
|
144
|
+
*CPP_EXTENSIONS,
|
|
145
|
+
".txt",
|
|
146
|
+
".md",
|
|
147
|
+
".json",
|
|
148
|
+
".yaml",
|
|
149
|
+
".yml",
|
|
150
|
+
".xml",
|
|
151
|
+
".toml",
|
|
152
|
+
".ini",
|
|
153
|
+
".cfg",
|
|
154
|
+
".conf",
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
# API Rate Limiting
|
|
158
|
+
RATE_LIMIT_REQUESTS = 100
|
|
159
|
+
RATE_LIMIT_WINDOW = 60 # seconds
|
|
160
|
+
RATE_LIMIT_BURST = 20
|
|
161
|
+
|
|
162
|
+
# Webhook Configuration
|
|
163
|
+
WEBHOOK_TIMEOUT = 30 # seconds
|
|
164
|
+
WEBHOOK_MAX_RETRIES = 3
|
|
165
|
+
WEBHOOK_RETRY_DELAY = 5 # seconds
|
|
166
|
+
WEBHOOK_SIGNATURE_HEADER = "X-Hub-Signature-256"
|
|
167
|
+
WEBHOOK_EVENT_HEADER = "X-GitHub-Event"
|
|
168
|
+
|
|
169
|
+
# GitHub Integration
|
|
170
|
+
GITHUB_API_BASE_URL = "https://api.github.com"
|
|
171
|
+
GITHUB_API_VERSION = "2022-11-28"
|
|
172
|
+
GITHUB_MAX_FILE_SIZE = 1024 * 1024 # 1MB for API
|
|
173
|
+
GITHUB_PER_PAGE = 100 # Max items per page
|
|
174
|
+
GITHUB_MAX_SEARCH_RESULTS = 1000
|
|
175
|
+
|
|
176
|
+
# Testing Constants
|
|
177
|
+
TEST_TIMEOUT_DEFAULT = 300 # 5 minutes
|
|
178
|
+
TEST_TIMEOUT_LONG = 600 # 10 minutes
|
|
179
|
+
TEST_RETRY_COUNT = 2
|
|
180
|
+
TEST_PARALLEL_WORKERS = 4
|
|
181
|
+
TEST_COVERAGE_THRESHOLD = 80.0 # percent
|
|
182
|
+
|
|
183
|
+
# Logging Configuration
|
|
184
|
+
LOG_FORMAT = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
|
|
185
|
+
LOG_DATE_FORMAT = "%Y-%m-%d %H:%M:%S"
|
|
186
|
+
LOG_MAX_BYTES = 10 * 1024 * 1024 # 10MB
|
|
187
|
+
LOG_BACKUP_COUNT = 5
|
|
188
|
+
LOG_ENCODING = "utf-8"
|
|
189
|
+
|
|
190
|
+
# Analysis Constants
|
|
191
|
+
ANALYSIS_BATCH_SIZE = 100
|
|
192
|
+
ANALYSIS_WORKER_COUNT = 4
|
|
193
|
+
ANALYSIS_QUEUE_SIZE = 1000
|
|
194
|
+
ANALYSIS_TIMEOUT = 300 # 5 minutes per file
|
|
195
|
+
|
|
196
|
+
# Graph Database Constants
|
|
197
|
+
NEO4J_BATCH_SIZE = 1000
|
|
198
|
+
NEO4J_CONNECTION_TIMEOUT = 30
|
|
199
|
+
NEO4J_MAX_CONNECTION_LIFETIME = 3600 # 1 hour
|
|
200
|
+
NEO4J_MAX_CONNECTION_POOL_SIZE = 50
|
|
201
|
+
|
|
202
|
+
# Redis Configuration
|
|
203
|
+
REDIS_KEY_SEPARATOR = ":"
|
|
204
|
+
REDIS_LOCK_TIMEOUT = 60 # seconds
|
|
205
|
+
REDIS_LOCK_RETRY_DELAY = 0.1 # seconds
|
|
206
|
+
REDIS_PIPELINE_SIZE = 100
|
|
207
|
+
|
|
208
|
+
# Error Messages
|
|
209
|
+
ERROR_INVALID_PARAMETER = "Invalid parameter: {parameter}"
|
|
210
|
+
ERROR_NOT_FOUND = "{resource} not found"
|
|
211
|
+
ERROR_ALREADY_EXISTS = "{resource} already exists"
|
|
212
|
+
ERROR_PERMISSION_DENIED = "Permission denied for {resource}"
|
|
213
|
+
ERROR_OPERATION_FAILED = "{operation} failed: {reason}"
|
|
214
|
+
ERROR_VALIDATION_FAILED = "Validation failed: {details}"
|
|
215
|
+
ERROR_TIMEOUT = "Operation timed out after {timeout} seconds"
|
|
216
|
+
ERROR_RATE_LIMITED = "Rate limit exceeded. Try again in {retry_after} seconds"
|
|
217
|
+
|
|
218
|
+
# Success Messages
|
|
219
|
+
SUCCESS_CREATED = "{resource} created successfully"
|
|
220
|
+
SUCCESS_UPDATED = "{resource} updated successfully"
|
|
221
|
+
SUCCESS_DELETED = "{resource} deleted successfully"
|
|
222
|
+
SUCCESS_OPERATION_COMPLETED = "{operation} completed successfully"
|
|
223
|
+
|
|
224
|
+
# Regular Expression Patterns
|
|
225
|
+
REGEX_EMAIL = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
|
|
226
|
+
REGEX_URL = r"^https?://(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&/=]*)$"
|
|
227
|
+
REGEX_GITHUB_REPO = r"^[\w.-]+/[\w.-]+$"
|
|
228
|
+
REGEX_SEMVER = r"^v?\d+\.\d+\.\d+(?:-[\w.]+)?(?:\+[\w.]+)?$"
|
|
229
|
+
REGEX_UUID = r"^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$"
|
|
230
|
+
REGEX_CONTAINER_NAME = r"^[a-zA-Z0-9][a-zA-Z0-9_.-]*$"
|
|
231
|
+
|
|
232
|
+
# MIME Types
|
|
233
|
+
MIME_TYPE_JSON = "application/json"
|
|
234
|
+
MIME_TYPE_TEXT = "text/plain"
|
|
235
|
+
MIME_TYPE_HTML = "text/html"
|
|
236
|
+
MIME_TYPE_XML = "application/xml"
|
|
237
|
+
MIME_TYPE_YAML = "application/yaml"
|
|
238
|
+
MIME_TYPE_OCTET_STREAM = "application/octet-stream"
|
|
239
|
+
|
|
240
|
+
# Status Codes (custom ones, standard HTTP codes should be imported from http.HTTPStatus)
|
|
241
|
+
STATUS_PROCESSING = 102
|
|
242
|
+
STATUS_MULTI_STATUS = 207
|
|
243
|
+
STATUS_ALREADY_REPORTED = 208
|
|
244
|
+
STATUS_IM_USED = 226
|
|
245
|
+
|
|
246
|
+
# Time Formats
|
|
247
|
+
TIME_FORMAT_ISO = "%Y-%m-%dT%H:%M:%SZ"
|
|
248
|
+
TIME_FORMAT_HUMAN = "%Y-%m-%d %H:%M:%S"
|
|
249
|
+
TIME_FORMAT_DATE = "%Y-%m-%d"
|
|
250
|
+
TIME_FORMAT_LOG = "%Y%m%d_%H%M%S"
|
|
251
|
+
|
|
252
|
+
# Environment Variables
|
|
253
|
+
ENV_PREFIX = "CGH_"
|
|
254
|
+
ENV_DEBUG = f"{ENV_PREFIX}DEBUG"
|
|
255
|
+
ENV_DATABASE_URL = f"{ENV_PREFIX}DATABASE_URL"
|
|
256
|
+
ENV_REDIS_URL = f"{ENV_PREFIX}REDIS_URL"
|
|
257
|
+
ENV_SECRET_KEY = f"{ENV_PREFIX}SECRET_KEY"
|
|
258
|
+
ENV_GITHUB_TOKEN = f"{ENV_PREFIX}GITHUB_TOKEN"
|
|
259
|
+
ENV_LOG_LEVEL = f"{ENV_PREFIX}LOG_LEVEL"
|
|
260
|
+
|
|
261
|
+
# Feature Flags
|
|
262
|
+
FEATURE_AI_ANALYSIS = "ai_analysis"
|
|
263
|
+
FEATURE_GITHUB_INTEGRATION = "github_integration"
|
|
264
|
+
FEATURE_CONTAINER_SUPPORT = "container_support"
|
|
265
|
+
FEATURE_REAL_TIME_UPDATES = "real_time_updates"
|
|
266
|
+
FEATURE_ADVANCED_METRICS = "advanced_metrics"
|
|
267
|
+
|
|
268
|
+
# Metric Names
|
|
269
|
+
METRIC_API_REQUEST_COUNT = "api_request_count"
|
|
270
|
+
METRIC_API_REQUEST_DURATION = "api_request_duration"
|
|
271
|
+
METRIC_API_ERROR_COUNT = "api_error_count"
|
|
272
|
+
METRIC_CONTAINER_COUNT = "container_count"
|
|
273
|
+
METRIC_ANALYSIS_DURATION = "analysis_duration"
|
|
274
|
+
METRIC_CACHE_HIT_RATE = "cache_hit_rate"
|
|
275
|
+
|
|
276
|
+
# Queue Names
|
|
277
|
+
QUEUE_ANALYSIS = "analysis"
|
|
278
|
+
QUEUE_GITHUB_WEBHOOK = "github_webhook"
|
|
279
|
+
QUEUE_TEST_EXECUTION = "test_execution"
|
|
280
|
+
QUEUE_NOTIFICATION = "notification"
|
|
281
|
+
QUEUE_CLEANUP = "cleanup"
|
|
282
|
+
|
|
283
|
+
# Default Values
|
|
284
|
+
DEFAULT_BRANCH = "main"
|
|
285
|
+
DEFAULT_LANGUAGE = "python"
|
|
286
|
+
DEFAULT_ENCODING = "utf-8"
|
|
287
|
+
DEFAULT_TIMEOUT = 30
|
|
288
|
+
DEFAULT_RETRIES = 3
|
|
289
|
+
|
|
290
|
+
# Validation Limits
|
|
291
|
+
MAX_NAME_LENGTH = 255
|
|
292
|
+
MAX_DESCRIPTION_LENGTH = 1000
|
|
293
|
+
MAX_URL_LENGTH = 2000
|
|
294
|
+
MAX_PATH_LENGTH = 4096
|
|
295
|
+
MAX_QUERY_LENGTH = 10000
|
|
296
|
+
MAX_ARRAY_LENGTH = 1000
|
|
297
|
+
|
|
298
|
+
# Color Codes (for terminal output)
|
|
299
|
+
COLOR_RESET = "\033[0m"
|
|
300
|
+
COLOR_RED = "\033[91m"
|
|
301
|
+
COLOR_GREEN = "\033[92m"
|
|
302
|
+
COLOR_YELLOW = "\033[93m"
|
|
303
|
+
COLOR_BLUE = "\033[94m"
|
|
304
|
+
COLOR_MAGENTA = "\033[95m"
|
|
305
|
+
COLOR_CYAN = "\033[96m"
|
|
306
|
+
COLOR_WHITE = "\033[97m"
|
|
307
|
+
|
|
308
|
+
# ASCII Art (for fun terminal output)
|
|
309
|
+
ASCII_LOGO = r"""
|
|
310
|
+
____ _ ____ _
|
|
311
|
+
/ ___|___ __| | ___ / ___|_ __ __ _ _ __ | |__
|
|
312
|
+
| | / _ \ / _` |/ _ \| | _| '__/ _` | '_ \| '_ \
|
|
313
|
+
| |__| (_) | (_| | __/| |_| | | | (_| | |_) | | | |
|
|
314
|
+
\____\___/ \__,_|\___| \____|_| \__,_| .__/|_| |_|
|
|
315
|
+
|_|
|
|
316
|
+
"""
|
|
317
|
+
|
|
318
|
+
# System Thresholds
|
|
319
|
+
CPU_WARNING_THRESHOLD = 80.0 # percent
|
|
320
|
+
MEMORY_WARNING_THRESHOLD = 80.0 # percent
|
|
321
|
+
DISK_WARNING_THRESHOLD = 90.0 # percent
|
|
322
|
+
RESPONSE_TIME_WARNING = 1.0 # seconds
|
|
323
|
+
|
|
324
|
+
# Batch Processing
|
|
325
|
+
BATCH_INSERT_SIZE = 1000
|
|
326
|
+
BATCH_UPDATE_SIZE = 500
|
|
327
|
+
BATCH_DELETE_SIZE = 100
|
|
328
|
+
BATCH_PROCESSING_DELAY = 0.1 # seconds between batches
|
|
329
|
+
|
|
330
|
+
# Complexity Thresholds
|
|
331
|
+
COMPLEXITY_LOW = 5
|
|
332
|
+
COMPLEXITY_MEDIUM = 10
|
|
333
|
+
COMPLEXITY_HIGH = 20
|
|
334
|
+
COMPLEXITY_VERY_HIGH = 30
|
|
335
|
+
|
|
336
|
+
# Code Quality Grades
|
|
337
|
+
GRADE_A = "A" # Excellent
|
|
338
|
+
GRADE_B = "B" # Good
|
|
339
|
+
GRADE_C = "C" # Satisfactory
|
|
340
|
+
GRADE_D = "D" # Needs Improvement
|
|
341
|
+
GRADE_F = "F" # Poor
|
|
342
|
+
|
|
343
|
+
GRADE_THRESHOLDS = {
|
|
344
|
+
GRADE_A: 90,
|
|
345
|
+
GRADE_B: 80,
|
|
346
|
+
GRADE_C: 70,
|
|
347
|
+
GRADE_D: 60,
|
|
348
|
+
GRADE_F: 0,
|
|
349
|
+
}
|
|
350
|
+
|
|
351
|
+
# Common Null/Empty Values to Check
|
|
352
|
+
NULL_VALUES = {"null", "none", "nil", "undefined", "na", "n/a", ""}
|
|
353
|
+
EMPTY_VALUES = {"", " ", "\t", "\n", "\r", "\r\n"}
|
|
354
|
+
|
|
355
|
+
# API Versioning
|
|
356
|
+
API_VERSION_V1 = "v1"
|
|
357
|
+
API_VERSION_V2 = "v2"
|
|
358
|
+
CURRENT_API_VERSION = API_VERSION_V2
|
|
359
|
+
SUPPORTED_API_VERSIONS = {API_VERSION_V1, API_VERSION_V2}
|
|
360
|
+
|
|
361
|
+
# Content Types
|
|
362
|
+
CONTENT_TYPE_JSON = "application/json"
|
|
363
|
+
CONTENT_TYPE_FORM = "application/x-www-form-urlencoded"
|
|
364
|
+
CONTENT_TYPE_MULTIPART = "multipart/form-data"
|
|
365
|
+
CONTENT_TYPE_TEXT = "text/plain"
|
|
366
|
+
|
|
367
|
+
# Date/Time Constants
|
|
368
|
+
SECONDS_PER_MINUTE = 60
|
|
369
|
+
SECONDS_PER_HOUR = 3600
|
|
370
|
+
SECONDS_PER_DAY = 86400
|
|
371
|
+
SECONDS_PER_WEEK = 604800
|
|
372
|
+
|
|
373
|
+
# Magic Numbers (document why these values)
|
|
374
|
+
MAX_RECURSION_DEPTH = 100 # Prevent infinite recursion in graph traversal
|
|
375
|
+
MAX_RETRY_EXPONENTIAL_BACKOFF = 64 # 2^6, about 1 minute max wait
|
|
376
|
+
MIN_PASSWORD_LENGTH = 8 # Security requirement
|
|
377
|
+
MAX_LOGIN_ATTEMPTS = 5 # Before lockout
|
|
378
|
+
LOCKOUT_DURATION = 900 # 15 minutes in seconds
|
|
379
|
+
|
|
380
|
+
# Graph Relationship Types
|
|
381
|
+
REL_IMPORTS = "IMPORTS"
|
|
382
|
+
REL_CALLS = "CALLS"
|
|
383
|
+
REL_INHERITS = "INHERITS"
|
|
384
|
+
REL_IMPLEMENTS = "IMPLEMENTS"
|
|
385
|
+
REL_USES = "USES"
|
|
386
|
+
REL_DEPENDS_ON = "DEPENDS_ON"
|
|
387
|
+
REL_CONTAINS = "CONTAINS"
|
|
388
|
+
REL_REFERENCES = "REFERENCES"
|
|
389
|
+
|
|
390
|
+
# Node Types
|
|
391
|
+
NODE_FILE = "File"
|
|
392
|
+
NODE_CLASS = "Class"
|
|
393
|
+
NODE_FUNCTION = "Function"
|
|
394
|
+
NODE_METHOD = "Method"
|
|
395
|
+
NODE_MODULE = "Module"
|
|
396
|
+
NODE_PACKAGE = "Package"
|
|
397
|
+
NODE_VARIABLE = "Variable"
|
|
398
|
+
NODE_IMPORT = "Import"
|
|
399
|
+
|
|
400
|
+
# Analysis Status
|
|
401
|
+
STATUS_PENDING = "pending"
|
|
402
|
+
STATUS_IN_PROGRESS = "in_progress"
|
|
403
|
+
STATUS_COMPLETED = "completed"
|
|
404
|
+
STATUS_FAILED = "failed"
|
|
405
|
+
STATUS_CANCELLED = "cancelled"
|
|
406
|
+
STATUS_TIMEOUT = "timeout"
|
|
407
|
+
|
|
408
|
+
# Priority Levels
|
|
409
|
+
PRIORITY_LOW = 1
|
|
410
|
+
PRIORITY_MEDIUM = 2
|
|
411
|
+
PRIORITY_HIGH = 3
|
|
412
|
+
PRIORITY_CRITICAL = 4
|
|
413
|
+
|
|
414
|
+
PRIORITY_NAMES = {
|
|
415
|
+
PRIORITY_LOW: "low",
|
|
416
|
+
PRIORITY_MEDIUM: "medium",
|
|
417
|
+
PRIORITY_HIGH: "high",
|
|
418
|
+
PRIORITY_CRITICAL: "critical",
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
# Severity Levels
|
|
422
|
+
SEVERITY_INFO = "info"
|
|
423
|
+
SEVERITY_WARNING = "warning"
|
|
424
|
+
SEVERITY_ERROR = "error"
|
|
425
|
+
SEVERITY_CRITICAL = "critical"
|
|
426
|
+
|
|
427
|
+
# Common Regex Validators as compiled patterns (for performance)
|
|
428
|
+
|
|
429
|
+
COMPILED_EMAIL = re.compile(REGEX_EMAIL)
|
|
430
|
+
COMPILED_URL = re.compile(REGEX_URL)
|
|
431
|
+
COMPILED_GITHUB_REPO = re.compile(REGEX_GITHUB_REPO)
|
|
432
|
+
COMPILED_SEMVER = re.compile(REGEX_SEMVER)
|
|
433
|
+
COMPILED_UUID = re.compile(REGEX_UUID, re.IGNORECASE)
|
|
434
|
+
COMPILED_CONTAINER_NAME = re.compile(REGEX_CONTAINER_NAME)
|
|
435
|
+
|
|
436
|
+
# Frozen sets for performance (immutable and faster lookup)
|
|
437
|
+
FROZEN_NULL_VALUES = frozenset(NULL_VALUES)
|
|
438
|
+
FROZEN_EMPTY_VALUES = frozenset(EMPTY_VALUES)
|
|
439
|
+
FROZEN_IGNORE_PATTERNS = frozenset(IGNORE_PATTERNS)
|
|
440
|
+
FROZEN_SUPPORTED_LANGUAGES = frozenset(SUPPORTED_LANGUAGES)
|
|
441
|
+
|
|
442
|
+
# Type Aliases for clarity
|
|
443
|
+
FileExtensions = set[str]
|
|
444
|
+
LanguageMap = dict[str, FileExtensions]
|
|
445
|
+
Headers = dict[str, str]
|
|
446
|
+
Seconds = float
|
|
447
|
+
Bytes = int
|
|
448
|
+
Percent = float
|
|
449
|
+
|
|
450
|
+
# Export groups for easier imports
|
|
451
|
+
__all__ = [
|
|
452
|
+
# HTTP
|
|
453
|
+
"HTTP_TIMEOUT_DEFAULT",
|
|
454
|
+
"HTTP_TIMEOUT_LONG",
|
|
455
|
+
"HTTP_TIMEOUT_SHORT",
|
|
456
|
+
"HTTP_RETRY_COUNT",
|
|
457
|
+
"HTTP_RETRY_BACKOFF",
|
|
458
|
+
"HTTP_RETRY_STATUS_CODES",
|
|
459
|
+
"HEADERS_JSON",
|
|
460
|
+
"HEADERS_ACCEPT_JSON",
|
|
461
|
+
"HEADERS_GITHUB",
|
|
462
|
+
# Pagination
|
|
463
|
+
"DEFAULT_PAGE_SIZE",
|
|
464
|
+
"MAX_PAGE_SIZE",
|
|
465
|
+
"MIN_PAGE_SIZE",
|
|
466
|
+
"DEFAULT_PAGE_NUMBER",
|
|
467
|
+
# Cache
|
|
468
|
+
"CACHE_TTL_SHORT",
|
|
469
|
+
"CACHE_TTL_MEDIUM",
|
|
470
|
+
"CACHE_TTL_LONG",
|
|
471
|
+
"CACHE_TTL_VERY_LONG",
|
|
472
|
+
"CACHE_KEY_PREFIX",
|
|
473
|
+
# File Operations
|
|
474
|
+
"MAX_FILE_SIZE",
|
|
475
|
+
"CHUNK_SIZE",
|
|
476
|
+
"IGNORE_PATTERNS",
|
|
477
|
+
"LANGUAGE_EXTENSIONS",
|
|
478
|
+
"SUPPORTED_LANGUAGES",
|
|
479
|
+
# Database
|
|
480
|
+
"DB_POOL_SIZE",
|
|
481
|
+
"DB_MAX_OVERFLOW",
|
|
482
|
+
"DB_POOL_TIMEOUT",
|
|
483
|
+
"DB_TRANSACTION_TIMEOUT",
|
|
484
|
+
# Container
|
|
485
|
+
"CONTAINER_BASE_PORT",
|
|
486
|
+
"CONTAINER_HEALTH_CHECK_INTERVAL",
|
|
487
|
+
"CONTAINER_HEALTH_CHECK_TIMEOUT",
|
|
488
|
+
"CONTAINER_NAME_PREFIX",
|
|
489
|
+
# Quality
|
|
490
|
+
"MAX_FUNCTION_LENGTH",
|
|
491
|
+
"MAX_FILE_LENGTH",
|
|
492
|
+
"MAX_CYCLOMATIC_COMPLEXITY",
|
|
493
|
+
"MAX_LINE_LENGTH",
|
|
494
|
+
# Security
|
|
495
|
+
"MAX_REQUEST_SIZE",
|
|
496
|
+
"ALLOWED_UPLOAD_EXTENSIONS",
|
|
497
|
+
# Common Values
|
|
498
|
+
"NULL_VALUES",
|
|
499
|
+
"FROZEN_NULL_VALUES",
|
|
500
|
+
"DEFAULT_BRANCH",
|
|
501
|
+
"DEFAULT_LANGUAGE",
|
|
502
|
+
"DEFAULT_ENCODING",
|
|
503
|
+
# Status and Priority
|
|
504
|
+
"STATUS_PENDING",
|
|
505
|
+
"STATUS_IN_PROGRESS",
|
|
506
|
+
"STATUS_COMPLETED",
|
|
507
|
+
"STATUS_FAILED",
|
|
508
|
+
"PRIORITY_NAMES",
|
|
509
|
+
"SEVERITY_INFO",
|
|
510
|
+
"SEVERITY_WARNING",
|
|
511
|
+
"SEVERITY_ERROR",
|
|
512
|
+
"SEVERITY_CRITICAL",
|
|
513
|
+
# Compiled Regex
|
|
514
|
+
"COMPILED_EMAIL",
|
|
515
|
+
"COMPILED_URL",
|
|
516
|
+
"COMPILED_GITHUB_REPO",
|
|
517
|
+
"COMPILED_UUID",
|
|
518
|
+
]
|