""" fritzcall.py Module to inspect the FritzBox phone API. CLI interface. This module is part of the FritzConnection package. https://github.com/kbr/fritzconnection License: MIT (https://opensource.org/licenses/MIT) Author: Klaus Bremer """ from ..core.exceptions import FritzAuthorizationError from ..lib.fritzcall import FritzCall from . utils import ( get_cli_arguments, get_instance, print_header, print_common_exception_message ) def report_calls(fc, arguments): print('FritzCall:') days = arguments.days num = arguments.num if not days else None if arguments.type == 'in': calls = fc.get_received_calls(num=num, days=days) elif arguments.type == 'out': calls = fc.get_out_calls(num=num, days=days) elif arguments.type == 'missed': calls = fc.get_missed_calls(num=num, days=days) else: calls = fc.get_calls(num=num, days=days) call_type = arguments.type if arguments.type else 'all' print('List of calls:', call_type, '\n') type_ = 'type' number = 'number' time = 'date/time' duration = 'duration' print(f'{type_:>6} {number:24}{time:>18}{duration:>12}\n') for call in calls: print(call) print() def dial_number(fc, number): print(f'dialing number: {number}') fc.dial(number) print('dialing done, please wait for signal.') def add_arguments(parser): parser.add_argument('-n', '--num', nargs='?', default=None, const=None, help='max number of calls in the call-list') parser.add_argument('-d', '--days', nargs='?', default=None, const=None, help='number of days to look back for calls.') parser.add_argument('-t', '--type', nargs='?', default=None, const=None, help='type of calls: [in|out|missed]') parser.add_argument('-c', '--call', nargs='?', default=None, const=None, help='phone number to call') def execute(arguments): fc = get_instance(FritzCall, arguments) if arguments.call: dial_number(fc, arguments.call) else: print_header(fc) report_calls(fc, arguments) def main(): arguments = get_cli_arguments(add_arguments) try: execute(arguments) except FritzAuthorizationError as err: print_common_exception_message(err) if __name__ == '__main__': main()