Skip to main content

Project description

argumento is a Python library for reading configuration from config files and command-line args.

Installation

pip install argumento

Usage

You can define configuration parameters both in config files and in command-line arguments.
Command-line args have higher priority: param values from command line overwrite values from config files.

Supported config file formats are:

  • yaml (.yaml, .yml)
  • toml (.toml)
  • json (.json)

Basic example

import argumento

cfg_filename = 'my_config.yaml'
args = argumento.create_parser(cfg_filename).parse()

my_config.yaml:

login: "my_login"
max_retries: 5
ports: [ 8000, 8001, 8002 ]
ratio: 0.5
nice_bool_false: False
nice_bool_true: True

command line:

<command> --login my_login --max_retries 5 --ports: [ 8000, 8001, 8002 ] \
--ratio 0.5 --nice_bool_false False --nice_bool_true True

ENV variable parsing

Supports parsing of ${ENV_VARIABLES} in strings.
Syntax: ${ENV_VARIABLE:type|default_value} or just ${ENV_VARIABLE} / ${ENV_VARIABLE:type} / ${ENV_VARIABLE|default_value}.
If possible ENV_VARIABLE will be resolved as python-valid code strings (with ast.literal_eval()) and typecast to one of:

  • int (e.g. "5" -> 5)
  • float ("5.0" -> 5.0)
  • bool ("True", "t", "yes", etc -> True)
  • str (to explicitly specify type, if needed)
    Resolving by ast.literal_eval() is useful to set:
  • list ("[1, 'true', 3.0]" -> [1, 'true', 3.0], according to python syntax)
  • dict ("{'a': 123, "b": 'qwe'}" -> {'a': 123, 'b': 'qwe'})
  • tuples
  • ... see ast.literal_eval() docs for more If type casting of ENV_VARIABLE fails, default_value will also try to be resolved as python-valid string and typecast.
    If both typecasts fail - ENV_VARIABLE will be resolved as is (to string).
    Hint: don't make typos in ENV_VARIABLE setup and there won't be any problems :)
    If ENV_VARIABLE is not set, default_value (string) will be returned.
    If default_value is also not provided, the '' (empty string) will be returned as default value.

Example config.yaml:

standalone_env: ${MAX_RETRIES|3}
embedded_env : 'my_name_is: ${LOGIN|admin}'
multiple_envs: '${ADDRESS}:${PORT|8000}'
list_like: [ '${PORT_1|8000}', '${PORT_2}', '${PORT_3}' ]
different_style:
  - '${PORT_1|8000}'
  - '${PORT_2}'
  - '${PORT_3}'
nested:
  here:
    we:
      go: ${DB_A_ADDRESS|localhost:2233}
just_a_var: 0.5

# typecasting examples
int_value: ${LENGTH|3}  # -> LENGTH (e.g. "10") will be resolved to integer value 10
float_value: ${TEMPERATURE}  # -> TEMPERATURE (e.g. "36.0") will be resolved to float value 36.0 
typecast_int: ${LENGTH:float}  # -> LENGTH (e.g. "10") will be resolved to float value 10.0
valid_list: ${PORTS|['default', 'goes', 'here']}  # -> "[1002, 'tennis', 1004.12]" -> [1002, 'tennis', 1004.12]
invalid_list_with_default: ${SPORTS|[1, 2]}  # -> "[football, 123]" -> [1, 2], since default is provided
invalid_list_without_default: ${SPORTS}  # -> "[football, 123]" -> '[football, 123]', string as default is not set
complex_string: '/path/${A}/${B}/folder' # A and B will be resolved, casted back to str and inserted into the string
wrong_type: ${VAR:wrong_type}  # will be resolved (as python code), but not casted (with warning about wrong_type)

Bool arguments

Note that bool args should be set in command line via 'nice' but non-canonical way.

Supported usage:

--nice_bool_false False --nice_bool_true True

or

--nice_bool_false false --nice_bool_true true

Not supported usage:

--feature / --no-feature style.

Required params not defined in config

If a parameter is required but is not set in config file, ?: followed by type name is used instead of a value:

login: "?:str"
max_retries: "?:int"
ratio: "?:float"
ports: "?:list[int]"
fractions: "?:list[float]"

Supported data types are:

  • str
  • int
  • float
  • list[int]
  • list[float]

Metadata

Release files for argumento 1.2.1

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

Source distribution (sdist)

Source distribution for argumento 1.2.1
File Size Uploaded
argumento-1.2.1.tar.gz 20.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for argumento 1.2.1
File Interpreter ABI Platform
argumento-1.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 40.3 kB

Release files / argumento-1.2.1.tar.gz

Download URL argumento-1.2.1.tar.gz
Size 20.9 kB
Tags Source
SHA-256 checksum
How to use checksums
b74ac4de54d0b134359f9c7487cfb8c98abfe4411bed64451abf81b0af1b3e55
BLAKE2b-256 checksum
How to use checksums
53fcdb0dfe9c1dbb53329db61973e18a3321126b2a5eeac562578b502bfae726
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.7.7

Release files / argumento-1.2.1-py3-none-any.whl

Download URL argumento-1.2.1-py3-none-any.whl
Size 19.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
6fe4e38a9cdbf17066fc23f3f6bb2e7aa4d9dbb6b9dfc7d66d532367c8515ac5
BLAKE2b-256 checksum
How to use checksums
fc64f4f785f66625b88e70080ce15ddd6052f28ca5b4e0b56644472ec5bac58d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.7.7

Release history Release notifications | RSS feed

This release

1.2.1 This release

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

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