[ python-Bugs-1098985 ] set objects cannot be marshalled

SourceForge.net noreply at sourceforge.net
Thu Jan 13 14:34:00 CET 2005


Bugs item #1098985, was opened at 2005-01-09 11:28
Message generated for change (Comment added) made by greg_ball
You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1098985&group_id=5470

Category: Python Library
Group: Python 2.5
Status: Closed
Resolution: Fixed
Priority: 4
Submitted By: Gregory H. Ball (greg_ball)
Assigned to: Raymond Hettinger (rhettinger)
Summary: set objects cannot be marshalled

Initial Comment:
It would be nice if set objects could be marshalled.
This would require extra code in marshal.c very similar
to that for dictionaries. Since sets can be pickled I
guess this is not critical.


----------------------------------------------------------------------

>Comment By: Gregory H. Ball (greg_ball)
Date: 2005-01-13 08:34

Message:
Logged In: YES 
user_id=11365

Thanks for the review Raymond.  Since the code has only one
known user, going for efficiency over encapsulation would
certainly be premature optimisation.

Regarding the P.S.; I modelled the loop building up the
dictionary
on the case TYPE_DICT code above.  PyErr_Occurred() below
the loop should catch anything that goes wrong, albeit not
immediately - or can you see some way to break this?  
If so, that's a bug in the dictionary code, surely.


----------------------------------------------------------------------

Comment By: Raymond Hettinger (rhettinger)
Date: 2005-01-11 15:39

Message:
Logged In: YES 
user_id=80475

I prefer the existing code though it is slightly inefficient
(creating an intermediate tuple whose size is known in
advance and whose elements are known to be unique). 

IMO, this beats breaking the encapsulation of the set object
structure (knowledge of the v->data field and knowledge that
the dict values are set to True).  I want to preserve the
option for sets to be possibly re-implemented without an
underlying dictionary.

Someday, I'll craft a C API for sets.  It will include an
ability to build-up the values element by element.

P.S.  The code in the attachment needs error checking for
the call to  PyDict_SetItem().

----------------------------------------------------------------------

Comment By: Gregory H. Ball (greg_ball)
Date: 2005-01-11 13:12

Message:
Logged In: YES 
user_id=11365

Thanks for the quick work Raymond!  I see you have added
a test case too.  I am attaching a patch which implements
this change in a different style, based on setobject.h
publicly advertising that v->data is a dictionary for any
set object v.
It passes the new test code (and the rest of the test suite).


----------------------------------------------------------------------

Comment By: Raymond Hettinger (rhettinger)
Date: 2005-01-10 22:03

Message:
Logged In: YES 
user_id=80475

Then let things be nice for all.
See Python marshal.c 1.81.

----------------------------------------------------------------------

Comment By: Tim Peters (tim_one)
Date: 2005-01-10 20:51

Message:
Logged In: YES 
user_id=31435

Just noting that some people prefer to use marshal instead of 
pickle because unmarshaling can't end up executing arbitrary 
user-defined code (but unpickling can, via arbitrary module 
importing and arbitrary construction of objects of user-
defined classes).  That's really not one of marshal's goals, 
though, so "would be nice" is as strong as it gets.

----------------------------------------------------------------------

Comment By: Guido van Rossum (gvanrossum)
Date: 2005-01-10 19:25

Message:
Logged In: YES 
user_id=6380

As the OP says, it would be nice. Let's see if he or someone
else wants it bad enough to submit a patch.

----------------------------------------------------------------------

Comment By: Raymond Hettinger (rhettinger)
Date: 2005-01-10 19:17

Message:
Logged In: YES 
user_id=80475

Guido, what to you think about the OP's request?  The need
does not arise for pyc files and pickling takes care of
general persistance needs.   Is there something to be gained?

----------------------------------------------------------------------

You can respond by visiting: 
https://sourceforge.net/tracker/?func=detail&atid=105470&aid=1098985&group_id=5470


More information about the Python-bugs-list mailing list