| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- from sqlalchemy.orm import Session
-
- from extensions.ext_database import db
- from models.account import TenantPluginAutoUpgradeStrategy
-
-
- class PluginAutoUpgradeService:
- @staticmethod
- def get_strategy(tenant_id: str) -> TenantPluginAutoUpgradeStrategy | None:
- with Session(db.engine) as session:
- return (
- session.query(TenantPluginAutoUpgradeStrategy)
- .filter(TenantPluginAutoUpgradeStrategy.tenant_id == tenant_id)
- .first()
- )
-
- @staticmethod
- def change_strategy(
- tenant_id: str,
- strategy_setting: TenantPluginAutoUpgradeStrategy.StrategySetting,
- upgrade_time_of_day: int,
- upgrade_mode: TenantPluginAutoUpgradeStrategy.UpgradeMode,
- exclude_plugins: list[str],
- include_plugins: list[str],
- ) -> bool:
- with Session(db.engine) as session:
- exist_strategy = (
- session.query(TenantPluginAutoUpgradeStrategy)
- .filter(TenantPluginAutoUpgradeStrategy.tenant_id == tenant_id)
- .first()
- )
- if not exist_strategy:
- strategy = TenantPluginAutoUpgradeStrategy(
- tenant_id=tenant_id,
- strategy_setting=strategy_setting,
- upgrade_time_of_day=upgrade_time_of_day,
- upgrade_mode=upgrade_mode,
- exclude_plugins=exclude_plugins,
- include_plugins=include_plugins,
- )
- session.add(strategy)
- else:
- exist_strategy.strategy_setting = strategy_setting
- exist_strategy.upgrade_time_of_day = upgrade_time_of_day
- exist_strategy.upgrade_mode = upgrade_mode
- exist_strategy.exclude_plugins = exclude_plugins
- exist_strategy.include_plugins = include_plugins
-
- session.commit()
- return True
-
- @staticmethod
- def exclude_plugin(tenant_id: str, plugin_id: str) -> bool:
- with Session(db.engine) as session:
- exist_strategy = (
- session.query(TenantPluginAutoUpgradeStrategy)
- .filter(TenantPluginAutoUpgradeStrategy.tenant_id == tenant_id)
- .first()
- )
- if not exist_strategy:
- # create for this tenant
- PluginAutoUpgradeService.change_strategy(
- tenant_id,
- TenantPluginAutoUpgradeStrategy.StrategySetting.FIX_ONLY,
- 0,
- TenantPluginAutoUpgradeStrategy.UpgradeMode.EXCLUDE,
- [plugin_id],
- [],
- )
- return True
- else:
- if exist_strategy.upgrade_mode == TenantPluginAutoUpgradeStrategy.UpgradeMode.EXCLUDE:
- if plugin_id not in exist_strategy.exclude_plugins:
- new_exclude_plugins = exist_strategy.exclude_plugins.copy()
- new_exclude_plugins.append(plugin_id)
- exist_strategy.exclude_plugins = new_exclude_plugins
- elif exist_strategy.upgrade_mode == TenantPluginAutoUpgradeStrategy.UpgradeMode.PARTIAL:
- if plugin_id in exist_strategy.include_plugins:
- new_include_plugins = exist_strategy.include_plugins.copy()
- new_include_plugins.remove(plugin_id)
- exist_strategy.include_plugins = new_include_plugins
- elif exist_strategy.upgrade_mode == TenantPluginAutoUpgradeStrategy.UpgradeMode.ALL:
- exist_strategy.upgrade_mode = TenantPluginAutoUpgradeStrategy.UpgradeMode.EXCLUDE
- exist_strategy.exclude_plugins = [plugin_id]
-
- session.commit()
- return True
|