Fixed a bug in object manager.

This commit is contained in:
Griatch 2014-12-22 09:01:40 +01:00
parent 2ee9e62336
commit 1be49e7bea
2 changed files with 13 additions and 8 deletions

View file

@ -17,7 +17,7 @@ they control by simply linking to a new object's user property.
from django.conf import settings
from src.typeclasses.models import TypeclassBase
from src.objects.manager import ObjectTypeclassManager
from src.objects.manager import ObjectManager
from src.objects.models import ObjectDB
from src.commands import cmdset, command
from src.utils.logger import log_depmsg
@ -40,7 +40,7 @@ class Object(ObjectDB):
"""
__metaclass__ = TypeclassBase
objects = ObjectTypeclassManager()
objects = ObjectManager()
# __init__ is only defined here in order to present docstring to API.
def __init__(self, *args, **kwargs):

View file

@ -305,28 +305,33 @@ class SharedMemoryModel(Model):
# per-instance methods
def set_recache_protection(cls, mode=True):
def set_recache_protection(self, mode=True):
"set if this instance should be allowed to be recached."
cls._idmapper_recache_protection = bool(mode)
self._idmapper_recache_protection = bool(mode)
def save(cls, *args, **kwargs):
def save(self, *args, **kwargs):
"save method tracking process/thread issues"
# don't allow saving base objects
if not self._meta.proxy:
raise RuntimeError("Don't create instances of %s, "
"use its child typeclasses instead." % self.__class__.__name__)
if _IS_SUBPROCESS:
# we keep a store of objects modified in subprocesses so
# we know to update their caches in the central process
global PROC_MODIFIED_COUNT, PROC_MODIFIED_OBJS
PROC_MODIFIED_COUNT += 1
PROC_MODIFIED_OBJS[PROC_MODIFIED_COUNT] = cls
PROC_MODIFIED_OBJS[PROC_MODIFIED_COUNT] = self
if _IS_MAIN_THREAD:
# in main thread - normal operation
super(SharedMemoryModel, cls).save(*args, **kwargs)
super(SharedMemoryModel, self).save(*args, **kwargs)
else:
# in another thread; make sure to save in reactor thread
def _save_callback(cls, *args, **kwargs):
super(SharedMemoryModel, cls).save(*args, **kwargs)
callFromThread(_save_callback, cls, *args, **kwargs)
callFromThread(_save_callback, self, *args, **kwargs)
class WeakSharedMemoryModelBase(SharedMemoryModelBase):