diff options
author | Doug Hellmann <doug@doughellmann.com> | 2015-01-02 14:24:57 -0500 |
---|---|---|
committer | Doug Hellmann <doug@doughellmann.com> | 2015-01-12 12:50:41 -0500 |
commit | e55a83e832d888e1a5fb087863590b08e7bd6090 (patch) | |
tree | 547db8b3723f468022f7f9d921b454910ec988fd /oslo_messaging/target.py | |
parent | 8102f25dd267f8f21b521d18930af921aef711db (diff) | |
download | oslo-messaging-e55a83e832d888e1a5fb087863590b08e7bd6090.tar.gz |
Move files out of the namespace package
Move the public API out of oslo.messaging to oslo_messaging. Retain
the ability to import from the old namespace package for backwards
compatibility for this release cycle.
bp/drop-namespace-packages
Co-authored-by: Mehdi Abaakouk <mehdi.abaakouk@enovance.com>
Change-Id: Ia562010c152a214f1c0fed767c82022c7c2c52e7
Diffstat (limited to 'oslo_messaging/target.py')
-rw-r--r-- | oslo_messaging/target.py | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/oslo_messaging/target.py b/oslo_messaging/target.py new file mode 100644 index 0000000..f37a2b2 --- /dev/null +++ b/oslo_messaging/target.py @@ -0,0 +1,94 @@ + +# Copyright 2013 Red Hat, Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + + +class Target(object): + + """Identifies the destination of messages. + + A Target encapsulates all the information to identify where a message + should be sent or what messages a server is listening for. + + Different subsets of the information encapsulated in a Target object is + relevant to various aspects of the API: + + creating a server: + topic and server is required; exchange is optional + an endpoint's target: + namespace and version is optional + client sending a message: + topic is required, all other attributes optional + + Its attributes are: + + :param exchange: A scope for topics. Leave unspecified to default to the + control_exchange configuration option. + :type exchange: str + :param topic: A name which identifies the set of interfaces exposed by a + server. Multiple servers may listen on a topic and messages will be + dispatched to one of the servers in a round-robin fashion. + :type topic: str + :param namespace: Identifies a particular interface (i.e. set of methods) + exposed by a server. The default interface has no namespace identifier + and is referred to as the null namespace. + :type namespace: str + :param version: Interfaces have a major.minor version number associated + with them. A minor number increment indicates a backwards compatible + change and an incompatible change is indicated by a major number bump. + Servers may implement multiple major versions and clients may require + indicate that their message requires a particular minimum minor version. + :type version: str + :param server: Clients can request that a message be directed to a specific + server, rather than just one of a pool of servers listening on the topic. + :type server: str + :param fanout: Clients may request that a message be directed to all + servers listening on a topic by setting fanout to ``True``, rather than + just one of them. + :type fanout: bool + """ + + def __init__(self, exchange=None, topic=None, namespace=None, + version=None, server=None, fanout=None): + self.exchange = exchange + self.topic = topic + self.namespace = namespace + self.version = version + self.server = server + self.fanout = fanout + + def __call__(self, **kwargs): + for a in ('exchange', 'topic', 'namespace', + 'version', 'server', 'fanout'): + kwargs.setdefault(a, getattr(self, a)) + return Target(**kwargs) + + def __eq__(self, other): + return vars(self) == vars(other) + + def __ne__(self, other): + return not self == other + + def __repr__(self): + attrs = [] + for a in ['exchange', 'topic', 'namespace', + 'version', 'server', 'fanout']: + v = getattr(self, a) + if v: + attrs.append((a, v)) + values = ', '.join(['%s=%s' % i for i in attrs]) + return '<Target ' + values + '>' + + def __hash__(self): + return id(self) |