cmds.projects.CmdCreateFile: Add --field-separator option
List values in a rendered template are joined with a fixed separator of ",\n" (comma plus newline), and there is no way to change that. Templates sometimes want a different separator, e.g. a plain newline or a single-line comma-separated list. Add a --field-separator option that controls how list values are joined in the rendered output. %n expands to a newline, and the default remains ",\n" for both formats. render_tmpl() applies the separator to the rendered template, while render_pyright() rejects any other value: the built-in pyrightconfig.json template is a fixed JSON document, and no alternative separator is supported for it. Update the help output test expectation accordingly. Assisted-by: unsloth/Qwen3.8-27B-GGUF:Q4_K_M with pi.dev v0.85.1 Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
7f9f65153f
commit
1349665c39
4 changed files with 76 additions and 8 deletions
|
|
@ -337,6 +337,7 @@ usage: jw-pkg.py projects create-file [-h] --format {pyright,tmpl}
|
|||
[--template-name TEMPLATE_NAME]
|
||||
[--quote] [-f KEY=VALUE]
|
||||
[--field-keys FIELD_KEYS]
|
||||
[--field-separator FIELD_SEPARATOR]
|
||||
module
|
||||
|
||||
Generate a file from project metadata
|
||||
|
|
@ -365,6 +366,9 @@ options:
|
|||
not specified here is an error, and not passing one
|
||||
makes the respective field go away from the rendering
|
||||
output (default: None)
|
||||
--field-separator FIELD_SEPARATOR
|
||||
Field separator. %n expands to newline. Default value
|
||||
depends on --format (default: None)
|
||||
============= Running: jw-pkg.py -t ../../../.. --log-level info projects create-pkg-config --help
|
||||
usage: jw-pkg.py projects create-pkg-config [-h] [-F PROJECT_DESCR_FILE]
|
||||
[-d DESCRIPTION] [-n NAME]
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
TOPDIR = ../../../../../../../..
|
||||
|
||||
include $(TOPDIR)/make/proj.mk
|
||||
include $(JWBDIR)/make/py-run.mk
|
||||
|
||||
all:
|
||||
|
||||
test: run
|
||||
25
test/unit/python/jw/pkg/cmds/projects/CmdCreateFile/test.py
Normal file
25
test/unit/python/jw/pkg/cmds/projects/CmdCreateFile/test.py
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
from jw.pkg.cmds.projects.CmdCreateFile import CmdCreateFile
|
||||
|
||||
# __format_separator() is a private method that does not use self, so an
|
||||
# uninitialised instance is a sufficient receiver for the bound method
|
||||
inst = CmdCreateFile.__new__(CmdCreateFile)
|
||||
fmt = getattr(inst, '_CmdCreateFile__format_separator')
|
||||
|
||||
# -- __format_separator --
|
||||
|
||||
# A None separator falls back to the format's default
|
||||
assert fmt(None, ',\n') == ',\n'
|
||||
|
||||
# %n expands to a newline, wherever it appears in the separator
|
||||
assert fmt('%n', ',\n') == '\n'
|
||||
assert fmt(',%n', '\n') == ',\n'
|
||||
assert fmt('a%n b', '') == 'a\n b'
|
||||
|
||||
# Several %n expand independently
|
||||
assert fmt('%n%n', '') == '\n\n'
|
||||
|
||||
# Anything that is not %n passes through untouched
|
||||
assert fmt('%', '') == '%'
|
||||
assert fmt('%x', '') == '%x'
|
||||
|
||||
print('All CmdCreateFile tests passed')
|
||||
Loading…
Reference in a new issue