modular_sdk/services/region_service.py (63 lines of code) (raw):

from typing import Optional from modular_sdk.commons.log_helper import get_logger from modular_sdk.models.region import RegionModel, RegionAttr from modular_sdk.services.tenant_service import TenantService REGION_TABLE_NAME = 'Regions' REGION_TABLE_HASH_KEY = 'r' REGION_FIELDS_KEY = 'f' REGION_CLOUD_KEY = 'c' REGION_VIRT_PROFILES = 'vp' REGION_SHAPE_MAPPING = 'shapeMapping' REGION_NATIVE_NAME = 'nn' REGION_ID = 'rId' VIRT_PROFILE_ERROR_PATTERN = 'There is no virt profiles in region {0}' SHAPE_MAPPING_ERROR_PATTERN = 'There is no shape mapping in region {0}' _LOG = get_logger(__name__) def _extract_region_fields(region_item): _log = _LOG.getChild('_extract_region_fields') region_fields = region_item.fields if not region_fields: _LOG.error('There are no fields in region item') return dict() return region_fields class RegionService: def __init__(self, tenant_service: TenantService): self.tenant_service = tenant_service @staticmethod def get_all_regions(only_active=False): regions = list(RegionModel.scan()) if only_active: return list(filter(lambda region: region.is_active, regions)) return regions @staticmethod def get_region(region_name): return RegionModel.get_nullable(hash_key=region_name) @staticmethod def get_region_by_native_name(native_name: str, cloud: Optional[str] = None ) -> Optional[RegionModel]: """ Always returns one region or None. But still cloud should be specified """ condition = None if cloud: condition = RegionModel.cloud == cloud return next(RegionModel.native_name_cloud_index.query( hash_key=native_name, range_key_condition=condition ), None) @staticmethod def get_regions(region_names): return RegionModel.batch_get(list(set(region_names))) @staticmethod def check_region_is_not_activated(region_to_add, tenant_regions): region_name = region_to_add.maestro_name for tenant_region in tenant_regions: if region_name == tenant_region.maestro_name: return False return True @staticmethod def get_dto(region): if isinstance(region, RegionModel): return region.get_json() if isinstance(region, RegionAttr): return region.as_dict() @staticmethod def region_model_to_attr(region: RegionModel): return RegionAttr(**region.get_json())