summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/attributes.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-02-19 01:25:56 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-02-19 01:25:56 +0000
commit36383494b512143328d3c14022d4db3ccedfdf06 (patch)
treef9471040e6fc2c3b6e9fb7dae529fdb2cad013f3 /lib/sqlalchemy/attributes.py
parentbca0afa1cedc38247dc7af4e53dec7faf1aca42f (diff)
downloadsqlalchemy-36383494b512143328d3c14022d4db3ccedfdf06.tar.gz
some comments, changed SmartProperty to be smarter, UOW
version has "property" accessor which returns MapperProperty at the class level
Diffstat (limited to 'lib/sqlalchemy/attributes.py')
-rw-r--r--lib/sqlalchemy/attributes.py37
1 files changed, 18 insertions, 19 deletions
diff --git a/lib/sqlalchemy/attributes.py b/lib/sqlalchemy/attributes.py
index 7a9f13c57..bea125371 100644
--- a/lib/sqlalchemy/attributes.py
+++ b/lib/sqlalchemy/attributes.py
@@ -27,7 +27,7 @@ The package includes functions for managing "bi-directional" object relationship
via the GenericBackrefExtension object.
"""
-import sqlalchemy.util as util
+import util
class SmartProperty(object):
"""Provides a property object that will communicate set/get/delete operations
@@ -35,22 +35,21 @@ class SmartProperty(object):
create_prop method on AttributeManger, which can be overridden to provide
subclasses of SmartProperty.
"""
- def __init__(self, manager):
+ def __init__(self, manager, key, uselist):
self.manager = manager
- def attribute_registry(self):
- return self.manager
- def property(self, key, uselist):
- def set_prop(obj, value):
- self.attribute_registry().set_attribute(obj, key, value)
- def del_prop(obj):
- self.attribute_registry().delete_attribute(obj, key)
- def get_prop(obj):
- if uselist:
- return self.attribute_registry().get_list_attribute(obj, key)
- else:
- return self.attribute_registry().get_attribute(obj, key)
-
- return property(get_prop, set_prop, del_prop)
+ self.key = key
+ self.uselist = uselist
+ def __set__(self, obj, value):
+ self.manager.set_attribute(obj, self.key, value)
+ def __delete__(self, obj):
+ self.manager.delete_attribute(obj, self.key)
+ def __get__(self, obj, owner):
+ if obj is None:
+ return self
+ if self.uselist:
+ return self.manager.get_list_attribute(obj, self.key)
+ else:
+ return self.manager.get_attribute(obj, self.key)
class PropHistory(object):
"""Used by AttributeManager to track the history of a scalar attribute
@@ -254,10 +253,10 @@ class AttributeManager(object):
upon an attribute change of value."""
pass
- def create_prop(self, key, uselist, **kwargs):
+ def create_prop(self, class_, key, uselist, **kwargs):
"""creates a scalar property object, defaulting to SmartProperty, which
will communicate change events back to this AttributeManager."""
- return SmartProperty(self).property(key, uselist)
+ return SmartProperty(self, key, uselist)
def create_list(self, obj, key, list_, **kwargs):
"""creates a history-aware list property, defaulting to a ListElement which
is a subclass of HistoryArrayList."""
@@ -411,5 +410,5 @@ class AttributeManager(object):
return p
self.class_managed(class_)[key] = createprop
- setattr(class_, key, self.create_prop(key, uselist))
+ setattr(class_, key, self.create_prop(class_, key, uselist))