| | 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: |
| | |
| | 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 |
| |
|
| | |
| | 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', |
| | 'tuya_access_id': 'TUYA_ACCESS_ID', |
| | 'tuya_access_key': 'TUYA_ACCESS_KEY', |
| | 'tuya_username': 'TUYA_USERNAME', |
| | 'tuya_password': 'TUYA_PASSWORD', |
| | 'tuya_country': 'TUYA_COUNTRY', |
| | } |
| |
|
| | 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', 'TUYA_ACCESS_ID', 'TUYA_ACCESS_KEY', 'TUYA_USERNAME', 'TUYA_PASSWORD', 'TUYA_COUNTRY', |
| | ] |
| |
|
| | |
| | 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") |