[Python-modules-commits] r7035 - in packages/logilab-common/trunk (decorators.py)
morph at users.alioth.debian.org
morph at users.alioth.debian.org
Sat Nov 29 21:52:46 UTC 2008
Date: Saturday, November 29, 2008 @ 21:52:46
Author: morph
Revision: 7035
remove upstream modification
Deleted:
packages/logilab-common/trunk/decorators.py
Deleted: packages/logilab-common/trunk/decorators.py
===================================================================
--- packages/logilab-common/trunk/decorators.py 2008-11-29 21:51:37 UTC (rev 7034)
+++ packages/logilab-common/trunk/decorators.py 2008-11-29 21:52:46 UTC (rev 7035)
@@ -1,124 +0,0 @@
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU General Public License as published by the Free Software
-# Foundation; either version 2 of the License, or (at your option) any later
-# version.
-#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License along with
-# this program; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-"""this module contains some function/method decorators
-
-:author: Logilab
-:copyright: 2006-2008 LOGILAB S.A. (Paris, FRANCE)
-:contact: http://www.logilab.fr/ -- mailto:python-projects at logilab.org
-"""
-__docformat__ = "restructuredtext en"
-
-# XXX rewrite so we can use the decorator syntax when keyarg has to be specified
-
-def cached(callableobj, keyarg=None):
- """simple decorator to cache result of method call"""
- #print callableobj, keyarg, callableobj.func_code.co_argcount
- if callableobj.func_code.co_argcount == 1 or keyarg == 0:
-
- def cache_wrapper1(self, *args):
- cache = '_%s_cache_' % callableobj.__name__
- #print 'cache1?', cache
- try:
- return self.__dict__[cache]
- except KeyError:
- #print 'miss'
- value = callableobj(self, *args)
- setattr(self, cache, value)
- return value
- return cache_wrapper1
-
- elif keyarg:
-
- def cache_wrapper2(self, *args, **kwargs):
- cache = '_%s_cache_' % callableobj.__name__
- key = args[keyarg-1]
- #print 'cache2?', cache, self, key
- try:
- _cache = self.__dict__[cache]
- except KeyError:
- #print 'init'
- _cache = {}
- setattr(self, cache, _cache)
- try:
- return _cache[key]
- except KeyError:
- #print 'miss', self, cache, key
- _cache[key] = callableobj(self, *args, **kwargs)
- return _cache[key]
- return cache_wrapper2
-
- def cache_wrapper3(self, *args):
- cache = '_%s_cache_' % callableobj.__name__
- #print 'cache3?', cache, self, args
- try:
- _cache = self.__dict__[cache]
- except KeyError:
- #print 'init'
- _cache = {}
- setattr(self, cache, _cache)
- try:
- return _cache[args]
- except KeyError:
- #print 'miss'
- _cache[args] = callableobj(self, *args)
- return _cache[args]
- return cache_wrapper3
-
-def clear_cache(obj, funcname):
- """function to clear a cache handled by the cached decorator"""
- try:
- del obj.__dict__['_%s_cache_' % funcname]
- except KeyError:
- pass
-
-def copy_cache(obj, funcname, cacheobj):
- """copy cache for <funcname> from cacheobj to obj"""
- cache = '_%s_cache_' % funcname
- try:
- setattr(obj, cache, cacheobj.__dict__[cache])
- except KeyError:
- pass
-
-
-class wproperty(object):
- """simple descriptor expecting to take a modifier function as first argument
- and looking for a _<function name> to retrieve the attribute
- """
- def __init__(self, setfunc):
- self.setfunc = setfunc
- self.attrname = '_%s' % setfunc.__name__
-
- def __set__(self, obj, value):
- self.setfunc(obj, value)
-
- def __get__(self, obj, cls):
- assert obj is not None
- return getattr(obj, self.attrname)
-
-
-class classproperty(object):
- def __init__(self, get):
- self.get = get
- def __get__(self, inst, cls):
- return self.get(cls)
-
-from time import clock
-def timed(f):
- def wrap(*args, **kwargs):
- t = clock()
- #for i in range(100):
- res = f(*args, **kwargs)
- print '%s time: %.9f' % (f.__name__, clock() - t)
- return res
- return wrap
-
More information about the Python-modules-commits
mailing list