Fixed cache and metaclass irregularities as well as the location and contents caches.

This commit is contained in:
Griatch 2013-09-22 21:48:08 +02:00
parent 0a394929b7
commit 642ae2faf9
4 changed files with 38 additions and 45 deletions

View file

@ -85,19 +85,20 @@ class SharedMemoryModelBase(ModelBase):
"Helper method to create property wrappers with unique names (must be in separate call)"
def _get(cls, fname):
"Wrapper for getting database field"
return _GA(cls, fieldname)
def _get_foreign(cls, fname):
"Wrapper for returing foreignkey fields"
value = _GA(cls, fieldname)
if isinstance(value, (basestring, int, float, bool)):
return value
elif hasattr(value, "typeclass"):
if fieldname == "db_key": print "idmapper _get typeclass:, ", cls.__class__.__name__, fieldname, _GA(value, "typeclass")
#print "_get_foreign:value:", value
try:
return _GA(value, "typeclass")
return value
except:
return value
def _set_nonedit(cls, fname, value):
"Wrapper for blocking editing of field"
raise FieldError("Field %s cannot be edited." % fname)
def _set(cls, fname, value):
"Wrapper for setting database field"
if fname=="db_key": print "db_key _set:", value, type(value)
_SA(cls, fname, value)
# only use explicit update_fields in save if we actually have a
# primary key assigned already (won't be set when first creating object)
@ -142,6 +143,7 @@ class SharedMemoryModelBase(ModelBase):
if not editable:
fset = lambda cls, val: _set_nonedit(cls, fieldname, val)
elif foreignkey:
fget = lambda cls: _get_foreign(cls, fieldname)
fset = lambda cls, val: _set_foreign(cls, fieldname, val)
else:
fset = lambda cls, val: _set(cls, fieldname, val)