Add TomlFile
This commit is contained in:
parent
ad10c7b5d2
commit
2e9a4e1c98
5 changed files with 65 additions and 2 deletions
|
|
@ -2,6 +2,7 @@ from .binary import BinaryFile
|
||||||
from .file import TAG, File
|
from .file import TAG, File
|
||||||
from .json import JsonFile
|
from .json import JsonFile
|
||||||
from .text import TextFile
|
from .text import TextFile
|
||||||
|
from .toml import TomlFile
|
||||||
|
|
||||||
__all__: list[str] = [
|
__all__: list[str] = [
|
||||||
"TAG",
|
"TAG",
|
||||||
|
|
@ -9,4 +10,5 @@ __all__: list[str] = [
|
||||||
"File",
|
"File",
|
||||||
"JsonFile",
|
"JsonFile",
|
||||||
"TextFile",
|
"TextFile",
|
||||||
|
"TomlFile",
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ class JsonFileProxy:
|
||||||
data = self.file.data
|
data = self.file.data
|
||||||
*parts, last = self.path
|
*parts, last = self.path
|
||||||
for part in parts:
|
for part in parts:
|
||||||
data = data[part]
|
data = data.setdefault(part, {})
|
||||||
data[last] = value
|
data[last] = value
|
||||||
|
|
||||||
def tag_here(self, tag: str = TAG) -> None:
|
def tag_here(self, tag: str = TAG) -> None:
|
||||||
|
|
|
||||||
46
pasch/file/toml.py
Normal file
46
pasch/file/toml.py
Normal file
|
|
@ -0,0 +1,46 @@
|
||||||
|
from dataclasses import dataclass
|
||||||
|
from typing import Any, Self
|
||||||
|
|
||||||
|
import toml
|
||||||
|
|
||||||
|
from .file import File
|
||||||
|
from .text import TextFile
|
||||||
|
|
||||||
|
|
||||||
|
@dataclass
|
||||||
|
class TomlFileProxy:
|
||||||
|
file: "TomlFile"
|
||||||
|
path: tuple[str, ...]
|
||||||
|
|
||||||
|
def at(self, *path: str) -> Self:
|
||||||
|
return TomlFileProxy(self.file, self.path + path)
|
||||||
|
|
||||||
|
def set(self, value: Any) -> None:
|
||||||
|
if not self.path:
|
||||||
|
self.file.set(value)
|
||||||
|
|
||||||
|
data = self.file.data
|
||||||
|
*parts, last = self.path
|
||||||
|
for part in parts:
|
||||||
|
data = data.setdefault(part, {})
|
||||||
|
data[last] = value
|
||||||
|
|
||||||
|
|
||||||
|
class TomlFile(File):
|
||||||
|
def __init__(self, data: Any = {}) -> None:
|
||||||
|
self.data = data
|
||||||
|
|
||||||
|
def at(self, *path: str) -> TomlFileProxy:
|
||||||
|
return TomlFileProxy(self, path)
|
||||||
|
|
||||||
|
def set(self, value: Any) -> None:
|
||||||
|
self.data = value
|
||||||
|
|
||||||
|
def to_text(self) -> TextFile:
|
||||||
|
file = TextFile()
|
||||||
|
file.tag(comment="#")
|
||||||
|
file.append(toml.dumps(self.data))
|
||||||
|
return file
|
||||||
|
|
||||||
|
def to_bytes(self) -> bytes:
|
||||||
|
return self.to_text().to_bytes()
|
||||||
|
|
@ -4,7 +4,11 @@ version = "0.0.0"
|
||||||
description = "Python-based Arch System Config Helper"
|
description = "Python-based Arch System Config Helper"
|
||||||
readme = "README.md"
|
readme = "README.md"
|
||||||
requires-python = ">=3.13"
|
requires-python = ">=3.13"
|
||||||
dependencies = ["rich>=14.1.0", "xdg-base-dirs>=6.0.2"]
|
dependencies = [
|
||||||
|
"rich>=14.1.0",
|
||||||
|
"toml>=0.10.2",
|
||||||
|
"xdg-base-dirs>=6.0.2",
|
||||||
|
]
|
||||||
|
|
||||||
[tool.ruff.lint]
|
[tool.ruff.lint]
|
||||||
select = ["RUF", "F"]
|
select = ["RUF", "F"]
|
||||||
|
|
|
||||||
11
uv.lock
generated
11
uv.lock
generated
|
|
@ -29,12 +29,14 @@ version = "0.0.0"
|
||||||
source = { virtual = "." }
|
source = { virtual = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "rich" },
|
{ name = "rich" },
|
||||||
|
{ name = "toml" },
|
||||||
{ name = "xdg-base-dirs" },
|
{ name = "xdg-base-dirs" },
|
||||||
]
|
]
|
||||||
|
|
||||||
[package.metadata]
|
[package.metadata]
|
||||||
requires-dist = [
|
requires-dist = [
|
||||||
{ name = "rich", specifier = ">=14.1.0" },
|
{ name = "rich", specifier = ">=14.1.0" },
|
||||||
|
{ name = "toml", specifier = ">=0.10.2" },
|
||||||
{ name = "xdg-base-dirs", specifier = ">=6.0.2" },
|
{ name = "xdg-base-dirs", specifier = ">=6.0.2" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
@ -60,6 +62,15 @@ wheels = [
|
||||||
{ url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload-time = "2025-07-25T07:32:56.73Z" },
|
{ url = "https://files.pythonhosted.org/packages/e3/30/3c4d035596d3cf444529e0b2953ad0466f6049528a879d27534700580395/rich-14.1.0-py3-none-any.whl", hash = "sha256:536f5f1785986d6dbdea3c75205c473f970777b4a0d6c6dd1b696aa05a3fa04f", size = 243368, upload-time = "2025-07-25T07:32:56.73Z" },
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "toml"
|
||||||
|
version = "0.10.2"
|
||||||
|
source = { registry = "https://pypi.org/simple" }
|
||||||
|
sdist = { url = "https://files.pythonhosted.org/packages/be/ba/1f744cdc819428fc6b5084ec34d9b30660f6f9daaf70eead706e3203ec3c/toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f", size = 22253, upload-time = "2020-11-01T01:40:22.204Z" }
|
||||||
|
wheels = [
|
||||||
|
{ url = "https://files.pythonhosted.org/packages/44/6f/7120676b6d73228c96e17f1f794d8ab046fc910d781c8d151120c3f1569e/toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b", size = 16588, upload-time = "2020-11-01T01:40:20.672Z" },
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "xdg-base-dirs"
|
name = "xdg-base-dirs"
|
||||||
version = "6.0.2"
|
version = "6.0.2"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue