I have a class called Argument, and a subclass called RangeArgument. Arguments have data in the form of a PickleType column. When I create two arguments by doing Argument(...data={"bla":"bla"}) and Argument(..data="bla2":"bla") it works fine, in that argument1.data is bla:bla and argument2.data is bla2:bla. But when I do the same for RangeArguments, it appears that each time I create a new one, all of the previous ones show the new one's data, instead of their own.
Following is the shortened definition for Argument and RangeArgument 1. #RangeArgument definition 2. 3. class RangeArgument(Argument): 4. __mapper_args__ = {'polymorphic_identity': 'RangeArgument'} 5. 6. def __init__(self,arg,range): 7. Argument.__init__(self,type="RangeArgument", description="An argument with a defined numeric range.") 8. self.arg = arg 9. self.range = range 10. 11. def validate(self): 12. return self.arg in self.range 13. 14. @hybrid_property 15. def arg(self): 16. return self.data['arg'] 17. 18. @arg.setter 19. def arg(self,arg): 20. self.data['arg'] = arg 21. 22. @hybrid_property 23. def range(self): 24. return self.data['range'] 25. 26. @range.setter 27. def range(self,range): 28. self.data['range'] = range 29. 30. #Argument definition 31. class Argument(Base): 32. __tablename__ = "arguments" 33. id = Column(Integer, primary_key=True) 34. name = Column(String, default="untitled") 35. type = Column(String, default="Base") 36. description = Column(String) 37. data = Column(PickleType, default={}) 38. parent_id = Column(Integer, ForeignKey(id)) 39. 40. __mapper_args__ = {"polymorphic_on":type, 41. "polymorphic_identity": "Base"} 42. children = relationship("Argument", backref= backref("parent", remote_side=[id])) Following are passing and failing tests as example of what is happening: 1. #Failing test 2. def test_argument_subclass_creation(self): 3. rang = [range(1,5),range(1,10),range(10,100)] 4. 5. rangearg_1 = RangeArgument(-1,rang[0]) 6. rangearg_2 = RangeArgument(4,rang[1]) 7. rangearg_3 = RangeArgument(74.5,rang[2]) 8. 9. assert rangearg_1.data['range'] == rang[0] 10. assert rangearg_2.data['range'] == rang[1] 11. assert rangearg_3.data['range'] == rang[2] 12. 13. #Passing test 14. def test_arguments_insertion(self): 15. child1_data = {"child":"Hi!"} 16. child_1 = Argument(description="A child argument used for testing", data=child1_data) 17. child2_data = {"child":"Hi!", "test":"it works"} 18. child_2 = Argument(description="A child argument used for testing", data=child2_data) 19. 20. self.arguments["child_1"] = child_1 21. self.arguments["child_2"] = child_2 22. 23. assert not "test" in self.arguments["child_1"].data 24. assert "test" in self.arguments["child_2"].data 25. assert self.arguments["child_1"].data == child1_data 26. assert self.arguments["child_2"].data == child2_data Am I doing something wrong here? I realize that at no point am I actually committing these to a database, could that possibly be the issue, somehow or another? Thanks a lot! -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.