summaryrefslogtreecommitdiff
path: root/paste/wareweb
diff options
context:
space:
mode:
authorianb <devnull@localhost>2005-05-21 22:00:22 +0000
committerianb <devnull@localhost>2005-05-21 22:00:22 +0000
commite64e8f06adeaff4f23ed0a8ae9fa425e56e0d7c0 (patch)
tree19533fe517e7f65285720e9798d75f3fbf740146 /paste/wareweb
parent9888f30d532182e6b62f19ca2ce9487579e4a86c (diff)
downloadpaste-e64e8f06adeaff4f23ed0a8ae9fa425e56e0d7c0.tar.gz
Moved classinstance into util
Diffstat (limited to 'paste/wareweb')
-rw-r--r--paste/wareweb/classinit.py75
-rw-r--r--paste/wareweb/servlet.py2
2 files changed, 1 insertions, 76 deletions
diff --git a/paste/wareweb/classinit.py b/paste/wareweb/classinit.py
deleted file mode 100644
index 137f0d5..0000000
--- a/paste/wareweb/classinit.py
+++ /dev/null
@@ -1,75 +0,0 @@
-class classinstancemethod(object):
- """
- Acts like a class method when called from a class, like an
- instance method when called by an instance. The method should
- take two arguments, 'self' and 'cls'; one of these will be None
- depending on how the method was called.
- """
-
- def __init__(self, func):
- self.func = func
-
- def __get__(self, obj, type=None):
- return _methodwrapper(self.func, obj=obj, type=type)
-
-class _methodwrapper(object):
-
- def __init__(self, func, obj, type):
- self.func = func
- self.obj = obj
- self.type = type
-
- def __call__(self, *args, **kw):
- assert not kw.has_key('self') and not kw.has_key('cls'), (
- "You cannot use 'self' or 'cls' arguments to a "
- "classinstancemethod")
- return self.func(*((self.obj, self.type) + args), **kw)
-
- def __repr__(self):
- if self.obj is None:
- return ('<bound class method %s.%s>'
- % (self.type.__name__, self.func.func_name))
- else:
- return ('<bound method %s.%s of %r>'
- % (self.type.__name__, self.func.func_name, self.obj))
-
-
-class ClassInitMeta(type):
-
- def __new__(meta, class_name, bases, new_attrs):
- cls = type.__new__(meta, class_name, bases, new_attrs)
- if (new_attrs.has_key('__classinit__')
- and not isinstance(cls.__classinit__, staticmethod)):
- setattr(cls, '__classinit__',
- staticmethod(cls.__classinit__.im_func))
- if hasattr(cls, '__classinit__'):
- cls.__classinit__(cls, new_attrs)
- return cls
-
-def build_properties(cls, new_attrs):
- """
- Given a class and a new set of attributes (as passed in by
- __classinit__), create or modify properties based on functions
- with special names ending in __get, __set, and __del.
- """
- for name, value in new_attrs.items():
- if (name.endswith('__get') or name.endswith('__set')
- or name.endswith('__del')):
- base = name[:-5]
- if hasattr(cls, base):
- old_prop = getattr(cls, base)
- if not isinstance(old_prop, property):
- raise ValueError(
- "Attribute %s is a %s, not a property; function %s is named like a property"
- % (base, type(old_prop), name))
- attrs = {'fget': old_prop.fget,
- 'fset': old_prop.fset,
- 'fdel': old_prop.fdel,
- 'doc': old_prop.__doc__}
- else:
- attrs = {}
- attrs['f' + name[-3:]] = value
- if name.endswith('__get') and value.__doc__:
- attrs['doc'] = value.__doc__
- new_prop = property(**attrs)
- setattr(cls, base, new_prop)
diff --git a/paste/wareweb/servlet.py b/paste/wareweb/servlet.py
index 05ad872..f08b006 100644
--- a/paste/wareweb/servlet.py
+++ b/paste/wareweb/servlet.py
@@ -5,7 +5,7 @@ import time
import timeinterval
import cgifields
import event
-import classinit
+from paste.util import classinit
from UserDict import UserDict
__all__ = ['Servlet']