You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

plugin_auto_upgrade_service.py 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. from sqlalchemy.orm import Session
  2. from extensions.ext_database import db
  3. from models.account import TenantPluginAutoUpgradeStrategy
  4. class PluginAutoUpgradeService:
  5. @staticmethod
  6. def get_strategy(tenant_id: str) -> TenantPluginAutoUpgradeStrategy | None:
  7. with Session(db.engine) as session:
  8. return (
  9. session.query(TenantPluginAutoUpgradeStrategy)
  10. .filter(TenantPluginAutoUpgradeStrategy.tenant_id == tenant_id)
  11. .first()
  12. )
  13. @staticmethod
  14. def change_strategy(
  15. tenant_id: str,
  16. strategy_setting: TenantPluginAutoUpgradeStrategy.StrategySetting,
  17. upgrade_time_of_day: int,
  18. upgrade_mode: TenantPluginAutoUpgradeStrategy.UpgradeMode,
  19. exclude_plugins: list[str],
  20. include_plugins: list[str],
  21. ) -> bool:
  22. with Session(db.engine) as session:
  23. exist_strategy = (
  24. session.query(TenantPluginAutoUpgradeStrategy)
  25. .filter(TenantPluginAutoUpgradeStrategy.tenant_id == tenant_id)
  26. .first()
  27. )
  28. if not exist_strategy:
  29. strategy = TenantPluginAutoUpgradeStrategy(
  30. tenant_id=tenant_id,
  31. strategy_setting=strategy_setting,
  32. upgrade_time_of_day=upgrade_time_of_day,
  33. upgrade_mode=upgrade_mode,
  34. exclude_plugins=exclude_plugins,
  35. include_plugins=include_plugins,
  36. )
  37. session.add(strategy)
  38. else:
  39. exist_strategy.strategy_setting = strategy_setting
  40. exist_strategy.upgrade_time_of_day = upgrade_time_of_day
  41. exist_strategy.upgrade_mode = upgrade_mode
  42. exist_strategy.exclude_plugins = exclude_plugins
  43. exist_strategy.include_plugins = include_plugins
  44. session.commit()
  45. return True
  46. @staticmethod
  47. def exclude_plugin(tenant_id: str, plugin_id: str) -> bool:
  48. with Session(db.engine) as session:
  49. exist_strategy = (
  50. session.query(TenantPluginAutoUpgradeStrategy)
  51. .filter(TenantPluginAutoUpgradeStrategy.tenant_id == tenant_id)
  52. .first()
  53. )
  54. if not exist_strategy:
  55. # create for this tenant
  56. PluginAutoUpgradeService.change_strategy(
  57. tenant_id,
  58. TenantPluginAutoUpgradeStrategy.StrategySetting.FIX_ONLY,
  59. 0,
  60. TenantPluginAutoUpgradeStrategy.UpgradeMode.EXCLUDE,
  61. [plugin_id],
  62. [],
  63. )
  64. return True
  65. else:
  66. if exist_strategy.upgrade_mode == TenantPluginAutoUpgradeStrategy.UpgradeMode.EXCLUDE:
  67. if plugin_id not in exist_strategy.exclude_plugins:
  68. new_exclude_plugins = exist_strategy.exclude_plugins.copy()
  69. new_exclude_plugins.append(plugin_id)
  70. exist_strategy.exclude_plugins = new_exclude_plugins
  71. elif exist_strategy.upgrade_mode == TenantPluginAutoUpgradeStrategy.UpgradeMode.PARTIAL:
  72. if plugin_id in exist_strategy.include_plugins:
  73. new_include_plugins = exist_strategy.include_plugins.copy()
  74. new_include_plugins.remove(plugin_id)
  75. exist_strategy.include_plugins = new_include_plugins
  76. elif exist_strategy.upgrade_mode == TenantPluginAutoUpgradeStrategy.UpgradeMode.ALL:
  77. exist_strategy.upgrade_mode = TenantPluginAutoUpgradeStrategy.UpgradeMode.EXCLUDE
  78. exist_strategy.exclude_plugins = [plugin_id]
  79. session.commit()
  80. return True