Maga222006
MultiagentPersonalAssistant
e6a90e9
from sqlalchemy.ext.asyncio import AsyncSession, create_async_engine
from database_interaction.models import UserConfig, Base
from sqlalchemy.orm import sessionmaker
from dotenv import load_dotenv
import os
load_dotenv()
engine = create_async_engine("sqlite+aiosqlite:///./database_files/main.db", echo=False)
AsyncSessionLocal = sessionmaker(engine, class_=AsyncSession, expire_on_commit=False)
async def init_config_db():
"""Initialize config database tables"""
async with engine.begin() as conn:
await conn.run_sync(Base.metadata.create_all)
async def create_or_update_config(user_id: str, **kwargs):
"""Create or update user configuration"""
async with AsyncSessionLocal() as session:
async with session.begin():
config = await session.get(UserConfig, user_id)
if config:
for key, value in kwargs.items():
if hasattr(config, key) and value is not None:
setattr(config, key, value)
else:
# Filter out None values for new config
filtered_kwargs = {k: v for k, v in kwargs.items() if v is not None}
config = UserConfig(user_id=user_id, **filtered_kwargs)
session.add(config)
await session.commit()
async def get_config_by_user_id(user_id: str):
"""Get configuration by user ID"""
async with AsyncSessionLocal() as session:
config = await session.get(UserConfig, user_id)
if config:
return {key: getattr(config, key) for key in config.__table__.columns.keys()}
return None
async def load_config_to_env(user_id: str):
"""Load user configuration to environment variables"""
config = await get_config_by_user_id(user_id)
if not config:
return
# Map config keys to environment variable names
env_mapping = {
'assistant_name': 'ASSISTANT_NAME',
'openweathermap_api_key': 'OPENWEATHERMAP_API_KEY',
'github_token': 'GITHUB_TOKEN',
'tavily_api_key': 'TAVILY_API_KEY',
'groq_api_key': 'GROQ_API_KEY',
}
for config_key, env_key in env_mapping.items():
value = config.get(config_key)
if value is not None:
os.environ[env_key] = str(value)
async def save_env_to_file():
"""Save current environment variables to .env file"""
env_vars = [
'DATABASE_URL', 'TOKEN', 'ASSISTANT_NAME', 'LOCATION', 'LATITUDE', 'LONGITUDE',
'OPENWEATHERMAP_API_KEY', 'GITHUB_TOKEN', 'TAVILY_API_KEY',
'GROQ_API_KEY'
]
# Set default values if not present
if not os.getenv('DATABASE_URL'):
os.environ['DATABASE_URL'] = 'sqlite+aiosqlite:///./database_files/main.db'
if not os.getenv('TOKEN'):
os.environ['TOKEN'] = '7456008559:AAFbid5x8hhM4qe70SW9xyDHaiDCwHjkQH4'
with open('.env', 'w') as f:
for var in env_vars:
value = os.getenv(var, '')
f.write(f"{var}={value}\n")