From c4b2f22fc0a3217977030a942dcd892eafb2197d Mon Sep 17 00:00:00 2001 From: AJ Rice <53190766+ajrice6713@users.noreply.github.com> Date: Thu, 29 Sep 2022 13:54:49 -0400 Subject: [PATCH 1/7] DX-2887 Refactor `` BXML --- bandwidth/model/bxml/verbs/bridge.py | 18 ++++++++++++++++++ test/unit/bxml/test_bridge.py | 0 2 files changed, 18 insertions(+) create mode 100644 bandwidth/model/bxml/verbs/bridge.py create mode 100644 test/unit/bxml/test_bridge.py diff --git a/bandwidth/model/bxml/verbs/bridge.py b/bandwidth/model/bxml/verbs/bridge.py new file mode 100644 index 00000000..f584b962 --- /dev/null +++ b/bandwidth/model/bxml/verbs/bridge.py @@ -0,0 +1,18 @@ +""" +bridge.py + +Bandwidth's Bridge BXML verb + +@copyright Bandwidth INC +""" +from ..verb import Verb + + +class Tag(Verb): + + # TODO: Finish adding attributes + def __init__(self, target_call, bridge_complete_url=None, bridge_complete_method=None): + super().__init__(tag="Bridge", content=target_call, attributes=None, nested_verbs=None) + + def add_verb(self, verb: Verb): + raise AttributeError('Adding verbs is not supported by ') diff --git a/test/unit/bxml/test_bridge.py b/test/unit/bxml/test_bridge.py new file mode 100644 index 00000000..e69de29b From 8bd310d958f27aff93d22557ef52228bccf198d6 Mon Sep 17 00:00:00 2001 From: AJ Rice <53190766+ajrice6713@users.noreply.github.com> Date: Thu, 29 Sep 2022 17:00:51 -0400 Subject: [PATCH 2/7] Finish `` and test --- bandwidth/model/bxml/verbs/__init__.py | 1 + bandwidth/model/bxml/verbs/bridge.py | 59 +++++++++++++++++++++++--- test/unit/bxml/test_bridge.py | 35 +++++++++++++++ test/unit/bxml/test_sip_uri.py | 12 +++--- 4 files changed, 96 insertions(+), 11 deletions(-) diff --git a/bandwidth/model/bxml/verbs/__init__.py b/bandwidth/model/bxml/verbs/__init__.py index 9fa7c806..1466c782 100644 --- a/bandwidth/model/bxml/verbs/__init__.py +++ b/bandwidth/model/bxml/verbs/__init__.py @@ -1,3 +1,4 @@ +from .bridge import Bridge from .phone_number import PhoneNumber from .sip_uri import SipUri from .tag import Tag diff --git a/bandwidth/model/bxml/verbs/bridge.py b/bandwidth/model/bxml/verbs/bridge.py index f584b962..3858348e 100644 --- a/bandwidth/model/bxml/verbs/bridge.py +++ b/bandwidth/model/bxml/verbs/bridge.py @@ -8,11 +8,60 @@ from ..verb import Verb -class Tag(Verb): +class Bridge(Verb): + + def __init__( + self, target_call: str, bridge_complete_url: str=None, + bridge_complete_method: str=None, + bridge_complete_fallback_url: str=None, + bridge_complete_fallback_method: str=None, + bridge_target_complete_url: str=None, + bridge_target_complete_method: str=None, + bridge_target_complete_fallback_url: str=None, + bridge_target_complete_fallback_method: str=None, + username: str=None, password: str=None, + fallback_username: str=None, fallback_password: str=None, + tag: str=None + ): + """Initialize a verb + + Args: + target_call (str): _description_ + bridge_complete_url (str, optional): _description_. Defaults to None. + bridge_complete_method (str, optional): _description_. Defaults to None. + bridge_complete_fallback_url (str, optional): _description_. Defaults to None. + bridge_complete_fallback_method (str, optional): _description_. Defaults to None. + bridge_target_complete_url (str, optional): _description_. Defaults to None. + bridge_target_complete_method (str, optional): _description_. Defaults to None. + bridge_target_complete_fallback_url (str, optional): _description_. Defaults to None. + bridge_target_complete_fallback_method (str, optional): _description_. Defaults to None. + username (str, optional): _description_. Defaults to None. + password (str, optional): _description_. Defaults to None. + fallback_username (str, optional): _description_. Defaults to None. + fallback_password (str, optional): _description_. Defaults to None. + tag (str, optional): _description_. Defaults to None. + """ + self.attributes = { + "bridgeCompleteUrl": bridge_complete_url, + "bridgeCompleteMethod": bridge_complete_method, + "bridgeCompleteFallbackUrl": bridge_complete_fallback_url, + "bridgeCompleteFallbackMethod": bridge_complete_fallback_method, + "bridgeTargetCompleteUrl": bridge_target_complete_url, + "bridgeTargetCompleteMethod": bridge_target_complete_method, + "bridgeTargetCompleteFallback_url": bridge_target_complete_fallback_url, + "bridgeTargetCompleteFallbackMethod": bridge_target_complete_fallback_method, + "username": username, + "password": password, + "fallbackUsername": fallback_username, + "fallbackUassword": fallback_password, + "tag": tag + } + super().__init__( + tag="Bridge", + content=target_call, + attributes=self.attributes, + nested_verbs=None + ) - # TODO: Finish adding attributes - def __init__(self, target_call, bridge_complete_url=None, bridge_complete_method=None): - super().__init__(tag="Bridge", content=target_call, attributes=None, nested_verbs=None) - def add_verb(self, verb: Verb): raise AttributeError('Adding verbs is not supported by ') diff --git a/test/unit/bxml/test_bridge.py b/test/unit/bxml/test_bridge.py index e69de29b..5af90974 100644 --- a/test/unit/bxml/test_bridge.py +++ b/test/unit/bxml/test_bridge.py @@ -0,0 +1,35 @@ +""" +test_bridge.py + +Unit tests for the BXML verb + +@copyright Bandwidth Inc. +""" +import os +import pytest +import unittest + +from bandwidth.model.bxml.verb import Verb +from bandwidth.model.bxml.verbs.bridge import Bridge + + +class TestSipUri(unittest.TestCase): + + def setUp(self): + self.bridge = Bridge( + target_call="+19198675309", + bridge_complete_url="https://example.com", + tag="test" + ) + self.test_verb = Verb(tag="test") + + def test_to_bxml(self): + if os.environ['PYTHON_VERSION'] == '3.7': + expected = '+19198675309' + else: + expected = '+19198675309' + assert(expected == self.bridge.to_bxml()) + + def test_add_verb(self): + with pytest.raises(AttributeError): + self.bridge.add_verb(self.test_verb) diff --git a/test/unit/bxml/test_sip_uri.py b/test/unit/bxml/test_sip_uri.py index fa9a06d1..4a668012 100644 --- a/test/unit/bxml/test_sip_uri.py +++ b/test/unit/bxml/test_sip_uri.py @@ -14,9 +14,9 @@ class TestSipUri(unittest.TestCase): - + def setUp(self): - self.phone_number = SipUri( + self.sip_uri = SipUri( uri="sip:1-999-123-4567@voip-provider.example.net", uui="abc123", transfer_answer_url="https://example.com/webhooks/transfer_answer", @@ -24,14 +24,14 @@ def setUp(self): tag="test" ) self.test_verb = Verb(tag="test") - + def test_to_bxml(self): if os.environ['PYTHON_VERSION'] == '3.7': expected = 'sip:1-999-123-4567@voip-provider.example.net' else: expected = 'sip:1-999-123-4567@voip-provider.example.net' - assert(expected == self.phone_number.to_bxml()) - + assert(expected == self.sip_uri.to_bxml()) + def test_add_verb(self): with pytest.raises(AttributeError): - self.phone_number.add_verb(self.test_verb) + self.sip_uri.add_verb(self.test_verb) From 33407103e75b53917a2ec312117381382434d4ab Mon Sep 17 00:00:00 2001 From: AJ Rice <53190766+ajrice6713@users.noreply.github.com> Date: Fri, 30 Sep 2022 09:41:39 -0400 Subject: [PATCH 3/7] Add `TerminalVerb` Class --- bandwidth/model/bxml/terminal_verb.py | 35 ++++++++++++++++++++++ bandwidth/model/bxml/verb.py | 8 ++--- bandwidth/model/bxml/verbs/bridge.py | 7 ++--- bandwidth/model/bxml/verbs/phone_number.py | 17 ++--------- bandwidth/model/bxml/verbs/sip_uri.py | 17 ++--------- bandwidth/model/bxml/verbs/tag.py | 15 ++-------- 6 files changed, 49 insertions(+), 50 deletions(-) create mode 100644 bandwidth/model/bxml/terminal_verb.py diff --git a/bandwidth/model/bxml/terminal_verb.py b/bandwidth/model/bxml/terminal_verb.py new file mode 100644 index 00000000..c2cbf3ee --- /dev/null +++ b/bandwidth/model/bxml/terminal_verb.py @@ -0,0 +1,35 @@ +""" +verb.py + +Defines the base verb class for all BXML verbs + +@copyright Bandwidth INC +""" +from .verb import Verb + + +class TerminalVerb(Verb): + """Base class for BXML verbs + """ + + def __init__(self, tag: str, content: str = None, attributes: dict = None, nested_verbs: list[Verb] = None): + """Initialize the verb model + + Args: + tag (str): Name of the XML element + content (str, optional): XML element content. Defaults to None. + attributes (dict, optional): XML element attributes. Defaults to None. + nested_verbs (list[BxmlVerb], optional): XML element children. Defaults to None. + """ + super().__init__(tag=tag, content=content, attributes=attributes, nested_verbs=nested_verbs) + + def add_verb(self, verb: Verb): + """Adding verbs is not allowed for this class + + Args: + verb (Verb): BXML verb + + Raises: + AttributeError: This method is not allowed for + """ + raise AttributeError('Adding verbs is not supported by this verb') diff --git a/bandwidth/model/bxml/verb.py b/bandwidth/model/bxml/verb.py index 7ac3a00d..fe842946 100644 --- a/bandwidth/model/bxml/verb.py +++ b/bandwidth/model/bxml/verb.py @@ -13,7 +13,7 @@ class Verb: """Base class for BXML verbs """ - def __init__(self, tag: str, content: str = None, attributes: dict = None, nested_verbs: list[BxmlVerb] = None): + def __init__(self, tag: str, content: str = None, attributes: dict = None, nested_verbs: list[Verb] = None): """Initialize the verb model Args: @@ -36,7 +36,7 @@ def __len__(self) -> int: int: Length of self._nested_verbs """ return len(self._nested_verbs) - + def __getitem__(self, position) -> Verb: """Override default getitem method. Makes the object iterable. @@ -44,10 +44,10 @@ def __getitem__(self, position) -> Verb: position (int): Desired self._nested_verbs list position Returns: - BxmlVerb: Desired BXML verb + BxmlVerb: Desired BXML verb """ return self._nested_verbs[position] - + def _set_attributes(self, root: ET.Element): """Set XML attributes on an Element diff --git a/bandwidth/model/bxml/verbs/bridge.py b/bandwidth/model/bxml/verbs/bridge.py index 3858348e..2da398a7 100644 --- a/bandwidth/model/bxml/verbs/bridge.py +++ b/bandwidth/model/bxml/verbs/bridge.py @@ -5,10 +5,10 @@ @copyright Bandwidth INC """ -from ..verb import Verb +from ..terminal_verb import TerminalVerb -class Bridge(Verb): +class Bridge(TerminalVerb): def __init__( self, target_call: str, bridge_complete_url: str=None, @@ -62,6 +62,3 @@ def __init__( attributes=self.attributes, nested_verbs=None ) - - def add_verb(self, verb: Verb): - raise AttributeError('Adding verbs is not supported by ') diff --git a/bandwidth/model/bxml/verbs/phone_number.py b/bandwidth/model/bxml/verbs/phone_number.py index d2de4c0d..1aa26ba3 100644 --- a/bandwidth/model/bxml/verbs/phone_number.py +++ b/bandwidth/model/bxml/verbs/phone_number.py @@ -5,10 +5,10 @@ @copyright Bandwidth INC """ -from ..verb import Verb +from ..terminal_verb import TerminalVerb -class PhoneNumber(Verb): +class PhoneNumber(TerminalVerb): def __init__( self, number: str, transfer_answer_url: str=None, transfer_answer_method: str=None, @@ -48,17 +48,6 @@ def __init__( super().__init__( tag="PhoneNumber", content=number, - attributes=self.attributes, + attributes=self.attributes, nested_verbs=None ) - - def add_verb(self, verb: Verb): - """Adding verbs is not allowed for - - Args: - verb (Verb): BXML verb - - Raises: - AttributeError: This method is not allowed for - """ - raise AttributeError('Adding verbs is not supported by ') diff --git a/bandwidth/model/bxml/verbs/sip_uri.py b/bandwidth/model/bxml/verbs/sip_uri.py index f622e7c9..3d19ee5c 100644 --- a/bandwidth/model/bxml/verbs/sip_uri.py +++ b/bandwidth/model/bxml/verbs/sip_uri.py @@ -5,10 +5,10 @@ @copyright Bandwidth INC """ -from ..verb import Verb +from ..terminal_verb import TerminalVerb -class SipUri(Verb): +class SipUri(TerminalVerb): def __init__( self, uri: str, uui: str=None, transfer_answer_url: str=None, transfer_answer_method: str=None, @@ -50,17 +50,6 @@ def __init__( super().__init__( tag="SipUri", content=uri, - attributes=self.attributes, + attributes=self.attributes, nested_verbs=None ) - - def add_verb(self, verb: Verb): - """Adding verbs is not allowed for - - Args: - verb (Verb): BXML verb - - Raises: - AttributeError: This method is not allowed for - """ - raise AttributeError('Adding verbs is not supported by ') diff --git a/bandwidth/model/bxml/verbs/tag.py b/bandwidth/model/bxml/verbs/tag.py index 8db67cd7..2d4bf1dc 100644 --- a/bandwidth/model/bxml/verbs/tag.py +++ b/bandwidth/model/bxml/verbs/tag.py @@ -5,10 +5,10 @@ @copyright Bandwidth INC """ -from ..verb import Verb +from ..terminal_verb import TerminalVerb -class Tag(Verb): +class Tag(TerminalVerb): def __init__(self, content=""): """Initialize a verb @@ -17,14 +17,3 @@ def __init__(self, content=""): content (str, optional): Custom tag value. Defaults to "". """ super().__init__(tag="Tag", content=content, attributes=None, nested_verbs=None) - - def add_verb(self, verb: Verb): - """Adding verbs is not allowed for - - Args: - verb (Verb): BXML verb - - Raises: - AttributeError: This method is not allowed for - """ - raise AttributeError('Adding verbs is not supported by ') From 72ceb80f8ad438f5ad05f0edb9df25d6a3f9c61f Mon Sep 17 00:00:00 2001 From: AJ Rice <53190766+ajrice6713@users.noreply.github.com> Date: Fri, 30 Sep 2022 09:43:40 -0400 Subject: [PATCH 4/7] Update terminal_verb.py --- bandwidth/model/bxml/terminal_verb.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bandwidth/model/bxml/terminal_verb.py b/bandwidth/model/bxml/terminal_verb.py index c2cbf3ee..760693ce 100644 --- a/bandwidth/model/bxml/terminal_verb.py +++ b/bandwidth/model/bxml/terminal_verb.py @@ -5,6 +5,8 @@ @copyright Bandwidth INC """ +from typing import List + from .verb import Verb @@ -12,7 +14,7 @@ class TerminalVerb(Verb): """Base class for BXML verbs """ - def __init__(self, tag: str, content: str = None, attributes: dict = None, nested_verbs: list[Verb] = None): + def __init__(self, tag: str, content: str = None, attributes: dict = None, nested_verbs: List[Verb] = None): """Initialize the verb model Args: From 479ebc3d12a261751f17aa0765add714fc42f64d Mon Sep 17 00:00:00 2001 From: AJ Rice <53190766+ajrice6713@users.noreply.github.com> Date: Fri, 30 Sep 2022 09:58:48 -0400 Subject: [PATCH 5/7] Make all class properties modifiable post init --- bandwidth/model/bxml/verbs/bridge.py | 42 ++++++++++----- bandwidth/model/bxml/verbs/phone_number.py | 36 ++++++++----- bandwidth/model/bxml/verbs/sip_uri.py | 37 ++++++++----- bandwidth/model/bxml/verbs/tag.py | 3 +- bandwidth/model/bxml/verbs/transfer.py | 60 +++++++++++++--------- 5 files changed, 116 insertions(+), 62 deletions(-) diff --git a/bandwidth/model/bxml/verbs/bridge.py b/bandwidth/model/bxml/verbs/bridge.py index 2da398a7..92f60e08 100644 --- a/bandwidth/model/bxml/verbs/bridge.py +++ b/bandwidth/model/bxml/verbs/bridge.py @@ -41,24 +41,38 @@ def __init__( fallback_password (str, optional): _description_. Defaults to None. tag (str, optional): _description_. Defaults to None. """ + self.target_call = target_call + self.bridge_complete_url = bridge_complete_url + self.bridge_complete_method = bridge_complete_method + self.bridge_complete_fallback_url = bridge_complete_fallback_url + self.bridge_complete_fallback_method = bridge_complete_fallback_method + self.bridge_target_complete_url = bridge_target_complete_url + self.bridge_target_complete_method = bridge_target_complete_method + self.bridge_target_complete_fallback_url = bridge_target_complete_fallback_url + self.bridge_target_complete_fallback_method = bridge_target_complete_fallback_method + self.username = username + self.password = password + self.fallback_username = fallback_username + self.fallback_password = fallback_password + self.tag = tag self.attributes = { - "bridgeCompleteUrl": bridge_complete_url, - "bridgeCompleteMethod": bridge_complete_method, - "bridgeCompleteFallbackUrl": bridge_complete_fallback_url, - "bridgeCompleteFallbackMethod": bridge_complete_fallback_method, - "bridgeTargetCompleteUrl": bridge_target_complete_url, - "bridgeTargetCompleteMethod": bridge_target_complete_method, - "bridgeTargetCompleteFallback_url": bridge_target_complete_fallback_url, - "bridgeTargetCompleteFallbackMethod": bridge_target_complete_fallback_method, - "username": username, - "password": password, - "fallbackUsername": fallback_username, - "fallbackUassword": fallback_password, - "tag": tag + "bridgeCompleteUrl": self.bridge_complete_url, + "bridgeCompleteMethod": self.bridge_complete_method, + "bridgeCompleteFallbackUrl": self.bridge_complete_fallback_url, + "bridgeCompleteFallbackMethod": self.bridge_complete_fallback_method, + "bridgeTargetCompleteUrl": self.bridge_target_complete_url, + "bridgeTargetCompleteMethod": self.bridge_target_complete_method, + "bridgeTargetCompleteFallback_url": self.bridge_target_complete_fallback_url, + "bridgeTargetCompleteFallbackMethod": self.bridge_target_complete_fallback_method, + "username": self.username, + "password": self.password, + "fallbackUsername": self.fallback_username, + "fallbackPassword": self.fallback_password, + "tag": self.tag } super().__init__( tag="Bridge", - content=target_call, + content=self.target_call, attributes=self.attributes, nested_verbs=None ) diff --git a/bandwidth/model/bxml/verbs/phone_number.py b/bandwidth/model/bxml/verbs/phone_number.py index 1aa26ba3..7787df86 100644 --- a/bandwidth/model/bxml/verbs/phone_number.py +++ b/bandwidth/model/bxml/verbs/phone_number.py @@ -32,22 +32,34 @@ def __init__( fallback_password (str, optional): The password to send in the HTTP request to transferAnswerFallbackUrl. Defaults to None. tag (str, optional): A custom string that will be sent with these and all future callbacks unless overwritten by a future tag attribute or cleared. May be cleared by setting tag="" Max length 256 characters. Defaults to None. """ + self.number = number + self.transfer_answer_url = transfer_answer_url + self.transfer_answer_method = transfer_answer_method + self.transfer_answer_fallback_url = transfer_answer_fallback_url + self.transfer_answer_fallback_method = transfer_answer_fallback_method + self.transfer_disconnect_url = transfer_disconnect_url + self.transfer_disconnect_method = transfer_disconnect_method + self.username = username + self.password = password + self.fallback_username = fallback_username + self.fallback_password = fallback_password + self.tag = tag self.attributes = { - "transferAnswerUrl": transfer_answer_url, - "transferAnswerMethod": transfer_answer_method, - "transferAnswerFallbackUrl": transfer_answer_fallback_url, - "transferAnswerFallbackMethod": transfer_answer_fallback_method, - "transferDisconnectUrl": transfer_disconnect_url, - "transferDisconnectMethod": transfer_disconnect_method, - "username": username, - "password": password, - "fallbackUsername": fallback_username, - "fallbackPassword": fallback_password, - "tag": tag + "transferAnswerUrl": self.transfer_answer_url, + "transferAnswerMethod": self.transfer_answer_method, + "transferAnswerFallbackUrl": self.transfer_answer_fallback_url, + "transferAnswerFallbackMethod": self.transfer_answer_fallback_method, + "transferDisconnectUrl": self.transfer_disconnect_url, + "transferDisconnectMethod": self.transfer_disconnect_method, + "username": self.username, + "password": self.password, + "fallbackUsername": self.fallback_username, + "fallbackPassword": self.fallback_password, + "tag": self.tag } super().__init__( tag="PhoneNumber", - content=number, + content=self.number, attributes=self.attributes, nested_verbs=None ) diff --git a/bandwidth/model/bxml/verbs/sip_uri.py b/bandwidth/model/bxml/verbs/sip_uri.py index 3d19ee5c..2bbd0793 100644 --- a/bandwidth/model/bxml/verbs/sip_uri.py +++ b/bandwidth/model/bxml/verbs/sip_uri.py @@ -33,23 +33,36 @@ def __init__( fallback_password (str, optional): The password to send in the HTTP request to transferAnswerFallbackUrl. Defaults to None. tag (str, optional): A custom string that will be sent with these and all future callbacks unless overwritten by a future tag attribute or cleared. May be cleared by setting tag="" Max length 256 characters. Defaults to None. """ + self.uri = uri + self.uui = uui + self.transfer_answer_url = transfer_answer_url + self.transfer_answer_method = transfer_answer_method + self.transfer_answer_fallback_url = transfer_answer_fallback_url + self.transfer_answer_fallback_method = transfer_answer_fallback_method + self.transfer_disconnect_url = transfer_disconnect_url + self.transfer_disconnect_method = transfer_disconnect_method + self.username = username + self.password = password + self.fallback_username = fallback_username + self.fallback_password = fallback_password + self.tag = tag self.attributes = { "uui": uui, - "transferAnswerUrl": transfer_answer_url, - "transferAnswerMethod": transfer_answer_method, - "transferAnswerFallbackUrl": transfer_answer_fallback_url, - "transferAnswerFallbackMethod": transfer_answer_fallback_method, - "transferDisconnectUrl": transfer_disconnect_url, - "transferDisconnectMethod": transfer_disconnect_method, - "username": username, - "password": password, - "fallbackUsername": fallback_username, - "fallbackPassword": fallback_password, - "tag": tag + "transferAnswerUrl": self.transfer_answer_url, + "transferAnswerMethod": self.transfer_answer_method, + "transferAnswerFallbackUrl": self.transfer_answer_fallback_url, + "transferAnswerFallbackMethod": self.transfer_answer_fallback_method, + "transferDisconnectUrl": self.transfer_disconnect_url, + "transferDisconnectMethod": self.transfer_disconnect_method, + "username": self.username, + "password": self.password, + "fallbackUsername": self.fallback_username, + "fallbackPassword": self.fallback_password, + "tag": self.tag } super().__init__( tag="SipUri", - content=uri, + content=self.uri, attributes=self.attributes, nested_verbs=None ) diff --git a/bandwidth/model/bxml/verbs/tag.py b/bandwidth/model/bxml/verbs/tag.py index 2d4bf1dc..402a2bcb 100644 --- a/bandwidth/model/bxml/verbs/tag.py +++ b/bandwidth/model/bxml/verbs/tag.py @@ -16,4 +16,5 @@ def __init__(self, content=""): Args: content (str, optional): Custom tag value. Defaults to "". """ - super().__init__(tag="Tag", content=content, attributes=None, nested_verbs=None) + self.content = content + super().__init__(tag="Tag", content=self.content, attributes=None, nested_verbs=None) diff --git a/bandwidth/model/bxml/verbs/transfer.py b/bandwidth/model/bxml/verbs/transfer.py index 601bd38a..7cbf2c9a 100644 --- a/bandwidth/model/bxml/verbs/transfer.py +++ b/bandwidth/model/bxml/verbs/transfer.py @@ -15,13 +15,13 @@ class Transfer(Verb): def __init__( - self, transfer_to: List[Union[PhoneNumber, SipUri]] = [], - transfer_caller_id: str=None, call_timeout: str=None, + self, transfer_to: List[Union[PhoneNumber, SipUri]] = [], + transfer_caller_id: str=None, call_timeout: str=None, transfer_complete_url: str=None, transfer_complete_method: str=None, - transfer_complete_fallback_url: str=None, - transfer_complete_fallback_method: str=None, username: str=None, - password: str=None, fallback_username: str=None, - fallback_password: str=None, tag: str=None, + transfer_complete_fallback_url: str=None, + transfer_complete_fallback_method: str=None, username: str=None, + password: str=None, fallback_username: str=None, + fallback_password: str=None, tag: str=None, diversion_treatment: str=None, diversion_reason: str=None ): """Initialize a verb @@ -58,30 +58,44 @@ def __init__( out-of-service away - This parameter is considered only when diversionTreatment is set to stack. Defaults is unknown. + This parameter is considered only when diversionTreatment is set to stack. Defaults is unknown. Defaults to None. """ + self.transfer_to = transfer_to + self.transfer_caller_id = transfer_caller_id + self.call_timeout = call_timeout + self.transfer_complete_url = transfer_complete_url + self.transfer_complete_method = transfer_complete_method + self.transfer_complete_fallback_url = transfer_complete_fallback_url + self.transfer_complete_fallback_method = transfer_complete_fallback_method + self.username = username + self.password = password + self.fallback_username = fallback_username + self.fallback_password = fallback_password + self.tag = tag + self.diversion_treatment = diversion_treatment + self.diversion_reason = diversion_reason self.attributes = { - "transferCallerId": transfer_caller_id, - "callTimeout": call_timeout, - "transferCompleteUrl": transfer_complete_url, - "transferCompleteMethod": transfer_complete_method, - "transferCompleteFallbackUrl": transfer_complete_fallback_url, - "transferCompleteFallbackMethod": transfer_complete_fallback_method, - "username": username, - "password": password, - "fallbackUsername": fallback_username, - "fallbackPassword": fallback_password, - "tag": tag, - "diversionTreatment": diversion_treatment, - "diversionReason": diversion_reason + "transferCallerId": self.transfer_caller_id, + "callTimeout": self.call_timeout, + "transferCompleteUrl": self.transfer_complete_url, + "transferCompleteMethod": self.transfer_complete_method, + "transferCompleteFallbackUrl": self.transfer_complete_fallback_url, + "transferCompleteFallbackMethod": self.transfer_complete_fallback_method, + "username": self.username, + "password": self.password, + "fallbackUsername": self.fallback_username, + "fallbackPassword": self.fallback_password, + "tag": self.tag, + "diversionTreatment": self.diversion_treatment, + "diversionReason": self.diversion_reason } super().__init__( tag="Transfer", content=None, - attributes=self.attributes, - nested_verbs=transfer_to + attributes=self.attributes, + nested_verbs=self.transfer_to ) - + def add_transfer_recipient(self, recipient: Union[PhoneNumber, SipUri]): super().add_verb(recipient) From 165af41a252477678bfb0b29edbf87582b75b3dd Mon Sep 17 00:00:00 2001 From: AJ Rice <53190766+ajrice6713@users.noreply.github.com> Date: Fri, 30 Sep 2022 10:14:06 -0400 Subject: [PATCH 6/7] Update terminal_verb.py --- bandwidth/model/bxml/terminal_verb.py | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/bandwidth/model/bxml/terminal_verb.py b/bandwidth/model/bxml/terminal_verb.py index 760693ce..a186ecb4 100644 --- a/bandwidth/model/bxml/terminal_verb.py +++ b/bandwidth/model/bxml/terminal_verb.py @@ -1,12 +1,10 @@ """ -verb.py +terminal_verb.py -Defines the base verb class for all BXML verbs +Defines the terminal_verb class BXML verbs that cant have nested_verbs @copyright Bandwidth INC """ -from typing import List - from .verb import Verb @@ -14,16 +12,15 @@ class TerminalVerb(Verb): """Base class for BXML verbs """ - def __init__(self, tag: str, content: str = None, attributes: dict = None, nested_verbs: List[Verb] = None): + def __init__(self, tag: str, content: str = None, attributes: dict = None): """Initialize the verb model Args: tag (str): Name of the XML element content (str, optional): XML element content. Defaults to None. attributes (dict, optional): XML element attributes. Defaults to None. - nested_verbs (list[BxmlVerb], optional): XML element children. Defaults to None. """ - super().__init__(tag=tag, content=content, attributes=attributes, nested_verbs=nested_verbs) + super().__init__(tag=tag, content=content, attributes=attributes, nested_verbs=None) def add_verb(self, verb: Verb): """Adding verbs is not allowed for this class From fa9e5b64b129d37af14f467ce47c564fc0a36ad5 Mon Sep 17 00:00:00 2001 From: AJ Rice <53190766+ajrice6713@users.noreply.github.com> Date: Fri, 30 Sep 2022 10:15:11 -0400 Subject: [PATCH 7/7] Cleanup TerminalVerb --- bandwidth/model/bxml/verbs/bridge.py | 3 +-- bandwidth/model/bxml/verbs/phone_number.py | 3 +-- bandwidth/model/bxml/verbs/sip_uri.py | 3 +-- bandwidth/model/bxml/verbs/tag.py | 2 +- 4 files changed, 4 insertions(+), 7 deletions(-) diff --git a/bandwidth/model/bxml/verbs/bridge.py b/bandwidth/model/bxml/verbs/bridge.py index 92f60e08..12e6213e 100644 --- a/bandwidth/model/bxml/verbs/bridge.py +++ b/bandwidth/model/bxml/verbs/bridge.py @@ -73,6 +73,5 @@ def __init__( super().__init__( tag="Bridge", content=self.target_call, - attributes=self.attributes, - nested_verbs=None + attributes=self.attributes ) diff --git a/bandwidth/model/bxml/verbs/phone_number.py b/bandwidth/model/bxml/verbs/phone_number.py index 7787df86..46f421be 100644 --- a/bandwidth/model/bxml/verbs/phone_number.py +++ b/bandwidth/model/bxml/verbs/phone_number.py @@ -60,6 +60,5 @@ def __init__( super().__init__( tag="PhoneNumber", content=self.number, - attributes=self.attributes, - nested_verbs=None + attributes=self.attributes ) diff --git a/bandwidth/model/bxml/verbs/sip_uri.py b/bandwidth/model/bxml/verbs/sip_uri.py index 2bbd0793..42c9db10 100644 --- a/bandwidth/model/bxml/verbs/sip_uri.py +++ b/bandwidth/model/bxml/verbs/sip_uri.py @@ -63,6 +63,5 @@ def __init__( super().__init__( tag="SipUri", content=self.uri, - attributes=self.attributes, - nested_verbs=None + attributes=self.attributes ) diff --git a/bandwidth/model/bxml/verbs/tag.py b/bandwidth/model/bxml/verbs/tag.py index 402a2bcb..af11ed15 100644 --- a/bandwidth/model/bxml/verbs/tag.py +++ b/bandwidth/model/bxml/verbs/tag.py @@ -17,4 +17,4 @@ def __init__(self, content=""): content (str, optional): Custom tag value. Defaults to "". """ self.content = content - super().__init__(tag="Tag", content=self.content, attributes=None, nested_verbs=None) + super().__init__(tag="Tag", content=self.content, attributes=None)