Skip to main content

Python library for Apple's PKL.

Project description

[!CAUTION]

THIS LIBRARY IS CURRENTLY PRE-RELEASE

pkl-python is currently major version v0, and breaking changes will happen between versions.

pkl-python - Pkl Bindings for Python

Python binding for Apple's Pkl language.

Getting Started

Installation

pip install pkl-python

Basic Usage

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")

Code Generation

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

TODO

  • (codgen) pip binary installation
  • (codgen) gatherer depth-first ordering
  • (codgen) clean up code

Advanced Features

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)

pkl.load Parameters Detail

For details on the parameters, refer

Custom Readers

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)

Appendix

Type Mappings

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

Contributing

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.

License

PKL is released under the MIT License. See the LICENSE file for more details.

Contact

For support or to contribute, please contact jwyang0213@gmail.com or visit our GitHub repository to report issues or submit pull requests.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pkl_python-0.1.18.tar.gz (23.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pkl_python-0.1.18-py3-none-any.whl (21.1 kB view details)

Uploaded Python 3

File details

Details for the file pkl_python-0.1.18.tar.gz.

File metadata

  • Download URL: pkl_python-0.1.18.tar.gz
  • Upload date:
  • Size: 23.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for pkl_python-0.1.18.tar.gz
Algorithm Hash digest
SHA256 2f39ece2c3b6e1787a2e62dea38672216bba2c5b49027a484a7265efd0ff9b95
MD5 1413ff74503486a90b2e81f9a327b1b7
BLAKE2b-256 bcbe0d94563b4d093542f4cb2762a47f0d3986812c03c9fa5d85f49527900209

See more details on using hashes here.

File details

Details for the file pkl_python-0.1.18-py3-none-any.whl.

File metadata

  • Download URL: pkl_python-0.1.18-py3-none-any.whl
  • Upload date:
  • Size: 21.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.25

File hashes

Hashes for pkl_python-0.1.18-py3-none-any.whl
Algorithm Hash digest
SHA256 c241e86c096ed3e0934a9fa4e09f0737ebc850d73cddbb7e85b133ffae831c59
MD5 4c12153ac8897d1dfa3156acf91c2d72
BLAKE2b-256 29a2736eb9a6c06f403a285b66643ddce59a33cac34d1b7c5f2cc91b3ef3699d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page