Skip to main content

tec

Tools to inspect python objects

To install: pip install tec

Examples

Counting imported names

Quickly (tec.import_counting)

modules_imported is a generator of module names from obj. It uses string parsing, so is not as accurate as some other methods, but is fast and flexible, and doesn't require actually running any of the code analyzed.

>>> from tec import modules_imported
>>> import os.path  # single module
>>> list(modules_imported(os.path))  # list of names in the order they were found
['os', 'sys', 'stat', 'genericpath', 'genericpath', 'pwd', 'pwd', 're', 're']
>>> import os  # package with several modules
>>> from collections import Counter
>>> Counter(modules_imported(os, only_base_name=True)).most_common()  #doctest: +ELLIPSIS
[('nt', 5), ('posix', 4), ... ('warnings', 1), ('subprocess', 1)]

Accurately (tec.imports)

When accuracy matters more than speed, tec.imports parses the code with the standard library's ast, so import-looking strings, comments and line continuations can't fool it. Each import comes back as an ImportInfo (name, filename, lineno, level).

>>> from tec import imports_in_code, count_imports
>>> [imp.name for imp in imports_in_code("import os\nfrom json import dumps")]
['os', 'json.dumps']
>>> count_imports(some_package_or_folder).most_common(3)  # doctest: +SKIP
[('os', 12), ('dol', 7), ('re', 5)]

count_imports (and imports_under_folder) take a folder path, a module object, a package, or an __init__.py path; what gets counted is decided by the import_key argument, which defaults to the top-level package name.

Note. tec.imports replaces tec.findimports, which held a vendored copy of the GPL-2.0-or-later findimports project -- incompatible with tec's own Apache-2.0 licence, and therefore removed. tec.findimports remains as a deprecated forwarding layer. The module-graph part of that old API has no tec equivalent; install the upstream project yourself if you need it.

Modules

>>> from tec import modules
>>> sorted(modules.second_party_names(modules))[:5]
['DOTPATH', 'FILEPATH', 'FOLDERPATH', 'LOADED', 'ModuleSpecKind']
>>> sorted(modules.second_party_names(modules, callable))[:4]
['ModuleSpecKind', 'coerce_module_spec', 'filepath_to_dotpath', 'finding_objects_of_module_with_given_methods']
>>> sorted(modules.second_party_names(modules, lambda obj: isinstance(obj, type)))
['ModuleSpecKind']

Packages

A few functions to investigate what objects can be imported from a module (and the depth of the dot-path to import those objects directly).

The main function, print_top_level_diagnosis, prints a diagnosis of the imports that can be optained from the (top level) module. That is, those objects that can by imported by doing:

from module import obj

though the object's code may be several package levels down (say module.sub1.sub2.obj).

>> import numpy, pandas, scipy
>> print_top_level_diagnosis(numpy)
--------- numpy ---------
601 objects can be imported from top level numpy:
  20 modules
  300 functions
  104 types

depth	count
0	163
1	406
2	2
3	29
4	1

>> print_top_level_diagnosis(pandas)
--------- pandas ---------
115 objects can be imported from top level pandas:
  12 modules
  55 functions
  40 types

depth	count
0	12
3	37
4	65
5	1

>> print_top_level_diagnosis(scipy)
--------- scipy ---------
582 objects can be imported from top level scipy:
  9 modules
  412 functions
  96 types

depth	count
0	61
1	395
2	4
3	122

Peek

>>> from tec.peek import print_signature
>>> print_signature(print_signature)
func
sep: Union[str, NoneType] = '\\n'
prefix: str = ''
suffix: str = ''
>>> print_signature(print_signature, None)
(func, sep: Union[str, NoneType] = '\\n', prefix: str = '', suffix: str = '')
>>> print_signature(print_signature, '\\n * ', prefix=' * ', suffix='\\n')
 * func
 * sep: Union[str, NoneType] = '\\n'
 * prefix: str = ''
 * suffix: str = ''
<BLANKLINE>

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tec-0.0.20.tar.gz (44.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tec-0.0.20-py3-none-any.whl (48.1 kB view details)

Uploaded Python 3

File details

Details for the file tec-0.0.20.tar.gz.

File metadata

  • Download URL: tec-0.0.20.tar.gz
  • Upload date:
  • Size: 44.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for tec-0.0.20.tar.gz
Algorithm Hash digest
SHA256 0fdc078e49e2fcfaca07330126f7aacc904cb91133e924267e1a2e7291f84aa2
MD5 2d071f19a0cf16dffd03fc3ec10980d9
BLAKE2b-256 2925379af4244d8f987a07fd730aa8a0b3481457eaaf0636bb77e7dcd0e7c61f

See more details on using hashes here.

File details

Details for the file tec-0.0.20-py3-none-any.whl.

File metadata

  • Download URL: tec-0.0.20-py3-none-any.whl
  • Upload date:
  • Size: 48.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.12.1 {"installer":{"name":"uv","version":"0.12.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for tec-0.0.20-py3-none-any.whl
Algorithm Hash digest
SHA256 89879d6af1fa965ef5b9dc409a6621037c5e8afe54464d4b2ee5ca7a682b1b72
MD5 a1fec30da413aedae31572551d4f60f3
BLAKE2b-256 dea10d4584c651fbe83c7e3ba1d429d545c495c121200b37c94b24691e3f7224

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.0.20 This release

2 files

0.0.19

2 files

0.0.18

2 files

0.0.17

2 files

0.0.16

2 files

0.0.15

2 files

0.0.12

2 files

0.0.11

2 files

0.0.10

2 files

0.0.9

2 files

0.0.8

2 files

0.0.7

2 files

0.0.6

2 files

0.0.5

2 files

0.0.4

2 files

0.0.3

2 files

0.0.2

2 files

0.0.1

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page