Metadata-Version: 2.1
Name: fejao-config-parser
Version: 0.0.3
Summary: A Python package for parsing configuration from various sources such as files, environment variables, and command-line arguments.
Home-page: UNKNOWN
Author: fejao
License: UNKNOWN
Platform: UNKNOWN
Description-Content-Type: text/markdown
Requires-Dist: argparse (>=1.4.0)
Requires-Dist: configparser (>=5.0.0)
Requires-Dist: pyaml-env (>=1.0.0)
Requires-Dist: pydantic (>=2.0.0)
Requires-Dist: tomli (>=2.2.1)

# fejao-config-parser

This is a package for setting up the variables that you need to you on your project from a list of dictionaries.

I was tired of everytime that I needed to set a project that should have input/variables to be set from a configuration file, environment variables or from terminal to write this code again and again. Then the unit-test , lint, pep. And so on and on...

I hope that you also find this tiredsome work not needed anymore for using this package.

## To Do
This package at the moment it's not finished yet, just trying to publish on pypi.org at the moment
- [] Finish README_PACKAGE.md file (The one to be publish on pypi.org)
- [] Add lint tests
- [] Add pep tests
- [] Add the uni-test to pypi
- [] Document the code (for generating the mkdocs)
- [] Add the package code to git
- [] Add CI-CD for testing + building + publishing
- [] Something else that for sure I forgot to put on this list

## Installing
For using this package you need to install it with:
```bash
pip install fejao-config-parser
```

You can import it to your code with:
```python
from fejao-config-parser import my_config
```

## Configuration

### Structure
You need to set a list of dictionaries such as:
```python
example_vaviables = [
  {
    <VARIABLE_1_CONFIGURATION>
  },
  {
    <VARIABLE_2_CONFIGURATION>
  },
  ...
  ...
  ...
  {
    <VARIABLE_N_CONFIGURATION>
  }
]
```

### Variable dictionary entry
Dictionary configuration keys for parsing the variable
- **name**
  - The name of the variable that will be accessed at your project
  - This key is **required** to be set.
- **type**
  - The type of this variable to be set, it will type-cast it as the type set here.
  - This key is **required** to be set.
  - Possible type of variables:
    - **string**
    - **bool**
    - **int**
    - **float**
    - **list**
    - **dict**
- **default**
  - The default value of the variable to be set if any other methods were parsed.
  - This key is **required** to be set.
- **env_name**
  - The name of the environment variable that should be read.
  - This key is **NOT required** to be set.
- **terminal_help**
  - The name of the environment variable that should be read.
  - This key is **NOT required** to be set.
- **terminal_name**
  - The variable name to be read from terminal. Example: *example_string*, it can be parsed at the terminal like *--example_string <VAR_VALUE>*
  - This key is **NOT required** to be set.
- **terminal_name_short**
  - The variable short name to be read from terminal. Example: *es*, it can be parsed at the terminal like *-es <VAR_VALUE>*
  - This key is **NOT required** to be set.


### Example
```python
example_variables = [
    {
      "name": "example_string",
      "type": "string",
      "default": "default_string_value",
      "env_name": "EXAMPLE_STRING",
      "terminal_help": "Example of a string terminal variable.",
      "terminal_name": "example_string",
      "terminal_name_short": "es",
    },
    {
      "name": "example_bool",
      "type": "bool",
      "default": False,
      "terminal_help": "Example of a boolean terminal variable.",
      "terminal_name": "example_bool",
      "terminal_name_short": "eb",
    },
    {
      "name": "example_int",
      "type": "int",
      "default": 42,
      "env_name": "EXAMPLE_INT",
    },
    {
      "name": "example_float",
      "type": "float",
      "default": 4.2,
    },
    {
      "name": "example_list",
      "type": "list",
      "default": ["1", "2", "3"],
      "env_name": "EXAMPLE_LIST",
      "terminal_help": "Example of a list terminal variable.",
      "terminal_name": "example_list",
      "terminal_name_short": "el",
    },
    {
      "name": "example_dictionary",
      "type": "dict",
      "default": {"key1": "value1", "key2": "value2"},
      "env_name": "EXAMPLE_DICTIONARY",
      "terminal_help": "Example of a dictionary terminal variable.",
      "terminal_name": "example_dictionary",
      "terminal_name_short": "ed",
    },
]

```

## Usage
For calling the **my_config** function the possible keys are:
- **config**
  - The list of dictionaries to be set as variables.
  - This key is **required** to be set.
- **config_file**
  - The path of the configuration file to be used for reading the variables values.
  - This key is **NOT required** to be set.
  - Type of files that can be parsed:
    - **yaml**
    - **json**
    - **toml**
    - **ini**
      - Values should be set at the **[default]** section
      - Still don't know how till this date people keep using *ini* files.
- **description**
  - Description of you project when running on terminal with the '--help' output.
  - This key is **NOT required** to be set.
- **debug**
  - Boolean of setting up the output in terminal from the variables that were set using the package.
  - This key is **NOT required** to be set.

### Example
```python
config = my_config(
  config=example_variables,
  config_file="/tmp/foo.yaml",
  description="My project is AMAZING and not done with vibe-coding",
  debug=True
)
```

### Accessing the variables
For accessing the variables is easy as:
```python
example_variables = [
    {
      "name": "example_string",
      "type": "string",
      "default": "default_string_value",
      "env_name": "EXAMPLE_STRING",
    }
]
config = my_config(config=example_variables)

print(f"example_string: {config.example_string}")
---> default_string_value
```

## Links
- [git repository](https://gitlab.com/fejao/config_parser)



