Skip to main content

library to manage Python Locations Table (co_linetable)

Project description

About linetable

https://github.com/amol-/linetable/actions/workflows/run-tests.yml/badge.svg https://coveralls.io/repos/amol-/linetable/badge.svg https://img.shields.io/pypi/v/linetable.svg https://img.shields.io/pypi/pyversions/linetable.svg https://img.shields.io/pypi/l/linetable.svg

linetable is a library parse and generate co_linetable attributes in Python code objects.

Based on https://github.com/python/cpython/blob/main/Objects/locations.md

Installing

linetable can be installed from pypi:

pip install linetable

should just work for most of the users

Usage

Existing linetable can be parsed using linetable.parse_linetable:

>>> def testfunc():
...   x = 3
...   y = x + 1
...   return y

>>> list(linetable.parse_linetable(testfunc.__code__.co_linetable))
[
    (1, 1, 1, 0, 0),
    (1, 2, 2, 6, 7),
    (1, 2, 2, 2, 3),
    (1, 3, 3, 6, 7),
    (1, 3, 3, 10, 11),
    (2, 3, 3, 6, 11),
    (1, 3, 3, 2, 3),
    (1, 4, 4, 9, 10),
    (1, 4, 4, 2, 10),
]

If you prefer the output in the format of dis.Positions objects, you can create them from the yielded values:

>>> [dis.Positions(*e[1:]) for e in linetable.parse_linetable(testfunc.__code__.co_linetable)]
[Positions(lineno=1, end_lineno=1, col_offset=0, end_col_offset=0), Positions(lineno=2, end_lineno=2, col_offset=8, end_col_offset=9), Positions(lineno=2, end_lineno=2, col_offset=4, end_col_offset=5), Positions(lineno=3, end_lineno=3, col_offset=8, end_col_offset=9), Positions(lineno=3, end_lineno=3, col_offset=12, end_col_offset=13), Positions(lineno=3, end_lineno=3, col_offset=8, end_col_offset=13), Positions(lineno=3, end_lineno=3, col_offset=4, end_col_offset=5), Positions(lineno=4, end_lineno=4, col_offset=11, end_col_offset=12), Positions(lineno=4, end_lineno=4, col_offset=4, end_col_offset=12)]

If you have the linetable, you can generate back the binary encoded version using linetable.generate_linetable:

>>> lt = [
...     (1, 1, 1, 0, 0),
...     (1, 2, 2, 6, 7),
...     (1, 2, 2, 2, 3),
...     (1, 3, 3, 6, 7),
...     (1, 3, 3, 10, 11),
...     (2, 3, 3, 6, 11),
...     (1, 3, 3, 2, 3),
...     (1, 4, 4, 9, 10),
...     (1, 4, 4, 2, 10),
... ]
>>> linetable.generate_linetable(lt)
b"\x80\x00\xd8\x06\x07\x80!\xd8\x06\x07\x88!\x81e\x80!\xd8\t\n\x80("

Project details


Download files

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

Source Distribution

linetable-0.0.3.tar.gz (3.8 kB view details)

Uploaded Source

File details

Details for the file linetable-0.0.3.tar.gz.

File metadata

  • Download URL: linetable-0.0.3.tar.gz
  • Upload date:
  • Size: 3.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.8.10

File hashes

Hashes for linetable-0.0.3.tar.gz
Algorithm Hash digest
SHA256 571305913fe024924b414f3fe4c84c7848446c6546f3dab2a508c6788d79f1ed
MD5 1560e04e0435c7f5d3a75a13e9371ccb
BLAKE2b-256 439d4eb3859e9fbea37e4647e109f2813895353e8160adae3a8e7db051035568

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page