Can't pickle metadata with Enum() columns

Issue #1698 resolved
Former user created an issue

Similar to #1694, but harder to fix. The offender is Enum's second base, SchemaType. Boolean fully overrides _set_table, but Enum sometimes calls up to the parent, and SchemaType._set_table sets two to four bound methods as DDL listeners.

Test:

from sqlalchemy import *

meta = MetaData()
Table('foo',meta,Column('bar',Enum('x','y','z', name="somename")))

from cPickle import dumps
dumps(meta)

throws

  File "/usr/lib/python2.6/pickle.py", line 306, in save
    rv = reduce(self.proto)
  File "/home/taavi/sa/lib/python2.6/copy_reg.py", line 70, in _reduce_ex
    raise TypeError, "can't pickle %s objects" % base.__name__
TypeError: can't pickle instancemethod objects

Comments (2)

  1. Log in to comment