id	summary	reporter	owner	description	type	status	priority	component	severity	resolution	keywords	cc
19	PySyck improperly handles subclassed types	tenax.raccoon@…	xi	"If you derive from set, list, or dict, PySyck ignores the __getstate__ method in the new class.  This makes it more difficult to create a slightly custom data type for two reasons:
 1. The original data type is not preserved.
 2. Any customization in the data storage is not obeyed.

I haven't had a chance to examine the source code at this point, but I suspect that the dict/list/set types are checked for (probably via isinstance) before the __getstate__ protocol is checked.

Two examples of the type being lost:
{{{
>>> class OrderedSet(set):
...  def __iter__(self):
...   items = list( set.__iter__(self) )
...   items.sort( key=str )
...   for item in items:
...     yield item
...   return
...  def __getstate__(self):
...   return {'ordered_items': set(self)}
...
>>> x = OrderedSet( ('Apples', 'Bananas', 'Cucumbers') )
>>> x
OrderedSet(['Apples', 'Cucumbers', 'Bananas'])
>>> print syck.dump(x)
--- !set
- Apples
- Bananas
- Cucumbers

>>> class DefaultDict(dict):
...  def __init__(self, default, *args, **keyargs):
...   self.default = default
...   dict.__init__(self, *args, **keyargs)
...  def __getstate__(self):
...   return {'default': self.default, 'dict': dict(self) }
...
>>> d = DefaultDict(-1, test='Hello!')
>>> d.__getstate__()
{'default': -1, 'dict': {'test': 'Hello!'}}
>>> print syck.dump(d)
---
test: Hello!

>>>
}}}

An example of a regular object with the __getstate__() method being properly called:
{{{
>>> class RegularObject(object):
...  def __init__(self, name, value):
...   self.name, self.value = name, value
...  def __getstate__(self):
...   return {'sillyName': self.name, 'badValue': self.value}
...
>>> a = RegularObject('Answer To Life', 42)
>>> a.__getstate__()
{'badValue': 42, 'sillyName': 'Answer To Life'}
>>> print syck.dump(a)
--- !python/object:__main__.RegularObject
badValue: 42
sillyName: Answer To Life
}}}"	defect	new	normal	pysyck	normal			
