# configen
Automatically generates Structured Configs that can be used with hydra.utils.instantiate()
This is optional at two levels:
1. Structured Configs are optional, one can use Hydra without them.
2. One can manually code these dataclasses. The advantage of this tool is that it does the work automatically.
# Setup
Configen requires config file per project. The config indicates what classes to generate code for, where to put
the generated code etc.
Configen will suggest creating a config on the first run:
```
$ configen
[2020-08-14 12:06:11,359][configen.configen][ERROR] - Use --config-dir DIR.
If you have no config dir yet use the following command to create an initial config in the `conf` dir:
configen init_config_dir=conf
$ configen init_config_dir=conf
[2020-08-14 12:07:07,752][configen.configen][INFO] - Initializing config in 'conf'
```
This will generate a basic config similar to:
```yaml
$ cat conf/configen.yaml
configen:
# output directory
output_dir: ${hydra:runtime.cwd}/gen
header: |
# Generated by configen, do not edit.
# See https://github.com/facebookresearch/hydra/tree/master/tools/configen
# The directory of each module under output_dir
module_dir: '{{module_path}}/conf'
# list of modules to generate configs for
modules:
- name: configen.samples.user
# for each module, a list of classes
classes:
- User
```
Configen comes with a few samples [classes](configen/samples) that are being processed by the default config.
For example:
```python title="configen/samples/user.py"
class User:
def __init__(self, age: int, name: str):
self.age = age
self.name = name
```
Running configen with this config directory:
```
$ configen --config-dir conf
[2020-08-14 12:44:54,990][configen.configen][INFO] - configen.samples.user.User -> /home/omry/tmp/configen/gen/configen/samples/user/conf/User.py
```
Will result in a file `gen/configen/samples/user/conf/User.py` like:
```python
# Generated by configen, do not edit.
# See https://github.com/facebookresearch/hydra/tree/master/tools/configen
# fmt: off
# isort:skip_file
# flake8: noqa
from dataclasses import dataclass
from typing import *
from omegaconf import MISSING
@dataclass
class UserConf:
_target_: str = "configen.samples.user.User"
age: int = MISSING
name: str = MISSING
```
The generated code can be used by a Hydra application to instantiate the user object.
See the [example aplication](example/my_app.py).
Raw data
{
"_id": null,
"home_page": "https://github.com/predictive-analytics-lab/neoconfigen",
"name": "neoconfigen",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.9,<3.13",
"maintainer_email": "",
"keywords": "hydra,python",
"author": "Omry Yadan",
"author_email": "",
"download_url": "https://files.pythonhosted.org/packages/4a/ae/756f7dc083952ef94c89828c1f6c8ccdb77b97fbe671d7cd7ffebda0e1a5/neoconfigen-2.4.2.tar.gz",
"platform": null,
"description": "# configen\n\nAutomatically generates Structured Configs that can be used with hydra.utils.instantiate()\n\nThis is optional at two levels:\n1. Structured Configs are optional, one can use Hydra without them.\n2. One can manually code these dataclasses. The advantage of this tool is that it does the work automatically.\n\n# Setup\nConfigen requires config file per project. The config indicates what classes to generate code for, where to put\nthe generated code etc.\nConfigen will suggest creating a config on the first run:\n```\n$ configen \n[2020-08-14 12:06:11,359][configen.configen][ERROR] - Use --config-dir DIR.\nIf you have no config dir yet use the following command to create an initial config in the `conf` dir:\n configen init_config_dir=conf\n$ configen init_config_dir=conf\n[2020-08-14 12:07:07,752][configen.configen][INFO] - Initializing config in 'conf'\n```\n\nThis will generate a basic config similar to:\n```yaml\n$ cat conf/configen.yaml \nconfigen:\n # output directory\n output_dir: ${hydra:runtime.cwd}/gen\n\n header: |\n # Generated by configen, do not edit.\n # See https://github.com/facebookresearch/hydra/tree/master/tools/configen\n\n # The directory of each module under output_dir\n module_dir: '{{module_path}}/conf'\n\n # list of modules to generate configs for\n modules:\n - name: configen.samples.user\n # for each module, a list of classes\n classes:\n - User\n```\n\nConfigen comes with a few samples [classes](configen/samples) that are being processed by the default config.\nFor example:\n```python title=\"configen/samples/user.py\"\nclass User:\n def __init__(self, age: int, name: str):\n self.age = age\n self.name = name\n```\n\nRunning configen with this config directory:\n```\n$ configen --config-dir conf\n[2020-08-14 12:44:54,990][configen.configen][INFO] - configen.samples.user.User -> /home/omry/tmp/configen/gen/configen/samples/user/conf/User.py\n```\n\nWill result in a file `gen/configen/samples/user/conf/User.py` like:\n```python\n# Generated by configen, do not edit.\n# See https://github.com/facebookresearch/hydra/tree/master/tools/configen\n# fmt: off\n# isort:skip_file\n# flake8: noqa\n\nfrom dataclasses import dataclass\nfrom typing import *\n\nfrom omegaconf import MISSING\n\n\n@dataclass\nclass UserConf:\n _target_: str = \"configen.samples.user.User\"\n age: int = MISSING\n name: str = MISSING\n```\n\nThe generated code can be used by a Hydra application to instantiate the user object.\nSee the [example aplication](example/my_app.py).\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A fork of hydra-core's configen with extended type-compatibility.",
"version": "2.4.2",
"project_urls": {
"Homepage": "https://github.com/predictive-analytics-lab/neoconfigen",
"Repository": "https://github.com/predictive-analytics-lab/neoconfigen"
},
"split_keywords": [
"hydra",
"python"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "c0fa52f1f58d68f043f93e86e0e27bf8f323be1303b801b206936ebc530d283f",
"md5": "5c3c591a90a2e7eab1d6391c7e490bf0",
"sha256": "0059024f1558a2193d0b790514b17ffa727ea1eac90fd580b52ebccf5cc88ce9"
},
"downloads": -1,
"filename": "neoconfigen-2.4.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "5c3c591a90a2e7eab1d6391c7e490bf0",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.9,<3.13",
"size": 9410,
"upload_time": "2023-10-10T18:40:01",
"upload_time_iso_8601": "2023-10-10T18:40:01.980273Z",
"url": "https://files.pythonhosted.org/packages/c0/fa/52f1f58d68f043f93e86e0e27bf8f323be1303b801b206936ebc530d283f/neoconfigen-2.4.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "4aae756f7dc083952ef94c89828c1f6c8ccdb77b97fbe671d7cd7ffebda0e1a5",
"md5": "e5e3f39f5e10b06de9e1a416fb3a3b58",
"sha256": "b5644ecbb4b2961c1defab53ad0eaa201744e6303ed9aec32660bca52ffd0ba4"
},
"downloads": -1,
"filename": "neoconfigen-2.4.2.tar.gz",
"has_sig": false,
"md5_digest": "e5e3f39f5e10b06de9e1a416fb3a3b58",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.9,<3.13",
"size": 8078,
"upload_time": "2023-10-10T18:40:05",
"upload_time_iso_8601": "2023-10-10T18:40:05.095983Z",
"url": "https://files.pythonhosted.org/packages/4a/ae/756f7dc083952ef94c89828c1f6c8ccdb77b97fbe671d7cd7ffebda0e1a5/neoconfigen-2.4.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-10-10 18:40:05",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "predictive-analytics-lab",
"github_project": "neoconfigen",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "neoconfigen"
}