jh629g 64bd786367 Updating Ranger Error Bases
Ranger errors are split out
unecessarily in the code base
and need to be refactored for
python 3.6 best practice

Change-Id: I06b1e2679ff2f0d7cadf7eab4ab0a7cc61e138ca
2020-11-03 01:38:10 +00:00

256 lines
8.3 KiB
Python
Executable File

"""model module."""
from orm.common.orm_common.utils import error_base
from orm.services.region_manager.rms.logger import get_logger
from pecan import conf
logger = get_logger(__name__)
class Address(object):
"""address class."""
def __init__(self, country=None, state=None, city=None,
street=None, zip=None):
"""init function
:param country:
:param state:
:param city:
:param street:
:param zip:
"""
self.country = country
self.state = state
self.city = city
self.street = street
self.zip = zip
class EndPoint(object):
"""class method endpoints body."""
def __init__(self, publicurl=None, type=None):
"""init function.
:param public_url: field
:param type: field
:return:
"""
self.type = type
self.publicurl = publicurl
class RegionData(object):
"""class method json header."""
def __init__(self, status=None, id=None, name=None, description=None,
clli=None, ranger_agent_version=None, design_type=None,
location_type=None, domain_name=None,
vlcp_name=None, open_stack_version=None,
address=Address(), metadata={}, endpoints=[EndPoint()],
created=None, modified=None):
"""init function
:param status:
:param id:
:param name:
:param description:
:param clli:
:param ranger_agent_version:
:param design_type:
:param location_type:
:param domain_name:
:param vlcp_name:
:param open_stack_version:
:param address:
:param metadata:
:param endpoints:
:param created
:param modified
"""
self.status = status
self.id = id
# make id and name always the same
self.name = self.id
self.description = description
self.clli = clli
self.ranger_agent_version = ranger_agent_version
self.metadata = metadata
self.endpoints = endpoints
self.design_type = design_type
self.location_type = location_type
self.domain_name = domain_name
self.vlcp_name = vlcp_name
self.open_stack_version = open_stack_version
self.address = address
self.created = created
self.modified = modified
def _validate_fields(self):
"""The following fields are mandatory for create/update json:
id, clli, design_type, ranger_agent_version, vlcp_name
Also check that all input field values (except 'description',
"location_type", and address fields) do not contain a space.
Validation for 'endpoints' and 'status' as mandatory fields
are handled by other methods.
"""
mandatory_fields = ['id', 'clli', 'design_type', 'ranger_agent_version',
'vlcp_name']
check_fields_for_spaces = ['id', 'clli', 'design_type', 'ranger_agent_version',
'open_stack_version', 'vlcp_name', 'domain_name']
for field in check_fields_for_spaces:
value = getattr(self, field)
if field in mandatory_fields:
# if mandatory field, check if field is empty
if not value:
raise error_base.InputValueError(
message="'{}' field value is required.".format(field))
# check if field contains spaces, then issue error message
if ' ' in value:
raise error_base.InputValueError(
message="'{}' field value cannot contain "
"spaces.".format(field))
def _validate_end_points(self, endpoints_types_must_have):
ep_duplicate = []
for endpoint in self.endpoints:
if endpoint.type not in ep_duplicate:
ep_duplicate.append(endpoint.type)
else:
raise error_base.InputValueError(
message="Invalid endpoints. Duplicate endpoint "
"type {}".format(endpoint.type))
try:
endpoints_types_must_have.remove(endpoint.type)
except Exception as exp:
# pass
logger.debug(exp)
if len(endpoints_types_must_have) > 0:
raise error_base.InputValueError(
message="Invalid endpoints. Endpoint type '{}' "
"is missing".format(endpoints_types_must_have))
def _validate_status(self, allowed_status):
if self.status not in allowed_status:
raise error_base.InputValueError(
message="Invalid status. Region status must be "
"one of {}".format(allowed_status))
return
def _validate_name(self):
if not self.name:
raise error_base.InputValueError(
message="Region ID/name is required")
if ' ' in self.name:
raise error_base.InputValueError(
message="Region ID/name must match and not contain spaces")
def _validate_model(self):
allowed_status = conf.region_options.allowed_status_values[:]
endpoints_types_must_have = conf.region_options.endpoints_types_must_have[:]
self._validate_status(allowed_status)
self._validate_end_points(endpoints_types_must_have)
self._validate_name()
self._validate_fields()
return
def _to_db_model_dict(self):
end_points = []
for endpoint in self.endpoints:
ep = {}
ep['type'] = endpoint.type
ep['url'] = endpoint.publicurl
end_points.append(ep)
db_model_dict = {}
db_model_dict['region_id'] = self.id
db_model_dict['name'] = self.name
db_model_dict['description'] = self.description
db_model_dict['address_state'] = self.address.state
db_model_dict['address_country'] = self.address.country
db_model_dict['address_city'] = self.address.city
db_model_dict['address_street'] = self.address.street
db_model_dict['address_zip'] = self.address.zip
db_model_dict['region_status'] = self.status
db_model_dict['ranger_agent_version'] = self.ranger_agent_version
db_model_dict['open_stack_version'] = self.open_stack_version
db_model_dict['design_type'] = self.design_type
db_model_dict['location_type'] = self.location_type
db_model_dict['domain_name'] = self.domain_name
db_model_dict['vlcp_name'] = self.vlcp_name
db_model_dict['clli'] = self.clli
db_model_dict['end_point_list'] = end_points
db_model_dict['meta_data_dict'] = self.metadata
return db_model_dict
class Regions(object):
"""main json header."""
def __init__(self, regions=[RegionData()]):
"""init function.
:param regions:
:return:
"""
self.regions = regions
class Groups(object):
"""main json header."""
def __init__(self, id=None, name=None,
description=None, regions=[],
created=None, modified=None):
"""init function.
:param regions:
:return:
"""
self.id = id
self.name = name
self.description = description
self.regions = regions
self.created = created
self.modified = modified
def _to_db_model_dict(self):
db_dict = {}
db_dict['group_name'] = self.name
db_dict['group_description'] = self.description
db_dict['group_regions'] = self.regions
return db_dict
def _validate_model(self):
if not self.name or not self.id:
raise error_base.InputValueError(
message="Group ID/name is required")
if ' ' in self.name or ' ' in self.id:
raise error_base.InputValueError(
message="Group ID/name must not contain spaces")
if not self.description.rstrip():
raise error_base.InputValueError(
message="Description is required")
class GroupsWrraper(object):
"""list of groups."""
def __init__(self, groups=None):
"""init function
:param groups:
"""
if groups is None:
self.groups = []
else:
self.groups = groups