#!/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 "__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 $*