Easily parse arbitrary arguments from the command line without dependencies
Project description
minydra ๐ฆ
Minimal Python command-line parser inspired by Facebook's Hydra.
Easily parse arbitrary arguments from the command line without dependencies:
Usage
from minydra.parser import Parser
if __name__ == "__main__":
parser = Parser(
verbose=0, # print received args
allow_overwrites=False, # allow repeating args in the command-line
warn_overwrites=True, # warn repeating args if they are allowed
parse_env=True, # get environment variable
warn_env=True, # warn if an environment variable is specified but not found
)
args = parser.args.pretty_print().resolve().pretty_print() # notice .resolve() transforms dotted.keys into nested dicts
import minydra
from minydra.dict import MinyDict
@minydra.parse_args(verbose=0, allow_overwrites=False) # Parser's init args work here
def main(args: MinyDict) -> None:
args.resolve().pretty_print()
if __name__ == "__main__":
main()
Parsing
- Simple strings are parsed to
float
andint
automatically. - A single keyword will be interpreted as a positive flag.
- A single keyword starting with
-
will be interpreted as a negative flag. - If
parse_env
isTrue
, environment variables are evaluated.
$ python decorator.py outdir=$HOME/project save -log learning_rate=1e-4 batch_size=64
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ batch_size : 64 โ
โ learning_rate : 0.0001 โ
โ log : False โ
โ outdir : /Users/victor/project โ
โ save : True โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
- dotted keys will be resolved to nested dictionary keys:
$ python decorator.py server.conf.port=8000
โญโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ server โ
โ conf โ
โ port : 8000 โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
- Using
ast.literal_eval(value)
,minydra
will try and parse more complex values for arguments as lists or dicts. Those should be specified as strings:
$ python examples/decorator.py layers="[1, 2, 3]" norms="{'conv': 'batch', 'epsilon': 1e-3}"
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ layers : [1, 2, 3] โ
โ norms : {'conv': 'batch', 'epsilon': 0.001} โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
MinyDict
Minydra's args are a custom lightweight wrapper around native dict
which allows for dot access (args.key
), resolving dotted keys into nested dicts and pretty printing sorted keys in a box with nested dicts indented. If a key does not exist, it will not fail, rather return None (as dict.get(key, None)
).
a MinyDict
inherits from dict
so usual methods work .keys()
, .items()
etc.
In [1]: from minydra.dict import MinyDict
In [2]: args = MinyDict({"foo": "bar", "yes.no.maybe": "idontknow"}).pretty_print()
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ foo : bar โ
โ yes.no.maybe : idontknow โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
In [3]: args.resolve().pretty_print()
โญโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฎ
โ foo : bar โ
โ yes โ
โ no โ
โ maybe : idontknow โ
โฐโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโฏ
In [4]: "foo" in args
Out[4]: True
In [5]: "rick" in args
Out[5]: False
In [6]: args.morty is None
Out[6]: True
In [7]: args.items()
Out[7]: dict_items([('foo', 'bar'), ('yes', {'no': {'maybe': 'idontknow'}})])
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
File details
Details for the file minydra-0.1.0-py3-none-any.whl
.
File metadata
- Download URL: minydra-0.1.0-py3-none-any.whl
- Upload date:
- Size: 9.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/50.3.2 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.7.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 54c30360ae33a85e2620b5839e9348cabda387570f1a2ab12eb71183da343534 |
|
MD5 | c1380dc1f46529508b43c713729d28fb |
|
BLAKE2b-256 | 763b13ba27c006714231d30d3cec43943a1d56a2a5176737ddeeff48d05d6587 |