aiecs 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.
- aiecs/__init__.py +72 -0
- aiecs/__main__.py +41 -0
- aiecs/aiecs_client.py +469 -0
- aiecs/application/__init__.py +10 -0
- aiecs/application/executors/__init__.py +10 -0
- aiecs/application/executors/operation_executor.py +363 -0
- aiecs/application/knowledge_graph/__init__.py +7 -0
- aiecs/application/knowledge_graph/builder/__init__.py +37 -0
- aiecs/application/knowledge_graph/builder/document_builder.py +375 -0
- aiecs/application/knowledge_graph/builder/graph_builder.py +356 -0
- aiecs/application/knowledge_graph/builder/schema_mapping.py +531 -0
- aiecs/application/knowledge_graph/builder/structured_pipeline.py +443 -0
- aiecs/application/knowledge_graph/builder/text_chunker.py +319 -0
- aiecs/application/knowledge_graph/extractors/__init__.py +27 -0
- aiecs/application/knowledge_graph/extractors/base.py +100 -0
- aiecs/application/knowledge_graph/extractors/llm_entity_extractor.py +327 -0
- aiecs/application/knowledge_graph/extractors/llm_relation_extractor.py +349 -0
- aiecs/application/knowledge_graph/extractors/ner_entity_extractor.py +244 -0
- aiecs/application/knowledge_graph/fusion/__init__.py +23 -0
- aiecs/application/knowledge_graph/fusion/entity_deduplicator.py +387 -0
- aiecs/application/knowledge_graph/fusion/entity_linker.py +343 -0
- aiecs/application/knowledge_graph/fusion/knowledge_fusion.py +580 -0
- aiecs/application/knowledge_graph/fusion/relation_deduplicator.py +189 -0
- aiecs/application/knowledge_graph/pattern_matching/__init__.py +21 -0
- aiecs/application/knowledge_graph/pattern_matching/pattern_matcher.py +344 -0
- aiecs/application/knowledge_graph/pattern_matching/query_executor.py +378 -0
- aiecs/application/knowledge_graph/profiling/__init__.py +12 -0
- aiecs/application/knowledge_graph/profiling/query_plan_visualizer.py +199 -0
- aiecs/application/knowledge_graph/profiling/query_profiler.py +223 -0
- aiecs/application/knowledge_graph/reasoning/__init__.py +27 -0
- aiecs/application/knowledge_graph/reasoning/evidence_synthesis.py +347 -0
- aiecs/application/knowledge_graph/reasoning/inference_engine.py +504 -0
- aiecs/application/knowledge_graph/reasoning/logic_form_parser.py +167 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/__init__.py +79 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/ast_builder.py +513 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/ast_nodes.py +630 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/ast_validator.py +654 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/error_handler.py +477 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/parser.py +390 -0
- aiecs/application/knowledge_graph/reasoning/logic_parser/query_context.py +217 -0
- aiecs/application/knowledge_graph/reasoning/logic_query_integration.py +169 -0
- aiecs/application/knowledge_graph/reasoning/query_planner.py +872 -0
- aiecs/application/knowledge_graph/reasoning/reasoning_engine.py +554 -0
- aiecs/application/knowledge_graph/retrieval/__init__.py +19 -0
- aiecs/application/knowledge_graph/retrieval/retrieval_strategies.py +596 -0
- aiecs/application/knowledge_graph/search/__init__.py +59 -0
- aiecs/application/knowledge_graph/search/hybrid_search.py +423 -0
- aiecs/application/knowledge_graph/search/reranker.py +295 -0
- aiecs/application/knowledge_graph/search/reranker_strategies.py +553 -0
- aiecs/application/knowledge_graph/search/text_similarity.py +398 -0
- aiecs/application/knowledge_graph/traversal/__init__.py +15 -0
- aiecs/application/knowledge_graph/traversal/enhanced_traversal.py +329 -0
- aiecs/application/knowledge_graph/traversal/path_scorer.py +269 -0
- aiecs/application/knowledge_graph/validators/__init__.py +13 -0
- aiecs/application/knowledge_graph/validators/relation_validator.py +189 -0
- aiecs/application/knowledge_graph/visualization/__init__.py +11 -0
- aiecs/application/knowledge_graph/visualization/graph_visualizer.py +321 -0
- aiecs/common/__init__.py +9 -0
- aiecs/common/knowledge_graph/__init__.py +17 -0
- aiecs/common/knowledge_graph/runnable.py +484 -0
- aiecs/config/__init__.py +16 -0
- aiecs/config/config.py +498 -0
- aiecs/config/graph_config.py +137 -0
- aiecs/config/registry.py +23 -0
- aiecs/core/__init__.py +46 -0
- aiecs/core/interface/__init__.py +34 -0
- aiecs/core/interface/execution_interface.py +152 -0
- aiecs/core/interface/storage_interface.py +171 -0
- aiecs/domain/__init__.py +289 -0
- aiecs/domain/agent/__init__.py +189 -0
- aiecs/domain/agent/base_agent.py +697 -0
- aiecs/domain/agent/exceptions.py +103 -0
- aiecs/domain/agent/graph_aware_mixin.py +559 -0
- aiecs/domain/agent/hybrid_agent.py +490 -0
- aiecs/domain/agent/integration/__init__.py +26 -0
- aiecs/domain/agent/integration/context_compressor.py +222 -0
- aiecs/domain/agent/integration/context_engine_adapter.py +252 -0
- aiecs/domain/agent/integration/retry_policy.py +219 -0
- aiecs/domain/agent/integration/role_config.py +213 -0
- aiecs/domain/agent/knowledge_aware_agent.py +646 -0
- aiecs/domain/agent/lifecycle.py +296 -0
- aiecs/domain/agent/llm_agent.py +300 -0
- aiecs/domain/agent/memory/__init__.py +12 -0
- aiecs/domain/agent/memory/conversation.py +197 -0
- aiecs/domain/agent/migration/__init__.py +14 -0
- aiecs/domain/agent/migration/conversion.py +160 -0
- aiecs/domain/agent/migration/legacy_wrapper.py +90 -0
- aiecs/domain/agent/models.py +317 -0
- aiecs/domain/agent/observability.py +407 -0
- aiecs/domain/agent/persistence.py +289 -0
- aiecs/domain/agent/prompts/__init__.py +29 -0
- aiecs/domain/agent/prompts/builder.py +161 -0
- aiecs/domain/agent/prompts/formatters.py +189 -0
- aiecs/domain/agent/prompts/template.py +255 -0
- aiecs/domain/agent/registry.py +260 -0
- aiecs/domain/agent/tool_agent.py +257 -0
- aiecs/domain/agent/tools/__init__.py +12 -0
- aiecs/domain/agent/tools/schema_generator.py +221 -0
- aiecs/domain/community/__init__.py +155 -0
- aiecs/domain/community/agent_adapter.py +477 -0
- aiecs/domain/community/analytics.py +481 -0
- aiecs/domain/community/collaborative_workflow.py +642 -0
- aiecs/domain/community/communication_hub.py +645 -0
- aiecs/domain/community/community_builder.py +320 -0
- aiecs/domain/community/community_integration.py +800 -0
- aiecs/domain/community/community_manager.py +813 -0
- aiecs/domain/community/decision_engine.py +879 -0
- aiecs/domain/community/exceptions.py +225 -0
- aiecs/domain/community/models/__init__.py +33 -0
- aiecs/domain/community/models/community_models.py +268 -0
- aiecs/domain/community/resource_manager.py +457 -0
- aiecs/domain/community/shared_context_manager.py +603 -0
- aiecs/domain/context/__init__.py +58 -0
- aiecs/domain/context/context_engine.py +989 -0
- aiecs/domain/context/conversation_models.py +354 -0
- aiecs/domain/context/graph_memory.py +467 -0
- aiecs/domain/execution/__init__.py +12 -0
- aiecs/domain/execution/model.py +57 -0
- aiecs/domain/knowledge_graph/__init__.py +19 -0
- aiecs/domain/knowledge_graph/models/__init__.py +52 -0
- aiecs/domain/knowledge_graph/models/entity.py +130 -0
- aiecs/domain/knowledge_graph/models/evidence.py +194 -0
- aiecs/domain/knowledge_graph/models/inference_rule.py +186 -0
- aiecs/domain/knowledge_graph/models/path.py +179 -0
- aiecs/domain/knowledge_graph/models/path_pattern.py +173 -0
- aiecs/domain/knowledge_graph/models/query.py +272 -0
- aiecs/domain/knowledge_graph/models/query_plan.py +187 -0
- aiecs/domain/knowledge_graph/models/relation.py +136 -0
- aiecs/domain/knowledge_graph/schema/__init__.py +23 -0
- aiecs/domain/knowledge_graph/schema/entity_type.py +135 -0
- aiecs/domain/knowledge_graph/schema/graph_schema.py +271 -0
- aiecs/domain/knowledge_graph/schema/property_schema.py +155 -0
- aiecs/domain/knowledge_graph/schema/relation_type.py +171 -0
- aiecs/domain/knowledge_graph/schema/schema_manager.py +496 -0
- aiecs/domain/knowledge_graph/schema/type_enums.py +205 -0
- aiecs/domain/task/__init__.py +13 -0
- aiecs/domain/task/dsl_processor.py +613 -0
- aiecs/domain/task/model.py +62 -0
- aiecs/domain/task/task_context.py +268 -0
- aiecs/infrastructure/__init__.py +24 -0
- aiecs/infrastructure/graph_storage/__init__.py +11 -0
- aiecs/infrastructure/graph_storage/base.py +601 -0
- aiecs/infrastructure/graph_storage/batch_operations.py +449 -0
- aiecs/infrastructure/graph_storage/cache.py +429 -0
- aiecs/infrastructure/graph_storage/distributed.py +226 -0
- aiecs/infrastructure/graph_storage/error_handling.py +390 -0
- aiecs/infrastructure/graph_storage/graceful_degradation.py +306 -0
- aiecs/infrastructure/graph_storage/health_checks.py +378 -0
- aiecs/infrastructure/graph_storage/in_memory.py +514 -0
- aiecs/infrastructure/graph_storage/index_optimization.py +483 -0
- aiecs/infrastructure/graph_storage/lazy_loading.py +410 -0
- aiecs/infrastructure/graph_storage/metrics.py +357 -0
- aiecs/infrastructure/graph_storage/migration.py +413 -0
- aiecs/infrastructure/graph_storage/pagination.py +471 -0
- aiecs/infrastructure/graph_storage/performance_monitoring.py +466 -0
- aiecs/infrastructure/graph_storage/postgres.py +871 -0
- aiecs/infrastructure/graph_storage/query_optimizer.py +635 -0
- aiecs/infrastructure/graph_storage/schema_cache.py +290 -0
- aiecs/infrastructure/graph_storage/sqlite.py +623 -0
- aiecs/infrastructure/graph_storage/streaming.py +495 -0
- aiecs/infrastructure/messaging/__init__.py +13 -0
- aiecs/infrastructure/messaging/celery_task_manager.py +383 -0
- aiecs/infrastructure/messaging/websocket_manager.py +298 -0
- aiecs/infrastructure/monitoring/__init__.py +34 -0
- aiecs/infrastructure/monitoring/executor_metrics.py +174 -0
- aiecs/infrastructure/monitoring/global_metrics_manager.py +213 -0
- aiecs/infrastructure/monitoring/structured_logger.py +48 -0
- aiecs/infrastructure/monitoring/tracing_manager.py +410 -0
- aiecs/infrastructure/persistence/__init__.py +24 -0
- aiecs/infrastructure/persistence/context_engine_client.py +187 -0
- aiecs/infrastructure/persistence/database_manager.py +333 -0
- aiecs/infrastructure/persistence/file_storage.py +754 -0
- aiecs/infrastructure/persistence/redis_client.py +220 -0
- aiecs/llm/__init__.py +86 -0
- aiecs/llm/callbacks/__init__.py +11 -0
- aiecs/llm/callbacks/custom_callbacks.py +264 -0
- aiecs/llm/client_factory.py +420 -0
- aiecs/llm/clients/__init__.py +33 -0
- aiecs/llm/clients/base_client.py +193 -0
- aiecs/llm/clients/googleai_client.py +181 -0
- aiecs/llm/clients/openai_client.py +131 -0
- aiecs/llm/clients/vertex_client.py +437 -0
- aiecs/llm/clients/xai_client.py +184 -0
- aiecs/llm/config/__init__.py +51 -0
- aiecs/llm/config/config_loader.py +275 -0
- aiecs/llm/config/config_validator.py +236 -0
- aiecs/llm/config/model_config.py +151 -0
- aiecs/llm/utils/__init__.py +10 -0
- aiecs/llm/utils/validate_config.py +91 -0
- aiecs/main.py +363 -0
- aiecs/scripts/__init__.py +3 -0
- aiecs/scripts/aid/VERSION_MANAGEMENT.md +97 -0
- aiecs/scripts/aid/__init__.py +19 -0
- aiecs/scripts/aid/version_manager.py +215 -0
- aiecs/scripts/dependance_check/DEPENDENCY_SYSTEM_SUMMARY.md +242 -0
- aiecs/scripts/dependance_check/README_DEPENDENCY_CHECKER.md +310 -0
- aiecs/scripts/dependance_check/__init__.py +17 -0
- aiecs/scripts/dependance_check/dependency_checker.py +938 -0
- aiecs/scripts/dependance_check/dependency_fixer.py +391 -0
- aiecs/scripts/dependance_check/download_nlp_data.py +396 -0
- aiecs/scripts/dependance_check/quick_dependency_check.py +270 -0
- aiecs/scripts/dependance_check/setup_nlp_data.sh +217 -0
- aiecs/scripts/dependance_patch/__init__.py +7 -0
- aiecs/scripts/dependance_patch/fix_weasel/README_WEASEL_PATCH.md +126 -0
- aiecs/scripts/dependance_patch/fix_weasel/__init__.py +11 -0
- aiecs/scripts/dependance_patch/fix_weasel/fix_weasel_validator.py +128 -0
- aiecs/scripts/dependance_patch/fix_weasel/fix_weasel_validator.sh +82 -0
- aiecs/scripts/dependance_patch/fix_weasel/patch_weasel_library.sh +188 -0
- aiecs/scripts/dependance_patch/fix_weasel/run_weasel_patch.sh +41 -0
- aiecs/scripts/tools_develop/README.md +449 -0
- aiecs/scripts/tools_develop/TOOL_AUTO_DISCOVERY.md +234 -0
- aiecs/scripts/tools_develop/__init__.py +21 -0
- aiecs/scripts/tools_develop/check_type_annotations.py +259 -0
- aiecs/scripts/tools_develop/validate_tool_schemas.py +422 -0
- aiecs/scripts/tools_develop/verify_tools.py +356 -0
- aiecs/tasks/__init__.py +1 -0
- aiecs/tasks/worker.py +172 -0
- aiecs/tools/__init__.py +299 -0
- aiecs/tools/apisource/__init__.py +99 -0
- aiecs/tools/apisource/intelligence/__init__.py +19 -0
- aiecs/tools/apisource/intelligence/data_fusion.py +381 -0
- aiecs/tools/apisource/intelligence/query_analyzer.py +413 -0
- aiecs/tools/apisource/intelligence/search_enhancer.py +388 -0
- aiecs/tools/apisource/monitoring/__init__.py +9 -0
- aiecs/tools/apisource/monitoring/metrics.py +303 -0
- aiecs/tools/apisource/providers/__init__.py +115 -0
- aiecs/tools/apisource/providers/base.py +664 -0
- aiecs/tools/apisource/providers/census.py +401 -0
- aiecs/tools/apisource/providers/fred.py +564 -0
- aiecs/tools/apisource/providers/newsapi.py +412 -0
- aiecs/tools/apisource/providers/worldbank.py +357 -0
- aiecs/tools/apisource/reliability/__init__.py +12 -0
- aiecs/tools/apisource/reliability/error_handler.py +375 -0
- aiecs/tools/apisource/reliability/fallback_strategy.py +391 -0
- aiecs/tools/apisource/tool.py +850 -0
- aiecs/tools/apisource/utils/__init__.py +9 -0
- aiecs/tools/apisource/utils/validators.py +338 -0
- aiecs/tools/base_tool.py +201 -0
- aiecs/tools/docs/__init__.py +121 -0
- aiecs/tools/docs/ai_document_orchestrator.py +599 -0
- aiecs/tools/docs/ai_document_writer_orchestrator.py +2403 -0
- aiecs/tools/docs/content_insertion_tool.py +1333 -0
- aiecs/tools/docs/document_creator_tool.py +1317 -0
- aiecs/tools/docs/document_layout_tool.py +1166 -0
- aiecs/tools/docs/document_parser_tool.py +994 -0
- aiecs/tools/docs/document_writer_tool.py +1818 -0
- aiecs/tools/knowledge_graph/__init__.py +17 -0
- aiecs/tools/knowledge_graph/graph_reasoning_tool.py +734 -0
- aiecs/tools/knowledge_graph/graph_search_tool.py +923 -0
- aiecs/tools/knowledge_graph/kg_builder_tool.py +476 -0
- aiecs/tools/langchain_adapter.py +542 -0
- aiecs/tools/schema_generator.py +275 -0
- aiecs/tools/search_tool/__init__.py +100 -0
- aiecs/tools/search_tool/analyzers.py +589 -0
- aiecs/tools/search_tool/cache.py +260 -0
- aiecs/tools/search_tool/constants.py +128 -0
- aiecs/tools/search_tool/context.py +216 -0
- aiecs/tools/search_tool/core.py +749 -0
- aiecs/tools/search_tool/deduplicator.py +123 -0
- aiecs/tools/search_tool/error_handler.py +271 -0
- aiecs/tools/search_tool/metrics.py +371 -0
- aiecs/tools/search_tool/rate_limiter.py +178 -0
- aiecs/tools/search_tool/schemas.py +277 -0
- aiecs/tools/statistics/__init__.py +80 -0
- aiecs/tools/statistics/ai_data_analysis_orchestrator.py +643 -0
- aiecs/tools/statistics/ai_insight_generator_tool.py +505 -0
- aiecs/tools/statistics/ai_report_orchestrator_tool.py +694 -0
- aiecs/tools/statistics/data_loader_tool.py +564 -0
- aiecs/tools/statistics/data_profiler_tool.py +658 -0
- aiecs/tools/statistics/data_transformer_tool.py +573 -0
- aiecs/tools/statistics/data_visualizer_tool.py +495 -0
- aiecs/tools/statistics/model_trainer_tool.py +487 -0
- aiecs/tools/statistics/statistical_analyzer_tool.py +459 -0
- aiecs/tools/task_tools/__init__.py +86 -0
- aiecs/tools/task_tools/chart_tool.py +732 -0
- aiecs/tools/task_tools/classfire_tool.py +922 -0
- aiecs/tools/task_tools/image_tool.py +447 -0
- aiecs/tools/task_tools/office_tool.py +684 -0
- aiecs/tools/task_tools/pandas_tool.py +635 -0
- aiecs/tools/task_tools/report_tool.py +635 -0
- aiecs/tools/task_tools/research_tool.py +392 -0
- aiecs/tools/task_tools/scraper_tool.py +715 -0
- aiecs/tools/task_tools/stats_tool.py +688 -0
- aiecs/tools/temp_file_manager.py +130 -0
- aiecs/tools/tool_executor/__init__.py +37 -0
- aiecs/tools/tool_executor/tool_executor.py +881 -0
- aiecs/utils/LLM_output_structor.py +445 -0
- aiecs/utils/__init__.py +34 -0
- aiecs/utils/base_callback.py +47 -0
- aiecs/utils/cache_provider.py +695 -0
- aiecs/utils/execution_utils.py +184 -0
- aiecs/utils/logging.py +1 -0
- aiecs/utils/prompt_loader.py +14 -0
- aiecs/utils/token_usage_repository.py +323 -0
- aiecs/ws/__init__.py +0 -0
- aiecs/ws/socket_server.py +52 -0
- aiecs-1.5.1.dist-info/METADATA +608 -0
- aiecs-1.5.1.dist-info/RECORD +302 -0
- aiecs-1.5.1.dist-info/WHEEL +5 -0
- aiecs-1.5.1.dist-info/entry_points.txt +10 -0
- aiecs-1.5.1.dist-info/licenses/LICENSE +225 -0
- aiecs-1.5.1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Setup NLP Data for AIECS ClassifierTool
|
|
3
|
+
# This script downloads required NLTK and spaCy data packages
|
|
4
|
+
|
|
5
|
+
set -e # Exit on any error
|
|
6
|
+
|
|
7
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
8
|
+
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
9
|
+
|
|
10
|
+
echo "=================================================="
|
|
11
|
+
echo "AIECS NLP Data Setup"
|
|
12
|
+
echo "=================================================="
|
|
13
|
+
echo "This script will download required NLP data for:"
|
|
14
|
+
echo " - NLTK stopwords corpus"
|
|
15
|
+
echo " - spaCy English model (en_core_web_sm)"
|
|
16
|
+
echo " - spaCy Chinese model (zh_core_web_sm)"
|
|
17
|
+
echo "=================================================="
|
|
18
|
+
echo
|
|
19
|
+
|
|
20
|
+
# Function to check if a command exists
|
|
21
|
+
command_exists() {
|
|
22
|
+
command -v "$1" >/dev/null 2>&1
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
# Function to activate virtual environment if it exists
|
|
26
|
+
activate_venv() {
|
|
27
|
+
if [[ -n "$VIRTUAL_ENV" ]]; then
|
|
28
|
+
echo "ā
Virtual environment already active: $VIRTUAL_ENV"
|
|
29
|
+
return 0
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# Check for common virtual environment locations
|
|
33
|
+
local venv_paths=(
|
|
34
|
+
"$PROJECT_ROOT/venv"
|
|
35
|
+
"$PROJECT_ROOT/.venv"
|
|
36
|
+
"$PROJECT_ROOT/env"
|
|
37
|
+
"$PROJECT_ROOT/.env"
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
for venv_path in "${venv_paths[@]}"; do
|
|
41
|
+
if [[ -f "$venv_path/bin/activate" ]]; then
|
|
42
|
+
echo "š¦ Activating virtual environment: $venv_path"
|
|
43
|
+
source "$venv_path/bin/activate"
|
|
44
|
+
return 0
|
|
45
|
+
fi
|
|
46
|
+
done
|
|
47
|
+
|
|
48
|
+
echo "ā ļø No virtual environment found. Using system Python."
|
|
49
|
+
return 1
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
# Function to check Python and packages
|
|
53
|
+
check_dependencies() {
|
|
54
|
+
echo "š Checking dependencies..."
|
|
55
|
+
|
|
56
|
+
if ! command_exists python3; then
|
|
57
|
+
echo "ā Python 3 is not installed or not in PATH"
|
|
58
|
+
exit 1
|
|
59
|
+
fi
|
|
60
|
+
|
|
61
|
+
local python_version=$(python3 --version 2>&1 | cut -d' ' -f2)
|
|
62
|
+
echo "ā
Python version: $python_version"
|
|
63
|
+
|
|
64
|
+
# Check if we're in the project directory and can import aiecs
|
|
65
|
+
cd "$PROJECT_ROOT"
|
|
66
|
+
if python3 -c "import aiecs" 2>/dev/null; then
|
|
67
|
+
echo "ā
AIECS package is available"
|
|
68
|
+
else
|
|
69
|
+
echo "ā ļø AIECS package not found. You may need to install it first:"
|
|
70
|
+
echo " pip install -e ."
|
|
71
|
+
fi
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
# Function to run the Python download script
|
|
75
|
+
run_download_script() {
|
|
76
|
+
echo
|
|
77
|
+
echo "š Starting NLP data download..."
|
|
78
|
+
echo
|
|
79
|
+
|
|
80
|
+
cd "$PROJECT_ROOT"
|
|
81
|
+
|
|
82
|
+
# Try multiple ways to run the script
|
|
83
|
+
if python3 -m aiecs.scripts.download_nlp_data; then
|
|
84
|
+
echo "ā
NLP data download completed successfully!"
|
|
85
|
+
return 0
|
|
86
|
+
elif python3 aiecs/scripts/download_nlp_data.py; then
|
|
87
|
+
echo "ā
NLP data download completed successfully!"
|
|
88
|
+
return 0
|
|
89
|
+
else
|
|
90
|
+
echo "ā Failed to run NLP data download script"
|
|
91
|
+
return 1
|
|
92
|
+
fi
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
# Function to verify installation
|
|
96
|
+
verify_installation() {
|
|
97
|
+
echo
|
|
98
|
+
echo "š Verifying NLP data installation..."
|
|
99
|
+
|
|
100
|
+
# Test NLTK
|
|
101
|
+
if python3 -c "
|
|
102
|
+
import nltk
|
|
103
|
+
from nltk.corpus import stopwords
|
|
104
|
+
stopwords.words('english')
|
|
105
|
+
print('ā
NLTK stopwords data available')
|
|
106
|
+
" 2>/dev/null; then
|
|
107
|
+
echo "ā
NLTK verification passed"
|
|
108
|
+
else
|
|
109
|
+
echo "ā ļø NLTK verification failed"
|
|
110
|
+
fi
|
|
111
|
+
|
|
112
|
+
# Test spaCy English model
|
|
113
|
+
if python3 -c "
|
|
114
|
+
import spacy
|
|
115
|
+
nlp = spacy.load('en_core_web_sm')
|
|
116
|
+
doc = nlp('This is a test.')
|
|
117
|
+
print('ā
spaCy English model available')
|
|
118
|
+
" 2>/dev/null; then
|
|
119
|
+
echo "ā
spaCy English model verification passed"
|
|
120
|
+
else
|
|
121
|
+
echo "ā ļø spaCy English model verification failed"
|
|
122
|
+
fi
|
|
123
|
+
|
|
124
|
+
# Test spaCy Chinese model (optional)
|
|
125
|
+
if python3 -c "
|
|
126
|
+
import spacy
|
|
127
|
+
nlp = spacy.load('zh_core_web_sm')
|
|
128
|
+
doc = nlp('čæęÆęµčÆć')
|
|
129
|
+
print('ā
spaCy Chinese model available')
|
|
130
|
+
" 2>/dev/null; then
|
|
131
|
+
echo "ā
spaCy Chinese model verification passed"
|
|
132
|
+
else
|
|
133
|
+
echo "ā ļø spaCy Chinese model not available (optional)"
|
|
134
|
+
fi
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
# Function to display usage information
|
|
138
|
+
show_usage() {
|
|
139
|
+
echo "Usage: $0 [OPTIONS]"
|
|
140
|
+
echo
|
|
141
|
+
echo "Options:"
|
|
142
|
+
echo " -h, --help Show this help message"
|
|
143
|
+
echo " -v, --verify Only verify existing installations"
|
|
144
|
+
echo " --no-venv Skip virtual environment activation"
|
|
145
|
+
echo
|
|
146
|
+
echo "This script downloads required NLP data for AIECS ClassifierTool:"
|
|
147
|
+
echo " - NLTK stopwords corpus"
|
|
148
|
+
echo " - spaCy English model (en_core_web_sm)"
|
|
149
|
+
echo " - spaCy Chinese model (zh_core_web_sm, optional)"
|
|
150
|
+
echo
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
# Parse command line arguments
|
|
154
|
+
VERIFY_ONLY=false
|
|
155
|
+
SKIP_VENV=false
|
|
156
|
+
|
|
157
|
+
while [[ $# -gt 0 ]]; do
|
|
158
|
+
case $1 in
|
|
159
|
+
-h|--help)
|
|
160
|
+
show_usage
|
|
161
|
+
exit 0
|
|
162
|
+
;;
|
|
163
|
+
-v|--verify)
|
|
164
|
+
VERIFY_ONLY=true
|
|
165
|
+
shift
|
|
166
|
+
;;
|
|
167
|
+
--no-venv)
|
|
168
|
+
SKIP_VENV=true
|
|
169
|
+
shift
|
|
170
|
+
;;
|
|
171
|
+
*)
|
|
172
|
+
echo "Unknown option: $1"
|
|
173
|
+
show_usage
|
|
174
|
+
exit 1
|
|
175
|
+
;;
|
|
176
|
+
esac
|
|
177
|
+
done
|
|
178
|
+
|
|
179
|
+
# Main execution
|
|
180
|
+
main() {
|
|
181
|
+
echo "š Project root: $PROJECT_ROOT"
|
|
182
|
+
echo
|
|
183
|
+
|
|
184
|
+
# Activate virtual environment if available and not skipped
|
|
185
|
+
if [[ "$SKIP_VENV" != true ]]; then
|
|
186
|
+
activate_venv || true
|
|
187
|
+
fi
|
|
188
|
+
|
|
189
|
+
# Check dependencies
|
|
190
|
+
check_dependencies
|
|
191
|
+
|
|
192
|
+
if [[ "$VERIFY_ONLY" == true ]]; then
|
|
193
|
+
echo
|
|
194
|
+
echo "š Running verification only..."
|
|
195
|
+
verify_installation
|
|
196
|
+
else
|
|
197
|
+
# Download NLP data
|
|
198
|
+
if run_download_script; then
|
|
199
|
+
verify_installation
|
|
200
|
+
echo
|
|
201
|
+
echo "š NLP data setup completed successfully!"
|
|
202
|
+
echo "AIECS ClassifierTool is ready to use."
|
|
203
|
+
else
|
|
204
|
+
echo
|
|
205
|
+
echo "ā NLP data setup failed. Please check the errors above."
|
|
206
|
+
exit 1
|
|
207
|
+
fi
|
|
208
|
+
fi
|
|
209
|
+
|
|
210
|
+
echo
|
|
211
|
+
echo "=================================================="
|
|
212
|
+
echo "Setup complete!"
|
|
213
|
+
echo "=================================================="
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
# Run main function
|
|
217
|
+
main "$@"
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
# Weasel Library Patch Scripts
|
|
2
|
+
|
|
3
|
+
čæäøŖē®å½å
å«ēØäŗäæ®å¤weaselåŗéå¤éŖčÆåØå½ę°é误ēčę¬ļ¼čÆ„é误导č“ęµčÆå¤±č“„ć
|
|
4
|
+
|
|
5
|
+
## é®é¢ęčæ°
|
|
6
|
+
|
|
7
|
+
é误åēęÆå äøŗweaselåŗäøęéå¤ēéŖčÆåØå½ę°ļ¼ä½ę²”ę`allow_reuse=True`åę°ļ¼
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
pydantic.v1.errors.ConfigError: duplicate validator function "weasel.schemas.ProjectConfigSchema.check_legacy_keys"; if this is intended, set `allow_reuse=True`
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**注ę**: å®é
ēé®é¢ęÆåØ `@root_validator` č£
é„°åØäøļ¼čäøęÆ `@validator`ć
|
|
14
|
+
|
|
15
|
+
## åÆēØčę¬
|
|
16
|
+
|
|
17
|
+
### 1. `run_weasel_patch.sh` (ęØč使ēØ)
|
|
18
|
+
ęē®åēč§£å³ę¹ę”ļ¼éčæpoetryčæč”蔄äøļ¼
|
|
19
|
+
- čŖåØę£ęµpoetryčęēÆå¢
|
|
20
|
+
- åØę£ē”®ēēÆå¢äøčæč”Python蔄äøčę¬
|
|
21
|
+
- ęä¾ęø
ę°ēåé¦å诓ę
|
|
22
|
+
|
|
23
|
+
**使ēØę¹ę³:**
|
|
24
|
+
```bash
|
|
25
|
+
cd python-middleware
|
|
26
|
+
./scripts/run_weasel_patch.sh
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### 2. `fix_weasel_validator.py`
|
|
30
|
+
åŗäŗPythonēę¹ę³ļ¼
|
|
31
|
+
- 使ēØę£å蔨达å¼ęØ”å¼čÆå«åäæ®å¤éŖčÆåØč£
é„°åØ
|
|
32
|
+
- ęä¾čƦē»ēåå对ęÆ
|
|
33
|
+
- å建带ę¶é“ę³ēå¤ä»½
|
|
34
|
+
|
|
35
|
+
**使ēØę¹ę³:**
|
|
36
|
+
```bash
|
|
37
|
+
cd python-middleware
|
|
38
|
+
poetry run python3 ./scripts/fix_weasel_validator.py
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 3. `fix_weasel_validator.sh`
|
|
42
|
+
åŗäŗbashēę¹ę³ļ¼ä½æēØsedčæč”ęę¬ęæę¢ļ¼
|
|
43
|
+
- ē®åēsedęę¬ęæę¢
|
|
44
|
+
- å建å¤ä»½
|
|
45
|
+
- ę¾ē¤ŗååå
容
|
|
46
|
+
|
|
47
|
+
**使ēØę¹ę³:**
|
|
48
|
+
```bash
|
|
49
|
+
cd python-middleware
|
|
50
|
+
./scripts/fix_weasel_validator.sh
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### 4. `patch_weasel_library.sh`
|
|
54
|
+
综åč§£å³ę¹ę”ļ¼
|
|
55
|
+
- ē»åå¤ē§ę¹ę³
|
|
56
|
+
- å
å«ęµčÆéŖčÆ
|
|
57
|
+
- 详ē»ēé误å¤ē
|
|
58
|
+
|
|
59
|
+
**使ēØę¹ę³:**
|
|
60
|
+
```bash
|
|
61
|
+
cd python-middleware
|
|
62
|
+
./scripts/patch_weasel_library.sh
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## čę¬åč½
|
|
66
|
+
|
|
67
|
+
ęęčę¬é½ę§č”仄äøęä½ļ¼
|
|
68
|
+
|
|
69
|
+
1. **å®ä½čęēÆå¢**: ę¾å°poetryčęēÆå¢č·Æå¾
|
|
70
|
+
2. **ę¾å°é®é¢ęä»¶**: åØsite-packagesäøå®ä½`weasel/schemas.py`
|
|
71
|
+
3. **å建å¤ä»½**: å¶ä½åå§ęä»¶ēåø¦ę¶é“ę³å¤ä»½
|
|
72
|
+
4. **åŗēØč”„äø**: åéč¦ēéŖčÆåØč£
é„°åØę·»å `allow_reuse=True`
|
|
73
|
+
5. **éŖčÆäæ®å¤**: ę£ę„蔄äøęÆå¦ę£ē”®åŗēØ
|
|
74
|
+
|
|
75
|
+
## äæ®å¤å
容
|
|
76
|
+
|
|
77
|
+
čę¬å°ä»„äøä»£ē ļ¼
|
|
78
|
+
```python
|
|
79
|
+
@root_validator(pre=True)
|
|
80
|
+
def check_legacy_keys(cls, obj: Dict[str, Any]) -> Dict[str, Any]:
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
äæ®ę¹äøŗļ¼
|
|
84
|
+
```python
|
|
85
|
+
@root_validator(pre=True, allow_reuse=True)
|
|
86
|
+
def check_legacy_keys(cls, obj: Dict[str, Any]) -> Dict[str, Any]:
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
čę¬åę¶ęÆę `@validator` å `@root_validator` č£
é„°åØēäæ®å¤ć
|
|
90
|
+
|
|
91
|
+
## åę»
|
|
92
|
+
|
|
93
|
+
å¦ęéč¦ę¢å¤ę“ę¹ļ¼ęÆäøŖčę¬é½ä¼å建å¤ä»½ęä»¶ćęØåÆä»„使ēØä»„äøå½ä»¤ę¢å¤ļ¼
|
|
94
|
+
```bash
|
|
95
|
+
cp /path/to/backup/file /path/to/original/schemas.py
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
ē”®åēč·Æå¾å°åØčę¬č¾åŗäøę¾ē¤ŗć
|
|
99
|
+
|
|
100
|
+
## ę
éęé¤
|
|
101
|
+
|
|
102
|
+
1. **ę¾äøå°Poetry**: ē”®äæå·²å®č£
poetryå¹¶äøęØåØé”¹ē®ē®å½äø
|
|
103
|
+
2. **ę¾äøå°čęēÆå¢**: čæč”`poetry install`å建čęēÆå¢
|
|
104
|
+
3. **ę¾äøå°ęä»¶**: weaselå
åÆč½ęŖå®č£
- ę£ę„ęØēä¾čµé”¹
|
|
105
|
+
4. **ęéé误**: ęØåÆč½éč¦ä½æēØéå½ēęéčæč”
|
|
106
|
+
|
|
107
|
+
## čæč”蔄äøå
|
|
108
|
+
|
|
109
|
+
1. åꬔå°čÆčæč”ęØēęµčÆļ¼`poetry run pytest`
|
|
110
|
+
2. å¦ęé®é¢ä»ē¶ååØļ¼éåÆęØēPythonēÆå¢/IDE
|
|
111
|
+
3. äæ®å¤åŗčÆ„č§£å³éå¤éŖčÆåØå½ę°é误
|
|
112
|
+
|
|
113
|
+
## 注ęäŗé”¹
|
|
114
|
+
|
|
115
|
+
- čæäŗčę¬åÆä»„å®å
Øå°å¤ę¬”čæč”
|
|
116
|
+
- å®ä»¬åØčæč”ę“ę¹ä¹åę£ę„蔄äøęÆå¦å·²åŗēØ
|
|
117
|
+
- ęęę“ę¹é½ä¼čŖåØå¤ä»½
|
|
118
|
+
- čę¬é对ē¹å®é®é¢ļ¼äøä¼å½±åå
¶ä»åč½
|
|
119
|
+
|
|
120
|
+
## ęØč使ēØęµēØ
|
|
121
|
+
|
|
122
|
+
1. é¦å
å°čÆä½æēØ `run_weasel_patch.sh`ļ¼ęē®åļ¼
|
|
123
|
+
2. å¦ęéå°é®é¢ļ¼åÆä»„å°čÆē“ę„čæč” `poetry run python3 scripts/fix_weasel_validator.py`
|
|
124
|
+
3. ä½äøŗęåęꮵļ¼åÆä»„ä½æēØ `patch_weasel_library.sh`ļ¼ęå
Øé¢ļ¼
|
|
125
|
+
|
|
126
|
+
ęęčę¬é½ä¼åØäæ®ę¹åå建å¤ä»½ļ¼å ę¤ęØåÆä»„å®å
Øå°å°čÆäøåēę¹ę³ć
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Script to fix weasel library duplicate validator function error.
|
|
4
|
+
This script patches the weasel schemas.py file to add allow_reuse=True to duplicate validators.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import os
|
|
8
|
+
import sys
|
|
9
|
+
import shutil
|
|
10
|
+
from datetime import datetime
|
|
11
|
+
import re
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def get_weasel_path():
|
|
15
|
+
"""Get the weasel package path in the current Python environment."""
|
|
16
|
+
try:
|
|
17
|
+
import weasel
|
|
18
|
+
import inspect
|
|
19
|
+
|
|
20
|
+
weasel_file = inspect.getfile(weasel)
|
|
21
|
+
weasel_dir = os.path.dirname(weasel_file)
|
|
22
|
+
return os.path.join(weasel_dir, "schemas.py")
|
|
23
|
+
except ImportError:
|
|
24
|
+
print("ā Error: weasel package not found")
|
|
25
|
+
print("Please install aiecs with all dependencies")
|
|
26
|
+
return None
|
|
27
|
+
except Exception as e:
|
|
28
|
+
print(f"ā Error finding weasel package: {e}")
|
|
29
|
+
return None
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def backup_file(file_path):
|
|
33
|
+
"""Create a backup of the file."""
|
|
34
|
+
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
35
|
+
backup_path = f"{file_path}.backup.{timestamp}"
|
|
36
|
+
shutil.copy2(file_path, backup_path)
|
|
37
|
+
return backup_path
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def fix_weasel_schemas(schemas_file_path):
|
|
41
|
+
"""Fix the weasel schemas.py file by adding allow_reuse=True to validators."""
|
|
42
|
+
|
|
43
|
+
print(f"š Processing file: {schemas_file_path}")
|
|
44
|
+
|
|
45
|
+
# Read the original file
|
|
46
|
+
with open(schemas_file_path, "r", encoding="utf-8") as f:
|
|
47
|
+
content = f.read()
|
|
48
|
+
|
|
49
|
+
# Check if already patched
|
|
50
|
+
if "allow_reuse=True" in content:
|
|
51
|
+
print("ā
File already patched with allow_reuse=True")
|
|
52
|
+
return True
|
|
53
|
+
|
|
54
|
+
# Create backup
|
|
55
|
+
backup_path = backup_file(schemas_file_path)
|
|
56
|
+
print(f"š¾ Created backup at: {backup_path}")
|
|
57
|
+
|
|
58
|
+
# Show current problematic area
|
|
59
|
+
lines = content.split("\n")
|
|
60
|
+
print("\nš Current content around line 89:")
|
|
61
|
+
for i, line in enumerate(lines[84:94], 85):
|
|
62
|
+
print(f"{i:3d} | {line}")
|
|
63
|
+
|
|
64
|
+
# Pattern to match both @validator and @root_validator decorators without
|
|
65
|
+
# allow_reuse
|
|
66
|
+
validator_pattern = r"(@(?:root_)?validator\([^)]*)\)(?!\s*,\s*allow_reuse=True)"
|
|
67
|
+
|
|
68
|
+
# Replace @validator(...) or @root_validator(...) with allow_reuse=True if
|
|
69
|
+
# not already present
|
|
70
|
+
def replace_validator(match):
|
|
71
|
+
validator_call = match.group(1)
|
|
72
|
+
# Check if allow_reuse is already in the parameters
|
|
73
|
+
if "allow_reuse" in validator_call:
|
|
74
|
+
return match.group(0) # Return unchanged
|
|
75
|
+
else:
|
|
76
|
+
return f"{validator_call}, allow_reuse=True)"
|
|
77
|
+
|
|
78
|
+
# Apply the fix
|
|
79
|
+
fixed_content = re.sub(validator_pattern, replace_validator, content)
|
|
80
|
+
|
|
81
|
+
# Write the fixed content back
|
|
82
|
+
with open(schemas_file_path, "w", encoding="utf-8") as f:
|
|
83
|
+
f.write(fixed_content)
|
|
84
|
+
|
|
85
|
+
# Show the fixed content
|
|
86
|
+
fixed_lines = fixed_content.split("\n")
|
|
87
|
+
print("\nš Patched content around line 89:")
|
|
88
|
+
for i, line in enumerate(fixed_lines[84:94], 85):
|
|
89
|
+
print(f"{i:3d} | {line}")
|
|
90
|
+
|
|
91
|
+
# Verify the fix
|
|
92
|
+
if "allow_reuse=True" in fixed_content:
|
|
93
|
+
print("ā
Verification successful: allow_reuse=True found in file")
|
|
94
|
+
return True
|
|
95
|
+
else:
|
|
96
|
+
print("ā ļø Warning: allow_reuse=True not found after patching")
|
|
97
|
+
return False
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def main():
|
|
101
|
+
"""Main function to execute the patch."""
|
|
102
|
+
print("š§ Starting weasel library patch for duplicate validator function...")
|
|
103
|
+
|
|
104
|
+
# Get weasel schemas.py path
|
|
105
|
+
schemas_file = get_weasel_path()
|
|
106
|
+
if not schemas_file:
|
|
107
|
+
sys.exit(1)
|
|
108
|
+
|
|
109
|
+
print(f"š Found weasel schemas.py at: {schemas_file}")
|
|
110
|
+
|
|
111
|
+
if not os.path.exists(schemas_file):
|
|
112
|
+
print(f"ā Error: weasel schemas.py file not found at {schemas_file}")
|
|
113
|
+
sys.exit(1)
|
|
114
|
+
|
|
115
|
+
# Apply the fix
|
|
116
|
+
success = fix_weasel_schemas(schemas_file)
|
|
117
|
+
|
|
118
|
+
if success:
|
|
119
|
+
print("\nš Weasel library patch completed successfully!")
|
|
120
|
+
print("\nYou can now run your tests again.")
|
|
121
|
+
print("\nIf you need to revert the changes, restore from the backup file.")
|
|
122
|
+
else:
|
|
123
|
+
print("\nā Patch may not have been applied correctly. Please check manually.")
|
|
124
|
+
sys.exit(1)
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
if __name__ == "__main__":
|
|
128
|
+
main()
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# Script to fix weasel library duplicate validator function error
|
|
4
|
+
# This script patches the weasel schemas.py file to add allow_reuse=True
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
echo "š§ Starting weasel library patch for duplicate validator function..."
|
|
9
|
+
|
|
10
|
+
# Get the poetry virtual environment path
|
|
11
|
+
VENV_PATH=$(poetry env info --path 2>/dev/null || echo "")
|
|
12
|
+
|
|
13
|
+
if [ -z "$VENV_PATH" ]; then
|
|
14
|
+
echo "ā Error: Could not find poetry virtual environment"
|
|
15
|
+
echo "Please make sure you're in the project directory and poetry is installed"
|
|
16
|
+
exit 1
|
|
17
|
+
fi
|
|
18
|
+
|
|
19
|
+
echo "š Found virtual environment at: $VENV_PATH"
|
|
20
|
+
|
|
21
|
+
# Path to the problematic weasel schemas.py file
|
|
22
|
+
WEASEL_SCHEMAS_FILE="$VENV_PATH/lib/python3.10/site-packages/weasel/schemas.py"
|
|
23
|
+
|
|
24
|
+
if [ ! -f "$WEASEL_SCHEMAS_FILE" ]; then
|
|
25
|
+
echo "ā Error: weasel schemas.py file not found at $WEASEL_SCHEMAS_FILE"
|
|
26
|
+
exit 1
|
|
27
|
+
fi
|
|
28
|
+
|
|
29
|
+
echo "š Found weasel schemas.py at: $WEASEL_SCHEMAS_FILE"
|
|
30
|
+
|
|
31
|
+
# Create backup of original file
|
|
32
|
+
BACKUP_FILE="${WEASEL_SCHEMAS_FILE}.backup.$(date +%Y%m%d_%H%M%S)"
|
|
33
|
+
cp "$WEASEL_SCHEMAS_FILE" "$BACKUP_FILE"
|
|
34
|
+
echo "š¾ Created backup at: $BACKUP_FILE"
|
|
35
|
+
|
|
36
|
+
# Check if the file already has allow_reuse=True
|
|
37
|
+
if grep -q "allow_reuse=True" "$WEASEL_SCHEMAS_FILE"; then
|
|
38
|
+
echo "ā
File already patched with allow_reuse=True"
|
|
39
|
+
exit 0
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
# Apply the patch using sed
|
|
43
|
+
# Look for @validator and @root_validator decorators and add allow_reuse=True if not present
|
|
44
|
+
echo "šØ Applying patch..."
|
|
45
|
+
|
|
46
|
+
# First, let's check the current content around the problematic line
|
|
47
|
+
echo "š Current content around line 89:"
|
|
48
|
+
sed -n '85,95p' "$WEASEL_SCHEMAS_FILE"
|
|
49
|
+
|
|
50
|
+
# Apply the patch - add allow_reuse=True to validator decorators that don't have it
|
|
51
|
+
sed -i.tmp '
|
|
52
|
+
/^[[:space:]]*@\(root_\)\?validator(/,/^[[:space:]]*def/ {
|
|
53
|
+
/^[[:space:]]*@\(root_\)\?validator(/ {
|
|
54
|
+
# If the line contains @validator or @root_validator but not allow_reuse, add it
|
|
55
|
+
/allow_reuse/! {
|
|
56
|
+
s/@\(root_\)\?validator(\([^)]*\))/@\1validator(\2, allow_reuse=True)/
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
' "$WEASEL_SCHEMAS_FILE"
|
|
61
|
+
|
|
62
|
+
# Remove the temporary file
|
|
63
|
+
rm -f "${WEASEL_SCHEMAS_FILE}.tmp"
|
|
64
|
+
|
|
65
|
+
echo "ā
Patch applied successfully!"
|
|
66
|
+
|
|
67
|
+
# Show the patched content
|
|
68
|
+
echo "š Patched content around line 89:"
|
|
69
|
+
sed -n '85,95p' "$WEASEL_SCHEMAS_FILE"
|
|
70
|
+
|
|
71
|
+
# Verify the patch by checking if allow_reuse=True is now present
|
|
72
|
+
if grep -q "allow_reuse=True" "$WEASEL_SCHEMAS_FILE"; then
|
|
73
|
+
echo "ā
Verification successful: allow_reuse=True found in file"
|
|
74
|
+
else
|
|
75
|
+
echo "ā ļø Warning: allow_reuse=True not found after patching"
|
|
76
|
+
fi
|
|
77
|
+
|
|
78
|
+
echo "š Weasel library patch completed!"
|
|
79
|
+
echo "š Backup saved at: $BACKUP_FILE"
|
|
80
|
+
echo ""
|
|
81
|
+
echo "You can now run your tests again. If you need to revert the changes:"
|
|
82
|
+
echo "cp '$BACKUP_FILE' '$WEASEL_SCHEMAS_FILE'"
|