jw-pkg/scripts/python-tools.sh
Jan Lindemann f27ffae5cd
python-tools.sh: Create empty line after import

The generated code doesn't pass "make check": It would like to see a newline after the import statement. Add that.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-06-01 20:14:45 +02:00

96 lines
1.5 KiB
Bash

#!/bin/bash
log()
{
echo "$myname: $*" >&2
}
fatal()
{
echo "$myname: Fatal: $*" >&2
exit 1
}
usage()
{
cat <<-EOT
usage $myname [-e sed-extract-command] [-m module] file.py ...
EOT
[ "$1" ] && exit $1
}
module_path()
{
if [ "$module" = "." ]; then
echo .$1
elif [ "$module" ]; then
echo $module.$1
else
echo $1
fi
}
cmd_create_init()
{
local import_submodules=0
local files="$*"
local del="-------------------------- generated by $myname"
echo "# >> $del >>"
echo "# ruff: noqa: E501"
echo "from pkgutil import extend_path"
echo ""
echo "__path__ = extend_path(__path__, __name__)"
local f
local -A seen=()
for f in $files; do
test -d $f && continue
local base=${f##*/}
base=${base%.py}
if [ "$sed_extract_command" ]; then
local type types=`sed "$sed_extract_command" $f`
for type in $types; do
echo "from `module_path $base` import $type as $type"
[[ -n "${seen[$type]+x}" ]] && fatal "Duplicate symbol: $type"
seen["$type"]=1
done
fi
done
if [ "$import_submodules" = 1 ]; then
for f in $files; do
[ -f $f/__init__.py ] && echo "import `module_path $f` as $f"
done
fi
echo "# << $del <<"
}
# --------------------- here we go
myname=`basename $0`
eval set -- `getopt -o 'he:m:' "$@"`
while [ "$1" != -- ]; do
case $1 in
-e)
sed_extract_command="$2"
shift
;;
-m)
module=$2
shift
;;
-h)
usage 0;;
*)
echo unknown argument $1
usage 1;;
esac
shift
done
shift
cmd=cmd_${1//-/_}
shift
eval $cmd $*