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

Added optional encoding to dump and load functions #77

Merged
merged 1 commit into from
Jan 2, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
143 changes: 72 additions & 71 deletions src/pytomlpp/_io.py
Original file line number Diff line number Diff line change
@@ -1,71 +1,72 @@
"""Python wrapper for Toml++ IO methods."""

import os
from typing import Any, BinaryIO, Dict, TextIO, Union

from . import _impl

FilePathOrObject = Union[str, TextIO, BinaryIO, os.PathLike]


def dumps(data: Dict[Any, Any]) -> str:
"""Serialise data to TOML string.

Args:
data (Dict[Any, Any]): input data

Returns:
str: seralised data
"""
return _impl.dumps(data)


def dump(data: Dict[Any, Any], fl: FilePathOrObject, mode: str = "w") -> None:
"""Serialise data to TOML file

Args:
data (Dict[Any, Any]): input data
fl (FilePathOrObject): file like object or path
mode (str, optional): mode to write the file, support "w", "wt" (text) or "wb" (binary). Defaults to "w".
"""
data = _impl.dumps(data)
if mode == "wb":
data = data.encode("utf-8")
if hasattr(fl, "write"):
fl.write(data)
return
with open(fl, mode=mode) as fh:
fh.write(data)


def loads(data: str) -> Dict[Any, Any]:
"""Deserialise from TOML string to python dict.

Args:
data (str): TOML string

Returns:
Dict[Any, Any]: deserialised data
"""
return _impl.loads(data)


def load(fl: FilePathOrObject, mode: str = "r") -> Dict[Any, Any]:
"""Deserialise from TOML file to python dict.

Args:
fl (FilePathOrObject): file like object or path
mode (str, optional): mode to read the file, support "r", "rt" (text) or "rb" (binary). Defaults to "r".

Returns:
Dict[Any, Any]: deserialised data
"""

if hasattr(fl, "read"):
data = fl.read()
else:
with open(fl, mode=mode) as fh:
data = fh.read()
if isinstance(data, bytes):
return _impl.loads(data.decode("utf-8"))
return _impl.loads(data)
"""Python wrapper for Toml++ IO methods."""

import os
from typing import Any, BinaryIO, Dict, TextIO, Union, Optional

from . import _impl

FilePathOrObject = Union[str, TextIO, BinaryIO, os.PathLike]


def dumps(data: Dict[Any, Any]) -> str:
"""Serialise data to TOML string.

Args:
data (Dict[Any, Any]): input data

Returns:
str: seralised data
"""
return _impl.dumps(data)


def dump(data: Dict[Any, Any], fl: FilePathOrObject, mode: str = "w", encoding: Optional[str] = "utf-8") -> None:
"""Serialise data to TOML file

Args:
data (Dict[Any, Any]): input data
fl (FilePathOrObject): file like object or path
mode (str, optional): mode to write the file, support "w", "wt" (text) or "wb" (binary). Defaults to "w".
encoding (str): defaults to utf-8, if None, local encoding is selected.
"""
data = _impl.dumps(data)
if mode == "wb":
data = data.encode("utf-8")
if hasattr(fl, "write"):
fl.write(data)
return
with open(fl, mode=mode, encoding=encoding or None) as fh:
fh.write(data)


def loads(data: str) -> Dict[Any, Any]:
"""Deserialise from TOML string to python dict.

Args:
data (str): TOML string

Returns:
Dict[Any, Any]: deserialised data
"""
return _impl.loads(data)


def load(fl: FilePathOrObject, mode: str = "r", encoding: Optional[str] = "utf-8") -> Dict[Any, Any]:
"""Deserialise from TOML file to python dict.

Args:
fl (FilePathOrObject): file like object or path
mode (str, optional): mode to read the file, support "r", "rt" (text) or "rb" (binary). Defaults to "r".

Returns:
Dict[Any, Any]: deserialised data
"""

if hasattr(fl, "read"):
data = fl.read()
else:
with open(fl, mode=mode, encoding=encoding or None) as fh:
data = fh.read()
if isinstance(data, bytes):
return _impl.loads(data.decode("utf-8"))
return _impl.loads(data)
Loading