Skip to main content

A standardized configuration object for reference genome assemblies

Project description

yacman
Run pytests Test locking parallel codecov Code style: black Anaconda-Server Badge

Yacman is a YAML configuration manager. It provides some convenience tools for dealing with YAML configuration files.

Please see this Python notebook for features and usage instructions and this document for API documentation.

Upgrading guide

How to upgrade to yacman v1.0.0. Yacman v1 provides 2 feature upgrades:

  1. Constructors take the form of yacman.YAMLConfigManager.from_x(...) functions, to make it clearer how to create a new ym object.
  2. It separates locks into read locks and write locks, to allow mutliple simultaneous readers.

The v0.9.3 transition release has 3 versions of the basic yacman object, namely:

  • attmap-based version (YacAttMap)
  • non-attmap-but-mostly-compatible (YAMLConfigManager)
  • new future object (FutureYAMLConfigManager...), which is explicitly not backwards compatible with the attmap version.

In v1.0.0, FutureYAMLConfigManager will be renamed to YAMLConfigManager and the old stuff will be removed. Here's how to transition your code:

Use the FutureYAMLConfigManager in 0.9.3

  1. Import the FutureYAMLConfigManager

Change from:

from yacman import YAMLConfigManager

to

from yacman import FutureYAMLConfigManager as YAMLConfigManager

Once we switch from v0.9.3 to v1.X.X, you will need to switch back.

  1. Update any context managers to use write_lock or read_lock
from yacman import write_lock, read_lock

Change

with ym as locked_ym:
    locked_ym.write()

to

with write_lock(ym) as locked_ym:
    locked_ym.rebase()
    locked_ym.write()

In the new system, you must use rebase() before write() if you want to allow for multiple processes to possibly have written the file since you read it in.

More examples:

from yacman import FutureYAMLConfigManager as YAMLConfigManager
from yacman import read_lock, write_lock

data = {"my_list": [1,2,3], "my_int": 8, "my_str": "hello world!", "my_dict": {"nested_val": 15}}

ym = YAMLConfigManager(data)

ym["my_list"]
ym["my_int"]
ym["my_dict"]

# Use in a context manager to write to the file

ym["new_var"] = 15

# Use a write-lock, and rebase before writing to ensure you capture any changes since you loaded the file
with write(ym) as locked_ym:
    locked_ym.rebase()
    locked_ym.write()


# use a read lock to rebase -- this will replay any in-memory updates on top of whatever is re-read from the file
with read_lock(ym) as locked_ym:
    locked_ym.rebase()

# use a read lock to reset the in-memory object to whatever is on disk
with read_lock(ym) as locked_ym:
    locked_ym.reset()
  1. Update any constructors to use the from_{x} functions

You can no longer just create a YAMLConfigManager object directly; now you need to use the constructor helpers.

Examples:

from yacman import FutureYAMLConfigManager as YAMLConfigManager

data = {"my_list": [1,2,3], "my_int": 8, "my_str": "hello world!", "my_dict": {"nested_val": 15}}
file_path = "tests/data/full.yaml"
yaml_data = "myvar: myval"

yacman.YAMLConfigManager.from_yaml_file(file_path)
yacman.YAMLConfigManager.from_yaml_data(yaml_data)
yacman.YAMLConfigManager.from_obj(data)

In the past, you could load from a file and overwrite some attributes with a dict of variables, all from the constructor. Now it would is more explicit:

ym = yacman.YacMan.from_yaml_file(file_path)
ym.update_from_obj(data)

To exppand environment variables in values, use .exp.

ym.exp["text_expand_home_dir"]

From v0.9.3 (using future) to v1.X.X:

Switch back to:

from yacman import YAMLConfigManager

Demos

Some interactive demos

from yacman import FutureYAMLConfigManager as YAMLConfigManager
ym = yacman.YAMLConfigManager(entries=["a", "b", "c"])
ym.to_dict()
ym

print(ym.to_yaml())

ym = YAMLConfigManager(entries={"top": {"bottom": ["a", "b"], "bottom2": "a"}, "b": "c"})
ym
print(ym.to_yaml())

ym = YAMLConfigManager(filepath="tests/data/conf_schema.yaml")
print(ym.to_yaml())
ym

ym = YAMLConfigManager(filepath="tests/data/empty.yaml")
print(ym.to_yaml())

ym = YAMLConfigManager(filepath="tests/data/list.yaml")
print(ym.to_yaml())

ym = YAMLConfigManager(YAMLConfigManager(filepath="tests/data/full.yaml").exp)
print(ym.to_yaml())

ym = YAMLConfigManager(filepath="tests/data/full.yaml")
print(ym.to_yaml(expand=True))

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

yacman-0.9.5.tar.gz (25.4 kB view details)

Uploaded Source

Built Distribution

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

yacman-0.9.5-py3-none-any.whl (30.6 kB view details)

Uploaded Python 3

File details

Details for the file yacman-0.9.5.tar.gz.

File metadata

  • Download URL: yacman-0.9.5.tar.gz
  • Upload date:
  • Size: 25.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for yacman-0.9.5.tar.gz
Algorithm Hash digest
SHA256 8a5ab8287a6ad2f26b9726727c256dc5a0eefc297c5427755cc265ed61803faf
MD5 baf6924fb8c21552b6b81f95f894fe8b
BLAKE2b-256 724573cb3dbd07fb3b9279d12835bfa2d590293e0c2165e7b86a0a26436fd0b3

See more details on using hashes here.

Provenance

The following attestation bundles were made for yacman-0.9.5.tar.gz:

Publisher: python-publish.yml on databio/yacman

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file yacman-0.9.5-py3-none-any.whl.

File metadata

  • Download URL: yacman-0.9.5-py3-none-any.whl
  • Upload date:
  • Size: 30.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for yacman-0.9.5-py3-none-any.whl
Algorithm Hash digest
SHA256 51308b2b7d33dda36a02bc2e2f73a6920afc931fd6a9cd94b1ca84d818f412a5
MD5 e1a0f723463823e9ca8d6f8f5bcf6a8b
BLAKE2b-256 2ec75e1a2e89c32b5bc08873025555aaa5d75416e4876e252c3729f3ac8fb6f6

See more details on using hashes here.

Provenance

The following attestation bundles were made for yacman-0.9.5-py3-none-any.whl:

Publisher: python-publish.yml on databio/yacman

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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