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.
Files changed (186) hide show
  1. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.gitignore +2 -0
  2. gapless_crypto_data-2.9.0/AUTHORS.md +72 -0
  3. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/CHANGELOG.md +21 -0
  4. gapless_crypto_data-2.9.0/CONTRIBUTING.md +244 -0
  5. gapless_crypto_data-2.9.0/MANIFEST.in +45 -0
  6. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/PKG-INFO +166 -66
  7. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/README.md +161 -63
  8. gapless_crypto_data-2.9.0/docs/README.md +50 -0
  9. gapless_crypto_data-2.7.0/API_QUICK_START.md → gapless_crypto_data-2.9.0/docs/api/quick-start.md +1 -1
  10. gapless_crypto_data-2.7.0/PYPI_DOCUMENTATION.md → gapless_crypto_data-2.9.0/docs/guides/pypi-documentation.md +1 -1
  11. gapless_crypto_data-2.9.0/docs/milestones/MILESTONE_v2.7.0.yaml +157 -0
  12. gapless_crypto_data-2.9.0/docs/milestones/MILESTONE_v2.8.0.yaml +405 -0
  13. gapless_crypto_data-2.9.0/docs/milestones/MILESTONE_v2.9.0.yaml +396 -0
  14. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/advanced_api_examples.py +85 -2
  15. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/pyproject.toml +10 -4
  16. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/__init__.py +27 -20
  17. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/api.py +5 -1
  18. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/cli.py +5 -8
  19. gapless_crypto_data-2.9.0/src/gapless_crypto_data/collectors/__init__.py +21 -0
  20. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/collectors/binance_public_data_collector.py +349 -0
  21. gapless_crypto_data-2.9.0/src/gapless_crypto_data/collectors/concurrent_collection_orchestrator.py +407 -0
  22. gapless_crypto_data-2.9.0/src/gapless_crypto_data/collectors/httpx_downloader.py +395 -0
  23. gapless_crypto_data-2.9.0/src/gapless_crypto_data/collectors/hybrid_url_generator.py +316 -0
  24. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/gap_filling/universal_gap_filler.py +24 -6
  25. {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
  26. {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
  27. gapless_crypto_data-2.9.0/src/gapless_crypto_data/sample_data/binance_spot_BTCUSDT-1d_20250917-20250917_v2.5.0.csv +12 -0
  28. 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
  29. {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
  30. {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
  31. {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
  32. {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
  33. gapless_crypto_data-2.9.0/tests/conftest.py +31 -0
  34. gapless_crypto_data-2.9.0/tests/test_1s_1d_gap_filling.py +659 -0
  35. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_cli.py +2 -2
  36. gapless_crypto_data-2.9.0/tests/test_concurrent_download.py +637 -0
  37. gapless_crypto_data-2.9.0/tests/test_gapless_validation_1d_2018_present.py +323 -0
  38. gapless_crypto_data-2.9.0/tests/test_monthly_to_daily_fallback.py +191 -0
  39. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/uv.lock +28 -1
  40. gapless_crypto_data-2.7.0/.gapless_checkpoints/joblib_cache/.gitignore +0 -2
  41. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183058_36e7d2ec.json +0 -36
  42. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183100_7e130f98.json +0 -37
  43. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183101_515b4690.json +0 -43
  44. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183103_828c36f1.json +0 -36
  45. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183117_9d842ca2.json +0 -36
  46. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183118_35b71e32.json +0 -37
  47. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183120_e201f120.json +0 -43
  48. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183121_7aa0a4fd.json +0 -36
  49. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183841_63564a52.json +0 -36
  50. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183843_01458e87.json +0 -37
  51. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183844_30f0e3c0.json +0 -43
  52. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_183846_8c1e44b4.json +0 -36
  53. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_184500_9b6f812c.json +0 -36
  54. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_184502_ae48d84a.json +0 -37
  55. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_184503_b094245f.json +0 -43
  56. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_184505_665fb523.json +0 -36
  57. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_184510_fe5d92fa.json +0 -36
  58. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_185913_7e391e5f.json +0 -36
  59. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_185915_9eeeaea3.json +0 -37
  60. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_185917_315392bf.json +0 -43
  61. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_185918_82d9bb0d.json +0 -36
  62. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_190357_002f8cec.json +0 -36
  63. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_190358_be23058d.json +0 -37
  64. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_190359_c676ca87.json +0 -43
  65. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_190401_ccacb147.json +0 -36
  66. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250917_190406_d23113c8.json +0 -36
  67. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_082857_e107aef5.json +0 -36
  68. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_082858_efc4eae8.json +0 -37
  69. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_082859_84bade3f.json +0 -43
  70. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_082901_45048a4f.json +0 -36
  71. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_082906_558fd67a.json +0 -36
  72. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_165431_faf24cde.json +0 -36
  73. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_165432_31d17ab7.json +0 -37
  74. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_165434_307042ec.json +0 -43
  75. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_165436_24c3242c.json +0 -36
  76. gapless_crypto_data-2.7.0/.gapless_checkpoints/progress_report_20250918_165443_a9650c4b.json +0 -36
  77. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183058_36e7d2ec.json +0 -22
  78. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183100_7e130f98.json +0 -23
  79. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183101_515b4690.json +0 -29
  80. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183103_828c36f1.json +0 -22
  81. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183117_9d842ca2.json +0 -22
  82. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183118_35b71e32.json +0 -23
  83. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183120_e201f120.json +0 -29
  84. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183121_7aa0a4fd.json +0 -22
  85. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183841_63564a52.json +0 -22
  86. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183843_01458e87.json +0 -23
  87. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183844_30f0e3c0.json +0 -29
  88. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_183846_8c1e44b4.json +0 -22
  89. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_184500_9b6f812c.json +0 -22
  90. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_184502_ae48d84a.json +0 -23
  91. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_184503_b094245f.json +0 -29
  92. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_184505_665fb523.json +0 -22
  93. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_184510_fe5d92fa.json +0 -22
  94. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_185913_7e391e5f.json +0 -22
  95. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_185915_9eeeaea3.json +0 -23
  96. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_185917_315392bf.json +0 -29
  97. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_185918_82d9bb0d.json +0 -22
  98. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_190357_002f8cec.json +0 -22
  99. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_190358_be23058d.json +0 -23
  100. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_190359_c676ca87.json +0 -29
  101. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_190401_ccacb147.json +0 -22
  102. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250917_190406_d23113c8.json +0 -22
  103. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_082857_e107aef5.json +0 -22
  104. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_082858_efc4eae8.json +0 -23
  105. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_082859_84bade3f.json +0 -29
  106. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_082901_45048a4f.json +0 -22
  107. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_082906_558fd67a.json +0 -22
  108. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_165431_faf24cde.json +0 -22
  109. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_165432_31d17ab7.json +0 -23
  110. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_165434_307042ec.json +0 -29
  111. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_165436_24c3242c.json +0 -22
  112. gapless_crypto_data-2.7.0/.gapless_checkpoints/session_20250918_165443_a9650c4b.json +0 -22
  113. gapless_crypto_data-2.7.0/src/gapless_crypto_data/collectors/__init__.py +0 -1
  114. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.gitattributes +0 -0
  115. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.github/workflows/ci-cd.yml +0 -0
  116. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.github/workflows/publish.yml +0 -0
  117. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.pre-commit-config.yaml +0 -0
  118. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/.python-version +0 -0
  119. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/CLAUDE.md +0 -0
  120. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/LICENSE +0 -0
  121. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/docs/CURRENT_ARCHITECTURE_STATUS.yaml +0 -0
  122. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/docs/PUBLISHING.md +0 -0
  123. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/docs/PYPI_PUBLISHING_CONFIGURATION.yaml +0 -0
  124. /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
  125. {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.0.yaml +0 -0
  126. {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.1.yaml +0 -0
  127. {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.2.yaml +0 -0
  128. {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.3.yaml +0 -0
  129. {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.4.yaml +0 -0
  130. {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.0.5.yaml +0 -0
  131. {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.1.0.yaml +0 -0
  132. {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.1.1.yaml +0 -0
  133. {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.2.0.yaml +0 -0
  134. {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.3.0.yaml +0 -0
  135. {gapless_crypto_data-2.7.0/docs/archive → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.4.0.yaml +0 -0
  136. {gapless_crypto_data-2.7.0/docs → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.5.0.yaml +0 -0
  137. {gapless_crypto_data-2.7.0/docs → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.6.0.yaml +0 -0
  138. {gapless_crypto_data-2.7.0/docs → gapless_crypto_data-2.9.0/docs/milestones}/MILESTONE_v2.6.1.yaml +0 -0
  139. /gapless_crypto_data-2.7.0/RELEASE_NOTES.md → /gapless_crypto_data-2.9.0/docs/release-notes.md +0 -0
  140. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/README.md +0 -0
  141. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/basic_data_collection.py +0 -0
  142. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/cli_usage_examples.sh +0 -0
  143. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/complete_workflow.py +0 -0
  144. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/gap_filling_example.py +0 -0
  145. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/safe_data_collection.py +0 -0
  146. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/examples/simple_api_examples.py +0 -0
  147. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/gap_filling/__init__.py +0 -0
  148. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/gap_filling/safe_file_operations.py +0 -0
  149. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/regression/__init__.py +0 -0
  150. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/regression/regression_detector.py +0 -0
  151. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/resume/__init__.py +0 -0
  152. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/resume/intelligent_checkpointing.py +0 -0
  153. {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
  154. {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
  155. {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
  156. {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
  157. {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
  158. {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
  159. {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
  160. {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
  161. {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
  162. {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
  163. {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
  164. {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
  165. {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
  166. {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
  167. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/streaming/__init__.py +0 -0
  168. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/streaming/memory_streaming.py +0 -0
  169. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/utils/__init__.py +0 -0
  170. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/src/gapless_crypto_data/utils/error_handling.py +0 -0
  171. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/__init__.py +0 -0
  172. {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
  173. {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
  174. {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
  175. {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
  176. {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
  177. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_atomic_operations.py +0 -0
  178. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_binance_collector.py +0 -0
  179. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_cli_integration.py +0 -0
  180. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_gap_filler.py +0 -0
  181. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_integration.py +0 -0
  182. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_output_dir_dataframe_fix.py +0 -0
  183. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_package.py +0 -0
  184. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_regression.py +0 -0
  185. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_simple_api.py +0 -0
  186. {gapless_crypto_data-2.7.0 → gapless_crypto_data-2.9.0}/tests/test_streaming.py +0 -0
@@ -12,3 +12,5 @@ venv/
12
12
  env/
13
13
  test-env/
14
14
  *-env/
15
+ # Gapless Crypto Data checkpoint files (auto-generated during collection)
16
+ .gapless_checkpoints/
@@ -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