This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
laforge gerrit-no-reply at lists.osmocom.orglaforge has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-cbc/+/22396 )
Change subject: cbc-apitool.py: Generalize, make parameters configurable
......................................................................
cbc-apitool.py: Generalize, make parameters configurable
Do away with most of the hard-coded defaults and allow user to specify
a variety of parameters via the command line. Also, start to use
argparse subparsers for better usability
Change-Id: Ib7b8121676bef9310f219affc6f3cc76b6986b2a
---
M contrib/cbc-apitool.py
1 file changed, 99 insertions(+), 72 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-cbc refs/changes/96/22396/1
diff --git a/contrib/cbc-apitool.py b/contrib/cbc-apitool.py
index 1b68386..c7ebcfa 100755
--- a/contrib/cbc-apitool.py
+++ b/contrib/cbc-apitool.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# (C) 2020 by Harald Welte <laforge at osmocom.org>
+# (C) 2020-2021 by Harald Welte <laforge at osmocom.org>
#
# SPDX-License-Identifier: MIT
#
@@ -25,18 +25,89 @@
if verbose:
print("POST %s (%s)" % (url, str(js)))
resp = requests.post(url, json=js)
+ if verbose:
+ print("-> %s" % (resp))
if not resp.ok:
print("POST failed")
+ return resp
def rest_delete(suffix, js = None):
url = build_url(suffix)
if verbose:
print("DELETE %s (%s)" % (url, str(js)))
resp = requests.delete(url, json=js)
+ if verbose:
+ print("-> %s" % (resp))
if not resp.ok:
print("DELETE failed " + str(resp))
+ return resp
+def do_create_cbs(args):
+ js = {
+ 'cbe_name': "cbc_apitool",
+ 'category': "normal",
+ 'repetition_period': args.repetition_period,
+ 'num_of_bcast': args.num_of_bcast,
+ 'scope': {
+ 'scope_plmn': { }
+ },
+ 'smscb_message': {
+ 'message_id': args.msg_id,
+ 'serial_nr': {
+ 'serial_nr_decoded': {
+ 'geo_scope': "plmn_wide",
+ 'msg_code': args.msg_code,
+ 'update_nr': args.update_nr
+ }
+ },
+ 'payload': {
+ 'payload_decoded': {
+ 'character_set': "gsm",
+ #'language': 'en',
+ 'data_utf8': args.payload_data_utf8,
+ #'data_utf8': "Mahlzeit1 Mahlzeit2 Mahlzeit3 Mahlzeit4 Mahlzeit5 Mahlzeit6 Mahlzeit7 Mahlzeit8"
+ #'data_utf8': "Mahlzeit1 Mahlzeit2 Mahlzeit3 Mahlzeit4 Mahlzeit5 Mahlzeit6 Mahlzeit7 Mahlzeit8 Mahlzeit9 Mahlzeit10 Mahlzeti11 Mahlzeit12 Mahlzeit13 Mahlzeit14 Mahlzeit15 Mahlzeit16 Mahlzeit17 Mahlzeit18 Mahlzeit19 Mahlzeit20 Mahlzeit21 Mahlzeit22 Mahlzeit23 Mahlzeit24 Mahlzeit25 Mahlzeit26 Mahlzeit27 Mahlzeit28"
+ }
+ }
+ }
+ }
+ rest_post("/message", js);
+
+def do_create_etws(args):
+ js = {
+ 'cbe_name': "cbc_apitool",
+ 'category': "normal",
+ 'repetition_period': args.repetition_period,
+ 'num_of_bcast': args.num_of_bcast,
+ 'scope': {
+ 'scope_plmn': { }
+ },
+ 'smscb_message': {
+ 'message_id': args.msg_id,
+ 'serial_nr': {
+ 'serial_nr_decoded': {
+ 'geo_scope': "plmn_wide",
+ 'msg_code': args.msg_code,
+ 'update_nr': args.update_nr
+ }
+ },
+ 'payload': {
+ 'payload_etws': {
+ 'warning_type': {
+ 'warning_type_decoded': 'earthquake'
+ },
+ 'emergency_user_alert': True,
+ 'popup_on_display': True
+ }
+ }
+ }
+ }
+ rest_post("/message", js);
+
+
+def do_delete(args):
+ rest_delete("/message/%u" % (args.msg_id))
def main(argv):
global server_port, server_host, verbose
@@ -46,83 +117,39 @@
parser.add_argument("-p", "--port", help="TCP port to connect to", default=12345)
parser.add_argument("-v", "--verbose", help="increase output verbosity", action='count', default=0)
- group = parser.add_mutually_exclusive_group()
- group.add_argument("-c", "--create-cbs", type=int, nargs=1, metavar=('msg_id'))
- group.add_argument("-e", "--create-etws", type=int, nargs=1, metavar=('msg_id'))
- group.add_argument("-d", "--delete", type=int, nargs=1, metavar=('msg_id'))
+ subparsers = parser.add_subparsers(required=True)
- args = parser.parse_args()
+ parser_c_cbs = subparsers.add_parser('create-cbs', help='Create a new CBS message')
+ parser_c_cbs.add_argument("--msg-id", type=int, help='Message Identifier', required=True)
+ parser_c_cbs.add_argument("--msg-code", type=int, help='Message Code', default=768)
+ parser_c_cbs.add_argument("--update-nr", type=int, help='Update Number', default=0)
+ parser_c_cbs.add_argument("--repetition-period", type=int, help='Repetition Period', default=5)
+ parser_c_cbs.add_argument("--num-of-bcast", type=int, help='Number of Broadcasts', default=999)
+ parser_c_cbs.add_argument("--payload-data-utf8", type=str, help='Payload Data in UTF8', required=True)
+ parser_c_cbs.set_defaults(func=do_create_cbs)
+
+ parser_c_etws = subparsers.add_parser('create-etws', help='Create a new ETWS message')
+ parser_c_etws.add_argument("--msg-id", type=int, help='Message Identifier', required=True)
+ parser_c_etws.add_argument("--msg-code", type=int, help='Message Code', default=768)
+ parser_c_etws.add_argument("--update-nr", type=int, help='Update Number', default=0)
+ parser_c_etws.add_argument("--repetition-period", type=int, help='Repetition Period', default=5)
+ parser_c_etws.add_argument("--num-of-bcast", type=int, help='Number of Broadcasts', default=999)
+ parser_c_etws.set_defaults(func=do_create_etws)
+
+ parser_delete = subparsers.add_parser('delete', help='Delete a message')
+ parser_delete.add_argument("--msg-id", type=int, help='Message Identifier', required=True)
+ parser_delete.set_defaults(func=do_delete)
+
+ argv = sys.argv
+ if len(sys.argv) == 1:
+ argv = ['-h']
+ args = parser.parse_args(argv)
server_host = args.host
server_port = args.port
verbose = args.verbose
- if args.create_cbs:
- js = {
- 'cbe_name': "cbc_apitool",
- 'category': "normal",
- 'repetition_period': 5,
- 'num_of_bcast': 888,
- 'scope': {
- 'scope_plmn': { }
- },
- 'smscb_message': {
- 'message_id': int(args.create_cbs[0]),
- 'serial_nr': {
- 'serial_nr_decoded': {
- 'geo_scope': "plmn_wide",
- 'msg_code': 768,
- 'update_nr': 0
- }
- },
- 'payload': {
- 'payload_decoded': {
- 'character_set': "gsm",
- #'language': 'en',
- #'data_utf8': "Mahlzeit!"
- 'data_utf8': "Mahlzeit1 Mahlzeit2 Mahlzeit3 Mahlzeit4 Mahlzeit5 Mahlzeit6 Mahlzeit7 Mahlzeit8"
- #'data_utf8': "Mahlzeit1 Mahlzeit2 Mahlzeit3 Mahlzeit4 Mahlzeit5 Mahlzeit6 Mahlzeit7 Mahlzeit8 Mahlzeit9 Mahlzeit10 Mahlzeti11 Mahlzeit12 Mahlzeit13 Mahlzeit14 Mahlzeit15 Mahlzeit16 Mahlzeit17 Mahlzeit18 Mahlzeit19 Mahlzeit20 Mahlzeit21 Mahlzeit22 Mahlzeit23 Mahlzeit24 Mahlzeit25 Mahlzeit26 Mahlzeit27 Mahlzeit28"
- }
- }
- }
- }
- rest_post("/message", js);
-
- elif args.create_etws:
- js = {
- 'cbe_name': "cbc_apitool",
- 'category': "normal",
- 'repetition_period': 5,
- 'num_of_bcast': 999,
- 'scope': {
- 'scope_plmn': { }
- },
- 'smscb_message': {
- 'message_id': int(args.create_etws[0]),
- 'serial_nr': {
- 'serial_nr_decoded': {
- 'geo_scope': "plmn_wide",
- 'msg_code': 768,
- 'update_nr': 0
- }
- },
- 'payload': {
- 'payload_etws': {
- 'warning_type': {
- 'warning_type_decoded': 'earthquake'
- },
- 'emergency_user_alert': True,
- 'popup_on_display': True
- }
- }
- }
- }
- rest_post("/message", js);
-
- elif args.delete:
- rest_delete("/message/%u" % (args.delete[0]))
- else:
- print("No operation?!");
+ args.func(args)
if __name__ == "__main__":
--
To view, visit https://gerrit.osmocom.org/c/osmo-cbc/+/22396
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-cbc
Gerrit-Branch: master
Gerrit-Change-Id: Ib7b8121676bef9310f219affc6f3cc76b6986b2a
Gerrit-Change-Number: 22396
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <laforge at osmocom.org>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20210123/95b74620/attachment.htm>