Skip to content

Commit 81d1fbe

Browse files
committed
Add bash completion for opensips-event
1 parent 1a1cf29 commit 81d1fbe

File tree

2 files changed

+73
-3
lines changed

2 files changed

+73
-3
lines changed

completion.sh

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
# OpenSIPS CLI autocompletion
21
function _opensips-mi-complete() {
32
local cur prev opts completed_args
43
COMPREPLY=()
@@ -28,3 +27,33 @@ function _opensips-mi-complete() {
2827
}
2928

3029
complete -F _opensips-mi-complete opensips-mi
30+
31+
function _opensips-event-complete() {
32+
local cur prev opts completed_args
33+
COMPREPLY=()
34+
35+
cur="${COMP_WORDS[COMP_CWORD]}"
36+
37+
prev="${COMP_WORDS[COMP_CWORD-1]}"
38+
39+
completed_args=""
40+
if [[ "${prev:0:1}" != "-" ]]; then
41+
if [[ $COMP_CWORD -ge 2 ]]; then
42+
completed_args="${COMP_WORDS[@]:1:COMP_CWORD-2}"
43+
if [[ "${COMP_WORDS[COMP_CWORD-2]:0:1}" == "-" ]]; then
44+
completed_args="$completed_args $prev"
45+
fi
46+
fi
47+
opts="$(opensips-event $completed_args -bc)"
48+
else
49+
while [[ "${prev:0:1}" == "-" ]]; do
50+
prev="${prev:1}"
51+
done
52+
completed_args="${COMP_WORDS[@]:1:COMP_CWORD-2}"
53+
opts="$(opensips-event -bc $prev)"
54+
fi
55+
56+
COMPREPLY=( $(compgen -W "$opts" -- "$cur") )
57+
}
58+
59+
complete -F _opensips-event-complete opensips-event

opensips/event/__main__.py

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,10 +57,17 @@
5757
type=str,
5858
help='OpenSIPS MI FIFO Reply Directory')
5959

60+
parser.add_argument('-bc', '--bash-complete',
61+
type=str,
62+
nargs='?',
63+
const='',
64+
help='Provide options for bash completion')
65+
6066
event = parser.add_argument_group('event')
6167

6268
event.add_argument('event',
6369
type=str,
70+
nargs='?',
6471
help='OpenSIPS Event Name')
6572

6673
event.add_argument('-T', '--transport',
@@ -101,9 +108,43 @@ def main():
101108
elif args.type == 'datagram':
102109
mi = OpenSIPSMI('datagram',
103110
datagram_ip=args.ip,
104-
datagram_port=args.port)
111+
datagram_port=args.port,
112+
timeout=0.1)
105113
else:
106-
print(f'Unknown type: {args.type}')
114+
if not args.bash_complete:
115+
print(f'Unknown type: {args.type}')
116+
sys.exit(1)
117+
118+
if args.bash_complete is not None:
119+
if args.bash_complete != '':
120+
if len(args.bash_complete) > 1:
121+
last_arg = '--' + args.bash_complete
122+
else:
123+
last_arg = '-' + args.bash_complete
124+
125+
for action in parser._actions:
126+
if last_arg in action.option_strings:
127+
if action.choices:
128+
print(' '.join(action.choices))
129+
break
130+
sys.exit(0)
131+
else:
132+
options = []
133+
for action in parser._actions:
134+
for opt in action.option_strings:
135+
options.append(opt)
136+
print(' '.join(options))
137+
try:
138+
response = mi.execute('events_list', [])
139+
events = response.get("Events", [])
140+
event_names = [event["name"] for event in events]
141+
print(' '.join(event_names))
142+
sys.exit(0)
143+
except Exception as e:
144+
sys.exit(1)
145+
146+
if args.event is None:
147+
print('Event name is required')
107148
sys.exit(1)
108149

109150
hdl = OpenSIPSEventHandler(mi, args.transport,

0 commit comments

Comments
 (0)