> -----Original Message-----
> From: [email protected]
> [mailto:[email protected]] On Behalf Of Chris Withers
> Sent: 08 July 2010 11:21
> To: [email protected]
> Subject: Re: [sqlalchemy] Comparable properties
>
> King Simon-NFHD78 wrote:
> > @hybrid
> > def is_visible(self):
> > return (self.enabled == True) & (self.is_deleted == False)
>
> Yeah, having to write something that works as both plain python and a
> sql layer construct seems a little brittle.
>
> I wonder if a decorator could be knocked up which would let you do:
>
> def _python_is_visible(self):
> return (self.enabled and not self.is_deleted)
>
> def _sql_is_visible(self):
> return (self.enabled == True) & (self.is_deleted == False)
>
> is_visible = some_magic(_python_is_visible,_sql_is_visible)
>
> cheers,
>
> Chris
>
Untested beyond what you see here:
class MagicProperty(object):
def __init__(self, instance_version, class_version=None):
self._instance_version = instance_version
self._class_version = class_version
def __get__(self, instance, owner):
if instance is not None:
return self._instance_version(instance)
else:
return self._class_version(owner)
def with_class(self, f):
self._class_version = f
class Test(object):
def from_instance(self):
return 'This was accessed via the instance'
def from_class(self):
return 'This was accessed via the class'
magic = MagicProperty(from_instance, from_class)
class Test2(object):
@MagicProperty
def magic(self):
return 'This was accessed via the instance'
@magic.with_class
def from_class(self):
return 'This was accessed via the class'
if __name__ == '__main__':
print Test.magic
t = Test()
print t.magic
print Test2.magic
t2 = Test2()
print t2.magic
Simon
--
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.