Skip to main content

Reads a python file/module and statically analyzes it.

Project description

textpy

Reads a python file/module and statically analyzes it. This works well with Jupyter extensions in VScode, and have better performance when the file/module is formatted with PEP-8.

Installation

$ pip install textpy

Requirements

lazyr>=0.0.11
pandas>=1.4.0 # A lower version is also acceptable, but some features will be invalid

Examples

Create a new file named myfile.py under ./examples/ (or any dir, just for an example):

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from typing import *


class MyClass:
    def __init__(self):
        """Write something."""
        self.var_1 = "hahaha"
        self.var_2 = "blabla"


def print_my_class(a: MyClass):
    """
    Print something.

    Parameters
    ----------
    a : ThisIsAClass
        An object.

    """
    print(a.var_1, a.var_2)

Run the following codes to find all the occurrences of the pattern "va" in myfile.py:

>>> from textpy import textpy
>>> res = textpy("./examples/myfile.py").findall("va", styler=False)
>>> res
examples/myfile.py:10: '        self.var_1 = "hahaha"'
examples/myfile.py:11: '        self.var_2 = "blabla"'
examples/myfile.py:24: '    print(a.var_1, a.var_2)'

Also, when using a Jupyter notebook in VScode, you can run a cell like this:

>>> from textpy import textpy
>>> textpy("./examples/myfile.py").findall("va")

and the output will be like:

source match
myfile.MyClass.__init__:10 self.var_1 = "hahaha"
myfile.MyClass.__init__:11 self.var_2 = "blabla"
myfile.print_my_class:24 print(a.var_1, a.var_2)
Note that in the Jupyter notebook case, the matched substrings are **clickable**, linking to where the patterns were found.

Now suppose you've got a python module consists of a few files, for example, our textpy module itself, you can do almost the same thing:

>>> module_path = "textpy/" # you can type any path here
>>> pattern = "note.*k" # type any regular expression here

>>> res = textpy(module_path).findall("note.*k", styler=False, line_numbers=False)
>>> res
textpy/abc.py: '            in a Jupyter notebook, this only takes effect when'
textpy/abc.py: '        in a Jupyter notebook.'
textpy/__init__.py: 'Also, when using a Jupyter notebook in VScode, you can run a cell like this:'
textpy/__init__.py: 'Note that in the Jupyter notebook case, the matched substrings are **clickable**, linking to where'
textpy/__init__.py: '>>> pattern = "note.*k" # type any regular expression here'
textpy/__init__.py: '>>> res = textpy(module_path).findall("note.*k", styler=False, line_numbers=False)'

See Also

Github repository

PyPI project

License

This project falls under the BSD 3-Clause License.

History

v0.1.21

  • Various improvements.

v0.1.20

  • Fixed issues:
    • Incorrectly displayed file paths in the output of TextPy.findall(styler=False);
    • Expired file links in the output of TextPy.findall(styler=True, line_numbers=False).

v0.1.19

  • Various improvements.

v0.1.18

  • Updated LICENSE.

v0.1.17

  • Refactored README.

v0.1.16

  • Lazily imported pandas to reduce the time cost for importing.

v0.1.12

  • New optional parameters for TextPy.findall() :
    • whole_word : whether to match whole words only;
    • case_sensitive : specifies case sensitivity.

v0.1.10

  • New optional parameter for textpy() :
    • encoding : specifies encoding.

v0.1.9

  • Removing unnecessary dependencies.

v0.1.8

  • Bugfix for Windows.

v0.1.5

  • Compatible with pandas versions lower than 1.4.0.
  • Updated textpy() :
    • Path objects are now acceptable as parameters.
    • New optional parameter home to specify the home path.
  • More flexible presentation of output from TextPy.findall().

v0.1.4

  • Fixed a display problem of README on PyPI.

v0.1.3

  • Initial release.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

textpy-0.1.21-py2.py3-none-any.whl (15.1 kB view hashes)

Uploaded Python 2 Python 3

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