[![codecov](https://codecov.io/gh/maxme1/lazycon/branch/master/graph/badge.svg)](https://codecov.io/gh/maxme1/lazycon)
[![pypi](https://img.shields.io/pypi/v/lazycon?logo=pypi&label=PyPi)](https://pypi.org/project/lazycon/)
![License](https://img.shields.io/github/license/maxme1/lazycon)
[![PyPI - Downloads](https://img.shields.io/pypi/dm/lazycon)](https://pypi.org/project/lazycon/)
![GitHub branch checks state](https://img.shields.io/github/checks-status/maxme1/lazycon/master)
Easy config files in pure Python!
What you can do directly in your configs:
- define constants
- define functions
- use import statements
- call functions and apply arithmetic operations
- a static read-only scope
- static checking: cycles detection, undefined variables detection
# Install
```shell
pip install lazycon
```
# Features
## Basic
Let's define a config file `example.config` and see what it can do
```python
# define constants
num_steps = 100
database_table = 'user_data'
# or more complex structures
parameters = {
'C': 10,
'metric': 'roc_auc',
}
values_to_try = [0, 1, 2, 3, 4]
# you can use and call builtins
some_range = list(range(100))
# or even comprehensions!
squares = [i ** 2 for i in range(20)]
```
Now let's load our config from python
```python
from lazycon import load
config = load('example.config')
print(config.database_table)
# 'user_data'
```
Need to change an existing config? No problem!
```python
from lazycon import load
config = load('example.config')
config.update(
database_table='customer_data',
some_range=[1, 3, 5],
)
config.dump('updated.config')
```
## Advanced
Python-based configs can do so much more! Let's create another `advanced.config`:
```python
# combine config entries
x = 1
y = 2
z = x + y
# define lambdas
callback = lambda value: 1 if value == 0 else (1 / value)
# or more complex functions
def strange_normalize(a, b):
temp = a ** 2 + b ** 2
return a / temp, b / temp
```
You can import from other python libraries:
```python
import numpy as np
from math import sqrt
const = np.pi / np.e
proportions = sqrt(2)
```
Or even other configs!
```python
# import from `example.config` defined above
from .example import *
extended_values_to_try = values_to_try + [101, 102]
```
# Contribute
Just get the project from GitHub and modify it how you please!
```shell
git clone https://github.com/maxme1/lazycon.git
cd lazycon
pip install -e .
```
Raw data
{
"_id": null,
"home_page": "https://github.com/maxme1/lazycon",
"name": "lazycon",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.6",
"maintainer_email": "",
"keywords": "config,lazy,interpreter",
"author": "Max",
"author_email": "max@ira-labs.com",
"download_url": "https://files.pythonhosted.org/packages/7d/da/b88ddfaa356cfec61f88496d1451d4740fc5e50911d24950af9fc3ad16c5/lazycon-0.6.3.tar.gz",
"platform": null,
"description": "[![codecov](https://codecov.io/gh/maxme1/lazycon/branch/master/graph/badge.svg)](https://codecov.io/gh/maxme1/lazycon)\n[![pypi](https://img.shields.io/pypi/v/lazycon?logo=pypi&label=PyPi)](https://pypi.org/project/lazycon/)\n![License](https://img.shields.io/github/license/maxme1/lazycon)\n[![PyPI - Downloads](https://img.shields.io/pypi/dm/lazycon)](https://pypi.org/project/lazycon/)\n![GitHub branch checks state](https://img.shields.io/github/checks-status/maxme1/lazycon/master)\n\nEasy config files in pure Python!\n\nWhat you can do directly in your configs:\n\n- define constants\n- define functions\n- use import statements\n- call functions and apply arithmetic operations\n- a static read-only scope\n- static checking: cycles detection, undefined variables detection\n\n# Install\n\n```shell\npip install lazycon\n```\n\n# Features\n\n## Basic\n\nLet's define a config file `example.config` and see what it can do\n\n```python\n# define constants\nnum_steps = 100\ndatabase_table = 'user_data'\n\n# or more complex structures\nparameters = {\n 'C': 10,\n 'metric': 'roc_auc',\n}\nvalues_to_try = [0, 1, 2, 3, 4]\n\n# you can use and call builtins\nsome_range = list(range(100))\n# or even comprehensions!\nsquares = [i ** 2 for i in range(20)]\n```\n\nNow let's load our config from python\n\n```python\nfrom lazycon import load\n\nconfig = load('example.config')\nprint(config.database_table)\n# 'user_data'\n```\n\nNeed to change an existing config? No problem!\n\n```python\nfrom lazycon import load\n\nconfig = load('example.config')\nconfig.update(\n database_table='customer_data',\n some_range=[1, 3, 5],\n)\nconfig.dump('updated.config')\n```\n\n## Advanced\n\nPython-based configs can do so much more! Let's create another `advanced.config`:\n\n```python\n# combine config entries\nx = 1\ny = 2\nz = x + y\n\n# define lambdas\ncallback = lambda value: 1 if value == 0 else (1 / value)\n\n\n# or more complex functions\ndef strange_normalize(a, b):\n temp = a ** 2 + b ** 2\n return a / temp, b / temp\n```\n\nYou can import from other python libraries:\n\n```python\nimport numpy as np\nfrom math import sqrt\n\nconst = np.pi / np.e\nproportions = sqrt(2)\n```\n\nOr even other configs!\n\n```python\n# import from `example.config` defined above\nfrom .example import *\n\nextended_values_to_try = values_to_try + [101, 102]\n```\n\n# Contribute\n\nJust get the project from GitHub and modify it how you please!\n\n```shell\ngit clone https://github.com/maxme1/lazycon.git\ncd lazycon\npip install -e .\n```\n\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Easy config files in pure Python",
"version": "0.6.3",
"project_urls": {
"Download": "https://github.com/maxme1/lazycon/archive/v0.6.3.tar.gz",
"Homepage": "https://github.com/maxme1/lazycon"
},
"split_keywords": [
"config",
"lazy",
"interpreter"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7ddab88ddfaa356cfec61f88496d1451d4740fc5e50911d24950af9fc3ad16c5",
"md5": "cd2041e69cdefea03df83caf005832c8",
"sha256": "112eb2c323e46487c374fd8cc89ebc6cddf4d0172677919fc0eb0e6f928b27de"
},
"downloads": -1,
"filename": "lazycon-0.6.3.tar.gz",
"has_sig": false,
"md5_digest": "cd2041e69cdefea03df83caf005832c8",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.6",
"size": 17276,
"upload_time": "2023-06-15T17:44:45",
"upload_time_iso_8601": "2023-06-15T17:44:45.447737Z",
"url": "https://files.pythonhosted.org/packages/7d/da/b88ddfaa356cfec61f88496d1451d4740fc5e50911d24950af9fc3ad16c5/lazycon-0.6.3.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-06-15 17:44:45",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "maxme1",
"github_project": "lazycon",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "lazycon"
}