Ticket #198: ticket198-encoder-optimization.diff
| File ticket198-encoder-optimization.diff, 7.0 KB (added by akaihola, 11 months ago) |
|---|
-
tests/test_amf0.py
19 19 from pyamf import amf0, util 20 20 from pyamf.tests.util import EncoderTester, DecoderTester 21 21 22 class Spam(object): 23 pass 24 25 class DynamicSpam(pyamf.ASObject): 26 pass 27 22 28 class TypesTestCase(unittest.TestCase): 23 29 """ 24 30 Tests the type mappings. … … 224 230 ({'a': 'b'}, '\x03\x00\x01a\x02\x00\x01b\x00\x00\x09')]) 225 231 226 232 def test_force_amf3(self): 227 class Spam(object):228 pass229 230 233 pyamf.register_class(Spam, 'spam.eggs', metadata=['amf3']) 231 234 232 235 x = Spam() … … 238 241 pyamf.unregister_class(Spam) 239 242 240 243 def test_typed_object(self): 241 class Spam(object):242 pass243 244 244 pyamf.register_class(Spam, alias='org.pyamf.spam') 245 245 246 246 x = Spam() … … 277 277 self.assertEquals(self.buf.getvalue(), '\x11\x04\x01') 278 278 279 279 def test_anonymous(self): 280 class Spam(object):281 pass282 283 280 pyamf.register_class(Spam) 284 281 285 282 x = Spam() … … 292 289 pyamf.unregister_class(Spam) 293 290 294 291 def test_dynamic(self): 295 class Spam(pyamf.ASObject):296 pass297 292 298 293 def attr_func(obj): 299 self.assertTrue(isinstance(obj, Spam))294 self.assertTrue(isinstance(obj, DynamicSpam)) 300 295 301 296 return ['hello'] 302 297 303 x = Spam()298 x = DynamicSpam() 304 299 305 300 x.foo = 'bar' 306 301 x.hello = 'world' 307 302 308 pyamf.register_class( Spam, attr_func=attr_func, metadata=['dynamic'])303 pyamf.register_class(DynamicSpam, attr_func=attr_func, metadata=['dynamic']) 309 304 self._run([(x, '\x03\x00\x05hello\x02\x00\x05world\x00\x00\t')]) 310 pyamf.unregister_class( Spam)305 pyamf.unregister_class(DynamicSpam) 311 306 312 307 # try duplicate attributes 313 pyamf.register_class( Spam, attrs=['hello'], attr_func=attr_func,308 pyamf.register_class(DynamicSpam, attrs=['hello'], attr_func=attr_func, 314 309 metadata=['dynamic']) 315 310 self._run([(x, '\x03\x00\x05hello\x02\x00\x05world\x00\x00\t')]) 316 pyamf.unregister_class( Spam)311 pyamf.unregister_class(DynamicSpam) 317 312 318 pyamf.register_class( Spam, attrs=['foo'], attr_func=attr_func,313 pyamf.register_class(DynamicSpam, attrs=['foo'], attr_func=attr_func, 319 314 metadata=['dynamic']) 320 315 self._run([(x, '\x03\x00\x03foo\x02\x00\x03bar\x00\x05hello\x02\x00' 321 316 '\x05world\x00\x00\t')]) 322 pyamf.unregister_class( Spam)317 pyamf.unregister_class(DynamicSpam) 323 318 324 319 # and now typedobject 325 pyamf.register_class( Spam, 'x', attr_func=attr_func,320 pyamf.register_class(DynamicSpam, 'x', attr_func=attr_func, 326 321 metadata=['dynamic']) 327 322 self._run([(x, 328 323 '\x10\x00\x01x\x00\x05hello\x02\x00\x05world\x00\x00\t')]) 329 pyamf.unregister_class( Spam)324 pyamf.unregister_class(DynamicSpam) 330 325 331 pyamf.register_class( Spam, 'x', attrs=['hello'], attr_func=attr_func,326 pyamf.register_class(DynamicSpam, 'x', attrs=['hello'], attr_func=attr_func, 332 327 metadata=['dynamic']) 333 328 self._run([(x, 334 329 '\x10\x00\x01x\x00\x05hello\x02\x00\x05world\x00\x00\t')]) 335 pyamf.unregister_class( Spam)330 pyamf.unregister_class(DynamicSpam) 336 331 337 pyamf.register_class( Spam, 'x', attrs=['foo'], attr_func=attr_func,332 pyamf.register_class(DynamicSpam, 'x', attrs=['foo'], attr_func=attr_func, 338 333 metadata=['dynamic']) 339 334 self._run([(x, '\x10\x00\x01x\x00\x03foo\x02\x00\x03bar\x00\x05hello' 340 335 '\x02\x00\x05world\x00\x00\t')]) 341 pyamf.unregister_class( Spam)336 pyamf.unregister_class(DynamicSpam) 342 337 343 338 def test_custom_type(self): 344 339 def write_as_list(list_interface_obj): … … 502 497 ({'a': 'b'}, '\x03\x00\x01a\x02\x00\x01b\x00\x00\x09')]) 503 498 504 499 def test_registered_class(self): 505 class Spam(object):506 pass507 508 500 try: 509 501 del pyamf.CLASS_CACHE['org.pyamf.spam'] 510 502 except KeyError: -
tests/test_amf3.py
32 32 def __writeamf__(self, output): 33 33 pass 34 34 35 class Person: 36 pass 37 35 38 class TypesTestCase(unittest.TestCase): 36 39 """ 37 40 Tests the type mappings. … … 507 510 self.assertEquals(self.buf.getvalue(), '\t\x07\x01\x04\x01\x04\x02\x04\x03') 508 511 509 512 def test_old_style_classes(self): 510 class Person:511 pass512 513 513 pyamf.register_class(Person, 'spam.eggs.Person') 514 514 515 515 u = Person() -
amf3.py
26 26 """ 27 27 28 28 import types, datetime, zlib 29 from cPickle import dumps 29 30 30 31 import pyamf 31 32 from pyamf import util 32 33 34 class ClassDefNums(dict): 35 36 class _Pickled(str): pass 37 38 def __setitem__(self, key, value): 39 try: 40 dict.__setitem__(self, key, value) 41 except TypeError: 42 dict.__setitem__(self, self._Pickled(dumps(key)), value) 43 44 def __getitem__(self, key): 45 try: 46 return dict.__getitem__(self, key) 47 except TypeError: 48 return dict.__getitem__(self, self._Pickled(dumps(key))) 49 33 50 class ASTypes: 34 51 """ 35 52 All AMF3 data types used in ActionScript 3.0. … … 660 677 self.strings = [] 661 678 self.classes = [] 662 679 self.class_defs = {} 680 self.class_def_nums = ClassDefNums() 663 681 self.legacy_xml = [] 664 682 665 683 def getString(self, ref): … … 748 766 class_def.__class__) 749 767 750 768 try: 751 return self.class es.index(class_def)752 except ValueError:769 return self.class_def_nums[class_def] 770 except KeyError: 753 771 raise pyamf.ReferenceError("Reference for class %s not found" % 754 772 class_def.__class__) 755 773 … … 758 776 Creates a reference to C{class_def}. 759 777 """ 760 778 try: 761 return self.classes.index(class_def) 762 except ValueError: 779 return self.class_def_nums[class_def] 780 except KeyError: 781 class_num = len(self.classes) 763 782 self.classes.append(class_def) 764 783 self.class_defs[class_def.__class__] = class_def 784 self.class_def_nums[class_def] = class_num 765 785 766 return len(self.classes) - 1786 return class_num 767 787 768 788 def getLegacyXML(self, ref): 769 789 """ … … 1161 1181 # Unsupported types go first 1162 1182 ((types.BuiltinFunctionType, types.BuiltinMethodType,), 1163 1183 "writeUnsupported"), 1164 ((lambda x: x ==pyamf.Undefined,), "writeUndefined"),1184 ((lambda x: x is pyamf.Undefined,), "writeUndefined"), 1165 1185 ((bool,), "writeBoolean"), 1166 1186 ((int,long), "writeInteger"), 1167 1187 ((float,), "writeNumber"),
