Ejemplo n.º 1
0
    def __init__(self,
                 uri,
                 ssl_options=None,
                 client_properties=None,
                 lazy=False):
        """
        :param str uri: AMQP Connection string

        :raises TypeError: Raises on invalid uri.
        :raises ValueError: Raises on invalid uri.
        :raises AttributeError: Raises on invalid uri.
        :raises AMQPConnectionError: Raises if the connection
                                     encountered an error.
        """
        uri = compatibility.patch_uri(uri)
        parsed_uri = urlparse.urlparse(uri)
        use_ssl = parsed_uri.scheme == 'https'
        hostname = parsed_uri.hostname or 'localhost'
        port = parsed_uri.port or 5672
        username = urlparse.unquote(parsed_uri.username or 'guest')
        password = urlparse.unquote(parsed_uri.password or 'guest')
        kwargs = self._parse_uri_options(parsed_uri, use_ssl, ssl_options)
        super(UriConnection,
              self).__init__(hostname,
                             username,
                             password,
                             port,
                             client_properties=client_properties,
                             lazy=lazy,
                             **kwargs)
Ejemplo n.º 2
0
    def _parse_uri_options(self, parsed_uri, use_ssl=False, ssl_options=None):
        """Parse the uri options.

        :param parsed_uri:
        :param bool use_ssl:
        :return:
        """
        ssl_options = ssl_options or {}
        kwargs = urlparse.parse_qs(parsed_uri.query)
        vhost = urlparse.unquote(parsed_uri.path[1:]) or DEFAULT_VIRTUAL_HOST
        options = {
            'ssl': use_ssl,
            'virtual_host': vhost,
            'heartbeat': int(kwargs.pop('heartbeat',
                                        [DEFAULT_HEARTBEAT_INTERVAL])[0]),
            'timeout': int(kwargs.pop('timeout',
                                      [DEFAULT_SOCKET_TIMEOUT])[0])
        }
        if use_ssl:
            if not compatibility.SSL_SUPPORTED:
                raise AMQPConnectionError(
                    'Python not compiled with support '
                    'for TLSv1 or higher'
                )
            ssl_options.update(self._parse_ssl_options(kwargs))
            options['ssl_options'] = ssl_options
        return options
Ejemplo n.º 3
0
    def _parse_uri_options(self, parsed_uri, use_ssl=False, ssl_options=None):
        """Parse the uri options.

        :param parsed_uri:
        :param bool use_ssl:
        :return:
        """
        ssl_options = ssl_options or {}
        kwargs = urlparse.parse_qs(parsed_uri.query)
        vhost = urlparse.unquote(parsed_uri.path[1:]) or DEFAULT_VIRTUAL_HOST
        options = {
            'ssl':
            use_ssl,
            'virtual_host':
            vhost,
            'heartbeat':
            int(kwargs.pop('heartbeat', [DEFAULT_HEARTBEAT_INTERVAL])[0]),
            'timeout':
            int(kwargs.pop('timeout', [DEFAULT_SOCKET_TIMEOUT])[0])
        }
        if use_ssl:
            if not compatibility.SSL_SUPPORTED:
                raise AMQPConnectionError('Python not compiled with support '
                                          'for TLSv1 or higher')
            ssl_options.update(self._parse_ssl_options(kwargs))
            options['ssl_options'] = ssl_options
        return options
Ejemplo n.º 4
0
    def declare(self,
                queue='',
                virtual_host='/',
                passive=False,
                durable=False,
                auto_delete=False,
                arguments=None):
        """Declare a Queue.

        :param str queue: Queue name
        :param str virtual_host: Virtual host name
        :param bool passive: Do not create
        :param bool durable: Durable queue
        :param bool auto_delete: Automatically delete when not in use
        :param dict|None arguments: Queue key/value arguments

        :raises ApiError: Raises if the remote server encountered an error.
        :raises ApiConnectionError: Raises if there was a connectivity issue.

        :rtype: dict
        """
        virtual_host = quote(virtual_host, '')
        if passive:
            return self.get(queue, virtual_host=virtual_host)

        queue_payload = json.dumps({
            'durable': durable,
            'auto_delete': auto_delete,
            'arguments': arguments or {},
            'vhost': urlparse.unquote(virtual_host)
        })
        return self.http_client.put(API_QUEUE % (virtual_host, queue),
                                    payload=queue_payload)
Ejemplo n.º 5
0
    def declare(self, queue='', virtual_host='/', passive=False, durable=False,
                auto_delete=False, arguments=None):
        """Declare a Queue.

        :param str queue: Queue name
        :param str virtual_host: Virtual host name
        :param bool passive: Do not create
        :param bool durable: Durable queue
        :param bool auto_delete: Automatically delete when not in use
        :param dict|None arguments: Queue key/value arguments

        :raises ApiError: Raises if the remote server encountered an error.
        :raises ApiConnectionError: Raises if there was a connectivity issue.

        :rtype: dict
        """
        virtual_host = quote(virtual_host, '')
        if passive:
            return self.get(queue, virtual_host=virtual_host)

        queue_payload = json.dumps(
            {
                'durable': durable,
                'auto_delete': auto_delete,
                'arguments': arguments or {},
                'vhost': urlparse.unquote(virtual_host)
            }
        )
        return self.http_client.put(
            API_QUEUE % (
                virtual_host,
                queue
            ),
            payload=queue_payload)
Ejemplo n.º 6
0
    def __init__(self, uri, ssl_options=None, lazy=False):
        """
        :param str uri: AMQP Connection string

        :raises TypeError: Raises on invalid uri.
        :raises ValueError: Raises on invalid uri.
        :raises AttributeError: Raises on invalid uri.
        :raises AMQPConnectionError: Raises if the connection
                                     encountered an error.
        """
        uri = compatibility.patch_uri(uri)
        parsed_uri = urlparse.urlparse(uri)
        use_ssl = parsed_uri.scheme == 'https'
        hostname = parsed_uri.hostname or 'localhost'
        port = parsed_uri.port or 5672
        username = urlparse.unquote(parsed_uri.username or 'guest')
        password = urlparse.unquote(parsed_uri.password or 'guest')
        kwargs = self._parse_uri_options(parsed_uri, use_ssl, ssl_options)
        super(UriConnection, self).__init__(hostname, username,
                                            password, port,
                                            lazy=lazy,
                                            **kwargs)
Ejemplo n.º 7
0
    def _parse_uri_options(self, parsed_uri, use_ssl):
        """Parse the uri options.

        :param parsed_uri:
        :param bool use_ssl:
        :return:
        """
        kwargs = urlparse.parse_qs(parsed_uri.query)
        options = {
            'ssl': use_ssl,
            'virtual_host': urlparse.unquote(parsed_uri.path[1:]) or '/',
            'heartbeat': int(kwargs.pop('heartbeat', [60])[0]),
            'timeout': int(kwargs.pop('timeout', [30])[0])
        }
        if use_ssl:
            if not compatibility.SSL_SUPPORTED:
                raise AMQPConnectionError('Python not compiled with support '
                                          'for TLSv1 or higher')
            options['ssl_options'] = self._parse_ssl_options(kwargs)
        return options
Ejemplo n.º 8
0
    def _parse_uri_options(self, parsed_uri, use_ssl):
        """Parse the uri options.

        :param parsed_uri:
        :param bool use_ssl:
        :return:
        """
        kwargs = urlparse.parse_qs(parsed_uri.query)
        options = {
            'ssl': use_ssl,
            'virtual_host': urlparse.unquote(parsed_uri.path[1:]) or '/',
            'heartbeat': int(kwargs.pop('heartbeat', [60])[0]),
            'timeout': int(kwargs.pop('timeout', [30])[0])
        }
        if use_ssl:
            if not compatibility.SSL_SUPPORTED:
                raise AMQPConnectionError(
                    'Python not compiled with support '
                    'for TLSv1 or higher'
                )
            options['ssl_options'] = self._parse_ssl_options(kwargs)
        return options
Ejemplo n.º 9
0
    def declare(self,
                exchange='',
                exchange_type='direct',
                virtual_host='/',
                passive=False,
                durable=False,
                auto_delete=False,
                internal=False,
                arguments=None):
        """Declare an Exchange.

        :param str exchange: Exchange name
        :param str exchange_type: Exchange type
        :param str virtual_host: Virtual host name
        :param bool passive: Do not create
        :param bool durable: Durable exchange
        :param bool auto_delete: Automatically delete when not in use
        :param bool internal: Is the exchange for use by the broker only.
        :param dict|None arguments: Exchange key/value arguments

        :raises ApiError: Raises if the remote server encountered an error.
        :raises ApiConnectionError: Raises if there was a connectivity issue.

        :rtype: None
        """
        virtual_host = quote(virtual_host, '')
        if passive:
            return self.get(exchange, virtual_host=virtual_host)
        exchange_payload = json.dumps({
            'durable': durable,
            'auto_delete': auto_delete,
            'internal': internal,
            'type': exchange_type,
            'arguments': arguments or {},
            'vhost': urlparse.unquote(virtual_host)
        })
        return self.http_client.put(API_EXCHANGE % (virtual_host, exchange),
                                    payload=exchange_payload)
Ejemplo n.º 10
0
    def declare(self, exchange='', exchange_type='direct', virtual_host='/',
                passive=False, durable=False, auto_delete=False,
                internal=False, arguments=None):
        """Declare an Exchange.

        :param str exchange: Exchange name
        :param str exchange_type: Exchange type
        :param str virtual_host: Virtual host name
        :param bool passive: Do not create
        :param bool durable: Durable exchange
        :param bool auto_delete: Automatically delete when not in use
        :param bool internal: Is the exchange for use by the broker only.
        :param dict|None arguments: Exchange key/value arguments

        :raises ApiError: Raises if the remote server encountered an error.
        :raises ApiConnectionError: Raises if there was a connectivity issue.

        :rtype: None
        """
        virtual_host = quote(virtual_host, '')
        if passive:
            return self.get(exchange, virtual_host=virtual_host)
        exchange_payload = json.dumps(
            {
                'durable': durable,
                'auto_delete': auto_delete,
                'internal': internal,
                'type': exchange_type,
                'arguments': arguments or {},
                'vhost': urlparse.unquote(virtual_host)
            }
        )
        return self.http_client.put(API_EXCHANGE %
                                    (
                                        virtual_host,
                                        exchange
                                    ),
                                    payload=exchange_payload)