gapless-crypto-data 5.0.2__tar.gz → 5.0.3__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-5.0.2 → gapless_crypto_data-5.0.3}/CHANGELOG.md +6 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/Earthfile +6 -4
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/PKG-INFO +1 -1
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/pyproject.toml +1 -1
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/scripts/test-pushover.sh +6 -4
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/__init__.py +1 -1
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/uv.lock +2 -2
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/.gitattributes +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/.github/workflows/publish.yml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/.github/workflows/release.yml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/.gitignore +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/.pre-commit-config.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/.python-version +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/.releaserc.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/.sessions/.gitignore +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/AUTHORS.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/CLAUDE.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/CONTRIBUTING.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/DOCUMENTATION.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/LICENSE +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/MANIFEST.in +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/PROBE_USAGE_EXAMPLE.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/README.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/cliff-release-notes.toml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/cliff.toml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/CURRENT_ARCHITECTURE_STATUS.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/PYPI_PUBLISHING_CONFIGURATION.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/README.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/SDK_QUALITY_STANDARDS.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/SSOT_DOCUMENTATION_ARCHITECTURE.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/SSOT_PLANNING_SUMMARY.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/api/dual-parameter-enhancement.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/api/gapless-dataframe-enhancement.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/api/pruning-parquet-implementation.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/api/quick-start.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/architecture/DATA_FORMAT.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/architecture/OVERVIEW.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/architecture/decisions/0001-repository-split-clickhouse.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/architecture/decisions/0002-lychee-link-validation.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/architecture/decisions/0003-repository-housekeeping.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/architecture/decisions/0004-yaml-audit-redundancy-removal.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/architecture/decisions/0005-earthly-release-pipeline.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/audit/comprehensive-audit-findings.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/audit/comprehensive-audit-plan.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/development/CLI_MIGRATION_GUIDE.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/development/COMMANDS.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/development/PUBLISHING.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/development/SETUP.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/diagrams/01-collection-pipeline.mmd +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/diagrams/02-gap-filling.mmd +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/diagrams/03-multi-symbol-collection.mmd +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/diagrams/04-download-caching.mmd +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/diagrams/05-validation-flow.mmd +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/diagrams/README.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/guides/DATA_COLLECTION.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/guides/pypi-documentation.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/guides/python-api.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/milestones/archive/MILESTONE_v3.0.0.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/milestones/archive/MILESTONE_v3.1.0.yaml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/plan/0001-v4.0.1-release/plan.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/plan/0002-lychee-link-validation/plan.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/plan/0003-repository-housekeeping/plan.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/plan/0004-yaml-audit-redundancy-removal/plan.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/plan/0005-earthly-release-pipeline/plan.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/release-notes.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/validation/OVERVIEW.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/validation/QUERY_PATTERNS.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/validation/STORAGE.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/examples/README.md +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/examples/advanced_api_examples.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/examples/basic_data_collection.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/examples/cli_usage_examples.sh +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/examples/complete_workflow.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/examples/gap_filling_example.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/examples/safe_data_collection.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/examples/simple_api_examples.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/llms.txt +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/lychee.toml +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/package.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/scripts/publish-to-pypi.sh +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/__probe__.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/api.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/cli.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/collectors/__init__.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/collectors/binance_public_data_collector.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/collectors/concurrent_collection_orchestrator.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/collectors/httpx_downloader.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/collectors/hybrid_url_generator.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/exceptions.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/gap_filling/__init__.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/gap_filling/safe_file_operations.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/gap_filling/universal_gap_filler.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/py.typed +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/resume/__init__.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/resume/intelligent_checkpointing.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.5.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250921-20250921_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250921-20250921_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251002-20251002_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251002-20251002_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251015-20251016_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251015-20251016_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251016_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251016_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251017_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251017_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251017-20251017_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251017-20251017_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251116-20251117_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251116-20251117_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251117-20251117_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251117-20251117_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20250918-20250921_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20250918-20250921_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251016-20251016_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251016-20251016_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251017-20251017_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251017-20251017_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251117-20251117_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251117-20251117_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230320-20230328_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230320-20230328_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230323-20230325_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230323-20230325_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251001-20251002_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251001-20251002_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251014-20251016_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251014-20251016_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251016_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251016_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251017_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251017_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251016-20251017_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251016-20251017_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251115-20251117_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251115-20251117_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251116-20251117_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251116-20251117_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-5m_20230320-20230328_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-5m_20230320-20230328_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/utils/__init__.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/utils/error_handling.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/utils/etag_cache.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/utils/timeframe_constants.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/utils/timestamp_format_analyzer.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/validation/__init__.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/validation/csv_validator.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/validation/models.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/validation/storage.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/__init__.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/conftest.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/fixtures/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/fixtures/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.10.0.csv +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.10.0.metadata.json +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.10.0_gapped.csv.bak +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_1s_1d_gap_filling.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_api_edge_cases.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_atomic_operations.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_binance_collector.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_binance_collector_advanced.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_cli.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_cli_integration.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_concurrent_download.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_error_handling.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_etag_cache.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_gap_filler.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_gapless_validation_1d_2018_present.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_integration.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_monthly_to_daily_fallback.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_output_dir_dataframe_fix.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_package.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_probe_module.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_simple_api.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_timeframe_constants.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_validation_storage.py +0 -0
- {gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tmp/.gitkeep +0 -0
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to gapless-crypto-data will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [5.0.3](https://github.com/terrylica/gapless-crypto-data/compare/v5.0.2...v5.0.3) (2026-10-16)
|
|
6
|
+
|
|
7
|
+
### Bug Fixes
|
|
8
|
+
|
|
9
|
+
* **notify:** pass the Pushover token and user key to curl on stdin, not argv ([12b462f](https://github.com/terrylica/gapless-crypto-data/commit/12b462f7dcadb73beaf333bcaa3058111e6b4d57))
|
|
10
|
+
|
|
5
11
|
## [5.0.2](https://github.com/terrylica/gapless-crypto-data/compare/v5.0.1...v5.0.2) (2026-08-31)
|
|
6
12
|
|
|
7
13
|
### Bug Fixes
|
|
@@ -76,11 +76,13 @@ pushover-notify:
|
|
|
76
76
|
FROM alpine:3.19
|
|
77
77
|
RUN apk add --no-cache curl
|
|
78
78
|
|
|
79
|
-
# Send Pushover notification
|
|
79
|
+
# Send Pushover notification. The token and user key reach curl as a config on stdin (-K -),
|
|
80
|
+
# never as arguments (argv is readable by `ps`). Pushover keys are alphanumeric; anything else
|
|
81
|
+
# is refused so it cannot break the config syntax.
|
|
80
82
|
RUN --no-cache --secret PUSHOVER_USER_KEY --secret PUSHOVER_APP_TOKEN \
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
83
|
+
case "$PUSHOVER_APP_TOKEN$PUSHOVER_USER_KEY" in *[!A-Za-z0-9]*) echo "Pushover key is not alphanumeric" >&2; exit 1 ;; esac && \
|
|
84
|
+
printf 'form-string = "token=%s"\nform-string = "user=%s"\n' "$PUSHOVER_APP_TOKEN" "$PUSHOVER_USER_KEY" \
|
|
85
|
+
| curl -s -K - \
|
|
84
86
|
--form-string "title=$TITLE" \
|
|
85
87
|
--form-string "message=Version $VERSION released successfully" \
|
|
86
88
|
--form-string "url=$RELEASE_URL" \
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gapless-crypto-data
|
|
3
|
-
Version: 5.0.
|
|
3
|
+
Version: 5.0.3
|
|
4
4
|
Summary: Cryptocurrency OHLCV data collection with gap-free guarantee. Retrieves microstructure-enriched kline data from Binance Public Data Repository with automatic gap detection and filling.
|
|
5
5
|
Project-URL: Homepage, https://github.com/terrylica/gapless-crypto-data
|
|
6
6
|
Project-URL: Documentation, https://github.com/terrylica/gapless-crypto-data#readme
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "gapless-crypto-data"
|
|
3
|
-
version = "5.0.
|
|
3
|
+
version = "5.0.3"
|
|
4
4
|
description = "Cryptocurrency OHLCV data collection with gap-free guarantee. Retrieves microstructure-enriched kline data from Binance Public Data Repository with automatic gap detection and filling."
|
|
5
5
|
readme = { file = "README.md", content-type = "text/markdown" }
|
|
6
6
|
authors = [
|
|
@@ -39,10 +39,12 @@ PUSHOVER_APP_TOKEN=$(doppler secrets get PUSHOVER_APP_TOKEN --project notificati
|
|
|
39
39
|
exit 1
|
|
40
40
|
}
|
|
41
41
|
|
|
42
|
-
# Send test notification
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
42
|
+
# Send test notification. The token and user key reach curl as a config on stdin (-K -), never
|
|
43
|
+
# as arguments (argv is readable by every user's `ps`); escaped for curl's config syntax.
|
|
44
|
+
PO_TOK=${PUSHOVER_APP_TOKEN//\\/\\\\}; PO_TOK=${PO_TOK//\"/\\\"}
|
|
45
|
+
PO_USR=${PUSHOVER_USER_KEY//\\/\\\\}; PO_USR=${PO_USR//\"/\\\"}
|
|
46
|
+
RESPONSE=$(printf 'form-string = "token=%s"\nform-string = "user=%s"\n' "$PO_TOK" "$PO_USR" \
|
|
47
|
+
| curl -s -K - \
|
|
46
48
|
--form-string "title=gapless-crypto-data Test" \
|
|
47
49
|
--form-string "message=Test notification for version $VERSION" \
|
|
48
50
|
--form-string "url=$RELEASE_URL" \
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
version = 1
|
|
2
|
-
revision =
|
|
2
|
+
revision = 5
|
|
3
3
|
requires-python = ">=3.9"
|
|
4
4
|
resolution-markers = [
|
|
5
5
|
"python_full_version >= '3.12'",
|
|
@@ -368,7 +368,7 @@ wheels = [
|
|
|
368
368
|
|
|
369
369
|
[[package]]
|
|
370
370
|
name = "gapless-crypto-data"
|
|
371
|
-
version = "5.0.
|
|
371
|
+
version = "5.0.3"
|
|
372
372
|
source = { editable = "." }
|
|
373
373
|
dependencies = [
|
|
374
374
|
{ name = "duckdb" },
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/CURRENT_ARCHITECTURE_STATUS.yaml
RENAMED
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/PYPI_PUBLISHING_CONFIGURATION.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/SSOT_DOCUMENTATION_ARCHITECTURE.yaml
RENAMED
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/api/dual-parameter-enhancement.yaml
RENAMED
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/api/gapless-dataframe-enhancement.yaml
RENAMED
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/api/pruning-parquet-implementation.yaml
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/audit/comprehensive-audit-findings.yaml
RENAMED
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/audit/comprehensive-audit-plan.yaml
RENAMED
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/development/CLI_MIGRATION_GUIDE.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/diagrams/01-collection-pipeline.mmd
RENAMED
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/diagrams/03-multi-symbol-collection.mmd
RENAMED
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/diagrams/04-download-caching.mmd
RENAMED
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/diagrams/05-validation-flow.mmd
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/docs/plan/0001-v4.0.1-release/plan.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/__probe__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/exceptions.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/resume/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/utils/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/utils/etag_cache.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/src/gapless_crypto_data/validation/models.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_binance_collector_advanced.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_monthly_to_daily_fallback.py
RENAMED
|
File without changes
|
{gapless_crypto_data-5.0.2 → gapless_crypto_data-5.0.3}/tests/test_output_dir_dataframe_fix.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|