Caution
pkl-python
is currently major version v0
, and breaking changes will happen between versions.
Python binding for Apple's Pkl language.
pip install pkl-python
Here's how you can start using pkl-python
to load a PKL module:
import pkl
config = pkl.load("path/to/pkl/example_module.pkl")
config = pkl.loads("a: Int = 1 + 1")
As Python is a dynamic language, codegen is not strictly necessary. However, codegen lets you expect contents of pkl files within Python modules.
pkl-gen-python path/to/pkl/example_module.pkl
- (codgen) pip binary installation
- (codgen) gatherer depth-first ordering
- (codgen) clean up code
import pkl
config = pkl.load("./tests/types.pkl")
config = pkl.load("./tests/types.pkl", expr="datasize")
config = pkl.load(None, module_text="a: Int = 1 + 1")
config = pkl.load("./tests/types.pkl", debug=True)
For details on the parameters, refer
It is possible to add module or resource or module readers:
from typing import List
from dataclasses import dataclass
import pkl
from pkl import (
ModuleReader, ResourceReader, PathElement,
ModuleSource, PreconfiguredOptions, PklError,
)
class TestModuleReader(ModuleReader):
def read(self, url) -> str:
return "foo = 1"
def list_elements(self, url: str) -> List[PathElement]:
return [PathElement("foo.pkl", False)]
opts = PreconfiguredOptions(
moduleReaders=[TestModuleReader("customfs", True, True, True)]
)
opts.allowedModules.append("customfs:")
config = pkl.load("./tests/pkls/myModule.pkl", evaluator_options=opts)
While in pre-release they are subject to change.
Pkl type | TypeScript type |
---|---|
Null | None |
Boolean | bool |
String | str |
Int | int |
Int8 | int |
Int16 | int |
Int32 | int |
UInt | int |
UInt8 | int |
UInt16 | int |
UInt32 | int |
Float | float |
Number | float |
List | list |
Listing | list |
Map | dict |
Mapping | dict |
Set | set |
Pair | pkl.Pair |
Dynamic | dataclasses.dataclass |
DataSize | pkl.DataSize |
Duration | pkl.Duration |
IntSeq | pkl.IntSeq |
Class | dataclasses.dataclass |
TypeAlias | typing |
Any | typing.Any |
Unions (A|B|C) | typing.Union[A|B|C] |
Regex | pkl.Regex |
Contributions are welcome! If you'd like to contribute, please fork the repository and submit a pull request. For major changes, please open an issue first to discuss what you would like to change.
PKL is released under the MIT License. See the LICENSE file for more details.
For support or to contribute, please contact [email protected] or visit our GitHub repository to report issues or submit pull requests.