Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/bobfang1992/pytomlpp
A python wrapper for tomlplusplus
https://github.com/bobfang1992/pytomlpp
parser python python-wrapper toml toml-parser
Last synced: 12 days ago
JSON representation
A python wrapper for tomlplusplus
- Host: GitHub
- URL: https://github.com/bobfang1992/pytomlpp
- Owner: bobfang1992
- License: mit
- Created: 2020-06-02T15:13:56.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-09-03T21:04:59.000Z (2 months ago)
- Last Synced: 2024-10-03T01:40:21.598Z (about 1 month ago)
- Topics: parser, python, python-wrapper, toml, toml-parser
- Language: C++
- Homepage: https://bobfang1992.github.io/pytomlpp/pytomlpp.html
- Size: 262 KB
- Stars: 86
- Watchers: 4
- Forks: 10
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# pytomlpp
[![Build Status](https://github.com/bobfang1992/pytomlpp/workflows/Wheels/badge.svg)](https://github.com/bobfang1992/pytomlpp/actions)
[![Conda Status](https://anaconda.org/conda-forge/pytomlpp/badges/version.svg)](https://anaconda.org/conda-forge/pytomlpp)
[![PyPI version](https://badge.fury.io/py/pytomlpp.svg)](https://badge.fury.io/py/pytomlpp)This is an python wrapper for `toml++` (https://marzer.github.io/tomlplusplus/).
Some points you may want to know before use:
- Using `toml++` means that this module is fully compatible with TOML [v1.0.0](https://toml.io/en/v1.0.0).
- We convert toml structure to native python data structures (dict/list etc.) when parsing, this is more inline with what `json` module does.
- The binding is using [pybind11](https://github.com/pybind/pybind11).
- The project is tested using [toml-test](https://github.com/BurntSushi/toml-test) and [pytest](https://github.com/pytest-dev/pytest).
- We support all major platforms (Linux, Mac OSX and Windows), for both CPython and Pypy and all recent Python versions. You just need to `pip install` and we have a pre-compiled binaries ready. No need to play with `clang`, `cmake` or any C++ toolchains.# Example
```
In [1]: import pytomlppIn [2]: toml_string = 'hello = "世界"'
In [3]: pytomlpp.loads(toml_string)
Out[3]: {'hello': '世界'}In [4]: type(_)
Out[4]: dictIn [6]: pytomlpp.dumps({"你好": "world"})
Out[6]: '"你好" = "world"'
```# Why bother?
There are some existing python TOML parsers on the market but from my experience they are implemented purely in python which is a bit slow.
```
Parsing data.toml 1000 times:
rtoml: 0.540 s
pytomlpp: 0.542 s ( 1.00x)
tomli: 2.923 s ( 5.40x)
qtoml: 8.748 s (16.18x)
tomlkit: 51.608 s (95.49x)
toml: Parsing failed. Likely not TOML 1.0.0-compliant.
```Test it for yourself using [the benchmark script](benchmark/run.py).
# Installing
We recommend you to use `pip` to install this package:
```sh
pip install pytomlpp
```You can also use `conda` to install this package, on all common platforms & python versions.
If you have an issue with a package from conda-forge, you can raise an issue on the [feedstock](https://github.com/conda-forge/pytomlpp-feedstock)```sh
conda install -c conda-forge pytomlpp
```You can also install from source:
```
git clone [email protected]:bobfang1992/pytomlpp.git --recurse-submodules=third_party/tomlplusplus --shallow-submodules
cd pytomlpp
pip install .
```---
![Alt](https://repobeats.axiom.co/api/embed/e767bf2c29b32ec317fc591d4cafda263de6c4b0.svg "Repobeats analytics image")