Skip to main content

Monitor and manage deeply customizable metrics about your python code using ASTs

Project description

Overview

Monitor and manage deeply customizable metrics about your python code using ASTs.

codewatch lets you write simple python code to track statistics about the state of your codebase and write lint-like assertions on those statistics. Use this to incrementally improve and evolve the quality of your code base, increase the visibility of problematic code, to encourage use of new patterns while discouraging old ones, to enforce coding style guides, or to prevent certain kinds of regression errors.

Installation

Python: 2.7, 3.6, 3.7

Execute the following in your terminal:

pip install codewatch

Usage

codewatch codewatch_config_module

codewatch_config_module is a file that should contain the following two methods:

1. Visit all directories:

def directory_filter(_dir_name):
    return True

2. Visit all files:

def file_filter(_file_name):
    return True

Tune these filters to suit your needs.

Then, you should use the @visit decorator. It follows a similar API to ast.NodeVisitor:

from codewatch import visitor


def _count_import(stats):
    stats.increment('total_imports_num')

@visit('import')
def count_import(self, node):
    _count_import(self.stats)

@visit('importFrom')
def count_import_from(self, node):
    _count_import(self.stats)

This will build a stats dictionary that contains something like the following:

{
    "total_imports_num": 763
}

Then, once again in the codewatch_config_module you can add assertions against this stat dictionary using the @assertion decorator

from codewatch import assertion


@assertion()
def number_of_imports_not_too_high(stats):
    threshold = 700
    actual = stats.get('total_imports_num')
    err = 'There were {} total imports detected which exceeds threshold of {}'.format(actual, threshold)
    assert actual <= threshold, err

In this case, the assertion would fail since 763 is the newStat and the message:

There were 763 total imports detected which exceeds threshold of 700

would be printed

Contributing

Helpful resources

TODO

Contributors

Thanks goes to these wonderful people! (Emoji key)


Josh Doncaster Marsiglio

💻

Rohit Jain

💻

Chris Abiad

💻

Francois Campbell

🤔💻

Monica Moore

🎨

Jake Bolam

🚇

Shouvik D'Costa

🚇

Siavash Bidgoly

🚇

Credits

Special thanks to Carol Skelly for donating the 'tophat' GitHub organization.

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

codewatch-0.0.16.tar.gz (14.2 kB view details)

Uploaded Source

Built Distribution

codewatch-0.0.16-py2.py3-none-any.whl (24.9 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file codewatch-0.0.16.tar.gz.

File metadata

  • Download URL: codewatch-0.0.16.tar.gz
  • Upload date:
  • Size: 14.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7

File hashes

Hashes for codewatch-0.0.16.tar.gz
Algorithm Hash digest
SHA256 9a5c9e86ece9330c727ee58dee0ec637256887ee6f51bf0816cf85685b2bde4b
MD5 9b797c876575b2b1ca183f261d5ee278
BLAKE2b-256 cfe4d2efee763ce0cfee6ee7cd26ac4a7af04a7131d166d075ee2066cb31c523

See more details on using hashes here.

File details

Details for the file codewatch-0.0.16-py2.py3-none-any.whl.

File metadata

  • Download URL: codewatch-0.0.16-py2.py3-none-any.whl
  • Upload date:
  • Size: 24.9 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.7

File hashes

Hashes for codewatch-0.0.16-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 85a0934dc30e50a1f2308a87ca5ea6fa0eb5af7845aaec10944a585cea1a5c6f
MD5 56df2a313911a6d86e6b3a0acbc4be14
BLAKE2b-256 19bf589e2942a60a5bb18a29e7a942ff655b4f1665e06dff551b43aa19d9b506

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