-
-
Notifications
You must be signed in to change notification settings - Fork 25
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
3 changed files
with
80 additions
and
60 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,92 +1,93 @@ | ||
"""Roll some dice with GNOLL.""" | ||
|
||
import sys | ||
import argparse | ||
import sys | ||
|
||
import gnoll | ||
|
||
|
||
def parse_cmdline_args(args): | ||
"""Extract values from the commandline | ||
@param args - the arguments from the commandline (excluding the python3 call) | ||
""" | ||
p = argparse.ArgumentParser( | ||
description=__doc__, | ||
usage='python3 -m gnoll [options] EXPR', | ||
add_help=False) | ||
p = argparse.ArgumentParser(description=__doc__, | ||
usage="python3 -m gnoll [options] EXPR", | ||
add_help=False) | ||
|
||
p.add_argument( | ||
'EXPR', | ||
nargs='+', | ||
help='a dice expression to evaluate' | ||
'(multiple arguments will be joined with spaces)' | ||
) | ||
|
||
g = p.add_argument_group('main options') | ||
g.add_argument( | ||
'-h', | ||
'--help', | ||
action='help', | ||
help='show this help message and exit' | ||
) | ||
g.add_argument( | ||
'-b', | ||
'--breakdown', | ||
action='store_true', | ||
help='show a breakdown into individual dice' | ||
) | ||
g.add_argument( | ||
'--no-builtins', | ||
action='store_true', | ||
help='disable built-in macros' | ||
"EXPR", | ||
nargs="+", | ||
help="a dice expression to evaluate" | ||
"(multiple arguments will be joined with spaces)", | ||
) | ||
|
||
g = p.add_argument_group('debugging options') | ||
g.add_argument( | ||
'-v', | ||
'--verbose', | ||
action='store_true', | ||
help='enable verbosity' | ||
) | ||
g = p.add_argument_group("main options") | ||
g.add_argument("-h", | ||
"--help", | ||
action="help", | ||
help="show this help message and exit") | ||
g.add_argument( | ||
'--keep-temp-file', | ||
action='store_true', | ||
help="don't delete the created temporary file" | ||
"-b", | ||
"--breakdown", | ||
action="store_true", | ||
help="show a breakdown into individual dice", | ||
) | ||
g.add_argument( | ||
'--mock', | ||
metavar='TYPE', | ||
"-n", | ||
"--times", | ||
metavar="N", | ||
type=int, | ||
help='mocking type' | ||
default=1, | ||
help="execute the entire expression N times", | ||
) | ||
g.add_argument("--no-builtins", | ||
action="store_true", | ||
help="disable built-in macros") | ||
|
||
g = p.add_argument_group("debugging options") | ||
g.add_argument("-v", | ||
"--verbose", | ||
action="store_true", | ||
help="enable verbosity") | ||
g.add_argument( | ||
'--mock-const', | ||
metavar='N', | ||
type=int, | ||
default=3, | ||
help='mocking constant' | ||
"--keep-temp-file", | ||
action="store_true", | ||
help="don't delete the created temporary file", | ||
) | ||
g.add_argument("--mock", metavar="TYPE", type=int, help="mocking type") | ||
g.add_argument("--mock-const", | ||
metavar="N", | ||
type=int, | ||
default=3, | ||
help="mocking constant") | ||
|
||
a = p.parse_args(args) | ||
a.EXPR = ' '.join(a.EXPR) | ||
a.EXPR = " ".join(a.EXPR) | ||
return a | ||
|
||
|
||
def main(EXPR, no_builtins, **kwargs): | ||
def main(EXPR, times, no_builtins, **kwargs): | ||
""" | ||
The entry point for gnoll when called via `python -m gnoll` | ||
@param EXPR - the expression | ||
@param times - number of times to execute | ||
@param no_builtins - a flag to disable builtins | ||
@param **kwargs - other key word arguments to be passed to gnoll.roll | ||
""" | ||
_, [[result]], breakdown = gnoll.roll( | ||
EXPR, | ||
builtins=not no_builtins, | ||
**kwargs) | ||
if breakdown: | ||
print(breakdown[0], '-->', result) | ||
else: | ||
print(result) | ||
for _ in range(times): | ||
_, [[result]], breakdown = gnoll.roll(EXPR, | ||
builtins=not no_builtins, | ||
**kwargs) | ||
yield (breakdown[0], "-->", result) if breakdown else (result, ) | ||
|
||
|
||
def main_with_args(args): | ||
"""Parse the commandline args and then run `main` | ||
@param args - the arguments from the commandline (excluding the python3 call) | ||
""" | ||
yield from main(**vars(parse_cmdline_args(args))) | ||
|
||
|
||
if __name__ == '__main__': | ||
main(**vars(parse_cmdline_args(sys.argv[1:]))) | ||
if __name__ == "__main__": | ||
for line in main_with_args(sys.argv[1:]): | ||
print(*line) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
import gnoll.__main__ | ||
|
||
m = lambda *x: list(gnoll.__main__.main_with_args(x)) | ||
|
||
|
||
def test_cli(): | ||
[[r]] = m("1d4") | ||
assert isinstance(r, int) | ||
|
||
[[(die1, die2), a, r]] = m("2d4", "--breakdown") | ||
assert all((isinstance(x, int) for x in [die1, die2, r])) | ||
assert a == "-->" | ||
|
||
executions = m("4d6kh3", "+", "1", "--breakdown", "--times", "6", | ||
"--no-builtins") | ||
assert len(executions) == 6 | ||
for (die1, die2, die3, die4), a, r in executions: | ||
assert all((isinstance(x, int) for x in [die1, die2, die3, die4, r])) | ||
assert a == "-->" |