[wwwsearch-commits] r27545 - wwwsearch/mechanize/trunk/mechanize

jjlee at codespeak.net jjlee at codespeak.net
Sun May 21 20:51:40 CEST 2006


Author: jjlee
Date: Sun May 21 20:51:38 2006
New Revision: 27545

Removed:
   wwwsearch/mechanize/trunk/mechanize/_ConnCache.py
Log:
Get rid of unused module _ConnCache.py (at least for now)

Deleted: /wwwsearch/mechanize/trunk/mechanize/_ConnCache.py
==============================================================================
--- /wwwsearch/mechanize/trunk/mechanize/_ConnCache.py	Sun May 21 20:51:38 2006
+++ (empty file)
@@ -1,244 +0,0 @@
-"""Generic connection cache manager.
-
-WARNING: THIS MODULE IS UNUSED AND UNTESTED!
-
-Example:
-
- from mechanize import ConnectionCache
- cache = ConnectionCache()
- cache.deposit("http", "example.com", conn)
- conn = cache.withdraw("http", "example.com")
-
-
-The ConnectionCache class provides cache expiration.
-
-
-Copyright (C) 2004-2006 John J Lee <jjl at pobox.com>.
-Copyright (C) 2001 Gisle Aas.
-
-This code is free software; you can redistribute it and/or modify it
-under the terms of the BSD or ZPL 2.1 licenses (see the file
-COPYING.txt included with the distribution).
-
-"""
-
-# Ported from libwww-perl 5.75.
-
-import time
-try:
-    from types import StringTypes
-except ImportError:
-    from types import StringType
-    StringTypes = StringType
-
-from _Debug import warn
-import logging
-debug = logging.getLogger("mechanize").debug
-
-warn("WARNING: MODULE _ConnCache IS UNUSED AND UNTESTED!")
-
-
-class _ConnectionRecord:
-    def __init__(self, conn, scheme, key, time):
-        self.conn, self.scheme, self.key, self.time = conn, scheme, key, time
-    def __repr__(self):
-        return "%s(%s, %s, %s, %s)" % (
-            self.__class__.__name__,
-            self.conn, self.scheme, self.key, self.time)
-
-class ConnectionCache:
-    """
-    For specialized cache policy it makes sense to subclass ConnectionCache and
-    perhaps override the .deposit(), ._enforce_limits() and ._dropping()
-    methods.
-
-    """
-    def __init__(self, total_capacity=1):
-        self._limit = {}
-        self.total_capacity(total_capacity)
-
-    def set_total_capacity(self, nr_connections):
-        """Set limit for number of cached connections.
-
-        Connections will start to be dropped when this limit is reached.  If 0,
-        all connections are immediately dropped.  None means no limit.
-
-        """
-        self._limit_total = nr_connections
-        self._enforce_limits()
-
-    def total_capacity(self):
-        """Return limit for number of cached connections."""
-        return self._limit_total
-
-    def set_capacity(self, scheme, nr_connections):
-        """Set limit for number of cached connections of specifed scheme.
-
-        scheme: URL scheme (eg. "http" or "ftp")
-
-        """
-        self._limit[scheme] = nr_connections
-        self._enforce_limits(scheme)
-
-    def capacity(self, scheme):
-        """Return limit for number of cached connections of specifed scheme.
-
-        scheme: URL scheme (eg. "http" or "ftp")
-
-        """
-        return self._limit[scheme]
-
-    def drop(self, checker=None, reason=None):
-        """Drop connections by some criteria.
-
-        checker: either a callable, a number, a string, or None:
-         If callable: called for each connection with arguments (conn, scheme,
-          key, deposit_time); if it returns a true value, the connection is
-          dropped (default is to drop all connections).
-         If a number: all connections untouched for the given number of seconds
-          or more are dropped.
-         If a string: all connections of the given scheme are dropped.
-         If None: all connections are dropped.
-        reason: passed on to the dropped() method
-
-        """
-        if not callable(checker):
-            if checker is None:
-                checker = lambda cr: True  # drop all of them
-            elif isinstance(checker, StringTypes):
-                scheme = checker
-                if reason is None:
-                    reason = "drop %s" % scheme
-                checker = lambda cr, scheme=scheme: cr.scheme == scheme
-            else:  # numeric
-                age_limit = checker
-                time_limit = time.time() - age_limit
-                if reason is None:
-                    reason = "older than %s" % age_limit
-                checker = lambda cr, time_limit=time_limit: cr.time < time_limit
-        if reason is None:
-            reason = "drop"
-
-##         local $SIG{__DIE__};  # don't interfere with eval below
-##         local $@;
-        crs = []
-        for cr in self._conns:
-            if checker(cr):
-                self._dropping(cr, reason)
-                drop = drop + 1
-            if not drop:
-                crs.append(cr)
-        self._conns = crs
-
-    def prune(self):
-        """Drop all dead connections.
-
-        This is tested by calling the .ping() method on the connections.  If
-        the .ping() method exists and returns a false value, then the
-        connection is dropped.
-
-        """
-        # XXX HTTPConnection doesn't have a .ping() method
-        #self.drop(lambda cr: not cr.conn.ping(), "ping")
-        pass
-
-    def get_schemes(self):
-        """Return list of cached connection URL schemes."""
-        t = {}
-        for cr in self._conns:
-            t[cr.scheme] = None
-        return t.keys()
-
-    def get_connections(self, scheme=None):
-        """Return list of all connection objects with the specified URL scheme.
-
-        If no scheme is specified then all connections are returned.
-
-        """
-        cs = []
-        for cr in self._conns:
-            if scheme is None or (scheme and scheme == cr.scheme):
-                c.append(cr.conn)
-        return cs
-
-# -------------------------------------------------------------------------
-# Methods called by handlers to try to save away connections and get them
-# back again.
-
-    def deposit(self, scheme, key, conn):
-        """Add a new connection to the cache.
-
-        scheme: URL scheme (eg. "http")
-        key: any object that can act as a dict key (usually a string or a
-         tuple)
-
-        As a side effect, other already cached connections may be dropped.
-        Multiple connections with the same scheme/key might be added.
-
-        """
-        self._conns.append(_ConnectionRecord(conn, scheme, key, time.time()))
-        self._enforce_limits(scheme)
-
-    def withdraw(self, scheme, key):
-        """Try to fetch back a connection that was previously deposited.
-
-        If no cached connection with the specified scheme/key is found, then
-        None is returned.  There is no guarantee that a deposited connection
-        can be withdrawn, as the cache manger is free to drop connections at
-        any time.
-
-        """
-        conns = self._conns
-        for i in range(len(conns)):
-            cr = conns[i]
-            if not (cr.scheme == scheme and cr.key == key):
-                continue
-            conns.pop(i)  # remove it
-            return cr.conn
-        return None
-
-# -------------------------------------------------------------------------
-# Called internally.  Subclasses might want to override these.
-
-    def _enforce_limits(self, scheme=None):
-        """Drop some cached connections, if necessary.
-
-        Called after a new connection is added (deposited) in the cache or
-        capacity limits are adjusted.
-
-        The default implementation drops connections until the specified
-        capacity limits are not exceeded.
-
-        """
-        conns = self._conns
-        if scheme:
-            schemes = [scheme]
-        else:
-            schemes = self.get_schemes()
-        for scheme in schemes:
-            limit = self._limit.get(scheme)
-            if limit is None:
-                continue
-            for i in range(len(conns), 0, -1):
-                if conns[i].scheme != scheme:
-                    continue
-                limit = limit - 1
-                if limit < 0:
-                    self._dropping(
-                        conns.pop(i),
-                        "connection cache %s capacity exceeded" % scheme)
-
-        total = self._limit_total
-        if total is not None:
-            while len(conns) > total:
-                self._dropping(conns.pop(0),
-                               "connection cache total capacity exceeded")
-
-    def _dropping(self, conn_record, reason):
-        """Called when a connection is dropped.
-
-        conn_record: _ConnectionRecord instance for the dropped connection
-        reason: string describing the reason for the drop
-
-        """
-        debug("DROPPING %s [%s]" % (conn_record, reason))


More information about the wwwsearch-commits mailing list