Skip to main content

Managing complex configurations any other way would be highly illogical...

Quick Start · Documentation · Examples · Releases

About

spock is a framework that helps users easily define, manage, and use complex parameter configurations within Python applications. It lets you focus on the code you need to write instead of re-implementing boilerplate code such as creating ArgParsers, reading configuration files, handling dependencies, implementing type validation, maintaining traceability, etc.

spock configurations are normal python classes that are decorated with @spock. It supports inheritance, dynamic class dependencies, loading/saving configurations from/to multiple markdown formats, automatically generating CLI arguments, and hierarchical configuration by composition.

💥 Why You Should Use Spock 💥

  • Simple organized parameter definitions (i.e. a single line)
  • Type checked (static-eqsue) & frozen parameters (i.e. fail early during long ML training runs)
  • Complex parameter dependencies made simple (i.e. @spock class with a parameter that is an Enum of other @spock classes)
  • Fully serializable parameter state(s) (i.e. exactly reproduce prior runtime parameter configurations)
  • Automatic type checked CLI generation w/o argparser boilerplate (i.e click and/or typer for free!)
  • Easily maintain parity between CLIs and Python APIs (i.e. single line changes between CLI and Python API definitions)
  • Unified hyper-parameter definitions and interface (i.e. don't write different definitions for Ax or Optuna)
  • Resolver that supports value definitions from reference to other defined variables, environmental variables, dynamic template re-injection, and encryption of sensitive values

Key Features

  • Simple Declaration: Type checked parameters are defined within a @spock decorated class. Supports required/optional and automatic defaults.
  • Easily Managed Parameter Groups: Each class automatically generates its own object within a single namespace.
  • Parameter Inheritance: Classes support inheritance (w/ lazy evaluation of inheritance/dependencies) allowing for complex configurations derived from a common base set of parameters.
  • Complex Types: Nested Lists/Tuples, List/Tuples of Enum of @spock classes, List of repeated @spock classes
  • Multiple Configuration File Types: Configurations are specified from YAML, TOML, or JSON files.
  • Hierarchical Configuration: Compose from multiple configuration files via simple include statements.
  • Command-Line Overrides: Quickly experiment by overriding a value with automatically generated command line arguments.
  • Immutable: All classes are frozen preventing any misuse or accidental overwrites (to the extent they can be in Python).
  • Tractability and Reproducibility: Save runtime parameter configuration to YAML, TOML, or JSON with a single chained command (with extra runtime info such as Git info, Python version, machine FQDN, etc). The saved markdown file can be used as the configuration input to reproduce prior runtime configurations.
  • Hyper-Parameter Tuner Addon: Provides a unified interface for defining hyper-parameters (via @spockTuner decorator) that supports various tuning/algorithm backends (currently: Optuna, Ax)
  • S3 Addon: Automatically detects s3:// URI(s) and handles loading and saving spock configuration files when an active boto3.Session is passed in (plus any additional S3Transfer configurations)

Quick Install

The basic install and [s3] extension require Python 3.7+ while the [tune] extension requires Python 3.8+

Base w/ S3 Extension w/ Hyper-Parameter Tuner
pip install spock-config pip install spock-config[s3] pip install spock-config[tune]

News/Releases

See Releases for more information.

Recent Changes

August 30th, 2023

  • Removed Python 3.6 support as it was causing dependency hell
  • Collection of bugfixes

Jan 12th, 2023

  • Added support for resolving value definitions from references to other defined variables with the following syntax,${spock.var:SpockClass.defined_variable}
  • Added support for new fundamental types: (1) file: this is an overload of a str that verifies file existence and (r/w) access (2) directory: this is an overload of a str that verifies directory existence, creation if not existing, and (r/w) access
  • Deprecated support for List of repeated @spock decorated classes.
  • Collection of bugfixes

May 17th, 2022

  • Added support for resolving value definitions from environmental variables with the following syntax, ${spock.env:name, default}
  • Added .inject annotation that will write back the original env notation to the saved output
  • Added the .crypto annotation which provides a simple way to hide sensitive environmental variables while still maintaining the written/loadable state of the spock config

March 17th, 2022

  • Added support for typing.Callable types (includes advanced types such as List[List[Callable]])
  • Added support for typing.Dict types with type checking for types of both keys and values (includes advanced types such as Dict[str, Tuple[Callable, Callable]])
  • Added support for post init hooks that allow for validation on parameters defined within @spock decorated classes. Additionally, added some common validation check to utils (within, greater than, less than, etc.)
  • Updated unit tests to support Python 3.10

January 26th, 2022

  • Added evolve support to the underlying SpockBuilder class. This provides functionality similar to the underlying attrs library (attrs.evolve). evolve() creates a new Spockspace instance based on differences between the underlying declared state and any passed in instantiated @spock decorated classes.

Original Implementation

spock was originally developed by the Artificial Intelligence Center of Excellence at Fidelity Investments by Nicholas Cilfone and Siddharth Narayanan

Metadata

Release files for spock-config 3.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spock-config 3.1.0
File Size Uploaded Provenance Actions
spock-config-3.1.0.tar.gz 102.0 kB Without provenance Details for spock-config-3.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for spock-config 3.1.0
File Interpreter ABI Platform Actions
spock_config-3.1.0-py3-none-any.whl Python 3 none any Details for spock_config-3.1.0-py3-none-any.whl

Total release size: 203.3 kB

Release files / spock-config-3.1.0.tar.gz

Download URL spock-config-3.1.0.tar.gz
Size 102.0 kB
Tags Source
SHA-256 checksum
How to use checksums
9cc28dd0fa7a4f8315b3a3a6af2d3e6f70adb7e796be9c9e26f289d47f8bc432
BLAKE2b-256 checksum
How to use checksums
a52c2b3115d1735e8e2bd774ce930afdb1e02398643cf6188a830a8c31635261
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.13

Release files / spock_config-3.1.0-py3-none-any.whl

Download URL spock_config-3.1.0-py3-none-any.whl
Size 101.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6429670675502fa6eb85a7dda995956ccb4d8cee105461e001b352ff54c74cff
BLAKE2b-256 checksum
How to use checksums
d4d2a87282e7436d91fb42212d179b390cd65c996afb54ae7c5acf8bcabb9c91
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.10.13

Security for spock-config 3.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

3.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page