Skip to content

Commit 6f9c47d

Browse files
authored
DX-2887 Create <Bridge> BXML (#116)
* DX-2887 Refactor `<Bridge>` BXML * Finish `<Bridge>` and test * Add `TerminalVerb` Class * Update terminal_verb.py * Make all class properties modifiable post init * Update terminal_verb.py * Cleanup TerminalVerb
1 parent ad0adaa commit 6f9c47d

File tree

10 files changed

+253
-101
lines changed

10 files changed

+253
-101
lines changed
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
"""
2+
terminal_verb.py
3+
4+
Defines the terminal_verb class BXML verbs that cant have nested_verbs
5+
6+
@copyright Bandwidth INC
7+
"""
8+
from .verb import Verb
9+
10+
11+
class TerminalVerb(Verb):
12+
"""Base class for BXML verbs
13+
"""
14+
15+
def __init__(self, tag: str, content: str = None, attributes: dict = None):
16+
"""Initialize the verb model
17+
18+
Args:
19+
tag (str): Name of the XML element
20+
content (str, optional): XML element content. Defaults to None.
21+
attributes (dict, optional): XML element attributes. Defaults to None.
22+
"""
23+
super().__init__(tag=tag, content=content, attributes=attributes, nested_verbs=None)
24+
25+
def add_verb(self, verb: Verb):
26+
"""Adding verbs is not allowed for this class
27+
28+
Args:
29+
verb (Verb): BXML verb
30+
31+
Raises:
32+
AttributeError: This method is not allowed for <SipUri>
33+
"""
34+
raise AttributeError('Adding verbs is not supported by this verb')

bandwidth/model/bxml/verb.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class Verb:
1313
"""Base class for BXML verbs
1414
"""
1515

16-
def __init__(self, tag: str, content: str = None, attributes: dict = None, nested_verbs: list[BxmlVerb] = None):
16+
def __init__(self, tag: str, content: str = None, attributes: dict = None, nested_verbs: list[Verb] = None):
1717
"""Initialize the verb model
1818
1919
Args:
@@ -36,18 +36,18 @@ def __len__(self) -> int:
3636
int: Length of self._nested_verbs
3737
"""
3838
return len(self._nested_verbs)
39-
39+
4040
def __getitem__(self, position) -> Verb:
4141
"""Override default getitem method. Makes the object iterable.
4242
4343
Args:
4444
position (int): Desired self._nested_verbs list position
4545
4646
Returns:
47-
BxmlVerb: Desired BXML verb
47+
BxmlVerb: Desired BXML verb
4848
"""
4949
return self._nested_verbs[position]
50-
50+
5151
def _set_attributes(self, root: ET.Element):
5252
"""Set XML attributes on an Element
5353

bandwidth/model/bxml/verbs/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
from .bridge import Bridge
12
from .phone_number import PhoneNumber
23
from .sip_uri import SipUri
34
from .tag import Tag
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
"""
2+
bridge.py
3+
4+
Bandwidth's Bridge BXML verb
5+
6+
@copyright Bandwidth INC
7+
"""
8+
from ..terminal_verb import TerminalVerb
9+
10+
11+
class Bridge(TerminalVerb):
12+
13+
def __init__(
14+
self, target_call: str, bridge_complete_url: str=None,
15+
bridge_complete_method: str=None,
16+
bridge_complete_fallback_url: str=None,
17+
bridge_complete_fallback_method: str=None,
18+
bridge_target_complete_url: str=None,
19+
bridge_target_complete_method: str=None,
20+
bridge_target_complete_fallback_url: str=None,
21+
bridge_target_complete_fallback_method: str=None,
22+
username: str=None, password: str=None,
23+
fallback_username: str=None, fallback_password: str=None,
24+
tag: str=None
25+
):
26+
"""Initialize a <Bridge> verb
27+
28+
Args:
29+
target_call (str): _description_
30+
bridge_complete_url (str, optional): _description_. Defaults to None.
31+
bridge_complete_method (str, optional): _description_. Defaults to None.
32+
bridge_complete_fallback_url (str, optional): _description_. Defaults to None.
33+
bridge_complete_fallback_method (str, optional): _description_. Defaults to None.
34+
bridge_target_complete_url (str, optional): _description_. Defaults to None.
35+
bridge_target_complete_method (str, optional): _description_. Defaults to None.
36+
bridge_target_complete_fallback_url (str, optional): _description_. Defaults to None.
37+
bridge_target_complete_fallback_method (str, optional): _description_. Defaults to None.
38+
username (str, optional): _description_. Defaults to None.
39+
password (str, optional): _description_. Defaults to None.
40+
fallback_username (str, optional): _description_. Defaults to None.
41+
fallback_password (str, optional): _description_. Defaults to None.
42+
tag (str, optional): _description_. Defaults to None.
43+
"""
44+
self.target_call = target_call
45+
self.bridge_complete_url = bridge_complete_url
46+
self.bridge_complete_method = bridge_complete_method
47+
self.bridge_complete_fallback_url = bridge_complete_fallback_url
48+
self.bridge_complete_fallback_method = bridge_complete_fallback_method
49+
self.bridge_target_complete_url = bridge_target_complete_url
50+
self.bridge_target_complete_method = bridge_target_complete_method
51+
self.bridge_target_complete_fallback_url = bridge_target_complete_fallback_url
52+
self.bridge_target_complete_fallback_method = bridge_target_complete_fallback_method
53+
self.username = username
54+
self.password = password
55+
self.fallback_username = fallback_username
56+
self.fallback_password = fallback_password
57+
self.tag = tag
58+
self.attributes = {
59+
"bridgeCompleteUrl": self.bridge_complete_url,
60+
"bridgeCompleteMethod": self.bridge_complete_method,
61+
"bridgeCompleteFallbackUrl": self.bridge_complete_fallback_url,
62+
"bridgeCompleteFallbackMethod": self.bridge_complete_fallback_method,
63+
"bridgeTargetCompleteUrl": self.bridge_target_complete_url,
64+
"bridgeTargetCompleteMethod": self.bridge_target_complete_method,
65+
"bridgeTargetCompleteFallback_url": self.bridge_target_complete_fallback_url,
66+
"bridgeTargetCompleteFallbackMethod": self.bridge_target_complete_fallback_method,
67+
"username": self.username,
68+
"password": self.password,
69+
"fallbackUsername": self.fallback_username,
70+
"fallbackPassword": self.fallback_password,
71+
"tag": self.tag
72+
}
73+
super().__init__(
74+
tag="Bridge",
75+
content=self.target_call,
76+
attributes=self.attributes
77+
)

bandwidth/model/bxml/verbs/phone_number.py

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
66
@copyright Bandwidth INC
77
"""
8-
from ..verb import Verb
8+
from ..terminal_verb import TerminalVerb
99

1010

11-
class PhoneNumber(Verb):
11+
class PhoneNumber(TerminalVerb):
1212

1313
def __init__(
1414
self, number: str, transfer_answer_url: str=None, transfer_answer_method: str=None,
@@ -32,33 +32,33 @@ def __init__(
3232
fallback_password (str, optional): The password to send in the HTTP request to transferAnswerFallbackUrl. Defaults to None.
3333
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.
3434
"""
35+
self.number = number
36+
self.transfer_answer_url = transfer_answer_url
37+
self.transfer_answer_method = transfer_answer_method
38+
self.transfer_answer_fallback_url = transfer_answer_fallback_url
39+
self.transfer_answer_fallback_method = transfer_answer_fallback_method
40+
self.transfer_disconnect_url = transfer_disconnect_url
41+
self.transfer_disconnect_method = transfer_disconnect_method
42+
self.username = username
43+
self.password = password
44+
self.fallback_username = fallback_username
45+
self.fallback_password = fallback_password
46+
self.tag = tag
3547
self.attributes = {
36-
"transferAnswerUrl": transfer_answer_url,
37-
"transferAnswerMethod": transfer_answer_method,
38-
"transferAnswerFallbackUrl": transfer_answer_fallback_url,
39-
"transferAnswerFallbackMethod": transfer_answer_fallback_method,
40-
"transferDisconnectUrl": transfer_disconnect_url,
41-
"transferDisconnectMethod": transfer_disconnect_method,
42-
"username": username,
43-
"password": password,
44-
"fallbackUsername": fallback_username,
45-
"fallbackPassword": fallback_password,
46-
"tag": tag
48+
"transferAnswerUrl": self.transfer_answer_url,
49+
"transferAnswerMethod": self.transfer_answer_method,
50+
"transferAnswerFallbackUrl": self.transfer_answer_fallback_url,
51+
"transferAnswerFallbackMethod": self.transfer_answer_fallback_method,
52+
"transferDisconnectUrl": self.transfer_disconnect_url,
53+
"transferDisconnectMethod": self.transfer_disconnect_method,
54+
"username": self.username,
55+
"password": self.password,
56+
"fallbackUsername": self.fallback_username,
57+
"fallbackPassword": self.fallback_password,
58+
"tag": self.tag
4759
}
4860
super().__init__(
4961
tag="PhoneNumber",
50-
content=number,
51-
attributes=self.attributes,
52-
nested_verbs=None
62+
content=self.number,
63+
attributes=self.attributes
5364
)
54-
55-
def add_verb(self, verb: Verb):
56-
"""Adding verbs is not allowed for <PhoneNumber>
57-
58-
Args:
59-
verb (Verb): BXML verb
60-
61-
Raises:
62-
AttributeError: This method is not allowed for <PhoneNumber>
63-
"""
64-
raise AttributeError('Adding verbs is not supported by <PhoneNumber>')

bandwidth/model/bxml/verbs/sip_uri.py

Lines changed: 28 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55
66
@copyright Bandwidth INC
77
"""
8-
from ..verb import Verb
8+
from ..terminal_verb import TerminalVerb
99

1010

11-
class SipUri(Verb):
11+
class SipUri(TerminalVerb):
1212

1313
def __init__(
1414
self, uri: str, uui: str=None, transfer_answer_url: str=None, transfer_answer_method: str=None,
@@ -33,34 +33,35 @@ def __init__(
3333
fallback_password (str, optional): The password to send in the HTTP request to transferAnswerFallbackUrl. Defaults to None.
3434
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.
3535
"""
36+
self.uri = uri
37+
self.uui = uui
38+
self.transfer_answer_url = transfer_answer_url
39+
self.transfer_answer_method = transfer_answer_method
40+
self.transfer_answer_fallback_url = transfer_answer_fallback_url
41+
self.transfer_answer_fallback_method = transfer_answer_fallback_method
42+
self.transfer_disconnect_url = transfer_disconnect_url
43+
self.transfer_disconnect_method = transfer_disconnect_method
44+
self.username = username
45+
self.password = password
46+
self.fallback_username = fallback_username
47+
self.fallback_password = fallback_password
48+
self.tag = tag
3649
self.attributes = {
3750
"uui": uui,
38-
"transferAnswerUrl": transfer_answer_url,
39-
"transferAnswerMethod": transfer_answer_method,
40-
"transferAnswerFallbackUrl": transfer_answer_fallback_url,
41-
"transferAnswerFallbackMethod": transfer_answer_fallback_method,
42-
"transferDisconnectUrl": transfer_disconnect_url,
43-
"transferDisconnectMethod": transfer_disconnect_method,
44-
"username": username,
45-
"password": password,
46-
"fallbackUsername": fallback_username,
47-
"fallbackPassword": fallback_password,
48-
"tag": tag
51+
"transferAnswerUrl": self.transfer_answer_url,
52+
"transferAnswerMethod": self.transfer_answer_method,
53+
"transferAnswerFallbackUrl": self.transfer_answer_fallback_url,
54+
"transferAnswerFallbackMethod": self.transfer_answer_fallback_method,
55+
"transferDisconnectUrl": self.transfer_disconnect_url,
56+
"transferDisconnectMethod": self.transfer_disconnect_method,
57+
"username": self.username,
58+
"password": self.password,
59+
"fallbackUsername": self.fallback_username,
60+
"fallbackPassword": self.fallback_password,
61+
"tag": self.tag
4962
}
5063
super().__init__(
5164
tag="SipUri",
52-
content=uri,
53-
attributes=self.attributes,
54-
nested_verbs=None
65+
content=self.uri,
66+
attributes=self.attributes
5567
)
56-
57-
def add_verb(self, verb: Verb):
58-
"""Adding verbs is not allowed for <SipUri>
59-
60-
Args:
61-
verb (Verb): BXML verb
62-
63-
Raises:
64-
AttributeError: This method is not allowed for <SipUri>
65-
"""
66-
raise AttributeError('Adding verbs is not supported by <SipUri>')

bandwidth/model/bxml/verbs/tag.py

Lines changed: 4 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,26 +5,16 @@
55
66
@copyright Bandwidth INC
77
"""
8-
from ..verb import Verb
8+
from ..terminal_verb import TerminalVerb
99

1010

11-
class Tag(Verb):
11+
class Tag(TerminalVerb):
1212

1313
def __init__(self, content=""):
1414
"""Initialize a <Tag> verb
1515
1616
Args:
1717
content (str, optional): Custom tag value. Defaults to "".
1818
"""
19-
super().__init__(tag="Tag", content=content, attributes=None, nested_verbs=None)
20-
21-
def add_verb(self, verb: Verb):
22-
"""Adding verbs is not allowed for <Tag>
23-
24-
Args:
25-
verb (Verb): BXML verb
26-
27-
Raises:
28-
AttributeError: This method is not allowed for <Tag>
29-
"""
30-
raise AttributeError('Adding verbs is not supported by <Tag>')
19+
self.content = content
20+
super().__init__(tag="Tag", content=self.content, attributes=None)

0 commit comments

Comments
 (0)