diff --git a/src/objects/objects.py b/src/objects/objects.py index a90c25b923..249e80184e 100644 --- a/src/objects/objects.py +++ b/src/objects/objects.py @@ -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): diff --git a/src/utils/idmapper/base.py b/src/utils/idmapper/base.py index 3224d3f5a1..cdfd7cb2e1 100755 --- a/src/utils/idmapper/base.py +++ b/src/utils/idmapper/base.py @@ -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):