Skip to content

marshal module is imcomplete #3458

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
youknowone opened this issue Nov 26, 2021 · 5 comments
Open

marshal module is imcomplete #3458

youknowone opened this issue Nov 26, 2021 · 5 comments
Labels
A-stdlib C-compat A discrepancy between RustPython and CPython

Comments

@youknowone
Copy link
Member

Feature

marshal dumps and loads are incomplete

Python Documentation

https://docs.python.org/3/library/marshal.html

@youknowone youknowone added the good first issue Good for newcomers label Nov 26, 2021
@jakearmendariz
Copy link
Contributor

Hi, I was looking at this issue (new to this project) and I am struggling a bit.

I assume the primary changes would be made to the marshal.rs file. My first thought is that we would add more cases the loads and dumps match statements to handle PyStr, PyInt, PyFloat etc. However, the loads function expects the returning of a PyCode object, thus at some point a PyCode object would have to be created (either in loads after reading the raw bytes, or in dumps by converting all PyObjectRef into PyCode first.

Am I understanding this correctly? If so, how can we convert and the ConstantData/PyObjectRef/bytes into a PyCode or CodeObject?

FYI I am able to get any constant to a PyConstant without much trouble, it's the CodeObject creation that seems necessary and is confusing.

Thanks for any advice or tips you can give. I'm somewhat new to rust and interpreters and appreciate all the help I can get!

@youknowone
Copy link
Member Author

youknowone commented Dec 19, 2021

Your approach is correct. The return type can be changed to PyObjectRef to include any type of python object. The most common way to convert PyCode or other types into PyObjectRef is using into_pyobject. The other way - PyObjectRef to each type - will be try_into_value.

@djrmarques
Copy link
Contributor

Hello, is this issue closed already?

@youknowone
Copy link
Member Author

Oh, yep. test_marshal.py is done. So this is also done. Thank you for remind it.

@youknowone youknowone removed the good first issue Good for newcomers label May 3, 2022
@youknowone
Copy link
Member Author

#3681
@djrmarques good news, marshal is not completed yet

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-stdlib C-compat A discrepancy between RustPython and CPython
Projects
None yet
Development

No branches or pull requests

3 participants