from collections import defaultdict from common.decorators import cached_method from .base import BaseType class CustomTypes(BaseType): @classmethod def get_choices(cls): try: platforms = list(cls.get_custom_platforms()) except Exception: return [] types = set([p.type for p in platforms]) choices = [(t, t) for t in types] return choices @classmethod def _get_base_constrains(cls) -> dict: return { '*': { 'charset_enabled': False, 'domain_enabled': False, 'su_enabled': False, }, } @classmethod def _get_automation_constrains(cls) -> dict: constrains = { '*': { 'ansible_enabled': False, 'ansible_config': {}, 'gather_facts_enabled': False, 'verify_account_enabled': False, 'change_secret_enabled': False, 'push_account_enabled': False, 'gather_accounts_enabled': False, } } return constrains @classmethod @cached_method(5) def _get_protocol_constrains(cls) -> dict: from assets.models import PlatformProtocol _constrains = defaultdict(set) protocols = PlatformProtocol.objects \ .filter(platform__category='custom') \ .values_list('name', 'platform__type') for name, tp in protocols: _constrains[tp].add(name) constrains = { tp: {'choices': list(choices)} for tp, choices in _constrains.items() } return constrains @classmethod def internal_platforms(cls): return {} @classmethod @cached_method(5) def get_custom_platforms(cls): from assets.models import Platform platforms = Platform.objects.filter(category='custom') return platforms