summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAsif Saif Uddin <auvipy@gmail.com>2022-02-08 06:49:18 +0600
committerGitHub <noreply@github.com>2022-02-08 06:49:18 +0600
commitd0ab95ec91176d13ef4c5d1ae162bb48b4f95bef (patch)
tree2d30bbe3994e9375bac3ee44d99901b1fbb45df2
parent59af2445549e4e1bb87a932cbb4d196629f16dd6 (diff)
downloadpy-amqp-d0ab95ec91176d13ef4c5d1ae162bb48b4f95bef.tar.gz
adding experimental __slots__ to some classes (#368)
* adding experimental __slots__ to some classes * adding more experimental __slots__ to some classes * remove redundant slots * added more experimental slots to classes * remove slots from buffer class
-rw-r--r--amqp/abstract_channel.py13
-rw-r--r--amqp/basic_message.py6
-rw-r--r--amqp/channel.py12
-rw-r--r--amqp/sasl.py17
-rw-r--r--amqp/serialization.py13
-rw-r--r--amqp/transport.py20
6 files changed, 81 insertions, 0 deletions
diff --git a/amqp/abstract_channel.py b/amqp/abstract_channel.py
index 6234b19..ae95a89 100644
--- a/amqp/abstract_channel.py
+++ b/amqp/abstract_channel.py
@@ -39,6 +39,19 @@ class AbstractChannel:
self._setup_listeners()
+ __slots__ = (
+ "is_closing",
+ "connection",
+ "channel_id",
+ "method_queue",
+ "auto_decode",
+ "_pending",
+ "_callbacks",
+ # adding '__dict__' to get dynamic assignment
+ "__dict__",
+ "__weakref__",
+ )
+
def __enter__(self):
return self
diff --git a/amqp/basic_message.py b/amqp/basic_message.py
index 222d366..cee0515 100644
--- a/amqp/basic_message.py
+++ b/amqp/basic_message.py
@@ -107,6 +107,12 @@ class Message(GenericContent):
self.body = body
self.channel = channel
+ __slots__ = (
+ "delivery_info",
+ "body",
+ "channel",
+ )
+
@property
def headers(self):
return self.properties.get('application_headers')
diff --git a/amqp/channel.py b/amqp/channel.py
index 77cfaab..fffc7b8 100644
--- a/amqp/channel.py
+++ b/amqp/channel.py
@@ -122,6 +122,18 @@ class Channel(AbstractChannel):
if self.connection.confirm_publish:
self.basic_publish = self.basic_publish_confirm
+ __slots__ = (
+ "is_open",
+ "active",
+ "returned_messages",
+ "callbacks",
+ "cancel_callbacks",
+ "events",
+ "no_ack_consumers",
+ "on_open",
+ "_confirm_selected",
+ )
+
def then(self, on_success, on_error=None):
return self.on_open.then(on_success, on_error)
diff --git a/amqp/sasl.py b/amqp/sasl.py
index 9a98a7a..407ccb8 100644
--- a/amqp/sasl.py
+++ b/amqp/sasl.py
@@ -34,6 +34,11 @@ class PLAIN(SASL):
def __init__(self, username, password):
self.username, self.password = username, password
+ __slots__ = (
+ "username",
+ "password",
+ )
+
def start(self, connection):
if self.username is None or self.password is None:
return NotImplemented
@@ -56,6 +61,11 @@ class AMQPLAIN(SASL):
def __init__(self, username, password):
self.username, self.password = username, password
+ __slots__ = (
+ "username",
+ "password",
+ )
+
def start(self, connection):
if self.username is None or self.password is None:
return NotImplemented
@@ -104,6 +114,13 @@ def _get_gssapi_mechanism():
self.service = service
self.rdns = rdns
+ __slots__ = (
+ "client_name",
+ "fail_soft",
+ "service",
+ "rdns"
+ )
+
def get_hostname(self, connection):
sock = connection.transport.sock
if self.rdns and sock.family in (socket.AF_INET,
diff --git a/amqp/serialization.py b/amqp/serialization.py
index 90f5857..1f2f8e2 100644
--- a/amqp/serialization.py
+++ b/amqp/serialization.py
@@ -488,6 +488,19 @@ class GenericContent:
self.body_size = 0
self.ready = False
+ __slots__ = (
+ "frame_method",
+ "frame_args",
+ "properties",
+ "_pending_chunks",
+ "body_received",
+ "body_size",
+ "ready",
+ # adding '__dict__' to get dynamic assignment
+ "__dict__",
+ "__weakref__",
+ )
+
def __getattr__(self, name):
# Look for additional properties in the 'properties'
# dictionary, and if present - the 'delivery_info' dictionary.
diff --git a/amqp/transport.py b/amqp/transport.py
index b87f9fe..b5a0d4b 100644
--- a/amqp/transport.py
+++ b/amqp/transport.py
@@ -97,6 +97,22 @@ class _AbstractTransport:
self.write_timeout = write_timeout
self.socket_settings = socket_settings
+ __slots__ = (
+ "connection",
+ "sock",
+ "raise_on_initial_eintr",
+ "_read_buffer",
+ "host",
+ "port",
+ "connect_timeout",
+ "read_timeout",
+ "write_timeout",
+ "socket_settings",
+ # adding '__dict__' to get dynamic assignment
+ "__dict__",
+ "__weakref__",
+ )
+
def __repr__(self):
if self.sock:
src = f'{self.sock.getsockname()[0]}:{self.sock.getsockname()[1]}'
@@ -410,6 +426,10 @@ class SSLTransport(_AbstractTransport):
super().__init__(
host, connect_timeout=connect_timeout, **kwargs)
+ __slots__ = (
+ "sslopts",
+ )
+
def _setup_transport(self):
"""Wrap the socket in an SSL object."""
self.sock = self._wrap_socket(self.sock, **self.sslopts)