[tor-commits] [nyx/master] Drop ConnectionPanelLine parent class
atagar at torproject.org
atagar at torproject.org
Tue Sep 22 17:08:41 UTC 2015
commit 752c4640182b4898c8f0afd5e73d0810f20e5171
Author: Damian Johnson <atagar at torproject.org>
Date: Tue Sep 1 09:10:11 2015 -0700
Drop ConnectionPanelLine parent class
I wrote ConnectionPanelLine long before I knew of @lru_cache, and really the
only functionality it provides is caching. Wrapping that into the child
class.
---
nyx/connections/circ_entry.py | 12 +++++-
nyx/connections/conn_entry.py | 89 +++++++++--------------------------------
2 files changed, 29 insertions(+), 72 deletions(-)
diff --git a/nyx/connections/circ_entry.py b/nyx/connections/circ_entry.py
index 7cf087f..84e5b2b 100644
--- a/nyx/connections/circ_entry.py
+++ b/nyx/connections/circ_entry.py
@@ -19,6 +19,12 @@ from nyx.connections import conn_entry
from stem.util import str_tools
+try:
+ # added in python 3.2
+ from functools import lru_cache
+except ImportError:
+ from stem.util.lru_cache import lru_cache
+
def to_unix_time(dt):
return (dt - datetime.datetime(1970, 1, 1)).total_seconds()
@@ -68,6 +74,7 @@ class CircHeaderLine(conn_entry.ConnectionLine):
return ''
+ @lru_cache()
def get_details(self, width):
if not self.is_built:
detail_format = (curses.A_BOLD, nyx.connection_panel.CATEGORY_COLOR[self._entry.get_type()])
@@ -125,9 +132,10 @@ class CircLine(conn_entry.ConnectionLine):
listing_type - primary attribute we're listing connections by
"""
- return conn_entry.ConnectionPanelLine.get_listing_entry(self, width, current_time, listing_type)
+ return self._get_listing_entry(width, listing_type)
- def _get_listing_entry(self, width, current_time, listing_type):
+ @lru_cache()
+ def _get_listing_entry(self, width, listing_type):
line_format = nyx.util.ui_tools.get_color(nyx.connection_panel.CATEGORY_COLOR[self._entry.get_type()])
# The required widths are the sum of the following:
diff --git a/nyx/connections/conn_entry.py b/nyx/connections/conn_entry.py
index 366ecba..34e34d9 100644
--- a/nyx/connections/conn_entry.py
+++ b/nyx/connections/conn_entry.py
@@ -14,6 +14,12 @@ from nyx.connection_panel import Category
from stem.util import conf, connection, str_tools
+try:
+ # added in python 3.2
+ from functools import lru_cache
+except ImportError:
+ from stem.util.lru_cache import lru_cache
+
# static data for listing format
# <src> --> <dst> <etc><padding>
@@ -31,78 +37,12 @@ CONFIG = conf.config_dict('nyx', {
})
-class ConnectionPanelLine:
- """
- Individual line in the connection panel listing.
- """
-
- def __init__(self):
- # cache for displayed information
- self._listing_cache = None
- self._listing_cache_args = (None, None)
-
- self._details_cache = None
- self._details_cache_args = None
-
- self._descriptor_cache = None
- self._descriptor_cache_args = None
-
- def get_listing_prefix(self):
- """
- Provides a list of characters to be appended before the listing entry.
- """
-
- return ()
-
- def get_listing_entry(self, width, current_time, listing_type):
- """
- Provides a [(msg, attr)...] tuple list for contents to be displayed in the
- connection panel listing.
-
- Arguments:
- width - available space to display in
- current_time - unix timestamp for what the results should consider to be
- the current time (this may be ignored due to caching)
- """
-
- if self._listing_cache_args != (width, listing_type):
- self._listing_cache = self._get_listing_entry(width, current_time, listing_type)
- self._listing_cache_args = (width, listing_type)
-
- return self._listing_cache
-
- def _get_listing_entry(self, width, current_time, listing_type):
- # implementation of get_listing_entry
- return None
-
- def get_details(self, width):
- """
- Provides a list of [(msg, attr)...] tuple listings with detailed
- information for this connection.
-
- Arguments:
- width - available space to display in
- """
-
- if self._details_cache_args != width:
- self._details_cache = self._get_details(width)
- self._details_cache_args = width
-
- return self._details_cache
-
- def _get_details(self, width):
- # implementation of get_details
- return []
-
-
-class ConnectionLine(ConnectionPanelLine):
+class ConnectionLine(object):
"""
Display component of the ConnectionEntry.
"""
def __init__(self, entry, conn, include_port=True, include_expanded_addresses=True):
- ConnectionPanelLine.__init__(self)
-
self._entry = entry
self.connection = conn
@@ -112,6 +52,13 @@ class ConnectionLine(ConnectionPanelLine):
self.include_port = include_port
self.include_expanded_addresses = include_expanded_addresses
+ def get_listing_prefix(self):
+ """
+ Provides a list of characters to be appended before the listing entry.
+ """
+
+ return ()
+
def get_locale(self, default = None):
"""
Provides the two letter country code for the remote endpoint.
@@ -168,7 +115,7 @@ class ConnectionLine(ConnectionPanelLine):
# fetch our (most likely cached) display entry for the listing
- my_listing = ConnectionPanelLine.get_listing_entry(self, width, current_time, listing_type)
+ my_listing = self._get_listing_entry(width, listing_type)
# fill in the current uptime and return the results
@@ -182,7 +129,8 @@ class ConnectionLine(ConnectionPanelLine):
return my_listing
- def _get_listing_entry(self, width, current_time, listing_type):
+ @lru_cache()
+ def _get_listing_entry(self, width, listing_type):
entry_type = self._entry.get_type()
# Lines are split into the following components in reverse:
@@ -205,7 +153,8 @@ class ConnectionLine(ConnectionPanelLine):
return draw_entry
- def _get_details(self, width):
+ @lru_cache()
+ def get_details(self, width):
"""
Provides details on the connection, correlated against available consensus
data.
More information about the tor-commits
mailing list