[SQL-CVS] r1548 - home/phd/SQLObject/paramstyles/sqlobject
SQLObject is a Python ORM.
Brought to you by:
ianbicking,
phd
|
From: <sub...@co...> - 2006-01-30 20:15:05
|
Author: phd
Date: 2006-01-30 13:14:53 -0700 (Mon, 30 Jan 2006)
New Revision: 1548
Modified:
home/phd/SQLObject/paramstyles/sqlobject/declarative.py
Log:
Merged patches from the revisions 1545:1547 from the trunk: applied the patch 1407684: object initialization threading issue.
Modified: home/phd/SQLObject/paramstyles/sqlobject/declarative.py
===================================================================
--- home/phd/SQLObject/paramstyles/sqlobject/declarative.py 2006-01-30 20:13:40 UTC (rev 1547)
+++ home/phd/SQLObject/paramstyles/sqlobject/declarative.py 2006-01-30 20:14:53 UTC (rev 1548)
@@ -33,6 +33,7 @@
"""
from __future__ import generators
+import threading
import events
__all__ = ('classinstancemethod', 'DeclarativeMeta', 'Declarative')
@@ -85,6 +86,19 @@
return ('<bound method %s.%s of %r>'
% (self.type.__name__, self.func.func_name, self.obj))
+def threadSafeMethod(lock):
+ def decorator(fn):
+ def _wrapper(self, *args, **kwargs):
+ lock.acquire()
+ return_value = fn(self, *args, **kwargs)
+ lock.release()
+ return return_value
+ try:
+ _wrapper.func_name = fn.func_name
+ except TypeError:
+ pass
+ return _wrapper
+ return decorator
class DeclarativeMeta(type):
@@ -100,6 +114,9 @@
if new_attrs.has_key('__classinit__'):
cls.__classinit__ = staticmethod(cls.__classinit__.im_func)
cls.__classinit__(cls, new_attrs)
+ if new_attrs.has_key('__init__'):
+ lock = threading.RLock()
+ cls.__init__ = threadSafeMethod(lock)(cls.__init__)
for func in post_funcs:
func(cls)
return cls
|