Skip to main content

Read and write Valve's KeyValues3 format

Project description

keyvalues3

KeyValues3 is a Valve developed data format. It is similar in structure to JSON, but supports binary encodings, versioning, and data annotations. The text syntax also has some minor ergonomic improvements (support for single- and multi-line comments, trailing commas, and multi-line strings.)

Usage

import keyvalues3 as kv3
bt_config = kv3.read("tests/documents/bt_config.kv3")

>>> bt_config.keys()
dict_keys(['default', 'low', 'fair', 'normal', 'tough', 'hard', 'very_hard', 'expert', 'elite'])

>>> bt_config["elite"]["reaction_time"]
0.12
# The root value is most of the time a dict
>>> type(bt_config.value)
<class 'dict'>

>>> bt_config.original_encoding
Encoding(name='text', version=UUID('e21c7f3c-8a33-41c5-9977-a76d3a32aa0d'))

>>> bt_config.format
Format(name='generic', version=UUID('7412167c-06e9-4698-aff2-e63eb59037e7'))

# To write it back
>>> kv3.write(bt_config, "tests/documents/bt_config.kv3", use_original_encoding=True)

# Write to a stream
>>> import sys
>>> kv3.write({"key": [1,2,3]}, sys.stdout)
<!-- kv3 encoding:text:version{e21c7f3c-8a33-41c5-9977-a76d3a32aa0d} format:generic:version{7412167c-06e9-4698-aff2-e63eb59037e7} -->
{
        key = [1, 2, 3]
}

Install PyPI version

pip install keyvalues3

Supported encodings

Encoding 👩‍💻 Read 📖 Write ✍️
Text UTF-8 Yes ✔️ Yes ✔️
Text UTF-8 Headerless Yes ✔️ Yes ✔️
Binary Uncompressed No ⛔ Yes ✔️
Binary LZ4 No ⛔ Yes ✔️
Binary (Other newer) No ⛔ No ⛔

Using dataclasses

Dataclasses (marked with @dataclass) are also supported for serialization (uses asdict())

@dataclass
class RenderMeshFile(_Node):  # _Node defines _class, name, notes, and children (+ helper methods)
    filename: resourcepath = ""
    import_translation: list[float] = field(default_factory=lambda: [0, 0, 0])
    import_rotation: list[float] = field(default_factory=lambda: [0, 0, 0])
    import_scale: float = 1.0
    align_origin_x_type: str = "None"
    align_origin_y_type: str = "None"
    align_origin_z_type: str = "None"
    parent_bone: namelink = ""
    import_filter: dict = field(
        default_factory=lambda:dict(
            exclude_by_default = False,
            exception_list = [  ]
        )
    )

You can find more ModelDoc dataclasses here.

Credits

Valve Corporation® for making KeyValues3.
ValveResourceFormat for reverse engineering the binary formats.

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

keyvalues3-0.2.tar.gz (57.3 kB view details)

Uploaded Source

Built Distribution

keyvalues3-0.2-py3-none-any.whl (12.7 kB view details)

Uploaded Python 3

File details

Details for the file keyvalues3-0.2.tar.gz.

File metadata

  • Download URL: keyvalues3-0.2.tar.gz
  • Upload date:
  • Size: 57.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.3

File hashes

Hashes for keyvalues3-0.2.tar.gz
Algorithm Hash digest
SHA256 df207f16c0b782930180221436b1243590473df0be785cdf19e102a744365888
MD5 f9121d5659c704bf9b82b60db965c2fa
BLAKE2b-256 c68126374f2539e2857ca6cda4d16be98e61e8144c2f9bda092d7955943edd6a

See more details on using hashes here.

File details

Details for the file keyvalues3-0.2-py3-none-any.whl.

File metadata

  • Download URL: keyvalues3-0.2-py3-none-any.whl
  • Upload date:
  • Size: 12.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: python-requests/2.32.3

File hashes

Hashes for keyvalues3-0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 1404c55b8a46f16d7081063bdeda573ba2424a4e3eb8db0a4da198cdb0e3ca5a
MD5 fbd193865534e8ff48175748784095cc
BLAKE2b-256 7adc1e8bdb78723ffb85f19a46e9cf1f0c7bba06da90121daf427c7934321206

See more details on using hashes here.

Supported by

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