exness-data-preprocess 0.8.0__tar.gz → 1.0.0__tar.gz
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.
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/.gitignore +7 -0
- exness_data_preprocess-1.0.0/.releaserc.yml +22 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/CHANGELOG.md +26 -2
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/PKG-INFO +4 -14
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/README.md +7 -6
- exness_data_preprocess-1.0.0/docs/adr/2025-12-09-codebase-pruning.md +150 -0
- exness_data_preprocess-1.0.0/docs/design/2025-12-09-codebase-pruning/spec.md +93 -0
- exness_data_preprocess-1.0.0/package-lock.json +6272 -0
- exness_data_preprocess-1.0.0/package.json +9 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/pyproject.toml +4 -19
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/__init__.py +1 -1
- exness_data_preprocess-1.0.0/src/exness_data_preprocess/clickhouse_base.py +71 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/clickhouse_gap_detector.py +3 -17
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/clickhouse_manager.py +3 -17
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/clickhouse_ohlc_generator.py +3 -17
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/clickhouse_query_engine.py +3 -17
- exness_data_preprocess-0.8.0/.lycheecache +0 -0
- exness_data_preprocess-0.8.0/src/exness_data_preprocess/api.py +0 -303
- exness_data_preprocess-0.8.0/src/exness_data_preprocess/cli.py +0 -251
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/.cz.toml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/.github/workflows/ci.yml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/.github/workflows/pre-commit-autoupdate.yml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/.github/workflows/publish.yml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/.lint-relative-paths-results.txt +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/.pre-commit-config.yaml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/CLAUDE.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/CONTRIBUTING.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/LICENSE +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/Makefile +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/README.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/cliff-release-notes.toml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/cliff.toml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/DATABASE_SCHEMA.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/EXNESS_DATA_SOURCES.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/MODULE_ARCHITECTURE.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/PRIORITY3_CLEANUP_PLAN.yaml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/REPOSITORY_REFACTORING_PLAN.yaml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/RESEARCH_PATTERNS.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/TRADING_HOURS_RESEARCH.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/UNIFIED_DUCKDB_PLAN_v2.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/adr/2025-12-09-exness-clickhouse-migration.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/CLAUDE_MD_AUDIT_2025-10-16_PASS2.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/CLAUDE_MD_VERIFICATION_CHECKLIST_2025-10-16.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/CLAUDE_MD_VERIFICATION_FINDINGS_2025-10-16.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/DOCUMENTATION_AUDIT_2025-10-15.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/DOCUMENTATION_AUDIT_PASS2_2025-10-15.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/DOCUMENTATION_BEST_PRACTICES_LINE_COUNTS.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/E2E_TESTING_PLAN_v1.0.0.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/EXCHANGE_SESSION_AUDIT_2025-10-17.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/FUNCTIONALITY_VALIDATION_REPORT_2025-10-15.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/FUNCTIONALITY_VALIDATION_REPORT_2025-10-16.md +0 -0
- {exness_data_preprocess-0.8.0/docs/research → exness_data_preprocess-1.0.0/docs/archive}/GAP_DETECTION_COMPARISON.md +0 -0
- {exness_data_preprocess-0.8.0/docs/research → exness_data_preprocess-1.0.0/docs/archive}/GAP_DETECTION_SQL_APPROACH.md +0 -0
- {exness_data_preprocess-0.8.0/docs/phases → exness_data_preprocess-1.0.0/docs/archive}/PHASE4_DRY_RUN_CONFIG_PLAN.yaml +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/PHASE7_v1.5.0_REFACTORING_PLAN.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/PHASE7_v1.6.0_REFACTORING_PROGRESS.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/archive/PYDANTIC_REFACTORING_PLAN_v0.2.0_COMPLETE.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/archive/PYDANTIC_REFACTORING_STATUS_v0.2.0_COMPLETE.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/REFACTORING_CHECKLIST.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/RESEARCH_PATTERNS_CANONICALIZATION_2025-10-17.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/SCHEMA_v1.6.0_AUDIT_FINDINGS.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/SCHEMA_v1.6.0_MIGRATION_GUIDE.md +0 -0
- {exness_data_preprocess-0.8.0/docs/plans → exness_data_preprocess-1.0.0/docs/archive}/SESSION_2025-10-15_SUMMARY.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/archive/UNIFIED_DUCKDB_PLAN_v1.0.0_LEGACY.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/archive/implementation-plan-2024-11-24.yaml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/design/2025-12-09-exness-clickhouse-migration/spec.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/optimization/OPTIMIZATION_OPPORTUNITIES_2025-10-18.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/phases/PHASE2_SESSION_VECTORIZATION_PLAN.yaml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/phases/PHASE3_SQL_GAP_DETECTION_PLAN.yaml +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/releases/RELEASE_NOTES.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/releases/RELEASE_NOTES_SHORT.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/HYBRID_SESSION_DETECTION_ANALYSIS.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/compression-benchmarks/README.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/compression-benchmarks/test_all_compression_methods.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/compression-benchmarks/test_delta_encoding_properly.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/compression-benchmarks/test_parquet_compression_methods.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/01-methodology.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/02-mode-truncated-analysis.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/03-hurdle-model-analysis.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/04-temporal-patterns.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/05-final-recommendations.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/README.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/scripts/reproduction_guide.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/visualizations/hurdle-model/hurdle_decomposition.png +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/cv_mode_comparison.png +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/distribution_overlay.png +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/signal_quality_comparison.png +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/visualizations/mode-truncated/variance_decomposition.png +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/visualizations/temporal/concentration_curve.png +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-spread-analysis/visualizations/temporal/percentile_analysis.png +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/01-methodology.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/02-baseline-sep2024.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/03-multiperiod-validation.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/04-discoveries-and-plan-evolution.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/README.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/findings/baseline-sep2024-comprehensive-summary.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/findings/phase2-mean-reversion-report.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/findings/phase3-volatility-model-report.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/findings/phase4-5-statistical-tests-survivorship-report.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/01_mean_reversion_analysis.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/02_volatility_model_simple.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/03_liquidity_crisis_detection.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/baseline-sep2024/04_regime_detection_analysis.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase1_data_validation.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase2_mean_reversion.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase3_volatility_model.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase4_statistical_tests.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase5_survivorship_bias.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase5_survivorship_bias_v1.0.1.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase6a_interval_analysis.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase6b_price_clustering.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/multiperiod-validation/phase6c_combined_pattern.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/reproduction_guide.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/diagnostic_burst_decay.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/generate_interactive_dashboard.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/generate_lightweight_dashboard.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/eurusd-zero-spread-deviations/scripts/visualization/prepare_visualization_data.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/research/gap_detection_implementation_example.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/setup/GITHUB_PYPI_SETUP.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/validation/ARCHITECTURE_AUDIT_2025-10-17.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/validation/ARCHITECTURE_EFFICIENCY_AUDIT_2025-10-18.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/validation/DOCUMENTATION_SURVEY_v1.7.0.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/validation/E2E_VALIDATION_RESULTS_v1.6.0.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/validation/SPIKE_TEST_RESULTS_PHASE1_2025-10-18.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/validation/SPIKE_TEST_RESULTS_PHASE2_2025-10-18.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/validation/WEEKEND_GAP_VALIDATION_SUMMARY.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/docs/validation/WORKSPACE_SURVEY_2025-10-17.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/examples/basic_usage.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/examples/batch_processing.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/clickhouse_client.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/config.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/database_manager.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/downloader.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/exchanges.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/gap_detector.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/models.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/ohlc_generator.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/processor.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/query_engine.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/schema.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/session_detector.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/src/exness_data_preprocess/tick_loader.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/tests/README.md +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/tests/__init__.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/tests/conftest.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/tests/test_basic.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/tests/test_functional_regression.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/tests/test_models.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/tests/test_processor_pydantic.py +0 -0
- {exness_data_preprocess-0.8.0 → exness_data_preprocess-1.0.0}/tests/test_types.py +0 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# semantic-release configuration for Python project
|
|
2
|
+
# Uses @semantic-release/exec instead of @semantic-release/npm
|
|
3
|
+
branches:
|
|
4
|
+
- main
|
|
5
|
+
|
|
6
|
+
plugins:
|
|
7
|
+
- "@semantic-release/commit-analyzer"
|
|
8
|
+
- "@semantic-release/release-notes-generator"
|
|
9
|
+
- "@semantic-release/changelog"
|
|
10
|
+
- - "@semantic-release/exec"
|
|
11
|
+
- prepareCmd: |
|
|
12
|
+
# Update version in pyproject.toml
|
|
13
|
+
sed -i '' 's/^version = ".*"/version = "${nextRelease.version}"/' pyproject.toml
|
|
14
|
+
# Update version in __init__.py
|
|
15
|
+
sed -i '' 's/^__version__ = ".*"/__version__ = "${nextRelease.version}"/' src/exness_data_preprocess/__init__.py
|
|
16
|
+
- - "@semantic-release/git"
|
|
17
|
+
- assets:
|
|
18
|
+
- pyproject.toml
|
|
19
|
+
- src/exness_data_preprocess/__init__.py
|
|
20
|
+
- CHANGELOG.md
|
|
21
|
+
message: "chore(release): bump version ${lastRelease.version} → ${nextRelease.version} [skip ci]"
|
|
22
|
+
- "@semantic-release/github"
|
|
@@ -1,9 +1,33 @@
|
|
|
1
|
-
# [0.
|
|
1
|
+
# [1.0.0](https://github.com/terrylica/exness-data-preprocess/compare/v0.8.0...v1.0.0) (2025-12-10)
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
* feat!: prune codebase - remove unused deps, archive docs, extract mixin ([e0d48b8](https://github.com/terrylica/exness-data-preprocess/commit/e0d48b8fe7ba44d2c3bc326661102a0b3d3b33b7))
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
### BREAKING CHANGES
|
|
8
|
+
|
|
9
|
+
* Remove deprecated api.py and cli.py modules
|
|
2
10
|
|
|
11
|
+
Dependency cleanup:
|
|
12
|
+
- Remove httpx, pyarrow, polars (unused)
|
|
13
|
+
- Move tqdm to optional [examples] extra
|
|
14
|
+
- Consolidate dev dependencies to [dependency-groups]
|
|
15
|
+
|
|
16
|
+
Documentation archival:
|
|
17
|
+
- Archive 20 planning/research docs to docs/archive/
|
|
18
|
+
- Update .gitignore for node_modules, lychee patterns
|
|
19
|
+
|
|
20
|
+
Code refactoring:
|
|
21
|
+
- Extract ClickHouseClientMixin from 4 modules (~45 lines saved)
|
|
22
|
+
- Delete api.py (304 lines) and cli.py (252 lines)
|
|
23
|
+
|
|
24
|
+
ADR: docs/adr/2025-12-09-codebase-pruning.md
|
|
25
|
+
|
|
26
|
+
# [0.8.0](https://github.com/terrylica/exness-data-preprocess/compare/v0.7.2...v0.8.0) (2025-12-10)
|
|
3
27
|
|
|
4
28
|
### Features
|
|
5
29
|
|
|
6
|
-
|
|
30
|
+
- add ClickHouse backend for cloud deployment ([c9b51a3](https://github.com/terrylica/exness-data-preprocess/commit/c9b51a3b374eea74375cc86afdd8cb9391fe73e8))
|
|
7
31
|
|
|
8
32
|
# Changelog
|
|
9
33
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: exness-data-preprocess
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 1.0.0
|
|
4
4
|
Summary: Professional Exness forex tick data preprocessing with optimal compression (Parquet Zstd-22) and DuckDB OHLC generation. Provides efficient storage (9% smaller than ZIP) with lossless precision and direct queryability.
|
|
5
5
|
Project-URL: Homepage, https://github.com/terrylica/exness-data-preprocess
|
|
6
6
|
Project-URL: Documentation, https://github.com/terrylica/exness-data-preprocess#readme
|
|
@@ -12,7 +12,7 @@ Author-email: Eon Labs <terry@eonlabs.com>
|
|
|
12
12
|
Maintainer-email: Terry Li <terry@eonlabs.com>
|
|
13
13
|
License: MIT
|
|
14
14
|
License-File: LICENSE
|
|
15
|
-
Keywords: backtesting,compression,data-engineering,duckdb,efficient-storage,eurusd,exness,financial-data,forex,forex-data,lossless,microstructure,ohlc,pandas,parquet,preprocessing,
|
|
15
|
+
Keywords: backtesting,compression,data-engineering,duckdb,efficient-storage,eurusd,exness,financial-data,forex,forex-data,lossless,microstructure,ohlc,pandas,parquet,preprocessing,quantitative-finance,queryable,tick-data,time-series,zstd
|
|
16
16
|
Classifier: Development Status :: 3 - Alpha
|
|
17
17
|
Classifier: Intended Audience :: Developers
|
|
18
18
|
Classifier: Intended Audience :: Financial and Insurance Industry
|
|
@@ -29,21 +29,11 @@ Requires-Python: >=3.11
|
|
|
29
29
|
Requires-Dist: clickhouse-connect>=0.7.0
|
|
30
30
|
Requires-Dist: duckdb>=0.9.0
|
|
31
31
|
Requires-Dist: exchange-calendars>=4.5.6
|
|
32
|
-
Requires-Dist: httpx>=0.25.0
|
|
33
32
|
Requires-Dist: pandas>=2.0.0
|
|
34
|
-
Requires-Dist: pyarrow>=16.0.0
|
|
35
33
|
Requires-Dist: pydantic>=2.0.0
|
|
36
34
|
Requires-Dist: pyyaml>=6.0.0
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
Requires-Dist: black>=23.0.0; extra == 'dev'
|
|
40
|
-
Requires-Dist: mypy>=1.5.0; extra == 'dev'
|
|
41
|
-
Requires-Dist: pytest-cov>=4.0.0; extra == 'dev'
|
|
42
|
-
Requires-Dist: pytest>=7.0.0; extra == 'dev'
|
|
43
|
-
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
44
|
-
Provides-Extra: test
|
|
45
|
-
Requires-Dist: pytest-cov>=4.0.0; extra == 'test'
|
|
46
|
-
Requires-Dist: pytest>=7.0.0; extra == 'test'
|
|
35
|
+
Provides-Extra: examples
|
|
36
|
+
Requires-Dist: tqdm>=4.65.0; extra == 'examples'
|
|
47
37
|
Description-Content-Type: text/markdown
|
|
48
38
|
|
|
49
39
|
# Exness Data Preprocess v2.0.0
|
|
@@ -55,11 +55,6 @@
|
|
|
55
55
|
|
|
56
56
|
### Implementation Architecture v1.7.0
|
|
57
57
|
|
|
58
|
-
**Refactoring Plans**:
|
|
59
|
-
|
|
60
|
-
- [`plans/PHASE7_v1.6.0_REFACTORING_PROGRESS.md`](plans/PHASE7_v1.6.0_REFACTORING_PROGRESS.md) - Complete refactoring progress
|
|
61
|
-
- [`plans/REFACTORING_CHECKLIST.md`](plans/REFACTORING_CHECKLIST.md) - Quick reference checklist
|
|
62
|
-
|
|
63
58
|
**Pattern**: Facade with 7 specialized modules
|
|
64
59
|
|
|
65
60
|
**Key Modules**:
|
|
@@ -261,5 +256,11 @@ curl -s "https://ticks.ex2archive.com/ticks/" | jq -r '.[] | .name' | grep -i "E
|
|
|
261
256
|
|
|
262
257
|
---
|
|
263
258
|
|
|
264
|
-
|
|
259
|
+
## Archived Documentation
|
|
260
|
+
|
|
261
|
+
Historical planning, research, and completed phase documents are archived in [`archive/`](archive/).
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
**Last Updated**: 2025-12-09
|
|
265
266
|
**Maintainer**: Terry Li <terry@eonlabs.com>
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
---
|
|
2
|
+
status: accepted
|
|
3
|
+
date: 2025-12-09
|
|
4
|
+
decision-maker: Terry Li
|
|
5
|
+
consulted:
|
|
6
|
+
[Code-Pruning-Agent, Dependency-Pruning-Agent, Documentation-Pruning-Agent]
|
|
7
|
+
research-method: multi-agent
|
|
8
|
+
clarification-iterations: 1
|
|
9
|
+
perspectives: [Maintainability, Technical-Debt, Developer-Experience]
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Codebase Pruning: Dependencies, Documentation, and Code Cleanup
|
|
13
|
+
|
|
14
|
+
**Design Spec**: [Implementation Spec](/docs/design/2025-12-09-codebase-pruning/spec.md)
|
|
15
|
+
|
|
16
|
+
## Context and Problem Statement
|
|
17
|
+
|
|
18
|
+
After the ClickHouse migration (v0.8.0), the codebase has accumulated:
|
|
19
|
+
|
|
20
|
+
1. **Unused dependencies**: httpx (never imported), polars (abandoned experiment), pyarrow (research-only)
|
|
21
|
+
2. **Orphaned documentation**: 18 planning documents from completed Oct 2025 phases
|
|
22
|
+
3. **Code duplication**: 60+ lines of repeated client lifecycle code across ClickHouse modules
|
|
23
|
+
4. **Deprecated API layer**: 304-line api.py marked for removal
|
|
24
|
+
|
|
25
|
+
This technical debt increases install size by 80+ MB, confuses navigation, and violates DRY principles.
|
|
26
|
+
|
|
27
|
+
## Decision Drivers
|
|
28
|
+
|
|
29
|
+
- **Install size**: 200 MB → 120 MB (40% reduction)
|
|
30
|
+
- **Codebase clarity**: Remove orphaned files that confuse AI assistants
|
|
31
|
+
- **DRY compliance**: Eliminate duplicate ClickHouse client lifecycle code
|
|
32
|
+
- **Breaking change acceptance**: User approved api.py removal
|
|
33
|
+
|
|
34
|
+
## Considered Options
|
|
35
|
+
|
|
36
|
+
1. **Quick wins only**: Dependencies + documentation archival
|
|
37
|
+
2. **Quick wins + code refactoring**: Above + ClickHouseClientMixin
|
|
38
|
+
3. **Full pruning** (SELECTED): All above + remove deprecated api.py
|
|
39
|
+
|
|
40
|
+
## Decision Outcome
|
|
41
|
+
|
|
42
|
+
**Chosen option**: Full pruning including api.py removal
|
|
43
|
+
|
|
44
|
+
### Consequences
|
|
45
|
+
|
|
46
|
+
**Good**:
|
|
47
|
+
|
|
48
|
+
- 80+ MB smaller install size
|
|
49
|
+
- 400+ lines of code removed
|
|
50
|
+
- Cleaner documentation structure
|
|
51
|
+
- DRY-compliant ClickHouse modules
|
|
52
|
+
|
|
53
|
+
**Bad**:
|
|
54
|
+
|
|
55
|
+
- api.py removal is breaking change for any external consumers
|
|
56
|
+
- Research scripts in docs/research/ will need manual pyarrow install
|
|
57
|
+
|
|
58
|
+
## Architecture
|
|
59
|
+
|
|
60
|
+
### Before/After Diagram
|
|
61
|
+
|
|
62
|
+
<!-- graph-easy source:
|
|
63
|
+
[ pyproject.toml ] -- httpx (unused) --> [ 1 MB waste ]
|
|
64
|
+
|
|
65
|
+
[ pyproject.toml ] -- polars (unused) --> [ 50 MB waste ]
|
|
66
|
+
[ pyproject.toml ] -- pyarrow (research) --> [ 30 MB waste ]
|
|
67
|
+
[ docs/plans/ ] -- 15 orphaned files --> [ 7,405 lines ]
|
|
68
|
+
[ clickhouse_*.py (4) ] -- duplicate lifecycle --> [ 60 lines ]
|
|
69
|
+
[ api.py ] -- deprecated --> [ 304 lines ]
|
|
70
|
+
-->
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
+------------------+ httpx (unused) +-------------+
|
|
74
|
+
| pyproject.toml | ----------------------> | 1 MB waste |
|
|
75
|
+
+------------------+ +-------------+
|
|
76
|
+
|
|
|
77
|
+
| polars (unused) +-------------+
|
|
78
|
+
+-------------------------------> | 50 MB waste |
|
|
79
|
+
| +-------------+
|
|
80
|
+
|
|
|
81
|
+
| pyarrow (research) +-------------+
|
|
82
|
+
+-------------------------------> | 30 MB waste |
|
|
83
|
+
+-------------+
|
|
84
|
+
|
|
85
|
+
+------------------+ 15 orphaned files +-------------+
|
|
86
|
+
| docs/plans/ | ----------------------> | 7,405 lines |
|
|
87
|
+
+------------------+ +-------------+
|
|
88
|
+
|
|
89
|
+
+------------------+ duplicate lifecycle +-------------+
|
|
90
|
+
|clickhouse_*.py(4)| ----------------------> | 60 lines |
|
|
91
|
+
+------------------+ +-------------+
|
|
92
|
+
|
|
93
|
+
+------------------+ deprecated +-------------+
|
|
94
|
+
| api.py | ----------------------> | 304 lines |
|
|
95
|
+
+------------------+ +-------------+
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### After Pruning
|
|
99
|
+
|
|
100
|
+
<!-- graph-easy source:
|
|
101
|
+
[ pyproject.toml ] -- clean deps --> [ 120 MB install ]
|
|
102
|
+
|
|
103
|
+
[ docs/archive/ ] -- preserved --> [ Historical context ]
|
|
104
|
+
[ clickhouse_base.py ] -- mixin --> [ DRY code ]
|
|
105
|
+
[ api.py ] -- removed --> [ Breaking change logged ]
|
|
106
|
+
-->
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
+------------------+ clean deps +----------------+
|
|
110
|
+
| pyproject.toml | ----------------------> | 120 MB install |
|
|
111
|
+
+------------------+ +----------------+
|
|
112
|
+
|
|
113
|
+
+------------------+ preserved +------------------+
|
|
114
|
+
| docs/archive/ | ----------------------> | Historical ctxt |
|
|
115
|
+
+------------------+ +------------------+
|
|
116
|
+
|
|
117
|
+
+--------------------+ mixin +----------+
|
|
118
|
+
| clickhouse_base.py | --------------------> | DRY code |
|
|
119
|
+
+--------------------+ +----------+
|
|
120
|
+
|
|
121
|
+
+------------------+ removed +-------------------+
|
|
122
|
+
| api.py | ----------------------> | Breaking chg log |
|
|
123
|
+
+------------------+ +-------------------+
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
## Implementation Details
|
|
127
|
+
|
|
128
|
+
### Phase A: Dependency Cleanup
|
|
129
|
+
|
|
130
|
+
- Remove: httpx, pyarrow, polars
|
|
131
|
+
- Move: tqdm to `[project.optional-dependencies] examples`
|
|
132
|
+
- Consolidate: dev dependencies to `[dependency-groups]`
|
|
133
|
+
|
|
134
|
+
### Phase B: Documentation Cleanup
|
|
135
|
+
|
|
136
|
+
- Update .gitignore: node_modules/, .lychee\*, .token-info.md
|
|
137
|
+
- Archive: 18 planning documents to docs/archive/
|
|
138
|
+
- Update: docs/README.md
|
|
139
|
+
|
|
140
|
+
### Phase C: Code Cleanup
|
|
141
|
+
|
|
142
|
+
- Create: `clickhouse_base.py` with `ClickHouseClientMixin`
|
|
143
|
+
- Refactor: 4 ClickHouse modules to use mixin
|
|
144
|
+
- Delete: `api.py` (304 lines)
|
|
145
|
+
- Update: `__init__.py` exports
|
|
146
|
+
|
|
147
|
+
## More Information
|
|
148
|
+
|
|
149
|
+
- Related: [ClickHouse Migration ADR](/docs/adr/2025-12-09-exness-clickhouse-migration.md)
|
|
150
|
+
- Source Plan: `~/.claude/plans/lively-splashing-steele.md`
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
adr: 2025-12-09-codebase-pruning
|
|
3
|
+
source: ~/.claude/plans/lively-splashing-steele.md
|
|
4
|
+
implementation-status: in_progress
|
|
5
|
+
phase: phase-1
|
|
6
|
+
last-updated: 2025-12-09
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Codebase Pruning Implementation Spec
|
|
10
|
+
|
|
11
|
+
**ADR**: [Codebase Pruning ADR](/docs/adr/2025-12-09-codebase-pruning.md)
|
|
12
|
+
|
|
13
|
+
## Overview
|
|
14
|
+
|
|
15
|
+
Full pruning of exness-data-preprocess codebase:
|
|
16
|
+
|
|
17
|
+
- 80+ MB dependency reduction
|
|
18
|
+
- 18 files archived
|
|
19
|
+
- 400+ lines of code removed
|
|
20
|
+
|
|
21
|
+
## Implementation Tasks
|
|
22
|
+
|
|
23
|
+
### Phase A: Dependency Cleanup ✅
|
|
24
|
+
|
|
25
|
+
**File**: `pyproject.toml`
|
|
26
|
+
|
|
27
|
+
- [x] Remove `httpx>=0.25.0` from dependencies
|
|
28
|
+
- [x] Remove `pyarrow>=16.0.0` from dependencies
|
|
29
|
+
- [x] Remove `polars>=1.34.0` from dependency-groups
|
|
30
|
+
- [x] Move `tqdm>=4.65.0` to `[project.optional-dependencies] examples`
|
|
31
|
+
- [x] Consolidate dev dependencies (remove conflicting `[project.optional-dependencies] dev`)
|
|
32
|
+
- [x] Verify: `uv sync` succeeds
|
|
33
|
+
- [x] Verify: `pytest tests/` passes (48/48)
|
|
34
|
+
|
|
35
|
+
### Phase B: Documentation Cleanup ✅
|
|
36
|
+
|
|
37
|
+
**Files**: `.gitignore`, `docs/archive/`, `docs/README.md`
|
|
38
|
+
|
|
39
|
+
- [x] Add to `.gitignore`: `node_modules/`, `.lychee*`, `.lycheecache`, `.token-info.md`
|
|
40
|
+
- [x] Create `docs/archive/` directory if not exists
|
|
41
|
+
- [x] Move 17 planning docs from `docs/plans/` to `docs/archive/`
|
|
42
|
+
- [x] Move 2 research docs from `docs/research/` to `docs/archive/`
|
|
43
|
+
- [x] Move `docs/phases/PHASE4_DRY_RUN_CONFIG_PLAN.yaml` to `docs/archive/`
|
|
44
|
+
- [x] Update `docs/README.md` to reflect archival
|
|
45
|
+
|
|
46
|
+
### Phase C: Code Cleanup ✅
|
|
47
|
+
|
|
48
|
+
**Files**: `clickhouse_base.py` (NEW), `clickhouse_*.py` (4), `api.py` (DELETE), `cli.py` (DELETE)
|
|
49
|
+
|
|
50
|
+
- [x] Create `src/exness_data_preprocess/clickhouse_base.py` with `ClickHouseClientMixin`
|
|
51
|
+
- [x] Refactor `clickhouse_manager.py` to use mixin
|
|
52
|
+
- [x] Refactor `clickhouse_gap_detector.py` to use mixin
|
|
53
|
+
- [x] Refactor `clickhouse_query_engine.py` to use mixin
|
|
54
|
+
- [x] Refactor `clickhouse_ohlc_generator.py` to use mixin
|
|
55
|
+
- [x] Delete `src/exness_data_preprocess/api.py` (304 lines)
|
|
56
|
+
- [x] Delete `src/exness_data_preprocess/cli.py` (252 lines, dependent on api.py)
|
|
57
|
+
- [x] Remove CLI entry point from `pyproject.toml`
|
|
58
|
+
- [x] Verify: `pytest tests/` passes (48/48)
|
|
59
|
+
|
|
60
|
+
## Success Criteria
|
|
61
|
+
|
|
62
|
+
| Metric | Before | After | Target |
|
|
63
|
+
| ------------------------ | ------- | ------- | --------------- |
|
|
64
|
+
| Dependencies (install) | ~200 MB | ~120 MB | 40% reduction |
|
|
65
|
+
| docs/plans/ files | 17 | 2 | 15 archived |
|
|
66
|
+
| api.py lines | 304 | 0 | Deleted |
|
|
67
|
+
| Duplicate lifecycle code | 60 | 15 | ~45 lines saved |
|
|
68
|
+
| Test count | 48 | 48 | No regression |
|
|
69
|
+
|
|
70
|
+
## Files to Modify
|
|
71
|
+
|
|
72
|
+
| File | Action |
|
|
73
|
+
| ----------------------------------------------- | ----------------------------------------- |
|
|
74
|
+
| `pyproject.toml` | Remove 3 deps, move tqdm, consolidate dev |
|
|
75
|
+
| `.gitignore` | Add node_modules, lychee patterns |
|
|
76
|
+
| `src/exness_data_preprocess/api.py` | **DELETE** |
|
|
77
|
+
| `src/exness_data_preprocess/__init__.py` | Remove api.py exports |
|
|
78
|
+
| `src/exness_data_preprocess/clickhouse_base.py` | **CREATE** mixin |
|
|
79
|
+
| `src/exness_data_preprocess/clickhouse_*.py` | Refactor to use mixin |
|
|
80
|
+
| `docs/plans/*.md` (15 files) | Move to archive |
|
|
81
|
+
| `docs/research/GAP_*.md` (2 files) | Move to archive |
|
|
82
|
+
| `docs/README.md` | Update after archival |
|
|
83
|
+
|
|
84
|
+
## Risk Assessment
|
|
85
|
+
|
|
86
|
+
| Item | Risk | Mitigation |
|
|
87
|
+
| -------------- | ------ | --------------------------------------- |
|
|
88
|
+
| Remove httpx | None | Zero imports confirmed |
|
|
89
|
+
| Remove pyarrow | Low | Research scripts need manual install |
|
|
90
|
+
| Remove polars | None | Zero imports confirmed |
|
|
91
|
+
| Archive docs | Low | git mv preserves history |
|
|
92
|
+
| Remove api.py | Medium | User approved; document breaking change |
|
|
93
|
+
| Mixin refactor | Low | Tests verify no regression |
|