[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pyamf-commits
Subject:    [pyamf-commits] r1793 - in
From:       commits () pyamf ! org (commits () pyamf ! org)
Date:       2008-11-23 21:01:00
Message-ID: 20081123200025.D10CD7BC026 () mail ! collab ! com
[Download RAW message or body]

Author: nick
Date: 2008-11-23 21:00:24 +0100 (Sun, 23 Nov 2008)
New Revision: 1793

Modified:
   pyamf/branches/messaging-static-attrs-357/pyamf/__init__.py
   pyamf/branches/messaging-static-attrs-357/pyamf/amf3.py
   pyamf/branches/messaging-static-attrs-357/pyamf/tests/test_amf3.py
   pyamf/branches/messaging-static-attrs-357/pyamf/tests/test_basic.py
   pyamf/branches/messaging-static-attrs-357/pyamf/tests/util.py
Log:
Work so far

Modified: pyamf/branches/messaging-static-attrs-357/pyamf/__init__.py
===================================================================
--- pyamf/branches/messaging-static-attrs-357/pyamf/__init__.py	2008-11-23 19:54:10 \
                UTC (rev 1792)
+++ pyamf/branches/messaging-static-attrs-357/pyamf/__init__.py	2008-11-23 20:00:24 \
UTC (rev 1793) @@ -386,7 +386,7 @@
     def __hash__(self):
         return id(self)
 
-    def _getAttrs(self, obj, attrs=None, traverse=True):
+    def _getAttrs(self, obj, attrs=None, traverse=True, obj_attrs=None):
         if attrs is None:
             attrs = []
 
@@ -396,6 +396,7 @@
             did_something = True
             attrs += self.attrs
 
+
         if self.attr_func is not None:
             did_something = True
             extra_attrs = self.attr_func(obj)
@@ -404,10 +405,15 @@
         elif 'static' not in self.metadata:
             if obj_attrs is None:
                 obj_attrs = util.get_attrs(obj)
-                attrs += obj_attrs.keys()
 
+            attrs += obj_attrs.keys()
+            did_something = True
+
         if traverse is True:
             for base in util.get_mro(obj.__class__):
+                if base == obj.__class__:
+                    continue
+
                 try:
                     alias = get_class_alias(base)
                 except UnknownClassAlias:
@@ -432,7 +438,7 @@
 
     def getAttrs(self, obj):
         """
-        Returns a list of attributes that are availabe for encoding for the
+        Returns a list of attributes that are available for encoding for the
         supplied object C{obj}
         """
         return self._getAttrs(obj)
@@ -461,13 +467,6 @@
         Applies the collection of attributes C{attrs} to aliased object C{obj}.
         It is mainly used when reading aliased objects from an AMF byte stream.
         """
-        allowed_attributes = self.getAttrs(obj)
-
-        if allowed_attributes is not None:
-            for k in attrs.keys():
-                if k not in allowed_attributes:
-                    del attrs[k]
-
         util.set_attrs(obj, attrs)
 
     def createInstance(self, *args, **kwargs):

Modified: pyamf/branches/messaging-static-attrs-357/pyamf/amf3.py
===================================================================
--- pyamf/branches/messaging-static-attrs-357/pyamf/amf3.py	2008-11-23 19:54:10 UTC \
                (rev 1792)
+++ pyamf/branches/messaging-static-attrs-357/pyamf/amf3.py	2008-11-23 20:00:24 UTC \
(rev 1793) @@ -607,15 +607,22 @@
     klass = property(getClass)
 
     def _getStaticAttrs(self, attrs):
-        if not self.alias:
-            return {}
+        a = None
 
-        if self.alias.attrs is None:
-            return {}
+        if hasattr(self, 'static_attrs'):
+            a = self.static_attrs
+        else:
+            if not self.alias:
+                return {}
 
+            if self.alias.attrs is not None:
+                return {}
+
+            a = self.alias.attrs
+
         static_attrs = {}
 
-        for at in self.alias.attrs:
+        for at in a:
             if at not in attrs.keys():
                 continue
 
@@ -631,9 +638,7 @@
         """
         attrs = util.get_instance_attrs(obj, self.alias)
 
-        print attrs
         static_attrs = self._getStaticAttrs(attrs)
-        print static_attrs, attrs
         dynamic_attrs = None
 
         if self.alias and self.alias.attr_func:

Modified: pyamf/branches/messaging-static-attrs-357/pyamf/tests/test_amf3.py
===================================================================
--- pyamf/branches/messaging-static-attrs-357/pyamf/tests/test_amf3.py	2008-11-23 \
                19:54:10 UTC (rev 1792)
+++ pyamf/branches/messaging-static-attrs-357/pyamf/tests/test_amf3.py	2008-11-23 \
20:00:24 UTC (rev 1793) @@ -327,6 +327,15 @@
         self.assertEquals(s, {'foo': 'bar'})
         self.assertEquals(d, {'bar': 'baz'})
 
+        pyamf.register_class(Spam, 'spam.eggs')
+        cd = amf3.ClassDefinition('spam.eggs')
+        cd.static_attrs = ['foo']
+        s, d = cd.getAttrs(x)
+        pyamf.unregister_class(Spam)
+
+        self.assertEquals(s, {'foo': 'bar'})
+        self.assertEquals(d, {'bar': 'baz', 'baz': 'gak'})
+
 class EncoderTestCase(_util.ClassCacheClearingTestCase):
     """
     Tests the output from the AMF3 L{Encoder<pyamf.amf3.Encoder>} class.
@@ -1066,6 +1075,7 @@
         self.assertEquals(self.context.objects, [])
         self.assertEquals(self.context.strings, [])
         self.assertEquals(self.context.classes, [])
+        self.assertEquals(self.context.class_defs, [])
 
         self.stream.write('\x0a\x13\x0fabc.xyz\x09spam\x06\x09eggs')
         self.stream.seek(0, 0)

Modified: pyamf/branches/messaging-static-attrs-357/pyamf/tests/test_basic.py
===================================================================
--- pyamf/branches/messaging-static-attrs-357/pyamf/tests/test_basic.py	2008-11-23 \
                19:54:10 UTC (rev 1792)
+++ pyamf/branches/messaging-static-attrs-357/pyamf/tests/test_basic.py	2008-11-23 \
20:00:24 UTC (rev 1793) @@ -267,7 +267,7 @@
         pyamf.register_class(Spam)
         alias = pyamf.get_class_alias(Spam)
 
-        self.assertEquals(alias.getAttrs(self.obj), ['foo', 'x', 'baz'])
+        self.assertEquals(alias.getAttrs(self.obj), ['x', 'foo', 'baz'])
 
     def test_static(self):
         pyamf.register_class(Spam, attrs=['foo'])
@@ -282,7 +282,7 @@
         alias = pyamf.get_class_alias(Spam)
 
         x = Spam()
-        self.assertEquals(alias.getAttrs(x), None)
+        self.assertEquals(alias.getAttrs(x), [])
 
         pyamf.unregister_class(Spam)
 

Modified: pyamf/branches/messaging-static-attrs-357/pyamf/tests/util.py
===================================================================
--- pyamf/branches/messaging-static-attrs-357/pyamf/tests/util.py	2008-11-23 19:54:10 \
                UTC (rev 1792)
+++ pyamf/branches/messaging-static-attrs-357/pyamf/tests/util.py	2008-11-23 20:00:24 \
UTC (rev 1793) @@ -30,6 +30,14 @@
     def __writeamf__(self, output):
         pass
 
+    def __repr__(self):
+        return '<%s.%s 0x%x %r>' % (
+            self.__module__,
+            self.__class__.__name__,
+            id(self),
+            self.__dict__
+        )
+
 class ClassCacheClearingTestCase(unittest.TestCase):
     def setUp(self):
         unittest.TestCase.setUp(self)


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic