summaryrefslogtreecommitdiff
path: root/oslo_messaging/target.py
diff options
context:
space:
mode:
authorDoug Hellmann <doug@doughellmann.com>2015-01-02 14:24:57 -0500
committerDoug Hellmann <doug@doughellmann.com>2015-01-12 12:50:41 -0500
commite55a83e832d888e1a5fb087863590b08e7bd6090 (patch)
tree547db8b3723f468022f7f9d921b454910ec988fd /oslo_messaging/target.py
parent8102f25dd267f8f21b521d18930af921aef711db (diff)
downloadoslo-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.py94
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)