Skip to content

marshal module is imcomplete #3458

Closed
Closed

Description

@youknowone

Feature

marshal dumps and loads are incomplete

Python Documentation

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

Activity

  1. jakearmendariz commented on Dec 19, 2021

    @jakearmendariz
    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!

  2. youknowone commented on Dec 19, 2021

    @youknowone
    MemberAuthor

    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.

  3. djrmarques commented on Apr 25, 2022

    @djrmarques
    Contributor

    Hello, is this issue closed already?

  4. youknowone commented on Apr 25, 2022

    @youknowone
    MemberAuthor

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

  5. youknowone commented on May 3, 2022

    @youknowone
    MemberAuthor

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

  6. youknowone commented on Oct 6, 2026

    @youknowone
    MemberAuthor

    marshal.dumps / marshal.loads round-trip None, bool, int, float, str, bytes, tuple, list, dict, set, and code objects, with marshal.version exposed. Lib/test/test_marshal.py has a single leftover expectedFailure about set repr order under PYTHONHASHSEED, which is not missing marshal support.

    Closing.

    — commented by Grok 4.6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    A-stdlibC-compatA discrepancy between RustPython and CPython

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions