#!/usr/bin/env python3
"""
Simple script to create sample contracts for testing.
"""
import asyncio
from datetime import datetime
import structlog
from src.data.models import init_db, get_db
from src.data.storage.repository import ContractRepository, TradeRepository
from src.data.models import Contract, Trade, ContractType
logger = structlog.get_logger()
async def create_sample_data():
"""Create sample contracts and trades for testing."""
await init_db()
logger.info("Creating sample data...")
contracts_data = [
{
'symbol': 'BTC_95000_YES',
'description': 'Bitcoin to reach $95,000 by year end',
'type': ContractType.CRYPTO,
'guid': '770113025863258064'
},
{
'symbol': 'ETH_4000_YES',
'description': 'Ethereum to reach $4,000 this quarter',
'type': ContractType.CRYPTO,
'guid': '110649172785362650'
},
{
'symbol': 'PROVIDENCE_BASKETBALL',
'description': 'Providence College Basketball Team',
'type': ContractType.SPORTS,
'guid': '770113025863258064'
}
]
contracts_created = 0
trades_created = 0
async with get_db() as session:
# Create contracts
for contract_data in contracts_data:
try:
existing = await ContractRepository.get_by_symbol(session, contract_data['symbol'])
if existing:
logger.info("contract_exists", symbol=contract_data['symbol'])
contract = existing
else:
contract = Contract(
symbol=contract_data['symbol'],
description=contract_data['description'],
contract_type=contract_data['type'],
settlement_date=datetime(2026, 12, 19),
is_active=True,
is_settled=False,
instrument_guid_long=contract_data['guid'],
instrument_long_name=contract_data['description']
)
session.add(contract)
await session.flush()
contracts_created += 1
logger.info("contract_created", symbol=contract.symbol, id=contract.id)
# Create sample trades for this contract
base_time = datetime(2025, 12, 19, 12, 0, 0)
sample_prices = [0.45, 0.47, 0.52, 0.48, 0.51]
for i, price in enumerate(sample_prices):
trade_time = datetime(2025, 12, 19, 12 + i, 0, 0)
trade_id = f"{contract.symbol}_trade_{i+1}"
# Check if trade already exists
existing_trades = await session.execute(
f"SELECT id FROM trades WHERE trade_id = '{trade_id}'"
)
if existing_trades.first():
continue
trade = Trade(
trade_id=trade_id,
contract_id=contract.id,
instrument_guid_long=contract_data['guid'],
count_clr_trade_id=i + 1,
trade_date=trade_time.date(),
timestamp=trade_time,
price=price,
volume=100 + i * 50,
side="BUY",
trade_type="MARKET"
)
session.add(trade)
trades_created += 1
except Exception as e:
logger.error("creation_error", error=str(e), contract=contract_data['symbol'])
await session.commit()
print(f"✅ Created {contracts_created} contracts and {trades_created} trades")
if __name__ == "__main__":
asyncio.run(create_sample_data())