- Docker: Delete 23 deprecated Dockerfiles, fix CI/CD to use Dockerfile.foxhunt-build - Config: Remove 36 .env files, keep 4 essential, delete config/environments/ - Docs: Archive 614 Wave D files to docs/archive/wave_d/, 95% reduction in root - Scripts: Delete 56 deprecated scripts, keep 58 production-critical (49% reduction) - Python: Organize 37 scripts into scripts/python/ subdirectories, delete ml/python/ - Build: Remove 1GB artifacts, delete old venvs, clean Python cache from git - Migrations: Delete deprecated directory (4,432 lines), remove duplicate database/migrations/ - Infrastructure: Delete deployment/ (61 files), docs/scripts/ (8 files) Total impact: ~2,500 files cleaned, 750MB+ space freed, zero production impact All deleted scripts backed up to archives. runpod/ and tests/runpod/ preserved. data_acquisition_service retained per user request.
93 lines
3.1 KiB
Python
93 lines
3.1 KiB
Python
#!/usr/bin/env python3
|
|
"""
|
|
Check Databento subscription and data availability.
|
|
"""
|
|
import os
|
|
import databento as db
|
|
import sys
|
|
|
|
def main():
|
|
api_key = os.environ.get("DATABENTO_API_KEY")
|
|
if not api_key:
|
|
print("ERROR: DATABENTO_API_KEY environment variable not set")
|
|
sys.exit(1)
|
|
|
|
client = db.Historical(api_key)
|
|
|
|
print("=" * 70)
|
|
print("Databento Subscription Check")
|
|
print("=" * 70)
|
|
|
|
# Get billing information
|
|
try:
|
|
print("\n1. Checking Account Status...")
|
|
# Note: There's no direct API for billing, but we can try to get cost for a known symbol
|
|
# Let's try ES (S&P 500 E-mini) which is very common
|
|
|
|
test_cases = [
|
|
("XNAS.ITCH", "AAPL", "trades", "Nasdaq stocks"),
|
|
("GLBX.MDP3", "ES", "ohlcv-1m", "CME E-mini S&P 500"),
|
|
("GLBX.MDP3", "ES.FUT", "ohlcv-1m", "CME E-mini S&P 500 (FUT)"),
|
|
("GLBX.MDP3", "ESH24", "ohlcv-1m", "CME E-mini S&P 500 (Mar 2024)"),
|
|
]
|
|
|
|
print("\n2. Testing Data Access...\n")
|
|
|
|
for dataset, symbol, schema, description in test_cases:
|
|
print(f"Testing: {description}")
|
|
print(f" Dataset: {dataset}, Symbol: {symbol}, Schema: {schema}")
|
|
|
|
try:
|
|
cost = client.metadata.get_cost(
|
|
dataset=dataset,
|
|
symbols=[symbol],
|
|
schema=schema,
|
|
start="2024-01-02",
|
|
end="2024-01-05"
|
|
)
|
|
print(f" ✅ ACCESS GRANTED - Cost: ${cost:.4f} (3 days)")
|
|
except Exception as e:
|
|
error_msg = str(e)
|
|
if "401" in error_msg or "unauthorized" in error_msg.lower():
|
|
print(f" ❌ UNAUTHORIZED - Need subscription")
|
|
elif "404" in error_msg or "not found" in error_msg.lower():
|
|
print(f" ❌ NOT FOUND - Symbol doesn't exist")
|
|
elif "symbology" in error_msg.lower():
|
|
print(f" ❌ SYMBOLOGY ERROR - Symbol can't be resolved")
|
|
else:
|
|
print(f" ❌ ERROR: {error_msg[:80]}")
|
|
print()
|
|
|
|
print("=" * 70)
|
|
print("Diagnosis")
|
|
print("=" * 70)
|
|
print("""
|
|
Based on the results above:
|
|
|
|
1. If ALL tests show UNAUTHORIZED:
|
|
→ Your subscription doesn't include historical data access
|
|
→ You may only have live data access
|
|
|
|
2. If ONLY GLBX.MDP3 (CME) tests fail:
|
|
→ Your subscription doesn't include CME futures data
|
|
→ CME data requires a separate subscription tier
|
|
|
|
3. If SYMBOLOGY ERROR appears:
|
|
→ The symbol format is incorrect for that dataset
|
|
→ Try checking Databento's symbology guide
|
|
|
|
4. If some symbols work:
|
|
→ Your subscription is working, but specific instruments need adjustment
|
|
|
|
Recommendations:
|
|
- Check your Databento account subscription at: https://databento.com/account
|
|
- For CME futures data (6E, ES, etc.), verify you have GLBX.MDP3 access
|
|
- Contact Databento support if you believe you should have access
|
|
""")
|
|
|
|
except Exception as e:
|
|
print(f"\nError checking subscription: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|