gapless-crypto-data 2.7.0__tar.gz → 2.9.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.
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.gitignore +2 -0
- gapless_crypto_data-2.9.0/AUTHORS.md +72 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/CHANGELOG.md +21 -0
- gapless_crypto_data-2.9.0/CONTRIBUTING.md +244 -0
- gapless_crypto_data-2.9.0/MANIFEST.in +45 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/PKG-INFO +166 -66
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/README.md +161 -63
- gapless_crypto_data-2.9.0/docs/README.md +50 -0
- gapless_crypto_data-2.7.0/API_QUICK_START.md → gapless_crypto_data-2.9.0/docs/api/quick-start.md +1 -1
- gapless_crypto_data-2.7.0/PYPI_DOCUMENTATION.md → gapless_crypto_data-2.9.0/docs/guides/pypi-documentation.md +1 -1
- gapless_crypto_data-2.9.0/docs/milestones/MILESTONE_v2.7.0.yaml +157 -0
- gapless_crypto_data-2.9.0/docs/milestones/MILESTONE_v2.8.0.yaml +405 -0
- gapless_crypto_data-2.9.0/docs/milestones/MILESTONE_v2.9.0.yaml +396 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/advanced_api_examples.py +85 -2
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/pyproject.toml +10 -4
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/__init__.py +27 -20
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/api.py +5 -1
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/cli.py +5 -8
- gapless_crypto_data-2.9.0/src/gapless_crypto_data/collectors/__init__.py +21 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/collectors/binance_public_data_collector.py +349 -0
- gapless_crypto_data-2.9.0/src/gapless_crypto_data/collectors/concurrent_collection_orchestrator.py +407 -0
- gapless_crypto_data-2.9.0/src/gapless_crypto_data/collectors/httpx_downloader.py +395 -0
- gapless_crypto_data-2.9.0/src/gapless_crypto_data/collectors/hybrid_url_generator.py +316 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/gap_filling/universal_gap_filler.py +24 -6
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.5.0.csv +1 -1
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.5.0.metadata.json +2 -2
- gapless_crypto_data-2.9.0/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250917-20250917_v2.5.0.csv +12 -0
- gapless_crypto_data-2.9.0/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250917-20250917_v2.5.0.metadata.json +95 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.csv +1 -1
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.metadata.json +2 -2
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.5.0.csv +1 -1
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.5.0.metadata.json +2 -2
- gapless_crypto_data-2.9.0/tests/conftest.py +31 -0
- gapless_crypto_data-2.9.0/tests/test_1s_1d_gap_filling.py +659 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_cli.py +2 -2
- gapless_crypto_data-2.9.0/tests/test_concurrent_download.py +637 -0
- gapless_crypto_data-2.9.0/tests/test_gapless_validation_1d_2018_present.py +323 -0
- gapless_crypto_data-2.9.0/tests/test_monthly_to_daily_fallback.py +191 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/uv.lock +28 -1
- gapless_crypto_data-2.7.0/.gapless_checkpoints/joblib_cache/.gitignore +0 -2
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183058_36e7d2ec.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183100_7e130f98.json +0 -37
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183101_515b4690.json +0 -43
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183103_828c36f1.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183117_9d842ca2.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183118_35b71e32.json +0 -37
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183120_e201f120.json +0 -43
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183121_7aa0a4fd.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183841_63564a52.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183843_01458e87.json +0 -37
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183844_30f0e3c0.json +0 -43
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183846_8c1e44b4.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_184500_9b6f812c.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_184502_ae48d84a.json +0 -37
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_184503_b094245f.json +0 -43
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_184505_665fb523.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_184510_fe5d92fa.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_185913_7e391e5f.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_185915_9eeeaea3.json +0 -37
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_185917_315392bf.json +0 -43
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_185918_82d9bb0d.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_190357_002f8cec.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_190358_be23058d.json +0 -37
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_190359_c676ca87.json +0 -43
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_190401_ccacb147.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_190406_d23113c8.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_082857_e107aef5.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_082858_efc4eae8.json +0 -37
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_082859_84bade3f.json +0 -43
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_082901_45048a4f.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_082906_558fd67a.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_165431_faf24cde.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_165432_31d17ab7.json +0 -37
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_165434_307042ec.json +0 -43
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_165436_24c3242c.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_165443_a9650c4b.json +0 -36
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183058_36e7d2ec.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183100_7e130f98.json +0 -23
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183101_515b4690.json +0 -29
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183103_828c36f1.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183117_9d842ca2.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183118_35b71e32.json +0 -23
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183120_e201f120.json +0 -29
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183121_7aa0a4fd.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183841_63564a52.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183843_01458e87.json +0 -23
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183844_30f0e3c0.json +0 -29
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183846_8c1e44b4.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_184500_9b6f812c.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_184502_ae48d84a.json +0 -23
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_184503_b094245f.json +0 -29
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_184505_665fb523.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_184510_fe5d92fa.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_185913_7e391e5f.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_185915_9eeeaea3.json +0 -23
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_185917_315392bf.json +0 -29
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_185918_82d9bb0d.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_190357_002f8cec.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_190358_be23058d.json +0 -23
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_190359_c676ca87.json +0 -29
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_190401_ccacb147.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_190406_d23113c8.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_082857_e107aef5.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_082858_efc4eae8.json +0 -23
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_082859_84bade3f.json +0 -29
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_082901_45048a4f.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_082906_558fd67a.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_165431_faf24cde.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_165432_31d17ab7.json +0 -23
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_165434_307042ec.json +0 -29
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_165436_24c3242c.json +0 -22
- gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_165443_a9650c4b.json +0 -22
- gapless_crypto_data-2.7.0/src/gapless_crypto_data/collectors/__init__.py +0 -1
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.gitattributes +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.github/workflows/ci-cd.yml +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.github/workflows/publish.yml +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.pre-commit-config.yaml +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.python-version +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/CLAUDE.md +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/LICENSE +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/docs/CURRENT_ARCHITECTURE_STATUS.yaml +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/docs/PUBLISHING.md +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/docs/PYPI_PUBLISHING_CONFIGURATION.yaml +0 -0
- /gapless_crypto_data-2.7.0/docs/api-dual-parameter-enhancement.yaml → /gapless_crypto_data-2.9.0/docs/api/dual-parameter-enhancement.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.0.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.1.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.2.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.3.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.4.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.5.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.1.0.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.1.1.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.2.0.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.3.0.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.4.0.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.5.0.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.6.0.yaml +0 -0
- {gapless_crypto_data-2.7.0/docs → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.6.1.yaml +0 -0
- /gapless_crypto_data-2.7.0/RELEASE_NOTES.md → /gapless_crypto_data-2.9.0/docs/release-notes.md +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/README.md +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/basic_data_collection.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/cli_usage_examples.sh +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/complete_workflow.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/gap_filling_example.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/safe_data_collection.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/simple_api_examples.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/gap_filling/__init__.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/gap_filling/safe_file_operations.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/regression/__init__.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/regression/regression_detector.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/resume/__init__.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/resume/intelligent_checkpointing.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/streaming/__init__.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/streaming/memory_streaming.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/utils/__init__.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/utils/error_handling.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/__init__.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0/tests/fixtures}/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0/tests/fixtures}/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0/tests/fixtures}/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0/tests/fixtures}/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0/tests/fixtures}/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.5.0_gapped.csv.bak +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_atomic_operations.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_binance_collector.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_cli_integration.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_gap_filler.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_integration.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_output_dir_dataframe_fix.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_package.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_regression.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_simple_api.py +0 -0
- {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_streaming.py +0 -0
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Authors and Contributors
|
|
2
|
+
|
|
3
|
+
This file lists the people who have contributed to the gapless-crypto-data project.
|
|
4
|
+
|
|
5
|
+
## Project Maintainers
|
|
6
|
+
|
|
7
|
+
**Terry Li** - *Project Lead & Primary Developer*
|
|
8
|
+
- Email: terry@eonlabs.com
|
|
9
|
+
- GitHub: [@terryli](https://github.com/terryli)
|
|
10
|
+
- Organization: [Eon Labs](https://github.com/Eon-Labs)
|
|
11
|
+
|
|
12
|
+
## Core Development Team
|
|
13
|
+
|
|
14
|
+
**Eon Labs Team** - *Development & Maintenance*
|
|
15
|
+
- Organization: [Eon Labs](https://github.com/Eon-Labs)
|
|
16
|
+
- Focus: Quantitative trading infrastructure and machine learning for financial markets
|
|
17
|
+
|
|
18
|
+
## Contributors
|
|
19
|
+
|
|
20
|
+
This project welcomes contributions from the community. All contributors who submit pull requests, report issues, or provide feedback are acknowledged here.
|
|
21
|
+
|
|
22
|
+
### How to Be Listed
|
|
23
|
+
|
|
24
|
+
Contributors are automatically included when they:
|
|
25
|
+
- Submit merged pull requests
|
|
26
|
+
- Report and help resolve issues
|
|
27
|
+
- Provide significant feedback or suggestions
|
|
28
|
+
- Contribute to documentation
|
|
29
|
+
|
|
30
|
+
### Contribution Types
|
|
31
|
+
|
|
32
|
+
- **Code Contributors**: Direct code contributions via pull requests
|
|
33
|
+
- **Documentation Contributors**: Documentation improvements and examples
|
|
34
|
+
- **Issue Reporters**: Bug reports and feature requests
|
|
35
|
+
- **Community Contributors**: Support, feedback, and community building
|
|
36
|
+
|
|
37
|
+
## Acknowledgments
|
|
38
|
+
|
|
39
|
+
### Third-Party Libraries
|
|
40
|
+
|
|
41
|
+
This project builds upon excellent open-source libraries:
|
|
42
|
+
- **pandas** - Data manipulation and analysis
|
|
43
|
+
- **httpx** - Async HTTP client for Python
|
|
44
|
+
- **polars** - Fast DataFrames for Python
|
|
45
|
+
- **joblib** - Lightweight pipelining and caching
|
|
46
|
+
- **pyarrow** - Columnar in-memory analytics
|
|
47
|
+
- **pyod** - Outlier detection algorithms
|
|
48
|
+
|
|
49
|
+
### Data Sources
|
|
50
|
+
|
|
51
|
+
- **Binance** - Public data repository and API endpoints
|
|
52
|
+
- Community feedback and testing from quantitative trading developers
|
|
53
|
+
|
|
54
|
+
### Development Tools
|
|
55
|
+
|
|
56
|
+
- **UV** - Modern Python package management
|
|
57
|
+
- **Ruff** - Fast Python linter and formatter
|
|
58
|
+
- **pytest** - Testing framework
|
|
59
|
+
- **pre-commit** - Git hook management
|
|
60
|
+
- **GitHub Actions** - Continuous integration and deployment
|
|
61
|
+
|
|
62
|
+
## Contact
|
|
63
|
+
|
|
64
|
+
For questions about contributions or to discuss the project:
|
|
65
|
+
|
|
66
|
+
- **Project Issues**: [GitHub Issues](https://github.com/Eon-Labs/gapless-crypto-data/issues)
|
|
67
|
+
- **Email**: terry@eonlabs.com
|
|
68
|
+
- **Organization**: [Eon Labs](https://github.com/Eon-Labs)
|
|
69
|
+
|
|
70
|
+
## License
|
|
71
|
+
|
|
72
|
+
All contributions to this project are made under the MIT License. See [LICENSE](LICENSE) for details.
|
|
@@ -5,6 +5,27 @@ All notable changes to gapless-crypto-data will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [2.7.0] - 2025-09-18
|
|
9
|
+
|
|
10
|
+
### CCXT-Compatible Dual Parameter Support
|
|
11
|
+
|
|
12
|
+
#### Dual Parameter Implementation
|
|
13
|
+
- **CCXT ecosystem compatibility** - `timeframe` parameter aligns with cryptocurrency exchange library standards
|
|
14
|
+
- **Backward compatibility** - `interval` parameter maintained with 5-year deprecation period
|
|
15
|
+
- **Exception-only validation** - No fallbacks or failsafes, immediate ValueError for invalid parameter combinations
|
|
16
|
+
- **Community-proven patterns** - PEP 387 compliant implementation following Python backward compatibility policy
|
|
17
|
+
|
|
18
|
+
#### API Changes
|
|
19
|
+
- `fetch_data()` - Supports both `timeframe` (preferred) and `interval` (legacy) parameters
|
|
20
|
+
- `download()` - Supports both `timeframe` (preferred) and `interval` (legacy) parameters
|
|
21
|
+
- `get_supported_intervals()` - Legacy alias with DeprecationWarning, use `get_supported_timeframes()`
|
|
22
|
+
- **Zero breaking changes** - All existing code continues to work with deprecation warnings
|
|
23
|
+
|
|
24
|
+
#### Documentation
|
|
25
|
+
- **OpenAPI 3.1.1 specification** - Machine-readable API documentation with dual parameter support
|
|
26
|
+
- **Migration guidance** - Examples and patterns for transitioning to CCXT-compatible parameters
|
|
27
|
+
- **Architecture status updated** - Canonical reference updated to v2.7.0
|
|
28
|
+
|
|
8
29
|
## [2.6.0] - 2025-09-18
|
|
9
30
|
|
|
10
31
|
### ✨ Major API Enhancement: Dual API Architecture
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
# Contributing to Gapless Crypto Data
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to gapless-crypto-data! This document provides guidelines for contributing to the project.
|
|
4
|
+
|
|
5
|
+
## Development Setup
|
|
6
|
+
|
|
7
|
+
### Prerequisites
|
|
8
|
+
|
|
9
|
+
- Python 3.9+
|
|
10
|
+
- [UV package manager](https://docs.astral.sh/uv/getting-started/installation/)
|
|
11
|
+
- Git
|
|
12
|
+
|
|
13
|
+
### Environment Setup
|
|
14
|
+
|
|
15
|
+
1. **Fork and clone the repository:**
|
|
16
|
+
```bash
|
|
17
|
+
git clone https://github.com/your-username/gapless-crypto-data.git
|
|
18
|
+
cd gapless-crypto-data
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
2. **Set up development environment:**
|
|
22
|
+
```bash
|
|
23
|
+
# Create virtual environment
|
|
24
|
+
uv venv
|
|
25
|
+
|
|
26
|
+
# Activate virtual environment
|
|
27
|
+
source .venv/bin/activate # macOS/Linux
|
|
28
|
+
# .venv\Scripts\activate # Windows
|
|
29
|
+
|
|
30
|
+
# Install dependencies
|
|
31
|
+
uv sync --dev
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
3. **Install pre-commit hooks (mandatory):**
|
|
35
|
+
```bash
|
|
36
|
+
uv run pre-commit install
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## Development Workflow
|
|
40
|
+
|
|
41
|
+
### Before Making Changes
|
|
42
|
+
|
|
43
|
+
1. **Create a feature branch:**
|
|
44
|
+
```bash
|
|
45
|
+
git checkout -b feature/your-feature-name
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
2. **Verify setup:**
|
|
49
|
+
```bash
|
|
50
|
+
# Run tests
|
|
51
|
+
uv run pytest
|
|
52
|
+
|
|
53
|
+
# Check code formatting
|
|
54
|
+
uv run ruff format --check .
|
|
55
|
+
|
|
56
|
+
# Check linting
|
|
57
|
+
uv run ruff check .
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Making Changes
|
|
61
|
+
|
|
62
|
+
1. **Code formatting and linting:**
|
|
63
|
+
```bash
|
|
64
|
+
# Format code
|
|
65
|
+
uv run ruff format .
|
|
66
|
+
|
|
67
|
+
# Fix linting issues
|
|
68
|
+
uv run ruff check --fix .
|
|
69
|
+
|
|
70
|
+
# Type checking
|
|
71
|
+
uv run mypy src/
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
2. **Running tests:**
|
|
75
|
+
```bash
|
|
76
|
+
# Run all tests
|
|
77
|
+
uv run pytest
|
|
78
|
+
|
|
79
|
+
# Run specific test file
|
|
80
|
+
uv run pytest tests/test_specific.py -v
|
|
81
|
+
|
|
82
|
+
# Run with coverage
|
|
83
|
+
uv run pytest --cov=src/gapless_crypto_data
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
3. **Pre-commit validation:**
|
|
87
|
+
```bash
|
|
88
|
+
# Run all pre-commit hooks
|
|
89
|
+
uv run pre-commit run --all-files
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Code Standards
|
|
93
|
+
|
|
94
|
+
### Code Style
|
|
95
|
+
|
|
96
|
+
- **Formatting**: Code is automatically formatted using Ruff
|
|
97
|
+
- **Linting**: All code must pass Ruff linting checks
|
|
98
|
+
- **Type hints**: Use type hints for all public APIs
|
|
99
|
+
- **Docstrings**: Follow Google-style docstrings for all public functions and classes
|
|
100
|
+
|
|
101
|
+
### Testing
|
|
102
|
+
|
|
103
|
+
- **Test coverage**: Aim for high test coverage on new features
|
|
104
|
+
- **Test structure**: Place tests in `tests/` directory
|
|
105
|
+
- **Test data**: Use fixtures in `tests/fixtures/` for test data
|
|
106
|
+
- **Async tests**: Mark async tests with `@pytest.mark.asyncio`
|
|
107
|
+
|
|
108
|
+
### Documentation
|
|
109
|
+
|
|
110
|
+
- **API documentation**: Update docstrings for any API changes
|
|
111
|
+
- **README updates**: Update README.md if adding new features
|
|
112
|
+
- **Changelog**: Add entries to CHANGELOG.md for significant changes
|
|
113
|
+
|
|
114
|
+
## Submitting Changes
|
|
115
|
+
|
|
116
|
+
### Pull Request Process
|
|
117
|
+
|
|
118
|
+
1. **Ensure all checks pass:**
|
|
119
|
+
```bash
|
|
120
|
+
uv run pytest
|
|
121
|
+
uv run ruff format --check .
|
|
122
|
+
uv run ruff check .
|
|
123
|
+
uv run mypy src/
|
|
124
|
+
uv run pre-commit run --all-files
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
2. **Commit changes:**
|
|
128
|
+
```bash
|
|
129
|
+
git add .
|
|
130
|
+
git commit -m "feat: add new feature description"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
3. **Push to your fork:**
|
|
134
|
+
```bash
|
|
135
|
+
git push origin feature/your-feature-name
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
4. **Create pull request:**
|
|
139
|
+
- Navigate to the GitHub repository
|
|
140
|
+
- Click "New Pull Request"
|
|
141
|
+
- Provide clear description of changes
|
|
142
|
+
- Reference any related issues
|
|
143
|
+
|
|
144
|
+
### Commit Message Format
|
|
145
|
+
|
|
146
|
+
Use conventional commit format:
|
|
147
|
+
|
|
148
|
+
- `feat:` - New features
|
|
149
|
+
- `fix:` - Bug fixes
|
|
150
|
+
- `docs:` - Documentation changes
|
|
151
|
+
- `style:` - Code style changes (formatting, etc.)
|
|
152
|
+
- `refactor:` - Code refactoring
|
|
153
|
+
- `test:` - Adding or updating tests
|
|
154
|
+
- `chore:` - Maintenance tasks
|
|
155
|
+
|
|
156
|
+
Examples:
|
|
157
|
+
```
|
|
158
|
+
feat: add concurrent download manager
|
|
159
|
+
fix: resolve gap detection edge case
|
|
160
|
+
docs: update API documentation
|
|
161
|
+
test: add tests for hybrid URL generator
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
## Issue Reporting
|
|
165
|
+
|
|
166
|
+
### Bug Reports
|
|
167
|
+
|
|
168
|
+
When reporting bugs, please include:
|
|
169
|
+
|
|
170
|
+
- **Environment details**: Python version, OS, package version
|
|
171
|
+
- **Reproduction steps**: Clear steps to reproduce the issue
|
|
172
|
+
- **Expected vs actual behavior**: What you expected vs what happened
|
|
173
|
+
- **Error messages**: Include full error messages and stack traces
|
|
174
|
+
- **Sample code**: Minimal code that reproduces the issue
|
|
175
|
+
|
|
176
|
+
### Feature Requests
|
|
177
|
+
|
|
178
|
+
For feature requests, please include:
|
|
179
|
+
|
|
180
|
+
- **Use case**: Describe the problem you're trying to solve
|
|
181
|
+
- **Proposed solution**: Your suggested approach
|
|
182
|
+
- **Alternatives considered**: Other solutions you've considered
|
|
183
|
+
- **Additional context**: Any other relevant information
|
|
184
|
+
|
|
185
|
+
## Code Review Process
|
|
186
|
+
|
|
187
|
+
### Review Criteria
|
|
188
|
+
|
|
189
|
+
Pull requests are reviewed for:
|
|
190
|
+
|
|
191
|
+
- **Functionality**: Does the code work as intended?
|
|
192
|
+
- **Code quality**: Is the code well-structured and maintainable?
|
|
193
|
+
- **Tests**: Are there adequate tests for the changes?
|
|
194
|
+
- **Documentation**: Is documentation updated appropriately?
|
|
195
|
+
- **Compatibility**: Does it maintain backward compatibility?
|
|
196
|
+
|
|
197
|
+
### Review Timeline
|
|
198
|
+
|
|
199
|
+
- **Initial review**: Within 1-2 business days
|
|
200
|
+
- **Follow-up**: Based on complexity and reviewer availability
|
|
201
|
+
- **Merge**: After approval and passing all checks
|
|
202
|
+
|
|
203
|
+
## Development Guidelines
|
|
204
|
+
|
|
205
|
+
### Adding New Features
|
|
206
|
+
|
|
207
|
+
1. **Design**: Consider the API design and backward compatibility
|
|
208
|
+
2. **Implementation**: Follow existing patterns and conventions
|
|
209
|
+
3. **Testing**: Add comprehensive tests for new functionality
|
|
210
|
+
4. **Documentation**: Update relevant documentation
|
|
211
|
+
5. **Examples**: Add usage examples if appropriate
|
|
212
|
+
|
|
213
|
+
### Performance Considerations
|
|
214
|
+
|
|
215
|
+
- **Efficiency**: Consider performance implications of changes
|
|
216
|
+
- **Memory usage**: Be mindful of memory consumption
|
|
217
|
+
- **Concurrency**: Ensure thread safety where applicable
|
|
218
|
+
- **Testing**: Include performance tests for critical paths
|
|
219
|
+
|
|
220
|
+
### Security Considerations
|
|
221
|
+
|
|
222
|
+
- **Input validation**: Validate all user inputs
|
|
223
|
+
- **Data handling**: Handle sensitive data appropriately
|
|
224
|
+
- **Dependencies**: Keep dependencies up to date
|
|
225
|
+
- **Secrets**: Never commit secrets or API keys
|
|
226
|
+
|
|
227
|
+
## Getting Help
|
|
228
|
+
|
|
229
|
+
### Communication Channels
|
|
230
|
+
|
|
231
|
+
- **GitHub Issues**: For bug reports and feature requests
|
|
232
|
+
- **GitHub Discussions**: For questions and general discussion
|
|
233
|
+
- **Email**: technical questions to terry@eonlabs.com
|
|
234
|
+
|
|
235
|
+
### Resources
|
|
236
|
+
|
|
237
|
+
- **Documentation**: [Project README](README.md)
|
|
238
|
+
- **API Reference**: See docstrings in source code
|
|
239
|
+
- **Examples**: Check `examples/` directory
|
|
240
|
+
- **Tests**: Review existing tests for usage patterns
|
|
241
|
+
|
|
242
|
+
## License
|
|
243
|
+
|
|
244
|
+
By contributing to gapless-crypto-data, you agree that your contributions will be licensed under the MIT License.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Include essential project files
|
|
2
|
+
include README.md
|
|
3
|
+
include LICENSE
|
|
4
|
+
include CHANGELOG.md
|
|
5
|
+
include pyproject.toml
|
|
6
|
+
include .python-version
|
|
7
|
+
|
|
8
|
+
# Include documentation
|
|
9
|
+
recursive-include docs *.md *.yaml *.yml
|
|
10
|
+
exclude docs/guides/pypi-documentation.md
|
|
11
|
+
|
|
12
|
+
# Include examples
|
|
13
|
+
recursive-include examples *.py *.sh *.md
|
|
14
|
+
|
|
15
|
+
# Include tests (but exclude from wheel)
|
|
16
|
+
recursive-include tests *.py
|
|
17
|
+
|
|
18
|
+
# Include configuration files
|
|
19
|
+
include .pre-commit-config.yaml
|
|
20
|
+
|
|
21
|
+
# Exclude development and cache files
|
|
22
|
+
global-exclude __pycache__
|
|
23
|
+
global-exclude *.py[co]
|
|
24
|
+
global-exclude .DS_Store
|
|
25
|
+
global-exclude *.so
|
|
26
|
+
global-exclude .git*
|
|
27
|
+
exclude .gitignore
|
|
28
|
+
exclude .gitattributes
|
|
29
|
+
|
|
30
|
+
# Exclude build and distribution artifacts
|
|
31
|
+
global-exclude *.egg-info
|
|
32
|
+
global-exclude build
|
|
33
|
+
global-exclude dist
|
|
34
|
+
global-exclude .tox
|
|
35
|
+
global-exclude .coverage
|
|
36
|
+
global-exclude .pytest_cache
|
|
37
|
+
global-exclude .mypy_cache
|
|
38
|
+
global-exclude .ruff_cache
|
|
39
|
+
|
|
40
|
+
# Exclude development directories and checkpoints
|
|
41
|
+
exclude test_output
|
|
42
|
+
exclude .gapless_checkpoints
|
|
43
|
+
|
|
44
|
+
# Exclude virtual environment
|
|
45
|
+
exclude .venv
|