[tor-commits] [stem/master] Move Endpoint class up in the base module

atagar at torproject.org atagar at torproject.org
Fri May 18 02:10:16 UTC 2018


commit 3330d89cef046426816d53dc4572571615eecf63
Author: Damian Johnson <atagar at torproject.org>
Date:   Thu May 17 10:14:46 2018 -0700

    Move Endpoint class up in the base module
    
    The base module provides quite a few exceptions so think I'd prefer for the
    concrete classes to come a little earlier as not to get buried. Also a minor
    fix for the ORPort's hash function (nothing consiquential, just doing more work
    than it had to).
---
 stem/__init__.py | 106 +++++++++++++++++++++++++++++--------------------------
 1 file changed, 55 insertions(+), 51 deletions(-)

diff --git a/stem/__init__.py b/stem/__init__.py
index e9ad8430..c4d8c1a5 100644
--- a/stem/__init__.py
+++ b/stem/__init__.py
@@ -8,6 +8,10 @@ Library for working with the tor process.
 
 ::
 
+  Endpoint - Networking endpoint.
+    |- ORPort - Tor relay endpoint.
+    +- DirPort - Descriptor mirror.
+
   ControllerError - Base exception raised when using the controller.
     |- ProtocolError - Malformed socket data.
     |
@@ -547,6 +551,57 @@ __all__ = [
 UNDEFINED = '<Undefined_ >'
 
 
+class Endpoint(object):
+  """
+  Tor endpint that can be connected to.
+
+  .. versionadded:: 1.7.0
+
+  :var str address: ip address of the endpoint
+  :var int port: port of the endpoint
+  """
+
+  def __init__(self, address, port):
+    if not stem.util.connection.is_valid_ipv4_address(address) and not stem.util.connection.is_valid_ipv6_address(address):
+      raise ValueError("'%s' isn't a valid IPv4 or IPv6 address" % address)
+    elif not stem.util.connection.is_valid_port(port):
+      raise ValueError("'%s' isn't a valid port" % port)
+
+    self.address = address
+    self.port = int(port)
+
+  def __hash__(self):
+    return stem.util._hash_attr(self, 'address', 'port')
+
+  def __eq__(self, other):
+    return hash(self) == hash(other) if isinstance(other, Endpoint) else False
+
+  def __ne__(self, other):
+    return not self == other
+
+
+class ORPort(Endpoint):
+  """
+  Tor relay's ORPort. The endpoint on which Tor accepts relay traffic.
+
+  :var list link_protocols: link protocol version we're willing to establish
+  """
+
+  def __init__(self, address, port, link_protocols = None):
+    super(ORPort, self).__init__(address, port)
+    self.link_protocols = link_protocols
+
+  def __hash__(self):
+    return stem.util._hash_attr(self, 'link_protocols', parent = Endpoint)
+
+
+class DirPort(Endpoint):
+  """
+  Tor relay's DirPort. The endpoint on which Tor provides http access for
+  downloading descriptors.
+  """
+
+
 class ControllerError(Exception):
   'Base error for controller communication issues.'
 
@@ -640,57 +695,6 @@ class SocketClosed(SocketError):
   'Control socket was closed before completing the message.'
 
 
-class Endpoint(object):
-  """
-  Tor endpint that can be connected to.
-
-  .. versionadded:: 1.7.0
-
-  :var str address: ip address of the endpoint
-  :var int port: port of the endpoint
-  """
-
-  def __init__(self, address, port):
-    if not stem.util.connection.is_valid_ipv4_address(address) and not stem.util.connection.is_valid_ipv6_address(address):
-      raise ValueError("'%s' isn't a valid IPv4 or IPv6 address" % address)
-    elif not stem.util.connection.is_valid_port(port):
-      raise ValueError("'%s' isn't a valid port" % port)
-
-    self.address = address
-    self.port = int(port)
-
-  def __hash__(self):
-    return stem.util._hash_attr(self, 'address', 'port')
-
-  def __eq__(self, other):
-    return hash(self) == hash(other) if isinstance(other, Endpoint) else False
-
-  def __ne__(self, other):
-    return not self == other
-
-
-class ORPort(Endpoint):
-  """
-  Tor relay's ORPort. The endpoint on which Tor accepts relay traffic.
-
-  :var list link_protocols: link protocol version we're willing to establish
-  """
-
-  def __init__(self, address, port, link_protocols = None):
-    super(ORPort, self).__init__(address, port)
-    self.link_protocols = link_protocols
-
-  def __hash__(self):
-    return super(ORPort, self).__hash__() + stem.util._hash_attr(self, 'link_protocols', 'port') * 10
-
-
-class DirPort(Endpoint):
-  """
-  Tor relay's DirPort. The endpoint on which Tor provides http access for
-  downloading descriptors.
-  """
-
-
 Runlevel = stem.util.enum.UppercaseEnum(
   'DEBUG',
   'INFO',





More information about the tor-commits mailing list