forked from hydralabs/pyamf
-
Notifications
You must be signed in to change notification settings - Fork 0
/
CHANGES.txt
428 lines (406 loc) · 21.5 KB
/
CHANGES.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
Changelog
=========
This document contains information about the changes between the different
versions of PyAMF.
.. contents::
0.7 (Unreleased)
----------------
- ``pyamf.Undefined`` now evaluates to ``False`` in a boolean expression
(:ticket:`827`)
- Fixed an issue in the client where '; charset=utf8' would be appended to the
``Content-Type`` response header (:ticket:`822`)
- Add support for :py:class:`collections.OrderedDict` and
:py:class:`collections.Counter` (:ticket:`816`, :ticket:`815`)
0.6.2 (Unreleased)
------------------
- ``pyamf.codec._Codec.__init__`` now supports duck-typing. (:ticket:`835`)
- Enabled subclassed list/tuple to be overridden by ``pyamf.add_type`` before
defaulting to writing a sequence. (:ticket:`834`)
- Numerical keys in a ``pyamf.MixedArray`` would cause an exception. Affects
pure python decoder only. (:ticket:`843`)
- Fixed a segfault (the first ever!) in cpyamf caused by encoding subclassed
tuples/list/sets. Thanks to wolever for the heavy lifting (:ticket:`830`)
- Add support for weakref'd objects (:ticket:`832`)
0.6.1 (28-02-2011)
------------------
- Switched to Distribute as the future of Python packaging (:ticket:`682`)
0.6 (21-10-2010)
----------------
- Ability to exclude 'stock' attributes with AppEngine Datastore/SQLAlchemy
(:ticket:`790`)
- Fixed issue with Django models db_column not matching the attr name
(:ticket:`807`)
- Added generator support (:ticket:`793`, :ticket:`800`)
- Fixed issue with ``amf3.use_proxy_default=True`` and Flex messaging
(:ticket:`794`)
- Support for AppEngine's ``BlobReferenceProperty`` (:ticket:`787`)
- Improved unit test discovery with unittest2 (:ticket:`780`)
- Ability to define attribute synonyms (:ticket:`779`)
- Provide support for AMF3 remoting packets (BlazeDS acting as a client)
(:ticket:`737`, :ticket:`766`)
- AMF0 Remoting error tracebacks will be a list rather than a string
(:ticket:`767`, :ticket:`663`)
- Moved documentation from the Trac wiki to a local Sphinx documentation
build (:ticket:`752`, :ticket:`672`, :ticket:`670`, :ticket:`662`,
:ticket:`661`, :ticket:`657`)
- Switch the PyAMF client to use :py:mod:`urllib2`. Provides support for
proxying and gzipped responses. Thanks to @PaulWinkeler for the heavy
lifting (:ticket:`751`, :ticket:`622`, :ticket:`590`, :ticket:`566`,
:ticket:`778`)
- Added support for SQLAlchemy 0.6 (:ticket:`747`, :ticket:`748`)
- Added support for the lxml library (:ticket:`735`)
- Introduced a new adapter for Elixir, a thin wrapper around SQLAlchemy
(:ticket:`724`)
- Simplified ``type_map`` in ``Encoder`` classes (:ticket:`746`)
- Fixed a small bug when handling empty M2M relationships with unpersisted
Django objects (:ticket:`741`)
- Updates to support Plasma (:ticket:`736`)
- Fixed a small bug in ``BaseGateway.removeService``, thanks agronholm for the
patch (:ticket:`729`)
- Pure Python AMF3 Decoding performance improvements (up to x3) (:ticket:`723`)
- Non-ascii characters in the exception message would cause a ``UnicodeError``
(:ticket:`727`)
- All ORM adapters will no longer set properties as static attributes
(:ticket:`677`)
- Default to using ``__new__`` for instance creation if available. (:ticket:`700`)
- Ability to ``unregister_type_alias`` (:ticket:`707`)
- ``__amf__.proxy`` actually works (:ticket:`712`)
- Django adapter now uses ``get_all_field_names`` to find model properties
(:ticket:`625`)
- Added ``ClassAlias.bases`` and deep class tree support for typed classes
(:ticket:`715`)
- ``use_references`` keyword arg has been removed from ``amf3.Encoder.write*``
(:ticket:`713`)
- ``ClassAlias.getEncodableAttributes`` now will return a single dict of
properties (:ticket:`714`)
- PyAMF Client will raise an exception if the remote gateway returns a service
error (:ticket:`260`)
- Fixed a reference bug with unsaved Django model instances. Thanks to wolver
for the patch and tests (:ticket:`691`).
- Fixed a small bug in decoding Django relations when declared as static.
Thanks to wolver for the patch. (:ticket:`693`)
- Removed ``exceptions`` from all ``Context`` and ``pyamf.util.Indexed*``
classes (:ticket:`660`)
- Empty Django relations are now encoded as ``None``, not ``pyamf.Undefined``
(:ticket:`659`)
- ``pyamf.ClientType`` removed, as it is not spec compliant (:ticket:`651`)
0.5.1 (2009-09-19)
------------------
- ``pyamf.register_package`` can now accept a list of classes (:ticket:`650`)
- Fixed a regression in ``TwistedGateway`` where services would be called
twice (:ticket:`648`)
- Fixed a bug with encoding anonymous trait references (:ticket:`644`)
- Moved ``IndexedCollection`` into ``cpyamf`` (:ticket:`424`)
- ``amf3.encode_int`` now encodes signed 29bit ints, not unsigned. Thanks
to gerard for the report, investigation and patch! (:ticket:`646`)
0.5 (2009-09-07)
----------------
- Added the ability to modify the timezones of dates being de/encoded for
legacy systems. (:ticket:`612`)
- Fixed a Django reference bug where ``parent.child.parent`` is parent
would encode 3 objects and not 2. (:ticket:`642`)
- Setting ``None`` on a Django ``DateField`` would blow up the encoder
(:ticket:`632`)
- ``rootCause`` in ``ErrorFault`` objects are now populated with the
traceback object. (:ticket:`637`)
- Support for encoding/decoding BlazeDS specific messages (:ticket:`581`)
- Removed tracebacks from exception messages if ``debug=False`` (:ticket:`552`)
- Support for ``google.appengine.ext.db.polymodel.PolyModel`` (:ticket:`633`)
- Support for Django ``File``/``ImageField`` (:ticket:`631`)
- Support for Django model inheritance (:ticket:`626`)
- Rewrote attribute handling code. Added the ability to exclude, set
read-only and static attributes. See
http://pyamf.org/architecture/attributecontrol.html for more details
(:ticket:`601`)
- Exposed the amf request object if ``expose_request=True``.
Twisted/Django/Google have an ``amf_request`` property on the http request
object. WSGI has an entry in the environ dict now - ``pyamf.request``
(:ticket:`234`)
- Added support for the :py:mod:`array` module (:ticket:`468`)
- Fixed an issue with Django model ``AutoFields`` being set to 0 by the Flex
client (:ticket:`556`)
- Added support for the :py:mod:`collections` module. (:ticket:`474`)
- Added type checks for class objects. (:ticket:`473`)
- GAE ``FloatProperty`` can now accept int without issue (:ticket:`609`)
- Revamped the lazy imports module to use :py:data:`sys.meta_path` instead.
Fixes all erroneous import errors (:ticket:`485`).
- Django models will now accept dynamic properties (:ticket:`575`)
- Django PK properties will be set first to allow related properties to apply
correctly (:ticket:`599`)
- p.r.encode/p.r.decode both have a new ``logger`` kwarg. Supply a
:py:class:`logging.Logger` instance if you want to see debug output
(:ticket:`588`)
- ``pyamf.TypedObjectClassAlias`` now forces the class type (:ticket:`537`)
- If a call to ``Decoder.readElement`` results in an ``IOError`` exception,
the original position of the stream will be restored (:ticket:`573`)
- Replaced hardcoded Python implementation title in p.r.gateway.SERVER_NAME
(:ticket:`541`)
- Provide a user friendly way to handle :py:class:`datetime.time` objects
(:ticket:`498`)
- Removed the useless ``pyamf.logging`` module (:ticket:`577`)
- Added a new ``register_package`` helper function to make bulk class
registration easier. Check the docstring for more info. (:ticket:`576`)
- ``cpyamf.amf3._decode_int`` now propagates exceptions correctly (:ticket:`506`)
- Fixed an incorrect ``OverflowError`` when encoding large integers in AMF3
(:ticket:`519`)
- Added ``append`` to ``pyamf.util.BufferedByteStream`` (:ticket:`574`)
- Added Epydoc signatures to all ``util.StringIOProxy``, ``util.DataTypeMixIn``
and ``util.BufferedByteStream`` classes (:ticket:`440`)
- Removed dependancy on ``fpconst``. Platforms with broken platforms are
detected and handled correctly internally (:ticket:`564`)
- ``amf0.Encoder`` now supports attribute ordering (:ticket:`558`)
- Removed duplicate method ``Context.reset``, in favour of ``Context.clear``
(:ticket:`527`)
- Rewrote ``cpyamf.util.BufferedByteStream`` to not depend on :py:mod:`cStringIO`.
Added a C based api for stream functions (:ticket:`513`)
- Unified exceptions for ``BufferedByteStream`` so that only ``IOError``
is raised. (:ticket:`520`)
- Made raising ``pyamf.ReferenceError`` optional for all Indexed* and
``Context`` classes. Refactored AMF3 so that only one ``ClassDefinition``
is created per class (:ticket:`524`)
- Strict type checking now on ``pyamf.util.BufferedByteStream`` (:ticket:`512`)
- Removed the default loggers from p.r.gateway.*. To re-enable supply a
``logger`` instance as a keyword arg to the gateway constructor (:ticket:`525`)
- Removed ``pyamf.util.make_classic_instance`` (as it is not used)
(:ticket:`521`)
- Removed ``pyamf.util.get_mro``, in favour of :py:func:`inspect.getmro`
(:ticket:`526`)
- Removed ``pyamf.util.Indexed[Collection|Map].remove`` (:ticket:`518`)
0.4.2 (2009-04-20)
------------------
- Support for decoding the ``source`` property on ``ArrayCollection``
(:ticket:`488`)
- Fixed an issue in the GAE adapter where dynamic properties would be missing
on referenced objects. (:ticket:`511`)
- Fixed a critical issue with AMF0 reference counting when encoding remoting
responses. (:ticket:`510`)
- Strengthened HTTP header handling in the client (:ticket:`492`)
- Support for Django i18n ``ugettext_lazy`` (:ticket:`496`)
- Added support for microseconds for :py:mod:`datetime` objects. Thanks to
Derek Payton for the patch. (:ticket:`490`)
- Added support for property types on SQLAlchemy mapped classes (:ticket:`491`)
- Added support for property types for Google AppEngine ``db.Model`` and
``db.Expando``. (:ticket:`487`)
0.4.1 (2009-02-23)
------------------
- ``amf0.Encoder.use_amf3`` has been extended to cover all object types
(:ticket:`453`, :ticket:`467`)
- Property types on Django models will now encode as expected. (:ticket:`480`)
- Django ``models.ForeignKey`` properties will be followed only if previously
accessed outside of PyAMF. ``_[attr]_cache`` is no longer encoded.
(:ticket:`456`)
- Encoding ``{0:0, '0':1}`` will now raise an ``AttributeError``. (:ticket:`458`)
- Google AppEngine adapter improvements - see ticket for details (:ticket:`479`)
- ``amf0.Encoder`` will encode all elements as AMF3 if ``use_amf3`` option is
set to ``True`` (:ticket:`453`)
- Unicode handling in ``__repr__`` functions has been improved (:ticket:`455`)
- object attributes and dict keys are now utf8 encoded bytestrings. Python
\**kwargs doesn't accept unicode key objects. (:ticket:`463`)
- Django ``models.TimeField``, ``models.DateField`` will now be converted to
the correct type (``datetime.time`` and ``datetime.date`` respectively).
``fields.NOT_PROVIDED`` is also checked for by converting to
``pyamf.Undefined`` and back again. (:ticket:`457`)
0.4 (2009-01-18)
----------------
- cpyamf now deals with exceptional floats the same way as pure Python -
especially on Windows (:ticket:`448`)
- Support for SQLAlchemy 0.5.1 (:ticket:`449`)
- ``amf0.Encoder`` now has a ``use_amf3`` flag which determines which XML
type to return to the client (:ticket:`435`)
- ``BufferedByteStream.truncate(length)`` now actually does something useful
(:ticket:`444`)
- setup.py now gets the version number from ``pyamf/__init__.py`` source
(:ticket:`429`)
0.4rc3 (2009-01-14)
-------------------
- Support for SQLAlchemy 0.5.0 (:ticket:`436`)
- pyamf.util.DataTypeMixIn/cpyamf.util.BufferedByteStream can now
encode/decode 24bit un/signed integers. (:ticket:`422`)
- pyamf.util.StringIOProxy/cpyamf.util.BufferedByteStream both have new
consume methods that will chop of the tail of the stream (already read
stream). (:ticket:`423`)
- Now checking for all types of supported xml lib types for encoding, but
will only use the first implementation for decoding (:ticket:`426`)
- fpconst dependancy is now only required if the platform requires it
(:ticket:`356`)
- Decoding negative timestamps on certain platforms (namely Windows) are now
supported (:ticket:`390`)
0.4rc2 (2009-01-05)
-------------------
- Support for SQLAlchemy 0.4.0 (:ticket:`410`)
0.4rc1 (2008-12-31)
-------------------
- Support for encoding/decoding SQLAlchemy ORM objects with a new adapter.
Lots of people involved in this one, but special thanks to Dave Thompson
and Michael Van Tellingen for making this happen. (:ticket:`277`)
- All gateways now log exceptions when exceptions are raised during
en/decoding. (:ticket:`394`)
- Flex messaging now uses correct static attributes for encoding. Determining
static/dynamic attributes on objects is now easier (:ticket:`357`)
- Added use_proxy option to amf3 which will automagically convert ObjectProxy
to dict and ArrayCollection to list on decoding, and vice versa on encode.
Thanks to dthompso for the excellent patch (:ticket:`355`)
- flex.ArrayCollection now subclasses list instead of dict as non-int keys
are not allowed. IList interface has been implemented. (:ticket:`349`)
- Encoding registered subclass of list that define the 'externalised'
metadata will be encoded as an object.
- Encoders how have a 'strict' mode. Not generally useful for the time being
but will help with developments in the future. Type mapped functions now
require a second 'encoder' attribute. (:ticket:`378`)
- Added adapter to handle the :py:mod:`decimal` module and, if strict is set
to False, silently converts a Decimal instance to a float (:ticket:`376`)
- ClassAlias can now be subclassed and three new methods have been added:
applyAttributes, createInstance, getAttributes all which help to provide
fine control for object/instance manipulation (:ticket:`348`)
- Added support for __slots__ (:ticket:`347`)
- Fixed problem when decoding objects that map to GAE db.Model objects with
required properties (:ticket:`342`)
- ByteArray now does not throw an error when used in the Remoting framework
(:ticket:`379`)
- A new adapter that converts sets.ImmutableSet and sets.Set to tuples before
encoding. (:ticket:`280`)
- A revamped google app engine adapter that checks for the _key attribute in
an aliased class and first loads the object from the datastore and then
applies that properties in the object stream. (:ticket:`307`)
- New helper function to make it easier to manually add adapters (:ticket:`350`)
- Ability to disable the c extension with passing --disable-ext to setup.py
(:ticket:`381`, :ticket:`391`)
- Python C-extension for the pyamf.util.BufferedByteStream class. Originally
contributed by Gerard Escalante (:ticket:`225`, :ticket:`405`)
- New API to add headers such as cookies in pyamf.remoting.client
(:ticket:`337`)
- Now clearing the context between remoting requests (:ticket:`309`)
- Fixed issue with AMF3 class definition references (:ticket:`341`)
- More helpful description for register_class args check (:ticket:`334`)
- pyamf.register_class now checks to ensure that __init__ args do not have
any arguments (:ticket:`322`)
- Added RemoteObject support for AsyncMessage (:ticket:`292`)
- pyamf.remoting.ErrorFault.__repr__ now displays the traceback info (if it
exists). (:ticket:`331`)
- Both Encoders will now raise pyamf.EncodeError if a function is encoded
(:ticket:`311`)
- Twisted Gateway would fall over when returning tuples (:ticket:`313`)
- The remoting gateways now send a customizable Server header (:ticket:`317`)
- The remoting client now sends a customizable User-Agent header (:ticket:`306`)
- Added ability to set the HTTP referer in remoting client (:ticket:`316`)
- Fixed issue where the AMF3 encoder assumed objects with a 'tag' attribute
needed XML encoding. Reported by cy-man (:ticket:`303`)
- Solved issue with repr for AbstractMessage. Reported by datafunk
(:ticket:`283`)
- Content-type was missing in POST requests from the AMF client. Reported by
magog (:ticket:`304`)
- Added the disconnect Command operation (:ticket:`325`)
- Fixed issue with the unit tests for Django (:ticket:`281`)
- Removed the NetworkIOMixIn class (:ticket:`232`)
0.3.1 (2008-05-04)
------------------
- Importing module now has tests (:ticket:`266`)
- Django model adapter now imported only when django.db.models is imported
(:ticket:`261`)
- Google Model/Expando encoding now works out of the box
- Fixed issue with Remote Object destination (:ticket:`270`)
- Added a new gateway for the Google App Engine - see
pyamf.remoting.gateway.google.WebAppGateway (:ticket:`253`)
- amf0 Encoder now takes amf3 contexts into account (:ticket:`268`)
- amf*.encode helpers can now accept multiple arguments (:ticket:`267`)
- Removed the dependancy of fpconst for Python 2.5 or newer (:ticket:`243`)
- Solved issue with AMFPHP exceptions in AMF client (:ticket:`258`)
- Fixed issue with url parsing in AMF client (:ticket:`256`)
- Client no longer raises httplib.ResponseNotReady when making multiple
requests using the same RemotingService (:ticket:`254`)
0.3 (2008-04-14)
----------------
- Added compatibility module for Google App Engine (:ticket:`247`)
- Fixed the signed interpretation of compressed integers in AMF3 (:ticket:`241`)
- Classic class decoding would throw an AttributeError (:ticket:`248`)
- Reloading adapter modules caused errors in Django, Pylons and Google App
Engine. Resolved by removing dependancy on Importing module and
incorporating into pyamf.util (:ticket:`250`)
- Adapter framework can now be fired when only loading submodules
(:ticket:`246`)
- Made util.BufferedByteStream endian aware (:ticket:`231`)
- Fixed issue with Twisted threads (:ticket:`233`)
0.2 (2008-03-12)
----------------
- Removed amfinfo console_script (:ticket:`226`)
- Encoders/Decoders now check for __getstate__/__setstate__ respectively
(:ticket:`209`)
- Gateway import hack has now been removed - permanently (:ticket:`224`)
- Encoding/decoding performance has been increased 2x for AMF0 and up-to
10x(!) for AMF3 (:ticket:`198`)
- Logging is now possible in all the supported gateways (:ticket:`173`)
- A new preprocessor function that runs after authentication, but before
invoking the service method (:ticket:`196`)
- authenticator can now be decorated with expose_request (:ticket:`195`)
- Python 2.3 support (:ticket:`33`)
- Python 2.6 support (:ticket:`222`)
- Made PyAMF distributable as zip-based Python Egg (:ticket:`193`)
0.1.1 (2008-02-18)
------------------
- AMF3 encoder reported incorrect byte length header for non-ASCII string
data. Patch supplied by akaihola. (:ticket:`194`)
- Decoder context not cleared between reading the remoting header and body.
Reported by gerard (:ticket:`192`)
0.1 (2008-02-11)
----------------
- New error handling api useful for registering custom exception classes
(:ticket:`185`)
- When a client receives a remoting error, an exception is generated
(:ticket:`167`)
- expose_request per service control vastly improved (:ticket:`169`)
- Authentication per service control vastly improved (:ticket:`166`)
- uuid is no longer installed when using Python 2.5 or newer (:ticket:`182`)
- The inheritance tree was not consulted when encoding attributes (:ticket:`172`)
- TypedObjects didn't work with old style classes (:ticket:`171`)
- ErrorFault now prints details (:ticket:`168`)
- Added expose_request to TwistedGateway (:ticket:`165`)
- TwistedGateway now expects deferred from service functions (:ticket:`164`)
0.1b (2008-01-13)
-----------------
- IExternalizable now takes its methods from the class and fine grain control
over attr encoding (:ticket:`110`)
- Added an adapter framework that gets imported when the related module is
imported. See http://pyamf.org/architecture/adapters.html for more info
- Added 'expose_environ' argument to WSGIGateway to expose the WSGI environ
as the first arg in the called services.
- Implemented Local Shared Object (LSO) support (:ticket:`11`)
- ByteArray now implements IDataInput and IDataOutput instead of
StringIOProxy (:ticket:`151`)
- dicts are now used as the default for anonymous objects (:ticket:`131`)
- remoting.client mostly fully supports the predefined headers (defined at
http://osflash.org/documentation/amf/envelopes/remoting/headers). The only
one missing is amf_server_debug (:ticket:`39`)
- LazyImporter objects now set the __file__ attribute to None, so that
querying :py:data:`sys.modules` don't accidentally import the underlying
module (:ticket:`147`)
- Fixed argument positioning for RemoteObject processing. Thanks akaihola!
(:ticket:`145`)
- ElementTree requirement is now ignored when using Python >= 2.5
(:ticket:`144`)
- Added tests for TwistedGateway (:ticket:`132`)
- Workaround for Python 2.4 float shortcomings (:ticket:`78`)
- Service Browser ('DescribeService' header) requests supported. (:ticket:`138`)
- Remoting client now supports authentication. (:ticket:`137`)
- Proper encoding for aliased subclassed builtin types, specifically
flex.ArrayCollection.
- Added support for easy encoding of Django object queries
(Foo.objects.all())
- Added 'add_type' allowing finer grain control of how a class is encoded in
an AMF stream. (:ticket:`130`)
- 'authenticator' keyword added to all gateways (moved from ServiceRequest)
(:ticket:`129`)
- Added ``expose_request`` argument to DjangoGateway to expose the underlying
HTTP Request object as the first arg in the called services. (:ticket:`103`)
0.1.0a (2007-12-12)
-------------------
- AMF0 and AMF3 encoders/decoders
- Additional support for IExternalizable, ArrayCollection, ObjectProxy,
ByteArray, RecordSet and RemoteObject
- Remoting gateways for Twisted, WSGI, and Django
- Authentication/setCredentials support
- zlib compression support for ByteArray
- Remoting client with :py:mod:`httplib`
0.0.1 (2007-10-19)
------------------
- Started project based on previous work done in the RTMPy (http://rtmpy.org)
project.