cdgriffith / Box

Python dictionaries with advanced dot notation access
https://github.com/cdgriffith/Box/wiki
MIT License
2.64k stars 107 forks source link

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

Closed richieadler closed 2 years ago

richieadler commented 3 years ago

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 commented 3 years ago

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 commented 3 years ago

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 commented 3 years ago

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 commented 3 years ago

Thoughs?

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

cdgriffith commented 2 years ago

Added in 6.10.0 https://github.com/cdgriffith/Box/releases/tag/6.10.0