ionelmc / python-hunter

Hunter is a flexible code tracing toolkit.
https://python-hunter.readthedocs.io/
BSD 2-Clause "Simplified" License
796 stars 46 forks source link

Walkthrough of unfamiliar module #35

Closed nadrimajstor closed 6 years ago

nadrimajstor commented 6 years ago

A cookbook example that would for a given module name create the report of all module's function calls including all argument names plus corresponding argument's and function's return values.

A real use-case: A newb (me) is for the first time looking at a module/script mkosi. There is a lot of options that would produce different results. Hopefully there are some sensible defaults. I would like to start with a walkthrough and see how it works. Here is an example of accomplishing this task using pytrace:

...si/mkosi     --> <module>()
...si/mkosi      <-- <module>(exception = ImportError: ImportError("No module named 'argcomplete'",))
...si/mkosi      --> OutputFormat()
...si/mkosi      <-- OutputFormat(return value = NoneType: None)
...si/mkosi      --> Distribution()
...si/mkosi      <-- Distribution(return value = NoneType: None)
...si/mkosi      --> PackageAction()
...si/mkosi      <-- PackageAction(return value = NoneType: None)
...si/mkosi      --> main()
...si/mkosi       --> load_args()
...si/mkosi        --> parse_args()
...si/mkosi         <-- parse_args(exception = NameError: NameError("name 'argcomplete' is not defined",))
...si/mkosi        <-- parse_args(return value = Namespace: Namespace(bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None,
             directory=None, distribution='centos', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None,
             nspawn_settings=None, output=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None,
             secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False))
...si/mkosi        --> load_defaults(args = Namespace: Namespace(bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None,
             directory=None, distribution='centos', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None,
             nspawn_settings=None, output=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None,
             secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False))
...si/mkosi         --> load_defaults_file(fname = str: 'mkosi.default', options = dict: {})
...si/mkosi          <-- load_defaults_file(exception = FileNotFoundError: FileNotFoundError(2, 'No such file or directory'))
...si/mkosi         <-- load_defaults_file(return value = NoneType: None)
...si/mkosi        <-- load_defaults(return value = NoneType: None)
...si/mkosi        --> find_nspawn_settings(args = Namespace: Namespace(bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None,
             directory=None, distribution='centos', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None,
             nspawn_settings=None, output=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None,
             secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False))
...si/mkosi        <-- find_nspawn_settings(return value = NoneType: None)
...si/mkosi        --> find_extra(args = Namespace: Namespace(bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None,
             directory=None, distribution='centos', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None,
             nspawn_settings=None, output=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None,
             secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False))
...si/mkosi        <-- find_extra(return value = NoneType: None)
ionelmc commented 6 years ago

So I've checked the mkosi thing, on Python 3 a filter like ~Q(kind="line"),~Q(module="six"),~Q(filename=""),stdlib=False would produce similar output, eg:

$ PYTHONHUNTER='~Q(kind="line"),~Q(module="six"),~Q(filename=""),stdlib=False' python mkosi
                                   mkosi:4     call      => <module>()
                                   mkosi:26    exception <! <module>: (<class 'ModuleNotFoundError'>, ModuleNotFoundError("No module named 'argcomplete'",), <traceback object at 0x7fbd0ac9be48>)
                                   mkosi:51    call      => OutputFormat()
                                   mkosi:57    return    <= OutputFormat: None
                                   mkosi:59    call      => Distribution()
                                   mkosi:66    return    <= Distribution: None
                                   mkosi:160   call      => _IOW(type=148, nr=9, size='int')
                                   mkosi:157   call         => _IOC(dir=1, type=148, nr=9, argtype='int')
                                   mkosi:159   return       <= _IOC: 1074041865
                                   mkosi:161   return    <= _IOW: 1074041865
                                   mkosi:2150  call      => PackageAction()
                                   mkosi:2151  return    <= PackageAction: None
                                   mkosi:3362  call      => main()
                                   mkosi:2722  call         => load_args()
                                   mkosi:2158  call            => parse_args()
                                   mkosi:2229  exception       <! parse_args: (<class 'NameError'>, NameError("name 'argcomplete' is not defined",), <traceback object at 0x7fbd0ac37408>)
                                   mkosi:2239  return       <= parse_args: Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution=None, encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False)
                                   mkosi:2572  call            => load_defaults(args=Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution=None, encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False))
                                   mkosi:2540  call               => load_defaults_file(fname='mkosi.default', options={})
                                   mkosi:2158  call                  => parse_args()
                                   mkosi:2229  exception             <! parse_args: (<class 'NameError'>, NameError("name 'argcomplete' is not defined",), <traceback object at 0x7fbd0ac429c8>)
                                   mkosi:2239  return             <= parse_args: Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution=None, encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False)
                                   mkosi:2373  call                  => process_setting(args=Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution=None, encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Distribution', key=None, value=None)
                                   mkosi:2391  return                <= process_setting: True
                                   mkosi:2373  call                  => process_setting(args=Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution=None, encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Distribution', key='Distribution', value='fedora')
                                   mkosi:2538  return                <= process_setting: True
                                   mkosi:2373  call                  => process_setting(args=Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Distribution', key='Release', value='27')
                                   mkosi:2538  return                <= process_setting: True
                                   mkosi:2373  call                  => process_setting(args=Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release='27', repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Output', key=None, value=None)
                                   mkosi:2443  return                <= process_setting: True
                                   mkosi:2373  call                  => process_setting(args=Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release='27', repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Output', key='Format', value='raw_squashfs')
                                   mkosi:2538  return                <= process_setting: True
                                   mkosi:2373  call                  => process_setting(args=Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format='raw_squashfs', packages=None, password=None, postinst_script=None, read_only=False, release='27', repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Output', key='Bootable', value='yes')
                                   mkosi:2363  call                     => parse_boolean(s='yes')
                                   mkosi:2366  return                   <= parse_boolean: True
                                   mkosi:2538  return                <= process_setting: True
                                   mkosi:2373  call                  => process_setting(args=Namespace(bmap=False, bootable=True, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format='raw_squashfs', packages=None, password=None, postinst_script=None, read_only=False, release='27', repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Packages', key=None, value=None)
                                   mkosi:2493  return                <= process_setting: True
                                   mkosi:2373  call                  => process_setting(args=Namespace(bmap=False, bootable=True, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format='raw_squashfs', packages=None, password=None, postinst_script=None, read_only=False, release='27', repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Packages', key='Packages', value='\narch-install-scripts\nbtrfs-progs\ndebootstrap\ndnf\ndosfstools\ngit\ngnupg\nsquashfs-tools\ntar\nveritysetup')
                                   mkosi:2538  return                <= process_setting: True
                                   mkosi:2570  return             <= load_defaults_file: {'Distribution': {'Distribution': 'fedora', 'Release': '27'}, 'Output': {'Format': 'raw_squashfs', 'Bootable': 'yes'}, 'Packages': {'Packages': ['arch-install-scripts', 'btrfs-progs', 'debootstrap', 'dnf', 'dosfstools', 'git', 'gnupg', 'squashfs-tools', 'tar', 'veritysetup']}}
                                   mkosi:2373  call               => process_setting(args=Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution=None, encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Distribution', key='Distribution', value='fedora')
                                   mkosi:2538  return             <= process_setting: True
                                   mkosi:2373  call               => process_setting(args=Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release=None, repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Distribution', key='Release', value='27')
                                   mkosi:2538  return             <= process_setting: True
                                   mkosi:2373  call               => process_setting(args=Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format=None, packages=None, password=None, postinst_script=None, read_only=False, release='27', repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Output', key='Format', value='raw_squashfs')
                                   mkosi:2538  return             <= process_setting: True
                                   mkosi:2373  call               => process_setting(args=Namespace(bmap=False, bootable=None, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format='raw_squashfs', packages=None, password=None, postinst_script=None, read_only=False, release='27', repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Output', key='Bootable', value='yes')
                                   mkosi:2363  call                  => parse_boolean(s='yes')
                                   mkosi:2366  return                <= parse_boolean: True
                                   mkosi:2538  return             <= process_setting: True
                                   mkosi:2373  call               => process_setting(args=Namespace(bmap=False, bootable=True, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format='raw_squashfs', packages=None, password=None, postinst_script=None, read_only=False, release='27', repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False), section='Packages', key='Packages', value=['arch-install-scripts', 'btrfs-progs', 'debootstrap', 'dnf', 'dosfstools', 'git', 'gnupg', 'squashfs-tools', 'tar', 'veritysetup'])
                                   mkosi:2538  return             <= process_setting: True
                                   mkosi:2585  return          <= load_defaults: None
                                   mkosi:2589  call            => find_nspawn_settings(args=Namespace(bmap=False, bootable=True, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format='raw_squashfs', packages=['arch-install-scripts', 'btrfs-progs', 'debootstrap', 'dnf', 'dosfstools', 'git', 'gnupg', 'squashfs-tools', 'tar', 'veritysetup'], password=None, postinst_script=None, read_only=False, release='27', repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False))
                                   mkosi:2593  return          <= find_nspawn_settings: None
                                   mkosi:2596  call            => find_extra(args=Namespace(bmap=False, bootable=True, build_dir=None, build_packages=None, build_script=None, build_sources=None, cache_path=None, checksum=False, cmdline=[], compress=False, default_path=None, directory=None, distribution='fedora', encrypt=None, esp_size=None, extra_trees=None, force_count=0, git_files=None, home_size=None, hostname=None, incremental=False, kernel_commandline=None, key=None, mirror=None, nspawn_settings=None, output=None, output_dir=None, output_format='raw_squashfs', packages=['arch-install-scripts', 'btrfs-progs', 'debootstrap', 'dnf', 'dosfstools', 'git', 'gnupg', 'squashfs-tools', 'tar', 'veritysetup'], password=None, postinst_script=None, read_only=False, release='27', repositories=None, root_size=None, secure_boot=False, secure_boot_certificate=None, secure_boot_key=None, sign=False, srv_size=None, swap_size=None, use_git_files=None, verb='build', verity=False, with_docs=False, with_network=False, with_tests=True, xz=False))
                                   mkosi:2597  return          <= find_extra: None
... blablabla ...
ionelmc commented 6 years ago

Note that ~ is a negation.

Anyway, the filter is long and cumbersome, but this kinda outlines another big difference in philosophy between hunter and pytrace - hunter is designed to be simple and reliable: avoid storage, have no/selfcontained dependencies and have CI/quality control (pytrace is so broken I'm really surprised you got it to run). Because of that it doesn't try to be very smart and second guess what you want - you're required to have the hands on the wheel, so to speak.

To put it differently: Hunter could have a brief=True option but it's hard to say what it should filter. Just the line events, everything from site-packages or just six, and what about the borked frames from the interpreter bootstrap?

nadrimajstor commented 6 years ago

I'm sorry if we might misunderstood each other. I did not want to ask for any changes. For my use-case

PYTHONHUNTER='~Q(kind="line"),~Q(module="six"),~Q(filename=""),stdlib=False' python3 some_script

is a perfect replacement for pytrace. Thank you.

nadrimajstor commented 6 years ago

BTW, why does return part become dedented if its after exception?

ionelmc commented 6 years ago

It was a buggy bug. Fixed now. This is the new part in the cookbook: https://python-hunter.readthedocs.io/en/latest/cookbook.html#walkthrough