Merge_PR_410_with_local_changes
This commit is contained in:
@@ -64,16 +64,44 @@ async def get_usage_logs(
|
||||
provider_enum = APIProvider.MISTRAL
|
||||
else:
|
||||
try:
|
||||
# Refresh enum to ensure latest values
|
||||
from models.subscription_models import APIProvider
|
||||
_ = list(APIProvider) # Force enum refresh
|
||||
provider_enum = APIProvider(provider_lower)
|
||||
except ValueError:
|
||||
# Invalid provider, return empty results
|
||||
return {
|
||||
"logs": [],
|
||||
"total_count": 0,
|
||||
"limit": limit,
|
||||
"offset": offset,
|
||||
"has_more": False
|
||||
}
|
||||
# Fallback: try to find matching provider or use default
|
||||
try:
|
||||
# Check if it's a known provider that might not be in enum
|
||||
known_providers = ['gemini', 'openai', 'anthropic', 'mistral', 'wavespeed', 'tavily', 'serper', 'metaphor', 'firecrawl', 'stability', 'exa', 'video', 'image_edit', 'audio']
|
||||
if provider_lower in known_providers:
|
||||
# Map to existing enum values or skip
|
||||
provider_mapping = {
|
||||
'mistral': 'MISTRAL',
|
||||
'wavespeed': 'WAVESPEED',
|
||||
'video': 'VIDEO',
|
||||
'image_edit': 'IMAGE_EDIT',
|
||||
'audio': 'AUDIO'
|
||||
}
|
||||
mapped_provider = provider_mapping.get(provider_lower, provider_lower.upper())
|
||||
provider_enum = APIProvider(mapped_provider)
|
||||
else:
|
||||
# Invalid provider, return empty results
|
||||
return {
|
||||
"logs": [],
|
||||
"total_count": 0,
|
||||
"limit": limit,
|
||||
"offset": offset,
|
||||
"has_more": False
|
||||
}
|
||||
except (ValueError, AttributeError):
|
||||
# If all else fails, return empty results
|
||||
return {
|
||||
"logs": [],
|
||||
"total_count": 0,
|
||||
"limit": limit,
|
||||
"offset": offset,
|
||||
"has_more": False
|
||||
}
|
||||
query = query.filter(APIUsageLog.provider == provider_enum)
|
||||
|
||||
if status_code is not None:
|
||||
@@ -98,15 +126,44 @@ async def get_usage_logs(
|
||||
provider_enum = APIProvider.MISTRAL
|
||||
else:
|
||||
try:
|
||||
# Refresh enum to ensure latest values
|
||||
from models.subscription_models import APIProvider
|
||||
_ = list(APIProvider) # Force enum refresh
|
||||
provider_enum = APIProvider(provider_lower)
|
||||
except ValueError:
|
||||
return {
|
||||
"logs": [],
|
||||
"total_count": 0,
|
||||
"limit": limit,
|
||||
"offset": offset,
|
||||
"has_more": False
|
||||
}
|
||||
# Fallback: try to find matching provider or use default
|
||||
try:
|
||||
# Check if it's a known provider that might not be in enum
|
||||
known_providers = ['gemini', 'openai', 'anthropic', 'mistral', 'wavespeed', 'tavily', 'serper', 'metaphor', 'firecrawl', 'stability', 'exa', 'video', 'image_edit', 'audio']
|
||||
if provider_lower in known_providers:
|
||||
# Map to existing enum values or skip
|
||||
provider_mapping = {
|
||||
'mistral': 'MISTRAL',
|
||||
'wavespeed': 'WAVESPEED',
|
||||
'video': 'VIDEO',
|
||||
'image_edit': 'IMAGE_EDIT',
|
||||
'audio': 'AUDIO'
|
||||
}
|
||||
mapped_provider = provider_mapping.get(provider_lower, provider_lower.upper())
|
||||
provider_enum = APIProvider(mapped_provider)
|
||||
else:
|
||||
# Invalid provider, return empty results
|
||||
return {
|
||||
"logs": [],
|
||||
"total_count": 0,
|
||||
"limit": limit,
|
||||
"offset": offset,
|
||||
"has_more": False
|
||||
}
|
||||
except (ValueError, AttributeError):
|
||||
# If all else fails, return empty results
|
||||
return {
|
||||
"logs": [],
|
||||
"total_count": 0,
|
||||
"limit": limit,
|
||||
"offset": offset,
|
||||
"has_more": False
|
||||
}
|
||||
query = query.filter(APIUsageLog.provider == provider_enum)
|
||||
if status_code is not None:
|
||||
query = query.filter(APIUsageLog.status_code == status_code)
|
||||
|
||||
@@ -173,12 +173,32 @@ class LimitValidator:
|
||||
if not usage:
|
||||
# First usage this period, create summary
|
||||
try:
|
||||
usage = UsageSummary(
|
||||
user_id=user_id,
|
||||
billing_period=current_period
|
||||
)
|
||||
self.db.add(usage)
|
||||
self.db.commit()
|
||||
# Try to create with minimal fields first to avoid missing column errors
|
||||
from sqlalchemy import text
|
||||
try:
|
||||
# Insert with only essential fields
|
||||
insert_sql = text("""
|
||||
INSERT INTO usage_summaries (user_id, billing_period, created_at, updated_at)
|
||||
VALUES (:user_id, :period, datetime('now'), datetime('now'))
|
||||
""")
|
||||
self.db.execute(insert_sql, {'user_id': user_id, 'period': current_period})
|
||||
self.db.commit()
|
||||
|
||||
# Now fetch the created record
|
||||
usage = self.db.query(UsageSummary).filter(
|
||||
UsageSummary.user_id == user_id,
|
||||
UsageSummary.billing_period == current_period
|
||||
).first()
|
||||
|
||||
except Exception as sql_error:
|
||||
logger.debug(f"[Subscription Check] Direct SQL insert failed, trying ORM: {sql_error}")
|
||||
# Fallback to ORM creation
|
||||
usage = UsageSummary(
|
||||
user_id=user_id,
|
||||
billing_period=current_period
|
||||
)
|
||||
self.db.add(usage)
|
||||
self.db.commit()
|
||||
except Exception as create_error:
|
||||
logger.error(f"Error creating usage summary: {create_error}")
|
||||
self.db.rollback()
|
||||
|
||||
Reference in New Issue
Block a user