gapless-crypto-data 4.0.2__tar.gz → 4.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.
Files changed (203) hide show
  1. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/PKG-INFO +7 -2
  2. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/README.md +6 -1
  3. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/pyproject.toml +1 -1
  4. gapless_crypto_data-4.0.3/src/gapless_crypto_data/__init__.py +92 -0
  5. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/uv.lock +1 -1
  6. gapless_crypto_data-4.0.2/src/gapless_crypto_data/__init__.py +0 -134
  7. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/.claude/settings.local.json +0 -0
  8. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/.gitattributes +0 -0
  9. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/.github/workflows/publish.yml +0 -0
  10. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/.github/workflows/release.yml +0 -0
  11. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/.gitignore +0 -0
  12. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/.pre-commit-config.yaml +0 -0
  13. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/.python-version +0 -0
  14. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/.releaserc.json +0 -0
  15. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/.sessions/.gitignore +0 -0
  16. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/AUTHORS.md +0 -0
  17. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/CHANGELOG.md +0 -0
  18. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/CLAUDE.md +0 -0
  19. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/CONTRIBUTING.md +0 -0
  20. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/DOCUMENTATION.md +0 -0
  21. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/Earthfile +0 -0
  22. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/LICENSE +0 -0
  23. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/MANIFEST.in +0 -0
  24. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/PROBE_USAGE_EXAMPLE.md +0 -0
  25. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/cliff-release-notes.toml +0 -0
  26. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/cliff.toml +0 -0
  27. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/CURRENT_ARCHITECTURE_STATUS.yaml +0 -0
  28. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/PYPI_PUBLISHING_CONFIGURATION.yaml +0 -0
  29. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/README.md +0 -0
  30. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/SDK_QUALITY_STANDARDS.yaml +0 -0
  31. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/SSOT_DOCUMENTATION_ARCHITECTURE.yaml +0 -0
  32. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/SSOT_PLANNING_SUMMARY.md +0 -0
  33. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/api/dual-parameter-enhancement.yaml +0 -0
  34. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/api/gapless-dataframe-enhancement.yaml +0 -0
  35. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/api/pruning-parquet-implementation.yaml +0 -0
  36. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/api/quick-start.md +0 -0
  37. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/architecture/DATA_FORMAT.md +0 -0
  38. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/architecture/OVERVIEW.md +0 -0
  39. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/architecture/decisions/0001-repository-split-clickhouse.md +0 -0
  40. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/architecture/decisions/0002-lychee-link-validation.md +0 -0
  41. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/architecture/decisions/0003-repository-housekeeping.md +0 -0
  42. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/architecture/decisions/0004-yaml-audit-redundancy-removal.md +0 -0
  43. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/architecture/decisions/0005-earthly-release-pipeline.md +0 -0
  44. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/audit/comprehensive-audit-findings.yaml +0 -0
  45. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/audit/comprehensive-audit-plan.yaml +0 -0
  46. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/development/CLI_MIGRATION_GUIDE.md +0 -0
  47. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/development/COMMANDS.md +0 -0
  48. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/development/PUBLISHING.md +0 -0
  49. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/development/SETUP.md +0 -0
  50. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/diagrams/01-collection-pipeline.mmd +0 -0
  51. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/diagrams/02-gap-filling.mmd +0 -0
  52. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/diagrams/03-multi-symbol-collection.mmd +0 -0
  53. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/diagrams/04-download-caching.mmd +0 -0
  54. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/diagrams/05-validation-flow.mmd +0 -0
  55. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/diagrams/README.md +0 -0
  56. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/guides/DATA_COLLECTION.md +0 -0
  57. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/guides/pypi-documentation.md +0 -0
  58. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/guides/python-api.md +0 -0
  59. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/milestones/archive/MILESTONE_v3.0.0.yaml +0 -0
  60. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/milestones/archive/MILESTONE_v3.1.0.yaml +0 -0
  61. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/plan/0001-v4.0.1-release/plan.md +0 -0
  62. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/plan/0002-lychee-link-validation/plan.md +0 -0
  63. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/plan/0003-repository-housekeeping/plan.md +0 -0
  64. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/plan/0004-yaml-audit-redundancy-removal/plan.md +0 -0
  65. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/plan/0005-earthly-release-pipeline/plan.md +0 -0
  66. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/release-notes.md +0 -0
  67. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/validation/OVERVIEW.md +0 -0
  68. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/validation/QUERY_PATTERNS.md +0 -0
  69. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/docs/validation/STORAGE.md +0 -0
  70. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/examples/README.md +0 -0
  71. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/examples/advanced_api_examples.py +0 -0
  72. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/examples/basic_data_collection.py +0 -0
  73. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/examples/cli_usage_examples.sh +0 -0
  74. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/examples/complete_workflow.py +0 -0
  75. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/examples/gap_filling_example.py +0 -0
  76. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/examples/safe_data_collection.py +0 -0
  77. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/examples/simple_api_examples.py +0 -0
  78. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/llms.txt +0 -0
  79. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/lychee.toml +0 -0
  80. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/package.json +0 -0
  81. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/scripts/publish-to-pypi.sh +0 -0
  82. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/scripts/test-pushover.sh +0 -0
  83. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/__probe__.py +0 -0
  84. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/api.py +0 -0
  85. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/cli.py +0 -0
  86. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/collectors/__init__.py +0 -0
  87. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/collectors/binance_public_data_collector.py +0 -0
  88. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/collectors/concurrent_collection_orchestrator.py +0 -0
  89. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/collectors/httpx_downloader.py +0 -0
  90. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/collectors/hybrid_url_generator.py +0 -0
  91. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/exceptions.py +0 -0
  92. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/gap_filling/__init__.py +0 -0
  93. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/gap_filling/safe_file_operations.py +0 -0
  94. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/gap_filling/universal_gap_filler.py +0 -0
  95. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/py.typed +0 -0
  96. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/resume/__init__.py +0 -0
  97. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/resume/intelligent_checkpointing.py +0 -0
  98. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.10.0.csv +0 -0
  99. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.10.0.metadata.json +0 -0
  100. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.5.0.csv +0 -0
  101. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20240101-20240102_v2.5.0.metadata.json +0 -0
  102. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
  103. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
  104. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250921-20250921_v2.10.0.csv +0 -0
  105. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250921-20250921_v2.10.0.metadata.json +0 -0
  106. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251002-20251002_v2.10.0.csv +0 -0
  107. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251002-20251002_v2.10.0.metadata.json +0 -0
  108. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251015-20251016_v2.10.0.csv +0 -0
  109. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251015-20251016_v2.10.0.metadata.json +0 -0
  110. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251016_v2.10.0.csv +0 -0
  111. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251016_v2.10.0.metadata.json +0 -0
  112. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251017_v2.10.0.csv +0 -0
  113. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251016-20251017_v2.10.0.metadata.json +0 -0
  114. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251017-20251017_v2.10.0.csv +0 -0
  115. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251017-20251017_v2.10.0.metadata.json +0 -0
  116. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251116-20251117_v2.10.0.csv +0 -0
  117. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251116-20251117_v2.10.0.metadata.json +0 -0
  118. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251117-20251117_v2.10.0.csv +0 -0
  119. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20251117-20251117_v2.10.0.metadata.json +0 -0
  120. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
  121. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
  122. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.10.0.csv +0 -0
  123. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.10.0.metadata.json +0 -0
  124. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.csv +0 -0
  125. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20240101-20240102_v2.5.0.metadata.json +0 -0
  126. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20250918-20250921_v2.10.0.csv +0 -0
  127. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20250918-20250921_v2.10.0.metadata.json +0 -0
  128. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251016-20251016_v2.10.0.csv +0 -0
  129. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251016-20251016_v2.10.0.metadata.json +0 -0
  130. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251017-20251017_v2.10.0.csv +0 -0
  131. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251017-20251017_v2.10.0.metadata.json +0 -0
  132. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251117-20251117_v2.10.0.csv +0 -0
  133. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1h_20251117-20251117_v2.10.0.metadata.json +0 -0
  134. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.csv +0 -0
  135. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-4h_20240101-20240101_v2.5.0.metadata.json +0 -0
  136. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230320-20230328_v2.10.0.csv +0 -0
  137. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230320-20230328_v2.10.0.metadata.json +0 -0
  138. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230323-20230325_v2.10.0.csv +0 -0
  139. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-5m_20230323-20230325_v2.10.0.metadata.json +0 -0
  140. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
  141. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
  142. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.10.0.csv +0 -0
  143. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.10.0.metadata.json +0 -0
  144. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
  145. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
  146. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251001-20251002_v2.10.0.csv +0 -0
  147. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251001-20251002_v2.10.0.metadata.json +0 -0
  148. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251014-20251016_v2.10.0.csv +0 -0
  149. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251014-20251016_v2.10.0.metadata.json +0 -0
  150. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251016_v2.10.0.csv +0 -0
  151. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251016_v2.10.0.metadata.json +0 -0
  152. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251017_v2.10.0.csv +0 -0
  153. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251015-20251017_v2.10.0.metadata.json +0 -0
  154. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251016-20251017_v2.10.0.csv +0 -0
  155. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251016-20251017_v2.10.0.metadata.json +0 -0
  156. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251115-20251117_v2.10.0.csv +0 -0
  157. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251115-20251117_v2.10.0.metadata.json +0 -0
  158. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251116-20251117_v2.10.0.csv +0 -0
  159. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-1h_20251116-20251117_v2.10.0.metadata.json +0 -0
  160. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.csv +0 -0
  161. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-4h_20240101-20240201_v2.5.0.metadata.json +0 -0
  162. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-5m_20230320-20230328_v2.10.0.csv +0 -0
  163. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_ETHUSDT-5m_20230320-20230328_v2.10.0.metadata.json +0 -0
  164. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1d_20250819-20250831_v2.5.0.csv +0 -0
  165. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1d_20250819-20250831_v2.5.0.metadata.json +0 -0
  166. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.csv +0 -0
  167. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/sample_data/binance_spot_SOLUSDT-1h_20240101-20240101_v2.5.0.metadata.json +0 -0
  168. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/utils/__init__.py +0 -0
  169. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/utils/error_handling.py +0 -0
  170. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/utils/etag_cache.py +0 -0
  171. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/utils/timeframe_constants.py +0 -0
  172. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/utils/timestamp_format_analyzer.py +0 -0
  173. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/validation/__init__.py +0 -0
  174. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/validation/csv_validator.py +0 -0
  175. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/validation/models.py +0 -0
  176. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/src/gapless_crypto_data/validation/storage.py +0 -0
  177. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/__init__.py +0 -0
  178. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/conftest.py +0 -0
  179. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/fixtures/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.10.0.csv +0 -0
  180. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/fixtures/test_data/binance_spot_BTCUSDT-1h_20240101-20240101_v2.10.0.metadata.json +0 -0
  181. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.10.0.csv +0 -0
  182. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.10.0.metadata.json +0 -0
  183. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/fixtures/test_data_large/binance_spot_BTCUSDT-1h_20140101-20240101_v2.10.0_gapped.csv.bak +0 -0
  184. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_1s_1d_gap_filling.py +0 -0
  185. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_api_edge_cases.py +0 -0
  186. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_atomic_operations.py +0 -0
  187. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_binance_collector.py +0 -0
  188. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_binance_collector_advanced.py +0 -0
  189. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_cli.py +0 -0
  190. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_cli_integration.py +0 -0
  191. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_concurrent_download.py +0 -0
  192. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_error_handling.py +0 -0
  193. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_etag_cache.py +0 -0
  194. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_gap_filler.py +0 -0
  195. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_gapless_validation_1d_2018_present.py +0 -0
  196. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_integration.py +0 -0
  197. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_monthly_to_daily_fallback.py +0 -0
  198. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_output_dir_dataframe_fix.py +0 -0
  199. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_package.py +0 -0
  200. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_probe_module.py +0 -0
  201. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_simple_api.py +0 -0
  202. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_timeframe_constants.py +0 -0
  203. {gapless_crypto_data-4.0.2 → gapless_crypto_data-4.0.3}/tests/test_validation_storage.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: gapless-crypto-data
3
- Version: 4.0.2
3
+ Version: 4.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
@@ -92,7 +92,12 @@ See [Data Format Specification](https://github.com/terrylica/gapless-crypto-data
92
92
 
93
93
  ## Supported Timeframes
94
94
 
95
- All Binance spot kline intervals: `1s`, `1m`, `3m`, `5m`, `15m`, `30m`, `1h`, `2h`, `4h`, `6h`, `8h`, `12h`, `1d`
95
+ All Binance spot kline intervals. Query dynamically:
96
+
97
+ ```python
98
+ import gapless_crypto_data as gcd
99
+ print(gcd.get_supported_timeframes())
100
+ ```
96
101
 
97
102
  ## API Reference
98
103
 
@@ -55,7 +55,12 @@ See [Data Format Specification](https://github.com/terrylica/gapless-crypto-data
55
55
 
56
56
  ## Supported Timeframes
57
57
 
58
- All Binance spot kline intervals: `1s`, `1m`, `3m`, `5m`, `15m`, `30m`, `1h`, `2h`, `4h`, `6h`, `8h`, `12h`, `1d`
58
+ All Binance spot kline intervals. Query dynamically:
59
+
60
+ ```python
61
+ import gapless_crypto_data as gcd
62
+ print(gcd.get_supported_timeframes())
63
+ ```
59
64
 
60
65
  ## API Reference
61
66
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "gapless-crypto-data"
3
- version = "4.0.2"
3
+ version = "4.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 = [
@@ -0,0 +1,92 @@
1
+ """
2
+ Gapless Crypto Data - Binance USDT spot market OHLCV collection with gap-free guarantee.
3
+
4
+ Scope:
5
+ - USDT spot pairs only (BTCUSDT, ETHUSDT, SOLUSDT, etc.)
6
+ - No futures, perpetuals, derivatives, or margin data
7
+
8
+ Capabilities:
9
+ - Bulk historical data via Binance Public Data Repository
10
+ - Microstructure-enriched kline format (OHLCV + order flow metrics)
11
+ - Gap detection and API-based filling
12
+ - All Binance spot kline intervals supported
13
+
14
+ Data Source:
15
+ https://data.binance.vision/data/spot/monthly/klines/
16
+
17
+ Usage:
18
+ import gapless_crypto_data as gcd
19
+
20
+ # Fetch data
21
+ df = gcd.fetch_data("BTCUSDT", timeframe="1h", limit=1000)
22
+ df = gcd.download("ETHUSDT", timeframe="4h", start="2024-01-01", end="2024-06-30")
23
+
24
+ # Discovery
25
+ symbols = gcd.get_supported_symbols()
26
+ timeframes = gcd.get_supported_timeframes()
27
+
28
+ # Gap filling
29
+ results = gcd.fill_gaps("./data")
30
+
31
+ # Class-based API
32
+ from gapless_crypto_data import BinancePublicDataCollector, UniversalGapFiller
33
+ collector = BinancePublicDataCollector()
34
+ result = collector.collect_timeframe_data("1h")
35
+ """
36
+
37
+ __version__ = "4.0.3"
38
+ __author__ = "Eon Labs"
39
+ __email__ = "terry@eonlabs.com"
40
+
41
+ # Core classes (advanced/power-user API)
42
+ # Enhanced DataFrame for domain-specific operations
43
+ # Convenience functions (simple/intuitive API)
44
+ # API-only probe hooks for AI coding agents
45
+ from . import __probe__
46
+ from .api import (
47
+ download,
48
+ fetch_data,
49
+ fill_gaps,
50
+ get_info,
51
+ get_supported_intervals,
52
+ get_supported_symbols,
53
+ get_supported_timeframes,
54
+ load_parquet,
55
+ save_parquet,
56
+ )
57
+ from .collectors.binance_public_data_collector import BinancePublicDataCollector
58
+ from .exceptions import (
59
+ DataCollectionError,
60
+ GapFillingError,
61
+ GaplessCryptoDataError,
62
+ NetworkError,
63
+ ValidationError,
64
+ )
65
+ from .gap_filling.safe_file_operations import AtomicCSVOperations, SafeCSVMerger
66
+ from .gap_filling.universal_gap_filler import UniversalGapFiller
67
+
68
+ __all__ = [
69
+ # Simple function-based API (recommended for most users)
70
+ "fetch_data",
71
+ "download",
72
+ "get_supported_symbols",
73
+ "get_supported_timeframes",
74
+ "get_supported_intervals", # Legacy compatibility
75
+ "fill_gaps",
76
+ "get_info",
77
+ "save_parquet",
78
+ "load_parquet",
79
+ # Advanced class-based API (for complex workflows)
80
+ "BinancePublicDataCollector",
81
+ "UniversalGapFiller",
82
+ "AtomicCSVOperations",
83
+ "SafeCSVMerger",
84
+ # Structured exception hierarchy (v3.2.0)
85
+ "GaplessCryptoDataError",
86
+ "DataCollectionError",
87
+ "ValidationError",
88
+ "NetworkError",
89
+ "GapFillingError",
90
+ # AI agent probe hooks
91
+ "__probe__",
92
+ ]
@@ -368,7 +368,7 @@ wheels = [
368
368
 
369
369
  [[package]]
370
370
  name = "gapless-crypto-data"
371
- version = "4.0.1"
371
+ version = "4.0.2"
372
372
  source = { editable = "." }
373
373
  dependencies = [
374
374
  { name = "duckdb" },
@@ -1,134 +0,0 @@
1
- """
2
- Gapless Crypto Data v4.0.1 - USDT spot market data collection with zero gaps guarantee
3
-
4
- Market Compatibility:
5
- - USDT SPOT PAIRS ONLY (BTCUSDT, ETHUSDT, SOLUSDT, etc.)
6
- - NO futures, perpetuals, or derivatives support
7
- - NO non-USDT pairs (BTC/ETH, etc.)
8
- - NO margin trading data
9
-
10
- Core Features:
11
- - Data collection via Binance public data repository (22x performance vs API calls)
12
- - Full 11-column microstructure format with order flow and liquidity metrics
13
- - Zero gaps guarantee through authentic API-first validation
14
- - UV-based Python tooling
15
- - Atomic file operations
16
- - Complete 13-timeframe support (1s, 1m, 3m, 5m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d)
17
- - Ultra-high frequency (1s) to daily (1d) data collection
18
- - Intelligent monthly-to-daily fallback for seamless recent data access
19
- - Gap detection and filling with authentic data only
20
- - CCXT-compatible dual parameter support (timeframe/interval)
21
- - Backward compatibility with 5-year deprecation period
22
-
23
- Data Source:
24
- Binance Spot Market: https://data.binance.vision/data/spot/monthly/klines/
25
- Market Type: SPOT only (no futures/derivatives)
26
- Supported Pairs: USDT-quoted spot pairs exclusively
27
-
28
- Usage:
29
- # Function-based API
30
- import gapless_crypto_data as gcd
31
-
32
- # Fetch recent data as standard pandas DataFrame
33
- df = gcd.fetch_data("BTCUSDT", timeframe="1h", limit=1000)
34
-
35
- # Standard pandas operations for analysis
36
- returns = df['close'].pct_change() # Returns calculation
37
- rolling_vol = df['close'].rolling(20).std() # Rolling volatility
38
- max_drawdown = (df['close'] / df['close'].cummax() - 1).min() # Drawdown
39
-
40
- # Resampling with pandas
41
- df_resampled = df.set_index('date').resample('4H').agg({
42
- 'open': 'first', 'high': 'max', 'low': 'min',
43
- 'close': 'last', 'volume': 'sum'
44
- })
45
-
46
- # Backward compatibility (legacy interval parameter)
47
- df = gcd.fetch_data("BTCUSDT", interval="1h", limit=1000) # DeprecationWarning
48
-
49
- # Download with date range
50
- df = gcd.download("ETHUSDT", timeframe="4h", start="2024-01-01", end="2024-06-30")
51
-
52
- # Get available symbols and timeframes
53
- symbols = gcd.get_supported_symbols()
54
- timeframes = gcd.get_supported_timeframes()
55
-
56
- # Fill gaps in existing data
57
- results = gcd.fill_gaps("./data")
58
-
59
- # Class-based API (for complex workflows)
60
- from gapless_crypto_data import BinancePublicDataCollector, UniversalGapFiller
61
-
62
- collector = BinancePublicDataCollector()
63
- result = collector.collect_timeframe_data("1h")
64
- df = result["dataframe"]
65
-
66
- CLI Usage (DEPRECATED - Will be removed in v4.0.0):
67
- ⚠️ The CLI is deprecated. Please use the Python API instead (see above).
68
-
69
- Legacy CLI (deprecated):
70
- uv run gapless-crypto-data --symbol SOLUSDT --timeframes 1s,1m,5m,1h,4h,1d
71
- uv run gapless-crypto-data --symbol BTCUSDT --timeframes 1s,6h,8h,12h,1d
72
- uv run gapless-crypto-data --fill-gaps --directory ./data
73
-
74
- Supported Symbols (USDT Spot Only):
75
- BTCUSDT, ETHUSDT, SOLUSDT, ADAUSDT, DOTUSDT, LINKUSDT, MATICUSDT,
76
- AVAXUSDT, ATOMUSDT, NEARUSDT, FTMUSDT, SANDUSDT, MANAUSDT, etc.
77
- """
78
-
79
- __version__ = "4.0.1"
80
- __author__ = "Eon Labs"
81
- __email__ = "terry@eonlabs.com"
82
-
83
- # Core classes (advanced/power-user API)
84
- # Enhanced DataFrame for domain-specific operations
85
- # Convenience functions (simple/intuitive API)
86
- # API-only probe hooks for AI coding agents
87
- from . import __probe__
88
- from .api import (
89
- download,
90
- fetch_data,
91
- fill_gaps,
92
- get_info,
93
- get_supported_intervals,
94
- get_supported_symbols,
95
- get_supported_timeframes,
96
- load_parquet,
97
- save_parquet,
98
- )
99
- from .collectors.binance_public_data_collector import BinancePublicDataCollector
100
- from .exceptions import (
101
- DataCollectionError,
102
- GapFillingError,
103
- GaplessCryptoDataError,
104
- NetworkError,
105
- ValidationError,
106
- )
107
- from .gap_filling.safe_file_operations import AtomicCSVOperations, SafeCSVMerger
108
- from .gap_filling.universal_gap_filler import UniversalGapFiller
109
-
110
- __all__ = [
111
- # Simple function-based API (recommended for most users)
112
- "fetch_data",
113
- "download",
114
- "get_supported_symbols",
115
- "get_supported_timeframes",
116
- "get_supported_intervals", # Legacy compatibility
117
- "fill_gaps",
118
- "get_info",
119
- "save_parquet",
120
- "load_parquet",
121
- # Advanced class-based API (for complex workflows)
122
- "BinancePublicDataCollector",
123
- "UniversalGapFiller",
124
- "AtomicCSVOperations",
125
- "SafeCSVMerger",
126
- # Structured exception hierarchy (v3.2.0)
127
- "GaplessCryptoDataError",
128
- "DataCollectionError",
129
- "ValidationError",
130
- "NetworkError",
131
- "GapFillingError",
132
- # AI agent probe hooks
133
- "__probe__",
134
- ]