from dataclasses import dataclass
from typing import List, Union
from wxc_sdk.api_child import ApiChild
from .dial_plan import DialPlanApi
from .route_group import RouteGroupApi
from .route_list import RouteListApi
from .trunk import TrunkApi
from ...base import ApiModel
from ...common import DialPatternValidate, ValidationStatus
from ...rest import RestSession
__all__ = ['DialPatternValidationResult',
'PremisePstnApi']
[docs]
class DialPatternValidationResult(ApiModel):
#: Overall validation result status.
status: ValidationStatus
dial_pattern_status: list[DialPatternValidate]
@property
def ok(self) -> bool:
return self.status == ValidationStatus.ok
[docs]
@dataclass(init=False, repr=False)
class PremisePstnApi(ApiChild, base='telephony/config/premisePstn'):
"""
Premises PSTN API
"""
#: dial plan configuration
dial_plan: DialPlanApi
#: trunk configuration
trunk: TrunkApi
#: route group configuration
route_group: RouteGroupApi
#: route list configuration
route_list: RouteListApi
[docs]
def __init__(self, session: RestSession):
super().__init__(session=session)
self.dial_plan = DialPlanApi(session=session)
self.trunk = TrunkApi(session=session)
self.route_group = RouteGroupApi(session=session)
self.route_list = RouteListApi(session=session)
[docs]
def validate_pattern(self, dial_patterns: Union[str, List[str]], org_id: str = None) -> DialPatternValidationResult:
"""
Validate a Dial Pattern.
Dial plans route calls to on-premises destinations by use of trunks or route groups. They are configured
globally for an enterprise and apply to all users, regardless of location. A dial plan also specifies the
routing choice (trunk or route group) for calls that match any of its dial patterns. Specific dial patterns
can be defined as part of your dial plan.
Validating a dial pattern requires a full administrator auth token with a scope
of spark-admin:telephony_config_write.
:param dial_patterns: Array of dial patterns.
:type dial_patterns: list[str] or str
:param org_id: Organization to which dial plan belongs.
:return: validation result
:rtype: :class:`DialPatternValidationResult`
"""
if isinstance(dial_patterns, str):
dial_patterns = [dial_patterns]
url = self.ep('actions/validateDialPatterns/invoke')
params = org_id and {'orgId': org_id} or None
body = {'dialPatterns': dial_patterns}
data = self.post(url=url, params=params, json=body)
return DialPatternValidationResult.model_validate(data)