This is an automated email from the ASF dual-hosted git repository. astitcher pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
commit 789958cb3c9bf23079a9f88d3e31f5a6b3ccd8b1 Author: Andrew Stitcher <[email protected]> AuthorDate: Tue Mar 7 17:55:17 2023 +0000 PROTON-2690: Make offered & desired capabilities arrays on the wire --- python/examples/server.py | 4 ++-- python/proton/_data.py | 15 ++++++++++++++- python/proton/_endpoints.py | 20 ++++++++------------ 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/python/examples/server.py b/python/examples/server.py index 2e95f795c..4aca80dfc 100755 --- a/python/examples/server.py +++ b/python/examples/server.py @@ -20,7 +20,7 @@ import optparse import sys -from proton import Message, Url, Condition +from proton import Condition, Message, Url from proton.handlers import MessagingHandler from proton.reactor import Container @@ -36,7 +36,7 @@ class Server(MessagingHandler): def on_start(self, event): print("Listening on", self.url) self.container = event.container - self.conn = event.container.connect(self.url, desired_capabilities=["ANONYMOUS-RELAY"]) + self.conn = event.container.connect(self.url, desired_capabilities="ANONYMOUS-RELAY") def on_connection_opened(self, event): if event.connection.remote_offered_capabilities and 'ANONYMOUS-RELAY' in event.connection.remote_offered_capabilities: diff --git a/python/proton/_data.py b/python/proton/_data.py index 8e8355f7e..b6af0b3af 100644 --- a/python/proton/_data.py +++ b/python/proton/_data.py @@ -510,7 +510,9 @@ class SymbolList(list): ) -> None: super(SymbolList, self).__init__() self.raise_on_error = raise_on_error - if t: + if isinstance(t, (str, symbol)): + self.append(t) + else: self.extend(t) def _check_list(self, t: Iterable[Any]) -> List[Any]: @@ -521,6 +523,9 @@ class SymbolList(list): l.append(_check_is_symbol(v, self.raise_on_error)) return l + def to_array(self): + return Array(UNDESCRIBED, PN_SYMBOL, *self) + def append(self, v: str) -> None: """ Add a single value v to the end of the list """ return super(SymbolList, self).append(_check_is_symbol(v, self.raise_on_error)) @@ -541,6 +546,10 @@ class SymbolList(list): """ Handles list1 += list2 """ return super(SymbolList, self).__iadd__(self._check_list(t)) + def __eq__(self, other): + """ Handles list1 == list2 """ + return super().__eq__(SymbolList(other, raise_on_error=False)) + def __setitem__(self, i: int, t: Any) -> None: """ Handles list[i] = v """ return super(SymbolList, self).__setitem__(i, _check_is_symbol(t, self.raise_on_error)) @@ -1646,6 +1655,10 @@ def dat2obj(dimpl): def obj2dat(obj, dimpl): + if isinstance(obj, SymbolList): + if len(obj) == 0: + return + obj = obj.to_array() if obj is not None: d = Data(dimpl) d.put_object(obj) diff --git a/python/proton/_endpoints.py b/python/proton/_endpoints.py index 4f6ac20ca..ee4defe42 100644 --- a/python/proton/_endpoints.py +++ b/python/proton/_endpoints.py @@ -174,8 +174,8 @@ class Connection(Wrapper, Endpoint): def _init(self) -> None: Endpoint._init(self) - self.offered_capabilities = None - self.desired_capabilities = None + self.offered_capabilities_list = None + self.desired_capabilities_list = None self.properties = None self.url = None self._acceptor = None @@ -333,7 +333,8 @@ class Connection(Wrapper, Endpoint): :type: :class:`Data` """ - return dat2obj(pn_connection_remote_offered_capabilities(self._impl)) + c = dat2obj(pn_connection_remote_offered_capabilities(self._impl)) + return c and SymbolList(c) @property def remote_desired_capabilities(self): @@ -347,7 +348,8 @@ class Connection(Wrapper, Endpoint): :type: :class:`Data` """ - return dat2obj(pn_connection_remote_desired_capabilities(self._impl)) + c = dat2obj(pn_connection_remote_desired_capabilities(self._impl)) + return c and SymbolList(c) @property def remote_properties(self): @@ -508,10 +510,7 @@ class Connection(Wrapper, Endpoint): self, offered_capability_list: Optional[Union['Array', List['symbol'], SymbolList, List[str]]] ) -> None: - if isinstance(offered_capability_list, list): - self.offered_capabilities_list = SymbolList(offered_capability_list, raise_on_error=False) - else: - self.offered_capabilities_list = offered_capability_list + self.offered_capabilities_list = SymbolList(offered_capability_list) @property def desired_capabilities(self) -> Optional[Union['Array', SymbolList]]: @@ -528,10 +527,7 @@ class Connection(Wrapper, Endpoint): self, desired_capability_list: Optional[Union['Array', List['symbol'], SymbolList, List[str]]] ) -> None: - if isinstance(desired_capability_list, list): - self.desired_capabilities_list = SymbolList(desired_capability_list, raise_on_error=False) - else: - self.desired_capabilities_list = desired_capability_list + self.desired_capabilities_list = SymbolList(desired_capability_list) @property def properties(self) -> Optional[PropertyDict]: --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
