Based on Michael Bayer's hint, I built this instance-level changeable
object. It used Declarative, which actually makes it a bit tougher, but
this code should work for pypo's also. It's hackish in that it just monkeys
with __setattr__, but it's clear(ish) what's happening.
-------------------------
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Integer,String,Column
Base = declarative_base()
class NotEditableError(AttributeError):
pass
class Thingy(Base):
__tablename__ = 'thingy'
field = Column(String, nullable=False, primary_key=True)
def __init__(self, field='', editable=True):
self.field = field
self.editable = editable # must be last set, or __setattr__
# will have problems
def __setattr__(self,attr,value):
# catch before editable is defined
try:
editable = self.editable
except AttributeError:
editable = True
# the only 'always editable' value is "editable"
if attr == "editable" or editable: # it's all good
Base.__setattr__(self, attr, value)
else:
raise NotEditableError, "for this object, fields are not
editable"
def Test():
T = Thingy('abc',False)
assert T.field == 'abc'
try:
T.field = "pdq"
except NotEditableError, exc:
pass
T.editable = True
T.field = "pdq"
assert T.field == 'pdq'
return T
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---