PKkh4~7zope/__init__.py# namespace package boilerplate try: __import__('pkg_resources').declare_namespace(__name__) except ImportError, e: from pkgutil import extend_path __path__ = extend_path(__path__, __name__) PKaa4Jzope/__init__.pyc; ۦ2Dc@sOyedieWn1ej o%ZdklZeeeZnXdS(s pkg_resources(s extend_pathN(s __import__sdeclare_namespaces__name__s ImportErrorsespkgutils extend_paths__path__(ses extend_paths__path__((s+build/bdist.linux-i686/egg/zope/__init__.pys?s PK.a4uuzope/proxy/__init__.py############################################################################## # # Copyright (c) 2003 Zope Corporation and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # ############################################################################## """More convenience functions for dealing with proxies. $Id: __init__.py 25177 2004-06-02 13:17:31Z jim $ """ from zope.interface import moduleProvides from zope.proxy.interfaces import IProxyIntrospection from types import ClassType from zope.proxy._zope_proxy_proxy import * from zope.proxy._zope_proxy_proxy import _CAPI moduleProvides(IProxyIntrospection) __all__ = tuple(IProxyIntrospection) def ProxyIterator(p): yield p while isProxy(p): p = getProxiedObject(p) yield p PK.a45zzope/proxy/interfaces.py############################################################################## # # Copyright (c) 2001, 2002 Zope Corporation and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE # ############################################################################## """Proxy-related interfaces. $Id: interfaces.py 25177 2004-06-02 13:17:31Z jim $ """ from zope.interface import Interface class IProxyIntrospection(Interface): """Provides methods for indentifying proxies and extracting proxied objects """ def isProxy(obj, proxytype=None): """Check whether the given object is a proxy If proxytype is not None, checkes whether the object is proxied by the given proxytype. """ def sameProxiedObjects(ob1, ob2): """Check whether ob1 and ob2 are the same or proxies of the same object """ def getProxiedObject(obj): """Get the proxied Object If the object isn't proxied, then just return the object. """ def removeAllProxies(obj): """Get the proxied object with no proxies If obj is not a proxied object, return obj. The returned object has no proxies. """ def queryProxy(obj, proxytype, default=None): """Look for a proxy of the given type around the object If no such proxy can be found, return the default. """ def queryInnerProxy(obj, proxytype, default=None): """Look for the inner-most proxy of the given type around the object If no such proxy can be found, return the default. If there is such a proxy, return the inner-most one. """ PK.a4zope/proxy/DEPENDENCIES.cfgzope.interface zope.testing PK.a4xGzope/proxy/SETUP.cfg# Packaging information for zpkg. header proxy.h source _zope_proxy_proxy.c depends-on proxy.h PK.a4 llzope/proxy/_zope_proxy_proxy.c/*############################################################################ # # Copyright (c) 2004 Zope Corporation and Contributors. # All Rights Reserved. # # This software is subject to the provisions of the Zope Public License, # Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution. # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED # WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED # WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS # FOR A PARTICULAR PURPOSE. # ############################################################################*/ /* * This file is also used as a really extensive macro in * ../app/container/_zope_app_container_contained.c. If you need to * change this file, you need to "svn copy" it to ../app/container/. * * This approach is taken to allow the sources for the two packages * to be compilable when the relative locations of these aren't * related in the same way as they are in a checkout. * * This will be revisited in the future, but works for now. */ #include "Python.h" #include "modsupport.h" #define PROXY_MODULE #include "proxy.h" static PyTypeObject ProxyType; #define Proxy_Check(wrapper) (PyObject_TypeCheck((wrapper), &ProxyType)) static PyObject * empty_tuple = NULL; /* * Slot methods. */ static PyObject * wrap_new(PyTypeObject *type, PyObject *args, PyObject *kwds) { PyObject *result = NULL; PyObject *object; if (PyArg_UnpackTuple(args, "__new__", 1, 1, &object)) { if (kwds != NULL && PyDict_Size(kwds) != 0) { PyErr_SetString(PyExc_TypeError, "proxy.__new__ does not accept keyword args"); return NULL; } result = PyType_GenericNew(type, args, kwds); if (result != NULL) { ProxyObject *wrapper = (ProxyObject *) result; Py_INCREF(object); wrapper->proxy_object = object; } } return result; } static int wrap_init(PyObject *self, PyObject *args, PyObject *kwds) { int result = -1; PyObject *object; if (PyArg_UnpackTuple(args, "__init__", 1, 1, &object)) { ProxyObject *wrapper = (ProxyObject *)self; if (kwds != NULL && PyDict_Size(kwds) != 0) { PyErr_SetString(PyExc_TypeError, "proxy.__init__ does not accept keyword args"); return -1; } /* If the object in this proxy is not the one we * received in args, replace it with the new one. */ if (wrapper->proxy_object != object) { PyObject *temp = wrapper->proxy_object; Py_INCREF(object); wrapper->proxy_object = object; Py_DECREF(temp); } result = 0; } return result; } static int wrap_traverse(PyObject *self, visitproc visit, void *arg) { PyObject *ob = Proxy_GET_OBJECT(self); if (ob != NULL) return visit(ob, arg); else return 0; } static int wrap_clear(PyObject *self) { ProxyObject *proxy = (ProxyObject *)self; PyObject *temp = proxy->proxy_object; if (temp != NULL) { proxy->proxy_object = NULL; Py_DECREF(temp); } return 0; } static PyObject * wrap_richcompare(PyObject* self, PyObject* other, int op) { if (Proxy_Check(self)) { self = Proxy_GET_OBJECT(self); } else { other = Proxy_GET_OBJECT(other); } return PyObject_RichCompare(self, other, op); } static PyObject * wrap_iter(PyObject *self) { return PyObject_GetIter(Proxy_GET_OBJECT(self)); } static PyObject * wrap_iternext(PyObject *self) { return PyIter_Next(Proxy_GET_OBJECT(self)); } static void wrap_dealloc(PyObject *self) { (void) wrap_clear(self); self->ob_type->tp_free(self); } /* A variant of _PyType_Lookup that doesn't look in ProxyType. * * If argument search_wrappertype is nonzero, we can look in WrapperType. */ PyObject * WrapperType_Lookup(PyTypeObject *type, PyObject *name) { int i, n; PyObject *mro, *res, *base, *dict; /* Look in tp_dict of types in MRO */ mro = type->tp_mro; /* If mro is NULL, the type is either not yet initialized by PyType_Ready(), or already cleared by type_clear(). Either way the safest thing to do is to return NULL. */ if (mro == NULL) return NULL; assert(PyTuple_Check(mro)); n = PyTuple_GET_SIZE(mro) - 1; /* We don't want to look at the last item, which is object. */ for (i = 0; i < n; i++) { base = PyTuple_GET_ITEM(mro, i); if (((PyTypeObject *)base) != &ProxyType) { if (PyClass_Check(base)) dict = ((PyClassObject *)base)->cl_dict; else { assert(PyType_Check(base)); dict = ((PyTypeObject *)base)->tp_dict; } assert(dict && PyDict_Check(dict)); res = PyDict_GetItem(dict, name); if (res != NULL) return res; } } return NULL; } static PyObject * wrap_getattro(PyObject *self, PyObject *name) { PyObject *wrapped; PyObject *descriptor; PyObject *res = NULL; char *name_as_string; int maybe_special_name; #ifdef Py_USING_UNICODE /* The Unicode to string conversion is done here because the existing tp_getattro slots expect a string object as name and we wouldn't want to break those. */ if (PyUnicode_Check(name)) { name = PyUnicode_AsEncodedString(name, NULL, NULL); if (name == NULL) return NULL; } else #endif if (!PyString_Check(name)){ PyErr_SetString(PyExc_TypeError, "attribute name must be string"); return NULL; } else Py_INCREF(name); name_as_string = PyString_AS_STRING(name); wrapped = Proxy_GET_OBJECT(self); if (wrapped == NULL) { PyErr_Format(PyExc_RuntimeError, "object is NULL; requested to get attribute '%s'", name_as_string); goto finally; } maybe_special_name = name_as_string[0] == '_' && name_as_string[1] == '_'; if (!(maybe_special_name && strcmp(name_as_string, "__class__") == 0)) { descriptor = WrapperType_Lookup(self->ob_type, name); if (descriptor != NULL) { if (PyType_HasFeature(descriptor->ob_type, Py_TPFLAGS_HAVE_CLASS) && descriptor->ob_type->tp_descr_get != NULL) { res = descriptor->ob_type->tp_descr_get( descriptor, self, (PyObject *)self->ob_type); } else { Py_INCREF(descriptor); res = descriptor; } goto finally; } } res = PyObject_GetAttr(wrapped, name); finally: Py_DECREF(name); return res; } static int wrap_setattro(PyObject *self, PyObject *name, PyObject *value) { PyObject *wrapped; PyObject *descriptor; int res = -1; #ifdef Py_USING_UNICODE /* The Unicode to string conversion is done here because the existing tp_setattro slots expect a string object as name and we wouldn't want to break those. */ if (PyUnicode_Check(name)) { name = PyUnicode_AsEncodedString(name, NULL, NULL); if (name == NULL) return -1; } else #endif if (!PyString_Check(name)){ PyErr_SetString(PyExc_TypeError, "attribute name must be string"); return -1; } else Py_INCREF(name); descriptor = WrapperType_Lookup(self->ob_type, name); if (descriptor != NULL) { if (PyType_HasFeature(descriptor->ob_type, Py_TPFLAGS_HAVE_CLASS) && descriptor->ob_type->tp_descr_set != NULL) { res = descriptor->ob_type->tp_descr_set(descriptor, self, value); } else { PyErr_Format(PyExc_TypeError, "Tried to set attribute '%s' on wrapper, but it is not" " a data descriptor", PyString_AS_STRING(name)); } goto finally; } wrapped = Proxy_GET_OBJECT(self); if (wrapped == NULL) { PyErr_Format(PyExc_RuntimeError, "object is NULL; requested to set attribute '%s'", PyString_AS_STRING(name)); goto finally; } res = PyObject_SetAttr(wrapped, name, value); finally: Py_DECREF(name); return res; } static int wrap_print(PyObject *wrapper, FILE *fp, int flags) { return PyObject_Print(Proxy_GET_OBJECT(wrapper), fp, flags); } static PyObject * wrap_str(PyObject *wrapper) { return PyObject_Str(Proxy_GET_OBJECT(wrapper)); } static PyObject * wrap_repr(PyObject *wrapper) { return PyObject_Repr(Proxy_GET_OBJECT(wrapper)); } static int wrap_compare(PyObject *wrapper, PyObject *v) { return PyObject_Compare(Proxy_GET_OBJECT(wrapper), v); } static long wrap_hash(PyObject *self) { return PyObject_Hash(Proxy_GET_OBJECT(self)); } static PyObject * wrap_call(PyObject *self, PyObject *args, PyObject *kw) { if (kw) return PyEval_CallObjectWithKeywords(Proxy_GET_OBJECT(self), args, kw); else return PyObject_CallObject(Proxy_GET_OBJECT(self), args); } /* * Number methods */ /* * Number methods. */ static PyObject * call_int(PyObject *self) { PyNumberMethods *nb = self->ob_type->tp_as_number; if (nb == NULL || nb->nb_int == NULL) { PyErr_SetString(PyExc_TypeError, "object can't be converted to int"); return NULL; } return nb->nb_int(self); } static PyObject * call_long(PyObject *self) { PyNumberMethods *nb = self->ob_type->tp_as_number; if (nb == NULL || nb->nb_long == NULL) { PyErr_SetString(PyExc_TypeError, "object can't be converted to long"); return NULL; } return nb->nb_long(self); } static PyObject * call_float(PyObject *self) { PyNumberMethods *nb = self->ob_type->tp_as_number; if (nb == NULL || nb->nb_float== NULL) { PyErr_SetString(PyExc_TypeError, "object can't be converted to float"); return NULL; } return nb->nb_float(self); } static PyObject * call_oct(PyObject *self) { PyNumberMethods *nb = self->ob_type->tp_as_number; if (nb == NULL || nb->nb_oct== NULL) { PyErr_SetString(PyExc_TypeError, "object can't be converted to oct"); return NULL; } return nb->nb_oct(self); } static PyObject * call_hex(PyObject *self) { PyNumberMethods *nb = self->ob_type->tp_as_number; if (nb == NULL || nb->nb_hex == NULL) { PyErr_SetString(PyExc_TypeError, "object can't be converted to hex"); return NULL; } return nb->nb_hex(self); } static PyObject * call_ipow(PyObject *self, PyObject *other) { /* PyNumber_InPlacePower has three args. How silly. :-) */ return PyNumber_InPlacePower(self, other, Py_None); } typedef PyObject *(*function1)(PyObject *); static PyObject * check1(ProxyObject *self, char *opname, function1 operation) { PyObject *result = NULL; result = operation(Proxy_GET_OBJECT(self)); #if 0 if (result != NULL) /* XXX create proxy for result? */ ; #endif return result; } static PyObject * check2(PyObject *self, PyObject *other, char *opname, char *ropname, binaryfunc operation) { PyObject *result = NULL; PyObject *object; if (Proxy_Check(self)) { object = Proxy_GET_OBJECT(self); result = operation(object, other); } else if (Proxy_Check(other)) { object = Proxy_GET_OBJECT(other); result = operation(self, object); } else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } #if 0 if (result != NULL) /* XXX create proxy for result? */ ; #endif return result; } static PyObject * check2i(ProxyObject *self, PyObject *other, char *opname, binaryfunc operation) { PyObject *result = NULL; PyObject *object = Proxy_GET_OBJECT(self); result = operation(object, other); if (result == object) { /* If the operation was really carried out inplace, don't create a new proxy, but use the old one. */ Py_INCREF(self); Py_DECREF(object); result = (PyObject *)self; } #if 0 else if (result != NULL) /* XXX create proxy for result? */ ; #endif return result; } #define UNOP(NAME, CALL) \ static PyObject *wrap_##NAME(PyObject *self) \ { return check1((ProxyObject *)self, "__"#NAME"__", CALL); } #define BINOP(NAME, CALL) \ static PyObject *wrap_##NAME(PyObject *self, PyObject *other) \ { return check2(self, other, "__"#NAME"__", "__r"#NAME"__", CALL); } #define INPLACE(NAME, CALL) \ static PyObject *wrap_i##NAME(PyObject *self, PyObject *other) \ { return check2i((ProxyObject *)self, other, "__i"#NAME"__", CALL); } BINOP(add, PyNumber_Add) BINOP(sub, PyNumber_Subtract) BINOP(mul, PyNumber_Multiply) BINOP(div, PyNumber_Divide) BINOP(mod, PyNumber_Remainder) BINOP(divmod, PyNumber_Divmod) static PyObject * wrap_pow(PyObject *self, PyObject *other, PyObject *modulus) { PyObject *result = NULL; PyObject *object; if (Proxy_Check(self)) { object = Proxy_GET_OBJECT(self); result = PyNumber_Power(object, other, modulus); } else if (Proxy_Check(other)) { object = Proxy_GET_OBJECT(other); result = PyNumber_Power(self, object, modulus); } else if (modulus != NULL && Proxy_Check(modulus)) { object = Proxy_GET_OBJECT(modulus); result = PyNumber_Power(self, other, modulus); } else { Py_INCREF(Py_NotImplemented); return Py_NotImplemented; } return result; } BINOP(lshift, PyNumber_Lshift) BINOP(rshift, PyNumber_Rshift) BINOP(and, PyNumber_And) BINOP(xor, PyNumber_Xor) BINOP(or, PyNumber_Or) static int wrap_coerce(PyObject **p_self, PyObject **p_other) { PyObject *self = *p_self; PyObject *other = *p_other; PyObject *object; PyObject *left; PyObject *right; int r; assert(Proxy_Check(self)); object = Proxy_GET_OBJECT(self); left = object; right = other; r = PyNumber_CoerceEx(&left, &right); if (r != 0) return r; /* Now left and right have been INCREF'ed. Any new value that comes out is proxied; any unchanged value is left unchanged. */ if (left == object) { /* Keep the old proxy */ Py_INCREF(self); Py_DECREF(left); left = self; } #if 0 else { /* XXX create proxy for left? */ } if (right != other) { /* XXX create proxy for right? */ } #endif *p_self = left; *p_other = right; return 0; } UNOP(neg, PyNumber_Negative) UNOP(pos, PyNumber_Positive) UNOP(abs, PyNumber_Absolute) UNOP(invert, PyNumber_Invert) UNOP(int, call_int) UNOP(long, call_long) UNOP(float, call_float) UNOP(oct, call_oct) UNOP(hex, call_hex) INPLACE(add, PyNumber_InPlaceAdd) INPLACE(sub, PyNumber_InPlaceSubtract) INPLACE(mul, PyNumber_InPlaceMultiply) INPLACE(div, PyNumber_InPlaceDivide) INPLACE(mod, PyNumber_InPlaceRemainder) INPLACE(pow, call_ipow) INPLACE(lshift, PyNumber_InPlaceLshift) INPLACE(rshift, PyNumber_InPlaceRshift) INPLACE(and, PyNumber_InPlaceAnd) INPLACE(xor, PyNumber_InPlaceXor) INPLACE(or, PyNumber_InPlaceOr) BINOP(floordiv, PyNumber_FloorDivide) BINOP(truediv, PyNumber_TrueDivide) INPLACE(floordiv, PyNumber_InPlaceFloorDivide) INPLACE(truediv, PyNumber_InPlaceTrueDivide) static int wrap_nonzero(PyObject *self) { return PyObject_IsTrue(Proxy_GET_OBJECT(self)); } /* * Sequence methods */ static int wrap_length(PyObject *self) { return PyObject_Length(Proxy_GET_OBJECT(self)); } static PyObject * wrap_slice(PyObject *self, int start, int end) { return PySequence_GetSlice(Proxy_GET_OBJECT(self), start, end); } static int wrap_ass_slice(PyObject *self, int i, int j, PyObject *value) { return PySequence_SetSlice(Proxy_GET_OBJECT(self), i, j, value); } static int wrap_contains(PyObject *self, PyObject *value) { return PySequence_Contains(Proxy_GET_OBJECT(self), value); } /* * Mapping methods */ static PyObject * wrap_getitem(PyObject *wrapper, PyObject *v) { return PyObject_GetItem(Proxy_GET_OBJECT(wrapper), v); } static int wrap_setitem(PyObject *self, PyObject *key, PyObject *value) { if (value == NULL) return PyObject_DelItem(Proxy_GET_OBJECT(self), key); else return PyObject_SetItem(Proxy_GET_OBJECT(self), key, value); } /* * Normal methods */ static char reduce__doc__[] = "__reduce__()\n" "Raise an exception; this prevents proxies from being picklable by\n" "default, even if the underlying object is picklable."; static PyObject * wrap_reduce(PyObject *self) { PyObject *pickle_error = NULL; PyObject *pickle = PyImport_ImportModule("pickle"); if (pickle == NULL) PyErr_Clear(); else { pickle_error = PyObject_GetAttrString(pickle, "PicklingError"); if (pickle_error == NULL) PyErr_Clear(); } if (pickle_error == NULL) { pickle_error = PyExc_RuntimeError; Py_INCREF(pickle_error); } PyErr_SetString(pickle_error, "proxy instances cannot be pickled"); Py_DECREF(pickle_error); return NULL; } static PyNumberMethods wrap_as_number = { wrap_add, /* nb_add */ wrap_sub, /* nb_subtract */ wrap_mul, /* nb_multiply */ wrap_div, /* nb_divide */ wrap_mod, /* nb_remainder */ wrap_divmod, /* nb_divmod */ wrap_pow, /* nb_power */ wrap_neg, /* nb_negative */ wrap_pos, /* nb_positive */ wrap_abs, /* nb_absolute */ wrap_nonzero, /* nb_nonzero */ wrap_invert, /* nb_invert */ wrap_lshift, /* nb_lshift */ wrap_rshift, /* nb_rshift */ wrap_and, /* nb_and */ wrap_xor, /* nb_xor */ wrap_or, /* nb_or */ wrap_coerce, /* nb_coerce */ wrap_int, /* nb_int */ wrap_long, /* nb_long */ wrap_float, /* nb_float */ wrap_oct, /* nb_oct */ wrap_hex, /* nb_hex */ /* Added in release 2.0 */ /* These require the Py_TPFLAGS_HAVE_INPLACEOPS flag */ wrap_iadd, /* nb_inplace_add */ wrap_isub, /* nb_inplace_subtract */ wrap_imul, /* nb_inplace_multiply */ wrap_idiv, /* nb_inplace_divide */ wrap_imod, /* nb_inplace_remainder */ (ternaryfunc)wrap_ipow, /* nb_inplace_power */ wrap_ilshift, /* nb_inplace_lshift */ wrap_irshift, /* nb_inplace_rshift */ wrap_iand, /* nb_inplace_and */ wrap_ixor, /* nb_inplace_xor */ wrap_ior, /* nb_inplace_or */ /* Added in release 2.2 */ /* These require the Py_TPFLAGS_HAVE_CLASS flag */ wrap_floordiv, /* nb_floor_divide */ wrap_truediv, /* nb_true_divide */ wrap_ifloordiv, /* nb_inplace_floor_divide */ wrap_itruediv, /* nb_inplace_true_divide */ }; static PySequenceMethods wrap_as_sequence = { wrap_length, /* sq_length */ 0, /* sq_concat */ 0, /* sq_repeat */ 0, /* sq_item */ wrap_slice, /* sq_slice */ 0, /* sq_ass_item */ wrap_ass_slice, /* sq_ass_slice */ wrap_contains, /* sq_contains */ }; static PyMappingMethods wrap_as_mapping = { wrap_length, /* mp_length */ wrap_getitem, /* mp_subscript */ wrap_setitem, /* mp_ass_subscript */ }; static PyMethodDef wrap_methods[] = { {"__reduce__", (PyCFunction)wrap_reduce, METH_NOARGS, reduce__doc__}, {NULL, NULL}, }; /* * Note that the numeric methods are not supported. This is primarily * because of the way coercion-less operations are performed with * new-style numbers; since we can't tell which side of the operation * is 'self', we can't ensure we'd unwrap the right thing to perform * the actual operation. We also can't afford to just unwrap both * sides the way weakrefs do, since we don't know what semantics will * be associated with the wrapper itself. */ statichere PyTypeObject ProxyType = { PyObject_HEAD_INIT(NULL) /* PyObject_HEAD_INIT(&PyType_Type) */ 0, "zope.proxy.ProxyBase", sizeof(ProxyObject), 0, wrap_dealloc, /* tp_dealloc */ wrap_print, /* tp_print */ 0, /* tp_getattr */ 0, /* tp_setattr */ wrap_compare, /* tp_compare */ wrap_repr, /* tp_repr */ &wrap_as_number, /* tp_as_number */ &wrap_as_sequence, /* tp_as_sequence */ &wrap_as_mapping, /* tp_as_mapping */ wrap_hash, /* tp_hash */ wrap_call, /* tp_call */ wrap_str, /* tp_str */ wrap_getattro, /* tp_getattro */ wrap_setattro, /* tp_setattro */ 0, /* tp_as_buffer */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_CHECKTYPES | Py_TPFLAGS_BASETYPE, /* tp_flags */ 0, /* tp_doc */ wrap_traverse, /* tp_traverse */ wrap_clear, /* tp_clear */ wrap_richcompare, /* tp_richcompare */ 0, /* tp_weaklistoffset */ wrap_iter, /* tp_iter */ wrap_iternext, /* tp_iternext */ wrap_methods, /* tp_methods */ 0, /* tp_members */ 0, /* tp_getset */ 0, /* tp_base */ 0, /* tp_dict */ 0, /* tp_descr_get */ 0, /* tp_descr_set */ 0, /* tp_dictoffset */ wrap_init, /* tp_init */ 0, /* tp_alloc */ wrap_new, /* tp_new */ 0, /*_PyObject_GC_Del,*/ /* tp_free */ }; static PyObject * create_proxy(PyObject *object) { PyObject *result = NULL; PyObject *args; args = PyTuple_New(1); if (args != NULL) { Py_INCREF(object); PyTuple_SET_ITEM(args, 0, object); result = PyObject_CallObject((PyObject *)&ProxyType, args); Py_DECREF(args); } return result; } static int api_check(PyObject *obj) { return obj ? Proxy_Check(obj) : 0; } static PyObject * api_create(PyObject *object) { if (object == NULL) { PyErr_SetString(PyExc_ValueError, "cannot create proxy around NULL"); return NULL; } return create_proxy(object); } static PyObject * api_getobject(PyObject *proxy) { if (proxy == NULL) { PyErr_SetString(PyExc_RuntimeError, "cannot pass NULL to ProxyAPI.getobject()"); return NULL; } if (Proxy_Check(proxy)) return Proxy_GET_OBJECT(proxy); else { PyErr_Format(PyExc_TypeError, "expected proxy object, got %s", proxy->ob_type->tp_name); return NULL; } } static ProxyInterface wrapper_capi = { &ProxyType, api_check, api_create, api_getobject, }; static PyObject *api_object = NULL; static char getobject__doc__[] = "getProxiedObject(proxy) --> object\n" "\n" "Get the underlying object for proxy, or the object itself, if it is\n" "not a proxy."; static PyObject * wrapper_getobject(PyObject *unused, PyObject *obj) { if (Proxy_Check(obj)) obj = Proxy_GET_OBJECT(obj); if (obj == NULL) obj = Py_None; Py_INCREF(obj); return obj; } static char isProxy__doc__[] = "Check whether the given object is a proxy\n" "\n" "If proxytype is not None, checkes whether the object is\n" "proxied by the given proxytype.\n" ; static PyObject * wrapper_isProxy(PyObject *unused, PyObject *args) { PyObject *obj, *result; PyTypeObject *proxytype=&ProxyType; if (! PyArg_ParseTuple(args, "O|O!:isProxy", &obj, &PyType_Type, &proxytype) ) return NULL; while (obj && Proxy_Check(obj)) { if (PyObject_TypeCheck(obj, proxytype)) { result = Py_True; Py_INCREF(result); return result; } obj = Proxy_GET_OBJECT(obj); } result = Py_False; Py_INCREF(result); return result; } static char removeAllProxies__doc__[] = "removeAllProxies(proxy) --> object\n" "\n" "Get the proxied object with no proxies\n" "\n" "If obj is not a proxied object, return obj.\n" "\n" "The returned object has no proxies.\n" ; static PyObject * wrapper_removeAllProxies(PyObject *unused, PyObject *obj) { while (obj && Proxy_Check(obj)) obj = Proxy_GET_OBJECT(obj); if (obj == NULL) obj = Py_None; Py_INCREF(obj); return obj; } static char sameProxiedObjects__doc__[] = "Check whether two objects are the same or proxies of the same object"; static PyObject * wrapper_sameProxiedObjects(PyObject *unused, PyObject *args) { PyObject *ob1, *ob2; if (! PyArg_ParseTuple(args, "OO:sameProxiedObjects", &ob1, &ob2)) return NULL; while (ob1 && Proxy_Check(ob1)) ob1 = Proxy_GET_OBJECT(ob1); while (ob2 && Proxy_Check(ob2)) ob2 = Proxy_GET_OBJECT(ob2); if (ob1 == ob2) ob1 = Py_True; else ob1 = Py_False; Py_INCREF(ob1); return ob1; } static char queryProxy__doc__[] = "Look for a proxy of the given type around the object\n" "\n" "If no such proxy can be found, return the default.\n" ; static PyObject * wrapper_queryProxy(PyObject *unused, PyObject *args) { PyObject *obj, *result=Py_None; PyTypeObject *proxytype=&ProxyType; if (! PyArg_ParseTuple(args, "O|O!O:queryProxy", &obj, &PyType_Type, &proxytype, &result) ) return NULL; while (obj && Proxy_Check(obj)) { if (PyObject_TypeCheck(obj, proxytype)) { Py_INCREF(obj); return obj; } obj = Proxy_GET_OBJECT(obj); } Py_INCREF(result); return result; } static char queryInnerProxy__doc__[] = "Look for the inner-most proxy of the given type around the object\n" "\n" "If no such proxy can be found, return the default.\n" "\n" "If there is such a proxy, return the inner-most one.\n" ; static PyObject * wrapper_queryInnerProxy(PyObject *unused, PyObject *args) { PyObject *obj, *result=Py_None; PyTypeObject *proxytype=&ProxyType; if (! PyArg_ParseTuple(args, "O|O!O:queryInnerProxy", &obj, &PyType_Type, &proxytype, &result) ) return NULL; while (obj && Proxy_Check(obj)) { if (PyObject_TypeCheck(obj, proxytype)) result = obj; obj = Proxy_GET_OBJECT(obj); } Py_INCREF(result); return result; } static char module___doc__[] = "Association between an object, a context object, and a dictionary.\n\ \n\ The context object and dictionary give additional context information\n\ associated with a reference to the basic object. The wrapper objects\n\ act as proxies for the original object."; static PyMethodDef module_functions[] = { {"getProxiedObject", wrapper_getobject, METH_O, getobject__doc__}, {"isProxy", wrapper_isProxy, METH_VARARGS, isProxy__doc__}, {"sameProxiedObjects", wrapper_sameProxiedObjects, METH_VARARGS, sameProxiedObjects__doc__}, {"queryProxy", wrapper_queryProxy, METH_VARARGS, queryProxy__doc__}, {"queryInnerProxy", wrapper_queryInnerProxy, METH_VARARGS, queryInnerProxy__doc__}, {"removeAllProxies", wrapper_removeAllProxies, METH_O, removeAllProxies__doc__}, {NULL} }; void init_zope_proxy_proxy(void) { PyObject *m = Py_InitModule3("_zope_proxy_proxy", module_functions, module___doc__); if (m == NULL) return; if (empty_tuple == NULL) empty_tuple = PyTuple_New(0); ProxyType.tp_free = _PyObject_GC_Del; if (PyType_Ready(&ProxyType) < 0) return; Py_INCREF(&ProxyType); PyModule_AddObject(m, "ProxyBase", (PyObject *)&ProxyType); if (api_object == NULL) { api_object = PyCObject_FromVoidPtr(&wrapper_capi, NULL); if (api_object == NULL) return; } Py_INCREF(api_object); PyModule_AddObject(m, "_CAPI", api_object); } PK.a4ؓ+zope/proxy/proxy.h#ifndef _proxy_H_ #define _proxy_H_ 1 typedef struct { PyObject_HEAD PyObject *proxy_object; } ProxyObject; #define Proxy_GET_OBJECT(ob) (((ProxyObject *)(ob))->proxy_object) typedef struct { PyTypeObject *proxytype; int (*check)(PyObject *obj); PyObject *(*create)(PyObject *obj); PyObject *(*getobject)(PyObject *proxy); } ProxyInterface; #ifndef PROXY_MODULE /* These are only defined in the public interface, and are not * available within the module implementation. There we use the * classic Python/C API only. */ static ProxyInterface *_proxy_api = NULL; static int Proxy_Import(void) { if (_proxy_api == NULL) { PyObject *m = PyImport_ImportModule("zope.proxy"); if (m != NULL) { PyObject *tmp = PyObject_GetAttrString(m, "_CAPI"); if (tmp != NULL) { if (PyCObject_Check(tmp)) _proxy_api = (ProxyInterface *) PyCObject_AsVoidPtr(tmp); Py_DECREF(tmp); } } } return (_proxy_api == NULL) ? -1 : 0; } #define ProxyType (*_proxy_api->proxytype) #define Proxy_Check(obj) (_proxy_api->check((obj))) #define Proxy_CheckExact(obj) ((obj)->ob_type == ProxyType) #define Proxy_New(obj) (_proxy_api->create((obj))) #define Proxy_GetObject(proxy) (_proxy_api->getobject((proxy))) #endif /* PROXY_MODULE */ #endif /* _proxy_H_ */ PKaa4sDzope/proxy/_zope_proxy_proxy.soELF44 (# 8E8E8E8U8U LELULUQtdaga])O;%MWd7"FYKZTLRUD*`^'<( VX,@fE.P=B2cb5e![H8\-/&134 9 ?A$C 6J0G+:QS#>_IN, A B 4E 8U@UHUW_'hEVLUu+ a=61 ,3ZvJbp x_ ;_i[f'A sH%"O4_G_zOs,4 V? _DYNAMIC__gmon_start___init_fini__cxa_finalize_Jv_RegisterClassesPyArg_UnpackTuplePyDict_SizePyType_GenericNewPyExc_TypeErrorPyErr_SetStringPyType_IsSubtypePyObject_RichComparePyObject_GetIterPyIter_NextWrapperType_LookupPyDict_GetItemPyClass_TypePyUnicode_TypePyString_TypePyUnicodeUCS2_AsEncodedStringPyObject_GetAttrPyExc_RuntimeErrorPyErr_FormatPyObject_SetAttrPyObject_PrintPyObject_StrPyObject_ReprPyObject_ComparePyObject_HashPyEval_CallObjectWithKeywordsPyObject_CallObject_Py_NoneStructPyNumber_InPlacePowerPyNumber_Power_Py_NotImplementedStructPyNumber_CoerceExPyNumber_TrueDividePyNumber_InPlaceTrueDividePyObject_IsTruePyObject_SizePySequence_GetSlicePySequence_SetSlicePySequence_ContainsPyObject_GetItemPyObject_SetItemPyObject_DelItemPyImport_ImportModulePyObject_GetAttrStringPyErr_ClearPyTuple_NewPyExc_ValueErrorPyType_TypePyArg_ParseTuple_Py_ZeroStruct_Py_TrueStructinit_zope_proxy_proxyPy_InitModule4PyObject_GC_DelPyType_ReadyPyModule_AddObjectPyCObject_FromVoidPtrPyNumber_NegativePyNumber_PositivePyNumber_AbsolutePyNumber_InvertPyNumber_InPlaceAddPyNumber_InPlaceSubtractPyNumber_InPlaceMultiplyPyNumber_InPlaceDividePyNumber_InPlaceRemainderPyNumber_InPlaceLshiftPyNumber_InPlaceRshiftPyNumber_InPlaceAndPyNumber_InPlaceXorPyNumber_InPlaceOrPyNumber_InPlaceFloorDividePyNumber_AddPyNumber_SubtractPyNumber_MultiplyPyNumber_DividePyNumber_RemainderPyNumber_DivmodPyNumber_LshiftPyNumber_RshiftPyNumber_AndPyNumber_XorPyNumber_OrPyNumber_FloorDividelibpthread.so.0libc.so.6_edata__bss_start_endGLIBC_2.1.3*si LWW\\\\\\\\\\\\\]]] ]] ]$],]0]4]T]\]]]]]]]]]]]^^^ ^^^^^ ^$^(^,^0^4^8^<^@^D^H^L^P^T^X^\^`^d^h^l^p^t^x^|^^^^^^^^^^^^^^^^^^^^^^^^^VVV V$V(V,V$0V64V88VHV@WAWBWC WDWEWFWGWI WJ$WK(WM,WN0WO4WP8WQ} u %&PjjE PE ƃE@EU z_u ~_} WEpV}PBUtTtJQMyWQP҉ƃ'} Hu GWPe[^_]Í'1߹ !eu VMQDƃ뙉'u PVPP1cPP_1ZUWVS [Â4}u F9RPF9tRPVGP2PBUtZtPQMQWP҉ǃHu FVPe[^_]ÉPjjVƃuِt&PFPHPPz뚍Gt;QURVP!ǃqPPbPFPP8W%&US[3EPE PE@P]Ít&US[2EPRe]ÍUS[ä2EHQ]ÍUS [t2E PE@P]Ð&US[D2E@PU]ÍUSP[2MU Et"PRAPx]ÍRAP]Ít&'USQ[ö1UB@0t"@Ht RЃ]Í'PR,1]Í&'USP[F1UB@0t"@Lt RЃ]Í'PP1]Í&'USP[0UB@0t"@Pt RЃ]Í'PPL1]Í&'USP[f0UB@0t"@Tt RЃ]Í',PP1]Í&'USQ[/UB@0t"@Xt RЃ]Í'PPRl1]Í&'US[Ä/PE PEP]Ít&UWVS [R/}Gp9tkVPuZU B9VPfu[UtqUB9tVPDtVPEPE PWt&PEPu VOQe[^_]ÍvE RuVHQWe[^_]ËΉؐt&UWVS$[r.E8U W։UEEPEPuU9tEEU 1e[^_]Ít&EJt}ЋE PPR}빍t&UE@E]&'UWVS [-}Gp9tKVPu:U B9t`VPt?E @PW#e[^_]Ít&E PGPe[^_]Ðt&e[^_]É밍UWVS[-}wE PVoƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&US[ä,EPRu]ÍUS[t,EHQ]ÍUS[D,EPE PE@P]Ít&USQ[,UREPE PE@P;]ÉUS [+E PE@P]Ð&US [ô+E PE@P1]Ð&USR[Æ+MU Et"PRAPh]ÍRAP]Ít&'UVS[&+ +PƒtW2PRKƃt>tPVHu FVP1e[^]Í0 USQ[Æ*Et(@p9tRPt ]1]É'UWVS [2*}td jNƃ}x PpPNjHt e[^_]à FVPe[^_]É'P0Vle[^_]Ít&'1e[^_]Ít&UVS[v)utLFp9tRPt Fe[^]PF@ P@PP1ՃPP1붍'UVS[(u Fp9tRPtvte[^]Íe[^] UVS[s(puEPPEP^PE Ph tXEtIP9tVRst+EPE9t-PRUuE@Eue[^]Ëe[^] UWVS [ò'u t3p&'F9tWPt vuዳe[^_] UVS[C'EPEPkPU RHEt7pP9tVRCt E@EuۋEt9p&'P9tVRt2E@Eu9EtEEe[^]ËEE֐UVS[c&EpuEPEPPEPPM QK t`EuEg&VRZtOEHU9t,RQ<uE@Et$P9uЋEEe[^]É'EEe[^]ÐUVS[Ó%EpuEPEPPEPPE P{ t^EtO'P9tYVRt.EHU9tRQet:EE@EuEEe[^]Ít&'뺍EǍt&'UWVS[ò$hjPPPPnƃ tf pWx6pQWPVtRPPVe[^_]ÍvjPPuՃ je&US[#E@P]ÍUS[Ô#E@P]ÍUS[d#E@P%]ÍUS[4#E@P]ÍUE@E]>&'UE@E]&'UE@E]&'UE@E].&'UVPuVtFHt! FVuÍ BRP FVuÍ&'UWVS["}wE PVƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&UWVS[â!}wU RVƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&UWVS[2!}wM QV/ƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&UWVS[ }wE PVƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&UWVS[R }wE PVOƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&UWV}wE PVHƒ9tЍe^_]ÍHt Ѝe^_]à BRP'UWVS[Â}wE PVƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&UWVS[}wE PV_ƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&UWVS[â}wE PVƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&UWVS[2}wU RV/ƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&UWVS[}wM QVƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&UWVS[R}wE PVƒ9tЍe[^_]Ð&Ht Ѝe[^_]à BRP名&UWVS [}Gp9tKVPu:U B9t`VPt?E @PWe[^_]Ít&E PGPte[^_]Ðt&e[^_]É밍UWVS [2}Gp9tKVPeu:U B9t`VPJt?E @PWe[^_]Ít&U RGPe[^_]Ðt&e[^_]É밍UWVS [Â}Gp9tKVPu:U B9t`VPt?E HQWe[^_]Ít&E PwVe[^_]Ðt&e[^_]É밍UWVS [}Gp9tKVPu:U B9t`VPt?E @PW3e[^_]Ít&E PGPe[^_]Ðt&e[^_]É밍UWVS ["}Gp9tKVPUu:U B9t`VP:t?E @PWe[^_]Ít&U RGPte[^_]Ðt&e[^_]É밍UWVS [r}Gp9tKVPu:U B9t`VPt?E HQWe[^_]Ít&E PwVe[^_]Ðt&e[^_]É밍UWVS [}Gp9tKVPu:U B9t`VPt?E @PWe[^_]Ít&E PGPe[^_]Ðt&e[^_]É밍UWVS [}Gp9tKVPEu:U B9t`VP*t?E @PWe[^_]Ít&U RGPe[^_]Ðt&e[^_]É밍UWVS [b}Gp9tKVPu:U B9t`VPzt?E HQWSe[^_]Ít&E PwV4e[^_]Ðt&e[^_]É밍UWVS [ò}Gp9tKVPu:U B9t`VPt?E @PWe[^_]Ít&E PGPe[^_]Ðt&e[^_]É밍UWVS [}Gp9tKVP5u:U B9t`VPt?E @PWCe[^_]Ít&U RGP$e[^_]Ðt&e[^_]É밍UWVS [R}Gp9tKVPu:U B9t`VPjt?E HQWse[^_]Ít&E PwVTe[^_]Ðt&e[^_]É밐UVS[æP@t֍ЋFu[^]ÐUS[cPY[zope.proxy.ProxyBase__reduce__getProxiedObjectremoveAllProxies__new____init__attribute name must be string__class__picklePicklingErrorexpected proxy object, got %sO|O!:isProxyOO:sameProxiedObjectsO|O!O:queryProxyO|O!O:queryInnerProxy_zope_proxy_proxy_CAPIproxy.__new__ does not accept keyword argsproxy.__init__ does not accept keyword argsobject is NULL; requested to get attribute '%s'Tried to set attribute '%s' on wrapper, but it is not a data descriptorobject is NULL; requested to set attribute '%s'object can't be converted to intobject can't be converted to longobject can't be converted to floatobject can't be converted to octobject can't be converted to hexproxy instances cannot be pickledcannot create proxy around NULLcannot pass NULL to ProxyAPI.getobject()* , AL  X PV8`otooo]LUZjz *:JZjz *:JZjz *:JZjz *:JZjzWDU__reduce__() Raise an exception; this prevents proxies from being picklable by default, even if the underlying object is picklable.Association between an object, a context object, and a dictionary. The context object and dictionary give additional context information associated with a reference to the basic object. The wrapper objects act as proxies for the original object.removeAllProxies(proxy) --> object Get the proxied object with no proxies If obj is not a proxied object, return obj. The returned object has no proxies. Look for the inner-most proxy of the given type around the object If no such proxy can be found, return the default. If there is such a proxy, return the inner-most one. Look for a proxy of the given type around the object If no such proxy can be found, return the default. Check whether two objects are the same or proxies of the same objectCheck whether the given object is a proxy If proxytype is not None, checkes whether the object is proxied by the given proxytype. getProxiedObject(proxy) --> object Get the underlying object for proxy, or the object itself, if it is not a proxy.\+,,B 3@###^]]$0$p# !E0P@]`B +W)**)*0*`*`9::p; <<&222)3=0>>?@@'@3`333`(044555`6607788@(80) B`- \B-[B/ [B/ZB0Y1B.@YGCC: (GNU) 3.4.5 20050809 (prerelease) (Ubuntu 3.4.4-6ubuntu8)GCC: (GNU) 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu9)GCC: (GNU) 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu9)GCC: (GNU) 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu9)GCC: (GNU) 3.4.5 20050809 (prerelease) (Ubuntu 3.4.4-6ubuntu8),A, !$${/AA?.WrapperType_Lookup init_zope_proxy_proxy/build/buildd/glibc-2.3.5/build-tree/i386-libc/csu/crti.S/build/buildd/glibc-2.3.5/build-tree/glibc-2.3.5/csuGNU AS 2.16.1.AD[k v}f x int~a ;V z dk A.>=. O###}# #a##p#L # n#$~ #(#,#0 #4"O#8S&O#<(o#@,3#D -A#F .#G%2#H;#L A>#T B>#XDO#\F#`F @>] i > Y  # # O#pi3O  f gO# 7g# g O# 7# O# # O# O#  # # # A T #  #$ x  #( #,  #0Z  #4 #8  #<@  V#@*  #Dr z #H_  #L #Pz#T,#Xx#\ #`e! #d$z#hQ( #l- )( #pc,#td -#x/ .i#|/#i0*#113 #2> #3z#. 4I # 5 # 6T #' 7 #Z8#g9*#:*#k ;*#F<*# =*#S > #h~** *s ;AV* * *ag* * * * O * O  ** * O* * O O*0JO * O *U[zO * O O * O * * *O * O Q O *   ,O * O K'7=RO * *]cxO * >O * R >  40# ;0# N0# G0# 50# 0# 6 V# G # G  #  #$ #(  #, q0#0 0#4 0#8 G0#< x0#@  #D t #H  #L  #P R #T 9  #X 0#\ { 0#` 0#d @0#h 20#l V#p 0#t 0#x 0#| 0# 0# ? 0# .0# 0# 0#ãf ( Ɓ# 0# F# # ~# # XJ# ,# 0# #$~   ԁ# O 0# z# q   ڥ# B# #  # Tޯ  W  #  *. 4 N O * N OR_ e z * * K;    O * *E 7    z *    * * * O[ a  _ e  *  * *    *  O f   Y, "# ## $O# %#   i .  #get #set#doc# >#G   O# 7 #  z#8 {} ;Y' * * >   O * * >oY  O# 7# *#&  #  # # # d o\&*_9 Wl  ^{f ] ]G 7] e\l*_tp} \E [@YD [i%Z7'YYI@X{P"k^(? eo y xo  o /o &o{.*m6*5<* /*[U:. u3.*.*M0*1*b;YA$EO`/UD*3D*u D*hFOG*  bJ T*`O0PU_*PE_Ru !arg_>u"oba* #T jO$i*kl*%PU&>'(i7&w*Uv*|T v*!opvOu_ *4U*P *@dU*P)*pU: P *u "iO"nO"mro*>"res*\*l*z* !U*u *u *:*"res*ƓBO*!+ O!9#U,*v, *- *u.*`.:*~/resO0.^"+g^5O@#l#U-b4*P1fp4N u -4Ou+:*p##U-b:*P+i @*##U-b?*P+GO##U-bF*P1vF*u +"Mz$$$U-L*P+gS*0$$U,R*,3R*32kwR*u+e*$$U,d*/nbf +Z q*%b%U,p*/nbr Y+* }*p%%U,|*w/nb~ +S>*%B&U,*/nb +*P&&U,*7/nb y+ *&&U-*u-T *u +,*&'U,*-T *u -*u*P3*+O'\(U-u-R u .*.T * .* \  *up!*ul/r"O 4*55 5 3*+WJ*`(r(U-J*P6c(l(777 8'4*5*5T *5 5 5 03*3*+2Y*($)U,Y* -T Y*u 6W((7777u7i P8P'4*55T *5 5 03*3*+7[*0))U,[* -T [*u 62H)^)7h7\7P7D p(tZ ( +, _O))U-^*P+V.iO))U-h*P+ o**,*U-n*P-nOu 1endnOu+iuO0*^*U-t*P1itOu 1jtOu- t*u+*2{O`**U-z*P- z*u +ae***U-b*P1v*u +O*+U,* 2key* , *Q +5 * ++U-*u. * .T* +$DO+,U2objC* 4[8 4*53*35*336*+|J*,,U,I* 6$,,f,76 (Bt (N +U*,S-U,T* + x*`--U-w*u2objw*( +*-.U-*u-3*u /obj*j .*  up+ *..U-*u2obj* + *//U-*u-3*u /ob1* /ob2*7+ */0U-*u-3*u /obj**up ul+ *01U-*u-3*u /obj**up ul9!S11x2U/m2*p+f!oA*22U-A*P622777228P+! B*22U-B*P622777228P+"C*23U-C*P622777228P+n"jD*343U-D*P6#3/3777#3/38P+" F*@3R3U-F*P6C3L3777 '+# G*`3r3U-G*P6c3l3777 '+d#X H*33U-H*P633777 '+#/ I*33U-I*P633777 ':$(3"4U*6337 '(+x$L*044U,L*%-T L*u 62H4^47h7\7P7D ((tr(+$M*45U,M*-T M*u 62447h7\7P7D H(t2(|+b%N*5x5U,N*-T N*u 62(5>57h7\7P7D h(t(<+%H O*55U,O*e-T O*u 62557h7\7P7D (t(+L& P*5X6U,P*%-T P*u 62667h7\7P7D (tr(+&Q*`66U,Q*-T Q*u 62h667h7\7P7D (t2(|+6'FR*6(7U,R*-T R*u 62667h7\7P7D (t(<+'S*077U,S*e-T S*u 62H7^77h7\7P7D (t(+ (xT*78U,T*%-T T*u 62777h7\7P7D ((tr(+(U*8x8U,U*-T U*u 62(8>87h7\7P7D H(t2(|+ ) V*88U,V*-T V*u 62887h7\7P7D h(t(<+)&Z*8X9U,Z*e-T Z*u 62997h7\7P7D (t(+)c *`9:U,*%-T *u 6Wx997777u7i 8P'+g*+*::U,*-T *u 6W(:t:7777u7i 8P'+* *:d;U,*-T *u 6W:$;7777u7i 8P'+O+d*p;<U,*Q-T *u 6W;;7777u7i 8P'++ * <<U,*-T *u 6W8<<7777u7i (8P'+7, *<t=U,*-T *u 6W<4=7777u7i H8P'+,t *=$>U,*}-T *u 6W==7777u7i h8P'+-*0>>U,*-T *u 6WH>>7777u7i 8P'+- *>?U,*E-T *u 6W>D?7777u7i 8P'+.*?4@U,*-T *u 6W??7777u7i 8P'+{. *@@@U,* -T *u 6WX@@7777u7i 8P';~X*@AU,X*q-T X*u 6WATA7777u7i 8P'8D/build/buildd/glibc-2.3.5/build-tree/i386-libc/csu/crtn.S/build/buildd/glibc-2.3.5/build-tree/glibc-2.3.5/csuGNU AS 2.16.1%% $ > $ > : ; I I : ;  : ;I8  &I ' I : ; : ; I8 I!I/ ' I : ;  : ;<  : ; I8 : ;I4: ;I 4: ; I 4: ; I? < 4: ;I? < .: ; ' I@ : ; I : ; I4: ; I 4: ; I U!: ; I "4: ; I#.: ; ' I $: ; I%.1@ &1'41(41).? : ; ' I@ * : ; +.: ;' I@ ,: ;I-: ;I .4: ;I/4: ;I0 : ;1: ;I 2: ;I34: ;I4.: ;' I 5: ;I6171841 9.? : ;' @ :.: ; ' @ ;.: ;' I@ %M /build/buildd/glibc-2.3.5/build-tree/i386-libc/csucrti.SA3,Wd,#,: ,Wdd,,-[ src/zope/proxy/home/tseaver/projects/PyCon2006/eggification/sandbox/include/python2.3/usr/include/usr/include/bits_zope_proxy_proxy.cobject.hstdio.hlibio.htypes.hmethodobject.hdescrobject.hproxy.hunicodeobject.hboolobject.hintobject.hstringobject.hclassobject.hpyerrors.h.>sVgrG+tA,dBmUpcddH/;Hr/>|;,,LO+ltftq;V G,u :/--uc]cGUat+ &"-ƪ-9WZ+0:MfU ,:,,,,H :d</:d</:d</:d</:d</-:uz9u 9{+HV\;V:uqVq,p~9~+~q9~9~s~q;q,+,,,:ru,,JtxvGX+:'T,rmG,:l&s<hG+:L?my$:;J-Bf- q;&+wx Gd-wqd3Ur08-<#4bJ6bJX,:zq:*'vy!,NV: :*.:_NV:2H#tֹXd,zdt|~+~+~+~+~9~+~9~+~9~+~9~}+];Hr!^!+q;q,+q;q,+q;q,+q;q,+q;q,+;q,+q;q,+q;q,+q;q,+q;q,+q;q,+~q;q,+Iq39K79R.rHq49J89Q/rGq59I99P0rFq69H:9O1rEq79G;9N2rDq89F<9M3qq99rq99rq99rq99rq99q~q9~9~ uM /build/buildd/glibc-2.3.5/build-tree/i386-libc/csucrtn.SAA | $AB Fb. T.$`AB Fe. T.0 AB U.PAAB t. gAB Fd.$AB DS.@$AB DS. pAB FU. AB Fa. !yAB Fh.@#,AB D[.p#$AB DS.#$AB DS.#(AB DW.$$AB DS.0$UAB Ac.$bAB Ae.%bAB Ae.p%bAB Ae.%bAB Ae.P&bAB Ae.&,AB D[. &AB Fa. 'AB Fi.`(AB J. (AB Fa. 0)hAB FW.)$AB DS.)$AB DS.*,AB D[.0*.AB A`.`*(AB DW.*(AB DW.*UAB Ac. +AB BV.e.+GAB Af. ,AB FX.,AB Be.`-aAB Ba. -AB Eo. e. .aAB Fs./AB E_. /AB E|. a. 0AB E|. h.$1AB Fh. r.2$AB DS.2$AB DS.2$AB DS.3$AB DS.@3AB J.`3AB J.3AB J.3AB J.3bAB Ab. 04hAB FW. 4hAB FW. 5hAB FW. 5hAB FW. 5hAB FW.`6WAB BN. 6hAB FW. 07hAB FW. 7hAB FW. 8hAB FW. 8hAB FW. 8hAB FW. `9AB Fa. :AB Fa. :AB Fa. p;AB Fa. <AB Fa. <AB Fa. =AB Fa. 0>AB Fa. >AB Fa. ?AB Fa. @@AB Fa. @AB Fa._Py_TrueStructPyMemberDefsq_ass_itemobjobjprocnb_inplace_remaindernb_dividetp_iterPyMethodDeftp_richcomparenb_intPyExc_RuntimeErrortp_deallocwrap_ixor_IO_save_endcheck1check2getobject__doc__visitproctp_reprwrap_as_mappingsq_itemapi_check_IO_write_basemaybe_special_name_lockwrap_subnb_addnb_subtractnb_xornb_multiplytp_is_gctp_methods_IO_save_baseapi_creategetwritebufferproc_chain_cur_columnProxyInterfacenb_absolutetp_name_modeprintfuncgettertp_mroternaryfunccall_intmp_ass_subscriptob_refcntnb_inplace_multiplywrap_containsnb_inplace_dividenb_oct_IO_markerwrap_divPyExc_TypeErrorshort unsigned intwrapper_queryInnerProxyintintargfuncnb_inplace_or_Py_NotImplementedStructwrap_isubdescrgetfuncnb_divmodPyClass_Typewrap_nonzeroProxyObjectwrap_initnb_true_divide_IO_FILEtp_subclassesPyBufferProcswrapperwrap_invertunsigned charfinallywrap_call_sbufwrap_absresultempty_tuplewrap_xorwrapper_sameProxiedObjectsnb_inplace_true_dividebf_getsegcountwrap_setitemwrap_hextp_basevaluewrap_ifloordivnb_remainderbf_getwritebufferpicklesrc/zope/proxy/_zope_proxy_proxy.cwrap_floordivp_selfunusedtp_descr_set_IO_lock_ttp_weaklistoffsetwrappedtp_hashml_flagstp_as_bufferstartwrap_compare_IO_read_ptrnb_floatob_ivalPyTypeObjectstdinwrap_lengthdescriptorvisitgetattrofuncsq_ass_slicewrap_getitemtp_getattrosq_slicewrap_coerce_markerswrap_truedivgetreadbufferproc/home/tseaver/projects/PyCon2006/eggification/sandbox/src/zope.proxyintintobjargprocqueryInnerProxy__doc__wrap_deallocPyExc_ValueErrorwrap_ilshiftinit_zope_proxy_proxytp_dictnb_lshiftwrap_as_sequenceunaryfuncwrap_getattronewfunctp_as_mappingwrap_ipowtp_setattrwrap_setattronb_inplace_addtraverseprocnb_inplace_xorclosurewrap_traversewrap_rshifttp_strtp_descr_getcall_octnb_negative_flags2getiterfunctp_bases_IO_buf_base_IO_read_basekwdssq_concatcall_hexdestructor_unused2__quad_tPyNumberMethodswrapper_queryProxysq_inplace_repeatfunction1temptp_flagswrap_new_old_offsetwrap_hashtp_docargsPyIntObjectGNU C 4.0.2 20050808 (prerelease) (Ubuntu 4.0.1-4ubuntu9)long long intnb_inplace_lshiftWrapperType_Lookuprightmodulusml_meth_IO_write_endwrap_irshiftob_sizePyObjectremoveAllProxies__doc__getsegcountprocgetcharbufferproctp_iternextnb_hextp_callwrap_idivp_othercall_longtp_membersPyString_TypePyCFunctioninquirynb_and_nextwrap_slicewrap_iternexttp_basicsize__pad1__pad2descrsetfuncwrap_modwrap_iorwrap_longobjobjargprocsetattrfuncwrap_mulPyMappingMethodswrap_octcreate_proxyisProxy__doc__wrap_cleartp_setattrotp_cachewrap_lshiftsq_inplace_concatallocfuncnb_invert_Py_ZeroStructtp_weaklistlong doublewrap_iterPyType_Typetp_printpickle_errorwrap_poswrap_andwrap_ornb_coercebf_getcharbuffertp_initnb_powernb_floor_dividemp_subscriptleftlong long unsigned inttp_comparetp_clearinitproc__off_t_Py_NoneStructPyGetSetDeftp_allocnb_rshift_typeobjectwrapper_removeAllProxiesnb_inplace_andwrapper_capifreefuncwrapper_getobjecttp_freetp_getsetreduce__doc__nb_positivetp_deltp_as_sequencewrap_reprbinaryfunc_IO_backup_base_shortbufiternextfuncwrap_intnb_longcoercionoperationwrap_divmodproxy_object__off64_trichcmpfunchashfuncropnamewrap_imodcall_ipowwrap_methodscall_floatwrap_reducetp_getattr_IO_buf_endwrap_floatwrap_addwrap_as_numbernb_inplace_subtractshort intsetterPyUnicode_Typebf_getreadbuffertp_itemsizeProxyType_vtable_offsetnb_inplace_rshifttp_as_numbernb_inplace_floor_dividereprfuncqueryProxy__doc__wrap_itruedivsetattrofuncgetattrfuncwrap_printwrap_ass_slicenb_orPySequenceMethodsnb_inplace_powerml_docname_as_string_IO_read_endwrap_powsq_containsapi_getobjectnb_nonzero_filenomodule___doc__tp_newtp_traversesq_lengthwrap_richcompareob_typestdoutsq_repeatmodule_functions_IO_write_ptrwrap_negwrap_iandmp_lengthwrap_iaddwrap_strcheck2isameProxiedObjects__doc__wrap_imulapi_objectproxytypeml_nametp_dictoffsetwrapper_isProxy7 7sWsu uW W77rVruuVVY`R`cPcuRRR`kpkmPmup!W!##EWEGG[W[]]WV##DVDGGZVZ]]oVoP<?PUUPzPGpPPuPuR=V=@@TVTW >W>@ @UWUW WKWpKpPPP&>P#PIKPpppBPGUPsPPDpVVVVVVVVVV<<WWW5W5==ZWZbbvWv< <V VPV#3PbbPPP#PWWW5=WZbWWQQ R R PP R 2R2BP)PPnn{R{RjqPPR R " P P0 N N [ R[ c c R J Q Pc y P  R  R   P P@ e e W  W   W: z W| W W? M PB W RW e Ve p Rp t Wt y Vy z W| R VZ h Pt t P| P  : W: < < Y WY [ [ n Wn p p t W  W  W  W R P R P R R V V V..<Q<DD]Q]e. .<R<D D]R]e ..6P6DDWPWeVPVRPRP((+P+W`||WWWWWWWVPVVPV 88^V^``V V V cjtjPtPtPP >V>A tPtP/tpPpPp%P%/ptPtPtPtPtPWtWqPq~t~PtPtPtV-P-VPVPVBVBDDpVpr<RDZRWWWRPRPRRVVV&W&((EWEGGXWR P (R(4P4QRVXR %V(DVGXV`WWWRPRPRR{VVVW%W%''8WRPRP1R68RV$V'8V@nnvWvxxWWgnRnpPpxRxPRR[uVxVVWWWRPRPRRVVV>>FWFHHeWeggxW7>R>@P@HRHTPTqRvxR+EVHdVgxVWWWRPRPRRVVV&W&((EWEGGXWR P (R(4P4QRVXR %V(DVGXV`WWWRPRPRR{VVVW%W%''8WRPRP1R68RV$V'8V@nnvWvxxWWgnRnpPpxRxPRR[uVxVVW9W9;;NWNPPTW`WWWW55zWz||WWW*W*,,IWIKK^W^``dWpWW W    W E E W  W  W  W  :!W:!gxP]GX0=x'8Xn@H 3x(t$PX0C  8 4!`!h!@!S!!!""!"H"""""""D#p#x#P#c### $($$$X$$$$$$.symtab.strtab.shstrtab.hash.dynsym.dynstr.gnu.version.gnu.version_r.rel.dyn.rel.plt.init.text.fini.rodata.eh_frame.ctors.dtors.jcr.dynamic.got.got.plt.data.bss.comment.debug_aranges.debug_pubnames.debug_info.debug_abbrev.debug_line.debug_frame.debug_str.debug_loc.debug_ranges(! p )L L X1o>ott M `V 8 _,,ZDDe&kAAq2BB1y4E4E8U8E@U@EHUHELULEVF<PVPF(WG _O O@PPxPC Q 0H]d 0)[(74 " TS L t,D  A B 4E 8U@UHULUVPVW_ !" F Va8Uo@U}HU_W p V > ? @@ ' @3 `3 3 3 `( 04h 4h 5h 5h 5h `6W !6h .07h ;7h E8h O8h X@ f( s8h 0)h _@X^p`-a  \u- [/  [E3/ FZjX0 pY.a @Y$b %b p%b %b P&b &, WPV3GYhyLU '6ERfv1 ,/?Vbw   p 3 C W d q    _        4 A N ` o A u     "   _ _ + ; O e u         - D initfini.c/build/buildd/glibc-2.3.5/build-tree/i386-libc/csu/crti.Scall_gmon_startcrtstuff.c__CTOR_LIST____DTOR_LIST____JCR_LIST__completed.4463p.4462__do_global_dtors_auxframe_dummy__CTOR_END____DTOR_END____FRAME_END____JCR_END____do_global_ctors_aux/build/buildd/glibc-2.3.5/build-tree/i386-libc/csu/crtn.S_zope_proxy_proxy.cwrapper_capiProxyTypeapi_checkapi_createapi_getobjectapi_objectwrap_deallocwrap_printwrap_comparewrap_reprwrap_as_numberwrap_as_sequencewrap_as_mappingwrap_hashwrap_callwrap_strwrap_getattrowrap_setattrowrap_traversewrap_clearwrap_richcomparewrap_iterwrap_iternextwrap_methodswrap_initwrap_newwrap_reducereduce__doc__wrap_lengthwrap_getitemwrap_setitemwrap_slicewrap_ass_slicewrap_containswrap_addwrap_subwrap_mulwrap_divwrap_modwrap_divmodwrap_powwrap_negwrap_poswrap_abswrap_nonzerowrap_invertwrap_lshiftwrap_rshiftwrap_andwrap_xorwrap_orwrap_coercewrap_intwrap_longwrap_floatwrap_octwrap_hexwrap_iaddwrap_isubwrap_imulwrap_idivwrap_imodwrap_ipowwrap_ilshiftwrap_irshiftwrap_iandwrap_ixorwrap_iorwrap_floordivwrap_truedivwrap_ifloordivwrap_itruedivempty_tuplemodule___doc__module_functionswrapper_getobjectgetobject__doc__wrapper_isProxyisProxy__doc__wrapper_sameProxiedObjectssameProxiedObjects__doc__wrapper_queryProxyqueryProxy__doc__wrapper_queryInnerProxyqueryInnerProxy__doc__wrapper_removeAllProxiesremoveAllProxies__doc__call_intcall_longcall_floatcall_octcall_hexcall_ipow__dso_handle_GLOBAL_OFFSET_TABLE_PyUnicodeUCS2_AsEncodedStringPyNumber_InPlaceXorPyNumber_Subtract_Py_TrueStructPyObject_ComparePySequence_SetSlicePyObject_GetAttrPyExc_RuntimeError_DYNAMICPyNumber_InPlaceDividePyNumber_InPlaceTrueDivide_Py_NoneStructPyString_TypePyNumber_PositivePyNumber_Or_Py_ZeroStructPyUnicode_TypePyNumber_XorPyNumber_TrueDividePyErr_SetStringPyNumber_AbsolutePy_InitModule4PySequence_GetSlicePyObject_SetItemPyNumber_InPlaceMultiply_Py_NotImplementedStructPyObject_Hashinit_zope_proxy_proxy_initPyNumber_InPlaceLshiftPyNumber_RshiftPyObject_GetAttrStringPyDict_SizePyNumber_FloorDividePyNumber_DivmodPyObject_GetItemPyObject_PrintPyObject_SetAttrPyModule_AddObjectPyImport_ImportModulePyObject_IsTruePyNumber_NegativePyErr_ClearPyExc_ValueErrorWrapperType_LookupPyExc_TypeErrorPyNumber_InPlaceAddPyType_ReadyPyNumber_AndPyObject_ReprPyObject_DelItemPyObject_GetIter__bss_startPyNumber_InPlaceAndPyDict_GetItemPyObject_StrPyObject_SizePyNumber_RemainderPyObject_RichComparePyErr_FormatPyObject_CallObjectPyClass_TypePyNumber_AddPyType_GenericNewPyNumber_Power_finiPyNumber_InPlaceSubtractPyNumber_LshiftPyType_IsSubtypePyArg_UnpackTuple__cxa_finalize@@GLIBC_2.1.3PyEval_CallObjectWithKeywordsPyNumber_CoerceEx_edata_endPyNumber_MultiplyPyNumber_DividePySequence_ContainsPyCObject_FromVoidPtrPyNumber_InvertPyType_TypePyNumber_InPlaceOrPyIter_NextPyNumber_InPlaceRemainderPyArg_ParseTuple_Jv_RegisterClassesPyTuple_NewPyObject_GC_DelPyNumber_InPlaceFloorDividePyNumber_InPlacePowerPyNumber_InPlaceRshift__gmon_start__PKaa4 ~/(zope/proxy/__init__.pyc; 3Dc@sddZdklZdklZdklZdkTdklZeee eZ dZ dS(shMore convenience functions for dealing with proxies. $Id: __init__.py 25177 2004-06-02 13:17:31Z jim $ (smoduleProvides(sIProxyIntrospection(s ClassType(s*(s_CAPIccs-|Vx"t|ot|}|VqWdS(N(spsisProxysgetProxiedObject(sp((s1build/bdist.linux-i686/egg/zope/proxy/__init__.pys ProxyIterators   N( s__doc__szope.interfacesmoduleProvidesszope.proxy.interfacessIProxyIntrospectionstypess ClassTypeszope.proxy._zope_proxy_proxys_CAPIstuples__all__s ProxyIterator(s__all__smoduleProvidess ClassTypesIProxyIntrospections_CAPIs ProxyIterator((s1build/bdist.linux-i686/egg/zope/proxy/__init__.pys?s      PKaa4A`Z Z zope/proxy/interfaces.pyc; 3Dc@s-dZdklZdefdYZdS(sOProxy-related interfaces. $Id: interfaces.py 25177 2004-06-02 13:17:31Z jim $ (s InterfacesIProxyIntrospectioncBsMtZdZedZdZdZdZedZedZ RS(sMProvides methods for indentifying proxies and extracting proxied objects cCsdS(sCheck whether the given object is a proxy If proxytype is not None, checkes whether the object is proxied by the given proxytype. N((sobjs proxytype((s3build/bdist.linux-i686/egg/zope/proxy/interfaces.pysisProxyscCsdS(sMCheck whether ob1 and ob2 are the same or proxies of the same object N((sob1sob2((s3build/bdist.linux-i686/egg/zope/proxy/interfaces.pyssameProxiedObjects scCsdS(sbGet the proxied Object If the object isn't proxied, then just return the object. N((sobj((s3build/bdist.linux-i686/egg/zope/proxy/interfaces.pysgetProxiedObject$scCsdS(sGet the proxied object with no proxies If obj is not a proxied object, return obj. The returned object has no proxies. N((sobj((s3build/bdist.linux-i686/egg/zope/proxy/interfaces.pysremoveAllProxies*scCsdS(syLook for a proxy of the given type around the object If no such proxy can be found, return the default. N((sobjs proxytypesdefault((s3build/bdist.linux-i686/egg/zope/proxy/interfaces.pys queryProxy2scCsdS(sLook for the inner-most proxy of the given type around the object If no such proxy can be found, return the default. If there is such a proxy, return the inner-most one. N((sobjs proxytypesdefault((s3build/bdist.linux-i686/egg/zope/proxy/interfaces.pysqueryInnerProxy8s( s__name__s __module__s__doc__sNonesisProxyssameProxiedObjectssgetProxiedObjectsremoveAllProxiess queryProxysqueryInnerProxy(((s3build/bdist.linux-i686/egg/zope/proxy/interfaces.pysIProxyIntrospections      N(s__doc__szope.interfaces InterfacesIProxyIntrospection(s InterfacesIProxyIntrospection((s3build/bdist.linux-i686/egg/zope/proxy/interfaces.pys?s PKaa4  zope/proxy/_zope_proxy_proxy.pydef __bootstrap__(): global __bootstrap__, __loader__, __file__ import sys, pkg_resources, imp __file__ = pkg_resources.resource_filename(__name__,'_zope_proxy_proxy.so') del __bootstrap__, __loader__ imp.load_dynamic(__name__,__file__) __bootstrap__() PKaa4F]FHH zope/proxy/_zope_proxy_proxy.pyc; 3Dc@sdatdS(cCsGdk}dk}dk}|itdabb|ittdS(Ns_zope_proxy_proxy.so( ssyss pkg_resourcessimpsresource_filenames__name__s__file__s __bootstrap__s __loader__s load_dynamic(s pkg_resourcesssyssimp((s:build/bdist.linux-i686/egg/zope/proxy/_zope_proxy_proxy.pys __bootstrap__s N(s __bootstrap__(((s:build/bdist.linux-i686/egg/zope/proxy/_zope_proxy_proxy.pys?s PK`a4oFEGG-INFO/requires.txtzope.interfacePK`a4A/\EGG-INFO/PKG-INFOMetadata-Version: 1.0 Name: zope.proxy Version: 3.0.0.1 Summary: Zope Proxies Home-page: http://svn.zope.org/zope.proxy/tags/3.0.0 Author: Zope Corporation and Contributors Author-email: zope3-dev@zope.org License: ZPL 2.1 Description: In Zope3, proxies are special objects which serve as mostly-transparent wrappers around another object, intervening in the apparent behavior of the wrapped object only when necessary to apply the policy (e.g., access checking, location brokering, etc.) for which the proxy is responsible. Platform: UNKNOWN PK9i4EGG-INFO/not-zip-safePK`a4EGG-INFO/top_level.txtzope PK`a4EGG-INFO/namespace_packages.txtzope PK`a4AX+EGG-INFO/SOURCES.txtCHANGES.txt INSTALL.txt README.txt develop.py setup.cfg setup.cfg.in setup.py test.py src/zope/__init__.py src/zope.proxy.egg-info/PKG-INFO src/zope.proxy.egg-info/SOURCES.txt src/zope.proxy.egg-info/namespace_packages.txt src/zope.proxy.egg-info/native_libs.txt src/zope.proxy.egg-info/not-zip-safe src/zope.proxy.egg-info/requires.txt src/zope.proxy.egg-info/top_level.txt src/zope/proxy/DEPENDENCIES.cfg src/zope/proxy/SETUP.cfg src/zope/proxy/__init__.py src/zope/proxy/_zope_proxy_proxy.c src/zope/proxy/interfaces.py src/zope/proxy/proxy.h src/zope/proxy/tests/__init__.py src/zope/proxy/tests/test_proxy.py workspace/__init__.py workspace/develop.py PKaa4Od EGG-INFO/native_libs.txtzope/proxy/_zope_proxy_proxy.so PKkh4~7zope/__init__.pyPKaa4Jzope/__init__.pycPK.a4uuzope/proxy/__init__.pyPK.a45z[zope/proxy/interfaces.pyPK.a4yzope/proxy/DEPENDENCIES.cfgPK.a4xGzope/proxy/SETUP.cfgPK.a4 llzope/proxy/_zope_proxy_proxy.cPK.a4ؓ+}zope/proxy/proxy.hPKaa4sD큚zope/proxy/_zope_proxy_proxy.soPKaa4 ~/(~ozope/proxy/__init__.pycPKaa4A`Z Z szope/proxy/interfaces.pycPKaa4  ~zope/proxy/_zope_proxy_proxy.pyPKaa4F]FHH bzope/proxy/_zope_proxy_proxy.pycPK`a4oFEGG-INFO/requires.txtPK`a4A/\)EGG-INFO/PKG-INFOPK9i4wEGG-INFO/not-zip-safePK`a4EGG-INFO/top_level.txtPK`a4EGG-INFO/namespace_packages.txtPK`a4AX+%EGG-INFO/SOURCES.txtPKaa4Od EGG-INFO/native_libs.txtPKp>