# coding: utf-8 # from django.db import models from django.utils.translation import ugettext_lazy as _ class AppCategory(models.TextChoices): db = 'db', _('Database') remote_app = 'remote_app', _('Remote app') cloud = 'cloud', 'Cloud' @classmethod def get_label(cls, category): return dict(cls.choices).get(category, '') @classmethod def is_xpack(cls, category): return category in ['remote_app'] class AppType(models.TextChoices): # db category mysql = 'mysql', 'MySQL' mariadb = 'mariadb', 'MariaDB' oracle = 'oracle', 'Oracle' pgsql = 'postgresql', 'PostgreSQL' sqlserver = 'sqlserver', 'SQLServer' redis = 'redis', 'Redis' mongodb = 'mongodb', 'MongoDB' # remote-app category chrome = 'chrome', 'Chrome' mysql_workbench = 'mysql_workbench', 'MySQL Workbench' vmware_client = 'vmware_client', 'vSphere Client' custom = 'custom', _('Custom') # cloud category k8s = 'k8s', 'Kubernetes' @classmethod def category_types_mapper(cls): return { AppCategory.db: [ cls.mysql, cls.mariadb, cls.oracle, cls.pgsql, cls.sqlserver, cls.redis, cls.mongodb ], AppCategory.remote_app: [ cls.chrome, cls.mysql_workbench, cls.vmware_client, cls.custom ], AppCategory.cloud: [cls.k8s] } @classmethod def type_category_mapper(cls): mapper = {} for category, tps in cls.category_types_mapper().items(): for tp in tps: mapper[tp] = category return mapper @classmethod def get_label(cls, tp): return dict(cls.choices).get(tp, '') @classmethod def db_types(cls): return [tp.value for tp in cls.category_types_mapper()[AppCategory.db]] @classmethod def remote_app_types(cls): return [tp.value for tp in cls.category_types_mapper()[AppCategory.remote_app]] @classmethod def cloud_types(cls): return [tp.value for tp in cls.category_types_mapper()[AppCategory.cloud]] @classmethod def is_xpack(cls, tp): tp_category_mapper = cls.type_category_mapper() category = tp_category_mapper[tp] if AppCategory.is_xpack(category): return True return tp in ['oracle', 'postgresql', 'sqlserver'] class OracleVersion(models.TextChoices): version_11g = '11g', '11g' version_12c = '12c', '12c' version_other = 'other', _('Other')