[Checkins] SVN: zope.thread/trunk/ Removed unneeded C extension.
This package is obsolete
Jim Fulton
jim at zope.com
Fri Jul 13 06:52:27 EDT 2007
Log message for revision 77840:
Removed unneeded C extension. This package is obsolete
Changed:
U zope.thread/trunk/README.txt
U zope.thread/trunk/setup.py
D zope.thread/trunk/src/zope/thread/SETUP.cfg
U zope.thread/trunk/src/zope/thread/__init__.py
D zope.thread/trunk/src/zope/thread/_zope_thread.c
-=-
Modified: zope.thread/trunk/README.txt
===================================================================
--- zope.thread/trunk/README.txt 2007-07-13 10:52:15 UTC (rev 77839)
+++ zope.thread/trunk/README.txt 2007-07-13 10:52:26 UTC (rev 77840)
@@ -1,8 +1,5 @@
zope.thread Package Readme
==========================
-Overview
---------
-
-This package supplies a mechoanism for storing "thread-global" values,
-such as the site manager discovered during URL traversal.
+This package is deprecated. Use the standard-library threading module
+instead.
Modified: zope.thread/trunk/setup.py
===================================================================
--- zope.thread/trunk/setup.py 2007-07-13 10:52:15 UTC (rev 77839)
+++ zope.thread/trunk/setup.py 2007-07-13 10:52:26 UTC (rev 77840)
@@ -21,29 +21,21 @@
from setuptools import setup, Extension, find_packages
setup(name='zope.thread',
- version = '3.4.0b2',
+ version = '3.4',
url='http://svn.zope.org/zope.thread',
license='ZPL 2.1',
description='Zope3 Thread-Local Storage',
author='Zope Corporation and Contributors',
author_email='zope3-dev at zope.org',
- long_description='This package supplies a mechoanism for storing '
- '"thread-local" values, such as the site manager '
- 'discovered during URL traversal.',
+ long_description=
+ 'This package is deprecated and exists soley for backward compatability.',
packages=find_packages('src'),
package_dir = {'': 'src'},
- ext_modules=[Extension("zope.thread._zope_thread",
- [os.path.join('src', 'zope', 'thread',
- "_zope_thread.c")
- ]),
- ],
-
namespace_packages=['zope',],
tests_require = ['zope.testing'],
- install_requires=[],
+ install_requires=['setuptools'],
include_package_data = False,
-
zip_safe = False,
)
Deleted: zope.thread/trunk/src/zope/thread/SETUP.cfg
===================================================================
--- zope.thread/trunk/src/zope/thread/SETUP.cfg 2007-07-13 10:52:15 UTC (rev 77839)
+++ zope.thread/trunk/src/zope/thread/SETUP.cfg 2007-07-13 10:52:26 UTC (rev 77840)
@@ -1,3 +0,0 @@
-<extension _zope_thread>
- source _zope_thread.c
-</extension>
Modified: zope.thread/trunk/src/zope/thread/__init__.py
===================================================================
--- zope.thread/trunk/src/zope/thread/__init__.py 2007-07-13 10:52:15 UTC (rev 77839)
+++ zope.thread/trunk/src/zope/thread/__init__.py 2007-07-13 10:52:26 UTC (rev 77840)
@@ -20,7 +20,7 @@
>>> import zope.thread
>>> mydata = zope.thread.local()
>>> mydata.__class__.__name__
- 'local'
+ '_local'
>>> mydata.number = 42
>>> mydata.number
42
@@ -145,110 +145,4 @@
"""
__docformat__ = 'restructuredtext'
-try:
- import _zope_thread
-except ImportError:
- from threading import currentThread, enumerate, RLock
-
- class _localbase(object):
- __slots__ = '_local__key', '_local__args', '_local__lock'
-
- def __new__(cls, *args, **kw):
- self = object.__new__(cls)
- key = '_local__key', 'thread.local.' + str(id(self))
- object.__setattr__(self, '_local__key', key)
- object.__setattr__(self, '_local__args', (args, kw))
- object.__setattr__(self, '_local__lock', RLock())
-
- if args or kw and (cls.__init__ is object.__init__):
- raise TypeError("Initialization arguments are not supported")
-
- # We need to create the thread dict in anticipation of
- # __init__ being called, to make sire we don't cal it
- # again ourselves.
- dict = object.__getattribute__(self, '__dict__')
- currentThread().__dict__[key] = dict
-
- return self
-
- def _patch(self):
- key = object.__getattribute__(self, '_local__key')
- d = currentThread().__dict__.get(key)
- if d is None:
- d = {}
- currentThread().__dict__[key] = d
- object.__setattr__(self, '__dict__', d)
-
- # we have a new instance dict, so call out __init__ if we have
- # one
- cls = type(self)
- if cls.__init__ is not object.__init__:
- args, kw = object.__getattribute__(self, '_local__args')
- cls.__init__(self, *args, **kw)
- else:
- object.__setattr__(self, '__dict__', d)
-
- class local(_localbase):
-
- def __getattribute__(self, name):
- lock = object.__getattribute__(self, '_local__lock')
- lock.acquire()
- try:
- _patch(self)
- return object.__getattribute__(self, name)
- finally:
- lock.release()
-
- def __setattr__(self, name, value):
- lock = object.__getattribute__(self, '_local__lock')
- lock.acquire()
- try:
- _patch(self)
- return object.__setattr__(self, name, value)
- finally:
- lock.release()
-
- def __delattr__(self, name):
- lock = object.__getattribute__(self, '_local__lock')
- lock.acquire()
- try:
- _patch(self)
- return object.__delattr__(self, name)
- finally:
- lock.release()
-
-
- def __del__():
- threading_enumerate = enumerate
- __getattribute__ = object.__getattribute__
-
- def __del__(self):
- key = __getattribute__(self, '_local__key')
-
- try:
- threads = list(threading_enumerate())
- except:
- # if enumerate fails, as it seems to do during
- # shutdown, we'll skip cleanup under the assumption
- # that there is nothing to clean up
- return
-
- for thread in threads:
- try:
- __dict__ = thread.__dict__
- except AttributeError:
- # Thread is dying, rest in peace
- continue
-
- if key in __dict__:
- try:
- del __dict__[key]
- except KeyError:
- pass # didn't have anything in this thread
-
- return __del__
- __del__ = __del__()
-
-else:
- local = _zope_thread.local
- del _zope_thread
+from threading import local
Deleted: zope.thread/trunk/src/zope/thread/_zope_thread.c
===================================================================
--- zope.thread/trunk/src/zope/thread/_zope_thread.c 2007-07-13 10:52:15 UTC (rev 77839)
+++ zope.thread/trunk/src/zope/thread/_zope_thread.c 2007-07-13 10:52:26 UTC (rev 77840)
@@ -1,307 +0,0 @@
-/*
-
- Copyright (c) 2003 Zope Corporation and Contributors.
- All Rights Reserved.
-
- This software is subject to the provisions of the Zope Public License,
- Version 2.0 (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.
-
-*/
-
-#include "Python.h"
-#include "structmember.h"
-
-#define CLEAR(O) if (O) {PyObject *t = O; O = 0; Py_DECREF(t); }
-
-typedef struct {
- PyObject_HEAD
- PyObject *key;
- PyObject *args;
- PyObject *kw;
- PyObject *dict;
-} localobject;
-
-static PyTypeObject localtype;
-
-static PyObject *
-local_new(PyTypeObject *type, PyObject *args, PyObject *kw)
-{
- localobject *self;
- PyObject *tdict;
-
- if (type->tp_init == PyBaseObject_Type.tp_init
- && ((args && PyObject_IsTrue(args))
- ||
- (kw && PyObject_IsTrue(kw))
- )
- ) {
- PyErr_SetString(PyExc_TypeError,
- "Initialization arguments are not supported");
- return NULL;
- }
-
- self = (localobject *)type->tp_alloc(type, 0);
- if (self == NULL)
- return NULL;
-
- Py_XINCREF(args);
- self->args = args;
- Py_XINCREF(kw);
- self->kw = kw;
- self->dict = NULL; /* making sure */
- self->key = PyString_FromFormat("thread.local.%p", self);
- if (self->key == NULL)
- goto err;
-
- self->dict = PyDict_New();
- if (self->dict == NULL)
- goto err;
-
- tdict = PyThreadState_GetDict();
- if (tdict == NULL) {
- PyErr_SetString(PyExc_SystemError,
- "Couldn't get thread-state dictionary");
- goto err;
- }
-
- if (PyDict_SetItem(tdict, self->key, self->dict) < 0)
- goto err;
-
- return (PyObject *)self;
-
- err:
- Py_DECREF(self);
- return NULL;
-}
-
-static int
-local_traverse(localobject *self, visitproc visit, void *arg)
-{
- if (self->args != NULL && visit(self->args, arg) < 0)
- return -1;
- if (self->kw != NULL && visit(self->kw, arg) < 0)
- return -1;
- if (self->dict != NULL && visit(self->dict, arg) < 0)
- return -1;
- return 0;
-}
-
-static int
-local_clear(localobject *self)
-{
- CLEAR(self->key);
- CLEAR(self->args);
- CLEAR(self->kw);
- CLEAR(self->dict);
- return 0;
-}
-
-static void
-local_dealloc(localobject *self)
-{
- PyThreadState *tstate;
- if (self->key
- && (tstate = PyThreadState_Get())
- && tstate->interp) {
- for(tstate = PyInterpreterState_ThreadHead(tstate->interp);
- tstate;
- tstate = PyThreadState_Next(tstate)
- )
- if (tstate->dict &&
- PyDict_GetItem(tstate->dict, self->key))
- PyDict_DelItem(tstate->dict, self->key);
- }
-
- local_clear(self);
- self->ob_type->tp_free((PyObject*)self);
-}
-
-static PyObject *
-_ldict(localobject *self)
-{
- PyObject *tdict, *ldict;
-
- tdict = PyThreadState_GetDict();
- if (tdict == NULL) {
- PyErr_SetString(PyExc_SystemError,
- "Couldn't get thread-state dictionary");
- return NULL;
- }
-
- ldict = PyDict_GetItem(tdict, self->key);
- if (ldict == NULL) {
- ldict = PyDict_New(); /* we own ldict */
-
- if (ldict == NULL)
- return NULL;
- else {
- int i = PyDict_SetItem(tdict, self->key, ldict);
- Py_DECREF(ldict); /* now ldict is borowed */
- if (i < 0)
- return NULL;
- }
-
- CLEAR(self->dict);
- Py_INCREF(ldict);
- self->dict = ldict; /* still borrowed */
-
- if (self->ob_type->tp_init != PyBaseObject_Type.tp_init &&
- self->ob_type->tp_init((PyObject*)self,
- self->args, self->kw) < 0
- ) {
- /* we need to get rid of ldict from thread so
- we create a new one the next time we do an attr
- acces */
- PyDict_DelItem(tdict, self->key);
- return NULL;
- }
-
- }
- else if (self->dict != ldict) {
- CLEAR(self->dict);
- Py_INCREF(ldict);
- self->dict = ldict;
- }
-
- return ldict;
-}
-
-static PyObject *
-local_getattro(localobject *self, PyObject *name)
-{
- PyObject *ldict, *value;
-
- ldict = _ldict(self);
- if (ldict == NULL)
- return NULL;
-
- if (self->ob_type != &localtype)
- /* use generic lookup for subtypes */
- return PyObject_GenericGetAttr((PyObject *)self, name);
-
- /* Optimization: just look in dict ourselves */
- value = PyDict_GetItem(ldict, name);
- if (value == NULL)
- /* Fall back on generic to get __class__ and __dict__ */
- return PyObject_GenericGetAttr((PyObject *)self, name);
-
- Py_INCREF(value);
- return value;
-}
-
-static int
-local_setattro(localobject *self, PyObject *name, PyObject *v)
-{
- PyObject *ldict;
-
- ldict = _ldict(self);
- if (ldict == NULL)
- return -1;
-
- return PyObject_GenericSetAttr((PyObject *)self, name, v);
-}
-
-static PyObject *
-local_getdict(localobject *self, void *closure)
-{
- if (self->dict == NULL) {
- PyErr_SetString(PyExc_AttributeError, "__dict__");
- return NULL;
- }
-
- Py_INCREF(self->dict);
- return self->dict;
-}
-
-static PyGetSetDef local_getset[] = {
- {"__dict__",
- (getter)local_getdict, (setter)0,
- "Local-data dictionary",
- NULL},
- {NULL} /* Sentinel */
-};
-
-static PyTypeObject localtype = {
- PyObject_HEAD_INIT(NULL)
- /* ob_size */ 0,
- /* tp_name */ "zope.thread.local",
- /* tp_basicsize */ sizeof(localobject),
- /* tp_itemsize */ 0,
- /* tp_dealloc */ (destructor)local_dealloc,
- /* tp_print */ (printfunc)0,
- /* tp_getattr */ (getattrfunc)0,
- /* tp_setattr */ (setattrfunc)0,
- /* tp_compare */ (cmpfunc)0,
- /* tp_repr */ (reprfunc)0,
- /* tp_as_number */ 0,
- /* tp_as_sequence */ 0,
- /* tp_as_mapping */ 0,
- /* tp_hash */ (hashfunc)0,
- /* tp_call */ (ternaryfunc)0,
- /* tp_str */ (reprfunc)0,
- /* tp_getattro */ (getattrofunc)local_getattro,
- /* tp_setattro */ (setattrofunc)local_setattro,
- /* tp_as_buffer */ 0,
- /* tp_flags */ Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
- /* tp_doc */ "Thread-local data",
- /* tp_traverse */ (traverseproc)local_traverse,
- /* tp_clear */ (inquiry)local_clear,
- /* tp_richcompare */ (richcmpfunc)0,
- /* tp_weaklistoffset */ (long)0,
- /* tp_iter */ (getiterfunc)0,
- /* tp_iternext */ (iternextfunc)0,
- /* tp_methods */ 0,
- /* tp_members */ 0,
- /* tp_getset */ local_getset,
- /* tp_base */ 0,
- /* tp_dict */ 0, /* internal use */
- /* tp_descr_get */ (descrgetfunc)0,
- /* tp_descr_set */ (descrsetfunc)0,
- /* tp_dictoffset */ offsetof(localobject, dict),
- /* tp_init */ (initproc)0,
- /* tp_alloc */ (allocfunc)0,
- /* tp_new */ (newfunc)local_new,
- /* tp_free */ 0, /* Low-level free-mem routine */
- /* tp_is_gc */ (inquiry)0, /* For PyObject_IS_GC */
-};
-
-/* End of code for local objects */
-/* -------------------------------------------------------- */
-
-
-/* List of methods defined in the module */
-
-static struct PyMethodDef _zope_thread_methods[] = {
-
- {NULL, (PyCFunction)NULL, 0, NULL} /* sentinel */
-};
-
-
-#ifndef PyMODINIT_FUNC /* declarations for DLL import/export */
-#define PyMODINIT_FUNC void
-#endif
-PyMODINIT_FUNC
-init_zope_thread(void)
-{
- PyObject *m;
-
- /* Initialize types: */
- if (PyType_Ready(&localtype) < 0)
- return;
-
- /* Create the module and add the functions */
- m = Py_InitModule3("_zope_thread", _zope_thread_methods,
- "zope.thread C implementation");
-
- if (m == NULL)
- return;
-
- /* Add types: */
- if (PyModule_AddObject(m, "local", (PyObject *)&localtype) < 0)
- return;
- }
-
More information about the Checkins
mailing list