Metadata-Version: 2.1
Name: tcfg
Version: 0.4.6
Summary: Typed dataclass like configuration objects
Project-URL: Homepage, https://github.com/Tired-Fox/tcfg
Project-URL: Documentation, https://tired-fox.github.io/tcfg
Author-email: Tired Fox <zboehm104@gmail.com>
License-Expression: MIT
License-File: LICENSE
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Requires-Python: >=3.9
Requires-Dist: pyyaml>=6
Requires-Dist: saimll
Requires-Dist: toml>=0.10.2
Provides-Extra: all
Requires-Dist: pyyaml; extra == 'all'
Requires-Dist: toml; extra == 'all'
Provides-Extra: toml
Requires-Dist: toml; extra == 'toml'
Provides-Extra: yaml
Requires-Dist: pyyaml; extra == 'yaml'
Description-Content-Type: text/markdown

# tcfg

```python
from tcfg import cfg, Option

@cfg.json('cfg.json')
class Config:
  # year must be a string. It has a default value of '2023'
  year = '2023' 
  
  # load must be a boolean. It has a default value of true
  load = true 
  
@cfg.toml('cfg.toml')
class Config2:
  # year must be a string. Default to ''
  year = str
  
  # load must be a boolean. Default to false
  load = bool 
 
# Any config class will save to the specified file path unless overridden.
# This includes config classes that are in other config classes.
# This means you can have one master config object in your code that uses many config files.
@cfg.yaml('nested.tml')
class Nested:
  # Must be a bool. Defaults to false
  enabled = false
  
  # Must be an int. Defaults to 8081
  port = 8081 
  
  # Can specify multiple specific options.
  scope = Option('public', 'private', default='private') 
  
  # Must be a list
  # Literals are defaults and types are used for valid element types. Literal types are also used in element types.
  extensions = ['reload', dict]
  
  options = {
    # wildcard type used for validation of extra values not specified as a key in this dict
    '*': dict, 
    'open': false,
    # can have recursive nesting
    'deep_nesting': {
      'random': int 
    }
  }
 
@cfg.yaml('cfg.yml')
class Config3:
  nested = Nested # nested is a sub/nested config section
```
