Fixes #1875: parse-args requires values to be representable as Hy models
* Update argument spec parse logic of parse-args function. * Update test case of parse-args function. * Update document of parse-args function. * Describe the change in NEWS file.
This commit is contained in:
parent
1112472f00
commit
2b40dea54d
8
NEWS.rst
8
NEWS.rst
@ -1,5 +1,13 @@
|
|||||||
.. default-role:: code
|
.. default-role:: code
|
||||||
|
|
||||||
|
Unreleased
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Other Breaking Changes
|
||||||
|
------------------------------
|
||||||
|
* `parse-args` is no longer implemented with `eval`; so e.g. you should
|
||||||
|
now say `:type int` instead of `:type 'int`.
|
||||||
|
|
||||||
0.18.0
|
0.18.0
|
||||||
==============================
|
==============================
|
||||||
|
|
||||||
|
@ -804,7 +804,7 @@ may be a list of keyword arguments to pass to the
|
|||||||
.. code-block:: hy
|
.. code-block:: hy
|
||||||
|
|
||||||
=> (parse-args [["strings" :nargs "+" :help "Strings"]
|
=> (parse-args [["strings" :nargs "+" :help "Strings"]
|
||||||
["-n" "--numbers" :action "append" :type 'int :help "Numbers"]]
|
["-n" "--numbers" :action "append" :type int :help "Numbers"]]
|
||||||
["a" "b" "-n" "1" "-n" "2"]
|
["a" "b" "-n" "1" "-n" "2"]
|
||||||
:description "Parse strings and numbers from args")
|
:description "Parse strings and numbers from args")
|
||||||
Namespace(numbers=[1, 2], strings=['a', 'b'])
|
Namespace(numbers=[1, 2], strings=['a', 'b'])
|
||||||
|
@ -401,7 +401,17 @@ constructor."
|
|||||||
(import argparse)
|
(import argparse)
|
||||||
(setv parser (argparse.ArgumentParser #** parser-args))
|
(setv parser (argparse.ArgumentParser #** parser-args))
|
||||||
(for [arg spec]
|
(for [arg spec]
|
||||||
(eval `(.add-argument parser ~@arg)))
|
(setv positional-arguments []
|
||||||
|
keyword-arguments []
|
||||||
|
value-of-keyword? False)
|
||||||
|
(for [item arg]
|
||||||
|
(if value-of-keyword?
|
||||||
|
(.append (get keyword-arguments -1) item)
|
||||||
|
(if (keyword? item)
|
||||||
|
(.append keyword-arguments [(name item)])
|
||||||
|
(.append positional-arguments item)))
|
||||||
|
(setv value-of-keyword? (and (not value-of-keyword?) (keyword? item))))
|
||||||
|
(parser.add-argument #* positional-arguments #** (dict keyword-arguments)))
|
||||||
(.parse-args parser args))
|
(.parse-args parser args))
|
||||||
|
|
||||||
(setv EXPORTS
|
(setv EXPORTS
|
||||||
|
@ -480,9 +480,10 @@ result['y in globals'] = 'y' in globals()")
|
|||||||
|
|
||||||
(defn test-parse-args []
|
(defn test-parse-args []
|
||||||
"NATIVE: testing the parse-args function"
|
"NATIVE: testing the parse-args function"
|
||||||
|
; https://github.com/hylang/hy/issues/1875
|
||||||
(setv parsed-args (parse-args [["strings" :nargs "+" :help "Strings"]
|
(setv parsed-args (parse-args [["strings" :nargs "+" :help "Strings"]
|
||||||
["-n" "--numbers" :action "append" :type 'int :help "Numbers"]]
|
["-n" :action "append" :type int :help "Numbers" "--numbers"]]
|
||||||
["a" "b" "-n" "1" "-n" "2"]
|
["a" "b" "-n" "1" "--numbers" "2"]
|
||||||
:description "Parse strings and numbers from args"))
|
:description "Parse strings and numbers from args"))
|
||||||
(assert-equal parsed-args.strings ["a" "b"])
|
(assert-equal parsed-args.strings ["a" "b"])
|
||||||
(assert-equal parsed-args.numbers [1 2]))
|
(assert-equal parsed-args.numbers [1 2]))
|
||||||
|
Loading…
Reference in New Issue
Block a user