Skip to content
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

REQ: Create equivalent to box.from_file for strings (box.from_str ?) #195

Closed
richieadler opened this issue Apr 1, 2021 · 5 comments
Closed

Comments

@richieadler
Copy link

richieadler commented Apr 1, 2021

Sometimes it's not known beforehand if the value of a string will contain a list or a dict.

It would be useful to have a function to autodetect the required type (Box or BoxList) as it is done for box.from_file.

Alternatively, enhance box.from_file to accept a file-like (but in that case if you have a str, you have to resort to io.StringIO; a separate function, possible called box.from_str, would be preferable).

@cdgriffith
Copy link
Owner

The main issue with this is that from_file relies on the extension to know what transform it uses, it doesn't blindly guess.

from_str would require just running everything on it and seeing what works, which can be handy but wrong. I personally don't like the unpredictability of it

@mhuerta-endava
Copy link

from_str would require just running everything on it and seeing what works, which can be handy but wrong. I personally don't like the unpredictability of it

How about this: determine the format from a mandatory parameter, but detect whether is a BoxList or a Box from the content? That was my main goal anyway.

@cdgriffith
Copy link
Owner

Thinking about it a bit more, I think it would be safe to assume json standard (as that is the only converter in standard library), and have a parameter for changing type.

def box_from_string(content: str, string_type: str = "json") -> Union[Box, BoxList]:
    """
    Parse the provided string into a Box or BoxList object as appropriate.

    :param content: String to parse
    :param string_type: manually specify file type: json, toml or yaml
    :return: Box or BoxList
    """

Thoughs?

@richieadler
Copy link
Author

Thoughs?

Seems reasonable.
(Sorry for the account confusion, it's the same person)

cdgriffith added a commit that referenced this issue Oct 29, 2022
* Adding Python 3.11 support
* Adding #195 box_from_string function (thanks to Marcelo Huerta)
* Changing the deprecated ``toml`` package with modern ``tomllib``, ``tomli`` and ``tomli-w`` usage (thanks to Michał Górny)
* Fixing mypy __ior__ type (thanks to Jacob Hayes)
* Fixing line endings with a pre-commit update
* Fixing BoxList was using old style of `super` in internal code usage

Co-authored-by: Jacob Hayes <jacob.r.hayes@gmail.com>
Co-authored-by: Michał Górny <mgorny@gentoo.org>
@cdgriffith
Copy link
Owner

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

No branches or pull requests

3 participants