Giter Club home page Giter Club logo

wily's Introduction

wily

A command-line application for tracking, reporting on complexity of Python tests and applications.

Wily codecov Documentation Status PyPI version Conda Version black PyPI - Downloads

wily [a]:
quick to think of things, having a very good understanding of situations and possibilities, 
and often willing to use tricks to achieve an aim.

Wily uses git to go through each revision (commit) in a branch and run complexity and code-analysis metrics over the code. You can use this to limit your code or report on trends for complexity, length etc.

Installation

Wily can be installed via pip from Python 3.6 and above:

 $ pip install wily

Alternatively, Wily packages are available on conda-forge:

 $ conda install -c conda-forge wily

Usage

See the Documentation Site for full usage guides.

Wily can be used via a command line interface, wily.

 $ wily --help

help-screen

Demo

Here is a demo of wily analysing a Python project, giving a summary of changes to complexity in the last 10 commits and then showing changes against a specific git revision:

demo

Using Wily in a CI/CD pipeline

Wily can be used in a CI/CD workflow to compare the complexity of the current files against a particular revision.

By default, wily will compare against the previous revision (for a git-pre-commit hook) but you can also give a Git ref, for example HEAD^1 is the commit before the HEAD reference.

 $ wily build src/
 $ wily diff src/ -r HEAD^1

Or, to compare against

 $ wily build src/
 $ wily diff src/ -r master

pre-commit plugin

You can install wily as a pre-commit plugin by adding the following to .pre-commit-config.yaml

repos:
-   repo: local
    hooks:
    -   id: wily
        name: wily
        entry: wily diff
        verbose: true
        language: python
        additional_dependencies: [wily]

Command line usage

wily build

The first step to using wily is to build a wily cache with the statistics of your project.

Usage: __main__.py build [OPTIONS] [TARGETS]...

  Build the wily cache

Options:
  -n, --max-revisions INTEGER  The maximum number of historical commits to
                               archive
  -o, --operators TEXT         List of operators, separated by commas
  --help                       Show this message and exit.

By default, wily will assume your project folder is a git directory. Wily will not build a cache if the working copy is dirty (has changed files not committed).

 $ wily build src/

Limit the number of revisions (defaults to 50).

wily-build

wily report

Show a specific metric for a given file, requires that .wily/ exists

wily report will print the metric and the delta between each revision.

wily-report

wily rank

Show the ranking for all files in a directory or a single file based on the metric provided, requires that .wily/ exists

wily rank will print a table of files and their metric values.

wily-rank

wily graph

Similar to wily report but instead of printing in the console, wily will print a graph in a browser.

wily-graph

wily index

Show information about the build directory. Requires that .wily/ exists.

wily index will print the configuration to the screen and list all revisions that have been analysed and the operators used.

wily-graph

wily list-metrics

List the metrics available in the Wily operators. Each one of the metrics can be used in wily graph and wily report

 $ wily list-metrics
mccabe operator:
No metrics available
raw operator:
╒═════════════════╤══════════════════════╤═══════════════╤══════════════════════════╕
│                 │ Name                 │ Description   │ Type                     │
╞═════════════════╪══════════════════════╪═══════════════╪══════════════════════════╡
│ loc             │ Lines of Code        │ <class 'int'> │ MetricType.Informational │
├─────────────────┼──────────────────────┼───────────────┼──────────────────────────┤
│ lloc            │ L Lines of Code      │ <class 'int'> │ MetricType.Informational │
├─────────────────┼──────────────────────┼───────────────┼──────────────────────────┤
│ sloc            │ S Lines of Code      │ <class 'int'> │ MetricType.Informational │
├─────────────────┼──────────────────────┼───────────────┼──────────────────────────┤
│ comments        │ Multi-line comments  │ <class 'int'> │ MetricType.Informational │
├─────────────────┼──────────────────────┼───────────────┼──────────────────────────┤
│ multi           │ Multi lines          │ <class 'int'> │ MetricType.Informational │
├─────────────────┼──────────────────────┼───────────────┼──────────────────────────┤
│ blank           │ blank lines          │ <class 'int'> │ MetricType.Informational │
├─────────────────┼──────────────────────┼───────────────┼──────────────────────────┤
│ single_comments │ Single comment lines │ <class 'int'> │ MetricType.Informational │
╘═════════════════╧══════════════════════╧═══════════════╧══════════════════════════╛
cyclomatic operator:
No metrics available
maintainability operator:
╒══════╤═════════════════════════╤═════════════════╤══════════════════════════╕
│      │ Name                    │ Description     │ Type                     │
╞══════╪═════════════════════════╪═════════════════╪══════════════════════════╡
│ rank │ Maintainability Ranking │ <class 'str'>   │ MetricType.Informational │
├──────┼─────────────────────────┼─────────────────┼──────────────────────────┤
│ mi   │ Maintainability Index   │ <class 'float'> │ MetricType.AimLow        │
╘══════╧═════════════════════════╧═════════════════╧══════════════════════════╛

Configuration

You can put a wily.cfg file in your project directory and wily will override the runtime settings. Here are the available options:

[wily]
# list of operators, choose from cyclomatic, maintainability, mccabe and raw
operators = cyclomatic,raw
# archiver to use, defaults to git
archiver = git
# path to analyse, defaults to .
path = /path/to/target
# max revisions to archive, defaults to 50
max_revisions = 20

You can also override the path to the configuration with the --config flag on the command-line.

IPython/Jupyter Notebooks

Wily will detect and scan all Python code in .ipynb files automatically.

You can disable this behaviour if you require by setting ipynb_support = false in the configuration. You can also disable the behaviour of reporting on individual cells by setting ipynb_cells = false.

Credits

Contributors

  • @wcooley (Wil Cooley)
  • @DahlitzFlorian (Florian Dahlitz)
  • @alegonz
  • @DanielChabrowski
  • @jwattier
  • @skarzi

"cute animal doing dabbing" Designed by Freepik

wily's People

Contributors

abadger avatar alegonz avatar anderso avatar cclauss avatar dahlitzflorian avatar danielchabrowski avatar danwos avatar devdanzin avatar doloopuntil avatar edmondop avatar hugovk avatar jwattier avatar jwattierkpmg avatar kjaymiller avatar ricoms avatar riyajohn avatar skarzi avatar thomastno avatar tonybaloney avatar wcooley avatar willfrey avatar willianrampazzo avatar zeitsperre avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

wily's Issues

Wily diff output

Hi,

I wanted to use wily as an external tool in Pycharm, in order to see the wily diff of a file.
wily.exe diff foobar.py
However this fails and I get this message:

... File "c:\programdata\anaconda3\envs\foobar\lib\encodings\cp1252.py", line 19, in encode return codecs.charmap_encode(input,self.errors,encoding_table)[0] UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-123: character maps to <undefined>

Same happens in the cmd when I wants to pipe the output to a file.
wily.exe diff foobar.py > wilydiff.txt

The output options are not valid for the diffs.
Any idea? Thanks

Report should guess the module for a given metric

When running wily report and wily graph you provide the metrics,

resolve_metric expects <module>.<metric> e.g. raw.sloc.

However, there is only 1 sloc metric, as with the others. It would be better if resolve_metric were modified to figure out the metric without a module

Add ability to report on or graph a directory

Add ability to specify a path in wily graph, which will recursively add all the Python files in the current path.

e.g. wily graph src/ raw.loc, wily graph src/tests/ cyclomatic.complexity raw.loc

Must work with --path as well

build time

hi, could you advise how to speed up the build command? I tried to run it inside of pipeline, and it takes ~15 min. And is there any way to pass a lot of arguments to the report command as implemented for diff? because my diff command doesnt work

Failed to run CC harvester: invalid character in identifier

wily version 1.12.1, installed via pip in a clean venv with python 3.6.7 on ubuntu.

I am trying to run wily build on a project of mine. Unfortunately I cannot make it work. It finds an "invalid character" but there is none. See screenshot of relevant code piece below. Even deleting the file from the repo does not help because of course it is still in the git history (and I am not going to soft-reset through 30 commits to get wily to work).

Even if there were an invalid character, couldn't there be a way to more gracefully handle this and simply exclude that file from the index/reporting?

Key error:
Failed to run CC harvester on dashtry.py : invalid character in identifier (<unknown>, line 29)
Following stack:

multiprocessing.pool.RemoteTraceback: 
"""
Traceback (most recent call last):
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 47, in starmapstar
    return list(itertools.starmap(args[0], args[1]))
  File "/Data/Code/projects/finance_data/.venv/lib/python3.6/site-packages/wily/commands/build.py", line 24, in run_operator
    return operator.name, instance.run(revision, config)
  File "/Data/Code/projects/finance_data/.venv/lib/python3.6/site-packages/wily/operators/halstead.py", line 81, in run
    results[filename] = self._report_to_dict(instance)
  File "/Data/Code/projects/finance_data/.venv/lib/python3.6/site-packages/wily/operators/halstead.py", line 86, in _report_to_dict
    "h1": report.h1,
AttributeError: 'str' object has no attribute 'h1'
"""

image

Running wily subsequently on a subdirectory leads to this, so apparently wily leaves "corrupted" files behind when exiting in the above fashion:

image

output of pip freeze:
attrs==19.1.0
certifi==2019.3.9
chardet==3.0.4
Click==7.0
colorama==0.4.1
colorlog==4.0.2
dataclasses==0.6
decorator==4.3.2
entrypoints==0.3
flake8==3.7.7
flake8-polyfill==1.0.2
gitdb2==2.0.5
GitPython==2.1.11
idna==2.8
ipython-genutils==0.2.0
jsonschema==3.0.1
jupyter-core==4.4.0
mando==0.6.4
mccabe==0.6.1
nbformat==4.4.0
pkg-resources==0.0.0
plotly==3.7.0
progress==1.5
pycodestyle==2.5.0
pyflakes==2.1.1
pyrsistent==0.14.11
pytz==2018.9
radon==3.0.1
requests==2.21.0
retrying==1.3.3
six==1.12.0
smmap2==2.0.5
tabulate==0.8.3
traitlets==4.3.2
urllib3==1.24.1
wily==1.12.1

Running build with specified/different operator doesn't have process

Steps to reproduce:

  • Run wily build <target> for default operators
  • Run wily build -o <operator> <target> for other operator

Will say no changes, if you change files, will add operator data but only for the last commit.

Does that make sense? It doesn't tell the user whether this will erase the old metrics, or make them defunct. You can't "add" metrics to an existing wily cache by re-running build as the diff uses the git sha, not the operators contained within it.

Instead, when running build it should compare the operator(s) specified and compare it with those in the index to give the user an option of building those metrics in the older revisions

Fails to populate missing values when re-running build with more operators

This is a really awesome tool! Thanks!

I found a bug playing around...

To reproduce this bug:

  1. Build e.g. last 10 commits
  2. Then specify e.g.:
    $ wily build name_of_folder -n 15 -o raw (which will add on 5 more rows to the table but only loc)
  3. Then you will see that:
    $ wily report name_of_folder
    will show Not found 'cyclomatic' Not found 'maintainability' and Not found 'halstead' (as expected)
  4. But THEN, if you do:
    $ wily build name_of_folder -n 15 -o raw,maintainability which does nothing or
    $ wily build name_of_folder -n 20 -o raw,maintainability which correctly populates the next 5 rows of the table but does not identify the fact that there are missing values in previous rows that also need to be filled...

Seeing as though this script takes quite a while to run, I think it would be optimal if it behaved in a way such that it would recognise missing data and fill in the blanks before proceeding with new rows. What do you think?

Or am I not entering commands correctly?

TypeError: build() got an unexpected keyword argument 'skip_gitignore_check'

When running the initial set-up for a relatively new repo (just 5 commits), I get the following error below (note that my repo does have a .gitignore file).

It appears that line 355 in wily/__main__.py calls a functions with skip_gitignore_check=False, but that argument is not recognized within the context.

  File "/usr/local/miniconda/envs/my_org/bin/wily", line 11, in <module>
    sys.exit(cli())
  File "/usr/local/miniconda/envs/my_org/lib/python3.6/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/usr/local/miniconda/envs/my_org/lib/python3.6/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/usr/local/miniconda/envs/my_org/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/usr/local/miniconda/envs/my_org/lib/python3.6/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/usr/local/miniconda/envs/my_org/lib/python3.6/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/miniconda/envs/my_org/lib/python3.6/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/usr/local/miniconda/envs/my_org/lib/python3.6/site-packages/wily/__main__.py", line 334, in setup
    handle_no_cache(ctx)
  File "/usr/local/miniconda/envs/my_org/lib/python3.6/site-packages/wily/__main__.py", line 355, in handle_no_cache
    skip_gitignore_check=False,
  File "/usr/local/miniconda/envs/my_org/lib/python3.6/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/usr/local/miniconda/envs/my_org/lib/python3.6/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
TypeError: build() got an unexpected keyword argument 'skip_gitignore_check'```

fails calculating on virtualenv

  1. rm -rf /Users/bgabor8/.wily/* -rf && wily --debug build virtualenv.py 1>out.log 2>&1
output

Could not locate wily.cfg, using default config.
Fixing path to /Users/bgabor8/git/github/virtualenv
Loaded configuration from wily.cfg
Fixing archiver to git
Fixing targets to ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',)
Using git archiver module
Initialised state indexes for archivers ['git']
Generating cache for /Users/bgabor8/git/github/virtualenv
Cache path is /Users/bgabor8/.wily/a5f5d5cc0
Wily cache not found, creating.
Creating wily cache /Users/bgabor8/.wily/a5f5d5cc0
Created wily cache
Found 50 revisions from 'git' archiver in '/Users/bgabor8/git/github/virtualenv'.
Running operators - raw,halstead,maintainability,cyclomatic
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Running raw operator on ba9e73bd853722df58e9361c956962dc8e1d013d
Running raw harvester
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metricsRunning halstead operator on ba9e73bd853722df58e9361c956962dc8e1d013d

Running halstead harvester
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running maintainability operator on ba9e73bd853722df58e9361c956962dc8e1d013d
Running cyclomatic operator on ba9e73bd853722df58e9361c956962dc8e1d013d
Running CC harvester
Running maintainability harvester
Creating wily cache
Creating ba9e73bd853722df58e9361c956962dc8e1d013d output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning raw operator on f0ce306920ba48248b31da46281758ebb9459d59

Running raw harvester
Running halstead operator on f0ce306920ba48248b31da46281758ebb9459d59Running maintainability operator on f0ce306920ba48248b31da46281758ebb9459d59
Running cyclomatic operator on f0ce306920ba48248b31da46281758ebb9459d59

Running CC harvesterRunning maintainability harvester

Running halstead harvester
Creating f0ce306920ba48248b31da46281758ebb9459d59 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning raw operator on 81904e40071667157b97e16e2b8a844027e23d86

Running halstead operator on 81904e40071667157b97e16e2b8a844027e23d86Running maintainability operator on 81904e40071667157b97e16e2b8a844027e23d86
Running raw harvester

Running cyclomatic operator on 81904e40071667157b97e16e2b8a844027e23d86Running halstead harvesterRunning maintainability harvester


Running CC harvester
Creating 81904e40071667157b97e16e2b8a844027e23d86 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 5e3a70c365f62cfb0f39dc4851d2104efc76c02f
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning halstead operator on 5e3a70c365f62cfb0f39dc4851d2104efc76c02f

Running raw harvesterRunning maintainability operator on 5e3a70c365f62cfb0f39dc4851d2104efc76c02f

Running halstead harvesterRunning cyclomatic operator on 5e3a70c365f62cfb0f39dc4851d2104efc76c02f

Running maintainability harvester
Running CC harvester
Creating 5e3a70c365f62cfb0f39dc4851d2104efc76c02f output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics


Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running raw operator on 27a3171855aa575ef150056f821a7e17a23a27d2Running halstead operator on 27a3171855aa575ef150056f821a7e17a23a27d2
Running maintainability operator on 27a3171855aa575ef150056f821a7e17a23a27d2
Running cyclomatic operator on 27a3171855aa575ef150056f821a7e17a23a27d2

Running raw harvester
Running halstead harvester
Running maintainability harvesterRunning CC harvester

Creating 27a3171855aa575ef150056f821a7e17a23a27d2 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running halstead operator on 1affb904514e5c95ea5279e60d0c2c3e721f4b79
Running raw operator on 1affb904514e5c95ea5279e60d0c2c3e721f4b79
Running halstead harvesterRunning maintainability operator on 1affb904514e5c95ea5279e60d0c2c3e721f4b79

Running cyclomatic operator on 1affb904514e5c95ea5279e60d0c2c3e721f4b79
Running raw harvester
Running maintainability harvester
Running CC harvester
Creating 1affb904514e5c95ea5279e60d0c2c3e721f4b79 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning raw operator on 05933ddb31ee10f490366fc331675f54d0c3028e

Running maintainability operator on 05933ddb31ee10f490366fc331675f54d0c3028eRunning halstead operator on 05933ddb31ee10f490366fc331675f54d0c3028e
Running raw harvester

Running cyclomatic operator on 05933ddb31ee10f490366fc331675f54d0c3028e
Running halstead harvester
Running maintainability harvester
Running CC harvester
Creating 05933ddb31ee10f490366fc331675f54d0c3028e output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on debbaa4ff2712167006f21d978267968c2191d2bUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics

Running halstead operator on debbaa4ff2712167006f21d978267968c2191d2b
Running maintainability operator on debbaa4ff2712167006f21d978267968c2191d2b
Running raw harvester
Running halstead harvesterRunning cyclomatic operator on debbaa4ff2712167006f21d978267968c2191d2b
Running maintainability harvester

Running CC harvester
Creating debbaa4ff2712167006f21d978267968c2191d2b output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics


Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running halstead operator on f9d0048ffb3c1e5063fc152c7402635c98081ef9Running raw operator on f9d0048ffb3c1e5063fc152c7402635c98081ef9Running maintainability operator on f9d0048ffb3c1e5063fc152c7402635c98081ef9


Running cyclomatic operator on f9d0048ffb3c1e5063fc152c7402635c98081ef9
Running halstead harvesterRunning raw harvester

Running CC harvester
Running maintainability harvester
Creating f9d0048ffb3c1e5063fc152c7402635c98081ef9 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metricsRunning raw operator on dfca5ad67bb99861ae181a0c447b8593e1194718

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning maintainability operator on dfca5ad67bb99861ae181a0c447b8593e1194718

Running raw harvester
Running halstead operator on dfca5ad67bb99861ae181a0c447b8593e1194718
Running maintainability harvester
Running cyclomatic operator on dfca5ad67bb99861ae181a0c447b8593e1194718
Running halstead harvester
Running CC harvester
Creating dfca5ad67bb99861ae181a0c447b8593e1194718 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running raw operator on 133103720f13af8271369bd03821ab559e59819dRunning halstead operator on 133103720f13af8271369bd03821ab559e59819d

Running maintainability operator on 133103720f13af8271369bd03821ab559e59819d
Running cyclomatic operator on 133103720f13af8271369bd03821ab559e59819dRunning raw harvesterRunning halstead harvester

Running maintainability harvester

Running CC harvester
Creating 133103720f13af8271369bd03821ab559e59819d output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running maintainability operator on a0b556b5b83cc47fcf7488854cd15985a09ea94c
Running raw operator on a0b556b5b83cc47fcf7488854cd15985a09ea94c
Running halstead operator on a0b556b5b83cc47fcf7488854cd15985a09ea94c
Running maintainability harvesterRunning cyclomatic operator on a0b556b5b83cc47fcf7488854cd15985a09ea94cRunning raw harvester


Running halstead harvester
Running CC harvester
Creating a0b556b5b83cc47fcf7488854cd15985a09ea94c output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running raw operator on f53a4eae2c616f72a8be22d483af9302b2b0eb8f
Running maintainability operator on f53a4eae2c616f72a8be22d483af9302b2b0eb8fRunning halstead operator on f53a4eae2c616f72a8be22d483af9302b2b0eb8fRunning cyclomatic operator on f53a4eae2c616f72a8be22d483af9302b2b0eb8f
Running raw harvester


Running maintainability harvester
Running halstead harvesterRunning CC harvester

Creating f53a4eae2c616f72a8be22d483af9302b2b0eb8f output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running raw operator on 1acc56faef82fb03c03c046d0c9cdafa29ab5679
Running halstead operator on 1acc56faef82fb03c03c046d0c9cdafa29ab5679
Running maintainability operator on 1acc56faef82fb03c03c046d0c9cdafa29ab5679Running cyclomatic operator on 1acc56faef82fb03c03c046d0c9cdafa29ab5679
Running raw harvester

Running halstead harvester
Running CC harvesterRunning maintainability harvester

Creating 1acc56faef82fb03c03c046d0c9cdafa29ab5679 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 2c1e45ab8131317780701fadb63e452c62e9a4c0
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running raw harvester
Running halstead operator on 2c1e45ab8131317780701fadb63e452c62e9a4c0Running maintainability operator on 2c1e45ab8131317780701fadb63e452c62e9a4c0

Running cyclomatic operator on 2c1e45ab8131317780701fadb63e452c62e9a4c0
Running halstead harvester
Running maintainability harvesterRunning CC harvester

Creating 2c1e45ab8131317780701fadb63e452c62e9a4c0 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Running raw operator on 789cad50b73ecf709c9ed7e6ba7c0e708e7737e2Running maintainability operator on 789cad50b73ecf709c9ed7e6ba7c0e708e7737e2

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning halstead operator on 789cad50b73ecf709c9ed7e6ba7c0e708e7737e2

Running raw harvesterRunning maintainability harvester

Running halstead harvester
Running cyclomatic operator on 789cad50b73ecf709c9ed7e6ba7c0e708e7737e2
Running CC harvester
Creating 789cad50b73ecf709c9ed7e6ba7c0e708e7737e2 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metricsRunning maintainability operator on c787671ec455e3212fd78126cea558b318f48806
Running cyclomatic operator on c787671ec455e3212fd78126cea558b318f48806

Running raw operator on c787671ec455e3212fd78126cea558b318f48806
Running CC harvester
Running maintainability harvesterRunning raw harvester
Running halstead operator on c787671ec455e3212fd78126cea558b318f48806

Running halstead harvester
Creating c787671ec455e3212fd78126cea558b318f48806 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running raw operator on 124d0eda3f376e0a34544f0dc07f7b557eb69e34Running maintainability operator on 124d0eda3f376e0a34544f0dc07f7b557eb69e34Running halstead operator on 124d0eda3f376e0a34544f0dc07f7b557eb69e34


Running cyclomatic operator on 124d0eda3f376e0a34544f0dc07f7b557eb69e34
Running raw harvester
Running halstead harvester
Running maintainability harvester
Running CC harvester
Creating 124d0eda3f376e0a34544f0dc07f7b557eb69e34 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 94c6bcb4a3f8d7ff63e2215b18d76514d147a762Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running halstead operator on 94c6bcb4a3f8d7ff63e2215b18d76514d147a762
Running maintainability operator on 94c6bcb4a3f8d7ff63e2215b18d76514d147a762

Running raw harvester
Running halstead harvesterRunning cyclomatic operator on 94c6bcb4a3f8d7ff63e2215b18d76514d147a762Running maintainability harvester


Running CC harvester
Creating 94c6bcb4a3f8d7ff63e2215b18d76514d147a762 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 9025a9a1a736cce76606b0b85f8f8e31335aef9bUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning halstead operator on 9025a9a1a736cce76606b0b85f8f8e31335aef9b

Running maintainability operator on 9025a9a1a736cce76606b0b85f8f8e31335aef9b

Running cyclomatic operator on 9025a9a1a736cce76606b0b85f8f8e31335aef9bRunning raw harvester

Running halstead harvesterRunning maintainability harvester

Running CC harvester
Creating 9025a9a1a736cce76606b0b85f8f8e31335aef9b output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running raw operator on 3272f7b50c1bb83caeee3b0597de2ff321244386Running maintainability operator on 3272f7b50c1bb83caeee3b0597de2ff321244386Running halstead operator on 3272f7b50c1bb83caeee3b0597de2ff321244386


Running cyclomatic operator on 3272f7b50c1bb83caeee3b0597de2ff321244386
Running raw harvesterRunning maintainability harvesterRunning halstead harvester
Running CC harvester


Creating 3272f7b50c1bb83caeee3b0597de2ff321244386 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on c37e89bb63a162e6e6d30651448a68c799d75c18Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running halstead operator on c37e89bb63a162e6e6d30651448a68c799d75c18

Running maintainability operator on c37e89bb63a162e6e6d30651448a68c799d75c18
Running raw harvester
Running halstead harvester
Running cyclomatic operator on c37e89bb63a162e6e6d30651448a68c799d75c18Running maintainability harvester

Running CC harvester
Creating c37e89bb63a162e6e6d30651448a68c799d75c18 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning raw operator on 824759c87a7463107214286f73e4cc3a5e4d1c54

Running maintainability operator on 824759c87a7463107214286f73e4cc3a5e4d1c54
Running halstead operator on 824759c87a7463107214286f73e4cc3a5e4d1c54
Running cyclomatic operator on 824759c87a7463107214286f73e4cc3a5e4d1c54Running raw harvesterRunning maintainability harvester


Running halstead harvester
Running CC harvester
Creating 824759c87a7463107214286f73e4cc3a5e4d1c54 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 751f8f92abbaa6c11ee0dbabafe8d3d64b352232
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning halstead operator on 751f8f92abbaa6c11ee0dbabafe8d3d64b352232

Running raw harvesterRunning maintainability operator on 751f8f92abbaa6c11ee0dbabafe8d3d64b352232

Running maintainability harvesterRunning halstead harvester

Running cyclomatic operator on 751f8f92abbaa6c11ee0dbabafe8d3d64b352232
Running CC harvester
Creating 751f8f92abbaa6c11ee0dbabafe8d3d64b352232 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 3374b3785f0d5f16c5d0ea74de2435b6f8d0fdbd
Running halstead operator on 3374b3785f0d5f16c5d0ea74de2435b6f8d0fdbd
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning maintainability operator on 3374b3785f0d5f16c5d0ea74de2435b6f8d0fdbd
Running raw harvesterRunning halstead harvester


Running maintainability harvester
Running cyclomatic operator on 3374b3785f0d5f16c5d0ea74de2435b6f8d0fdbd
Running CC harvester
Creating 3374b3785f0d5f16c5d0ea74de2435b6f8d0fdbd output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics

Running halstead operator on bdb1355fe8878c86db3a6b0dad9735a276ed497c
Running raw operator on bdb1355fe8878c86db3a6b0dad9735a276ed497c
Running cyclomatic operator on bdb1355fe8878c86db3a6b0dad9735a276ed497cRunning halstead harvesterRunning maintainability operator on bdb1355fe8878c86db3a6b0dad9735a276ed497c

Running raw harvester

Running CC harvester
Running maintainability harvester
Creating bdb1355fe8878c86db3a6b0dad9735a276ed497c output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on bc1d76dadbc716951cb62c378331bc98ff96fd5eUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics

Running halstead operator on bc1d76dadbc716951cb62c378331bc98ff96fd5eRunning maintainability operator on bc1d76dadbc716951cb62c378331bc98ff96fd5e
Running raw harvester

Running cyclomatic operator on bc1d76dadbc716951cb62c378331bc98ff96fd5e
Running halstead harvester
Running maintainability harvesterRunning CC harvester

Creating bc1d76dadbc716951cb62c378331bc98ff96fd5e output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics


Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running maintainability operator on 2c482c82ffc2abbb9903b21829c25d4db25800ed
Running halstead operator on 2c482c82ffc2abbb9903b21829c25d4db25800edRunning raw operator on 2c482c82ffc2abbb9903b21829c25d4db25800edRunning cyclomatic operator on 2c482c82ffc2abbb9903b21829c25d4db25800ed

Running maintainability harvester

Running raw harvester
Running halstead harvester
Running CC harvester
Creating 2c482c82ffc2abbb9903b21829c25d4db25800ed output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metricsRunning raw operator on 585b2250032d417dfbc3bd07cb7b55c33220da3b

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning halstead operator on 585b2250032d417dfbc3bd07cb7b55c33220da3b

Running raw harvesterRunning maintainability operator on 585b2250032d417dfbc3bd07cb7b55c33220da3b

Running halstead harvester
Running cyclomatic operator on 585b2250032d417dfbc3bd07cb7b55c33220da3b
Running maintainability harvester
Running CC harvester
Creating 585b2250032d417dfbc3bd07cb7b55c33220da3b output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 117f6f7f5b0ec2d188ee46708a2587533d055582
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning halstead operator on 117f6f7f5b0ec2d188ee46708a2587533d055582
Running maintainability operator on 117f6f7f5b0ec2d188ee46708a2587533d055582Running raw harvester


Running halstead harvester
Running maintainability harvester
Running cyclomatic operator on 117f6f7f5b0ec2d188ee46708a2587533d055582
Running CC harvester
Creating 117f6f7f5b0ec2d188ee46708a2587533d055582 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metricsRunning raw operator on fef732c7be63f11efd52a2e8d94bb1288cb7b9a3
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics

Running halstead operator on fef732c7be63f11efd52a2e8d94bb1288cb7b9a3
Running raw harvester
Running halstead harvesterRunning maintainability operator on fef732c7be63f11efd52a2e8d94bb1288cb7b9a3Running cyclomatic operator on fef732c7be63f11efd52a2e8d94bb1288cb7b9a3


Running CC harvester
Running maintainability harvester
Creating fef732c7be63f11efd52a2e8d94bb1288cb7b9a3 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on c9cf748d904eed9c2383f7ad2371b1e252dce25dUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning halstead operator on c9cf748d904eed9c2383f7ad2371b1e252dce25d

Running maintainability operator on c9cf748d904eed9c2383f7ad2371b1e252dce25d

Running raw harvesterRunning cyclomatic operator on c9cf748d904eed9c2383f7ad2371b1e252dce25dRunning maintainability harvester

Running halstead harvester

Running CC harvester
Creating c9cf748d904eed9c2383f7ad2371b1e252dce25d output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 6d750168a539f4cc54d5d36eb51c7d4a233ac6c2
Running halstead operator on 6d750168a539f4cc54d5d36eb51c7d4a233ac6c2
Running raw harvester
Running maintainability operator on 6d750168a539f4cc54d5d36eb51c7d4a233ac6c2Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running halstead harvester

Running maintainability harvester
Running cyclomatic operator on 6d750168a539f4cc54d5d36eb51c7d4a233ac6c2
Running CC harvester
Creating 6d750168a539f4cc54d5d36eb51c7d4a233ac6c2 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 76326e09dff061096048af9e13a6023d5c3dfda6
Running halstead operator on 76326e09dff061096048af9e13a6023d5c3dfda6
Running maintainability operator on 76326e09dff061096048af9e13a6023d5c3dfda6Running raw harvester
Running halstead harvester

Running maintainability harvester
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running cyclomatic operator on 76326e09dff061096048af9e13a6023d5c3dfda6
Running CC harvester
Creating 76326e09dff061096048af9e13a6023d5c3dfda6 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 54963327e9ad9c0f9a44d480d7fd13f6e48e922e
Running raw harvesterUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics

Running halstead operator on 54963327e9ad9c0f9a44d480d7fd13f6e48e922eRunning maintainability operator on 54963327e9ad9c0f9a44d480d7fd13f6e48e922e

Running cyclomatic operator on 54963327e9ad9c0f9a44d480d7fd13f6e48e922e
Running maintainability harvesterRunning halstead harvester

Running CC harvester
Creating 54963327e9ad9c0f9a44d480d7fd13f6e48e922e output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metricsRunning raw operator on 3aab5f37536fe8121b67601e594db90009405fd6Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running halstead operator on 3aab5f37536fe8121b67601e594db90009405fd6


Running maintainability operator on 3aab5f37536fe8121b67601e594db90009405fd6
Running raw harvesterRunning cyclomatic operator on 3aab5f37536fe8121b67601e594db90009405fd6Running halstead harvester
Running maintainability harvester


Running CC harvester
Creating 3aab5f37536fe8121b67601e594db90009405fd6 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 162751bcb06612cc833eda90511fec7570c8f0e7Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running halstead operator on 162751bcb06612cc833eda90511fec7570c8f0e7
Running maintainability operator on 162751bcb06612cc833eda90511fec7570c8f0e7

Running raw harvester
Running cyclomatic operator on 162751bcb06612cc833eda90511fec7570c8f0e7Running halstead harvesterRunning maintainability harvester


Running CC harvester
Creating 162751bcb06612cc833eda90511fec7570c8f0e7 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running raw operator on d53a3c480cd05c98a601a05fccf9106108e54fafRunning halstead operator on d53a3c480cd05c98a601a05fccf9106108e54faf

Running maintainability operator on d53a3c480cd05c98a601a05fccf9106108e54faf
Running cyclomatic operator on d53a3c480cd05c98a601a05fccf9106108e54faf
Running raw harvesterRunning halstead harvester
Running maintainability harvester

Running CC harvester
Creating d53a3c480cd05c98a601a05fccf9106108e54faf output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 23e7f7a628b6a3801ee4764ed6ffc7e71ff038bd
Running halstead operator on 23e7f7a628b6a3801ee4764ed6ffc7e71ff038bdUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running maintainability operator on 23e7f7a628b6a3801ee4764ed6ffc7e71ff038bdRunning raw harvester


Running halstead harvester
Running maintainability harvesterRunning cyclomatic operator on 23e7f7a628b6a3801ee4764ed6ffc7e71ff038bd

Running CC harvester
Creating 23e7f7a628b6a3801ee4764ed6ffc7e71ff038bd output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running halstead operator on c8623258a5ba6990e6b656dcff16718c4a53e9a8
Running raw operator on c8623258a5ba6990e6b656dcff16718c4a53e9a8Running cyclomatic operator on c8623258a5ba6990e6b656dcff16718c4a53e9a8

Running maintainability operator on c8623258a5ba6990e6b656dcff16718c4a53e9a8Running halstead harvester

Running CC harvesterRunning raw harvester

Running maintainability harvester
Creating c8623258a5ba6990e6b656dcff16718c4a53e9a8 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on bcce79d2e827c32153a1a199ddbb99f289f7694dUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics

Running halstead operator on bcce79d2e827c32153a1a199ddbb99f289f7694d
Running maintainability operator on bcce79d2e827c32153a1a199ddbb99f289f7694dRunning raw harvester
Running cyclomatic operator on bcce79d2e827c32153a1a199ddbb99f289f7694d

Running halstead harvester
Running CC harvester
Running maintainability harvester
Creating bcce79d2e827c32153a1a199ddbb99f289f7694d output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metricsRunning raw operator on f244b8234362cdcedd34cfd6098fff8c89d27082
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running halstead operator on f244b8234362cdcedd34cfd6098fff8c89d27082

Running raw harvesterRunning maintainability operator on f244b8234362cdcedd34cfd6098fff8c89d27082

Running halstead harvesterRunning cyclomatic operator on f244b8234362cdcedd34cfd6098fff8c89d27082

Running maintainability harvester
Running CC harvester
Creating f244b8234362cdcedd34cfd6098fff8c89d27082 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Running raw operator on 591282f224d5d128f4452a319e0ed9a3bcb058c1Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning halstead operator on 591282f224d5d128f4452a319e0ed9a3bcb058c1

Running raw harvester
Running halstead harvesterRunning cyclomatic operator on 591282f224d5d128f4452a319e0ed9a3bcb058c1Running maintainability operator on 591282f224d5d128f4452a319e0ed9a3bcb058c1


Running CC harvester
Running maintainability harvester
Creating 591282f224d5d128f4452a319e0ed9a3bcb058c1 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on cfd9c816bfaa22db1410ca9ec2223982daf94a42
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running halstead operator on cfd9c816bfaa22db1410ca9ec2223982daf94a42
Running raw harvester
Running maintainability operator on cfd9c816bfaa22db1410ca9ec2223982daf94a42
Running cyclomatic operator on cfd9c816bfaa22db1410ca9ec2223982daf94a42Running halstead harvesterRunning maintainability harvester


Running CC harvester
Creating cfd9c816bfaa22db1410ca9ec2223982daf94a42 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics

Running raw operator on 35323557108bd12bf701372fbefafb3200f9ba84
Running halstead operator on 35323557108bd12bf701372fbefafb3200f9ba84Running cyclomatic operator on 35323557108bd12bf701372fbefafb3200f9ba84
Running maintainability operator on 35323557108bd12bf701372fbefafb3200f9ba84Running raw harvester


Running halstead harvester
Running maintainability harvester
Running CC harvester
Creating 35323557108bd12bf701372fbefafb3200f9ba84 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running raw operator on 8fe90535c988d2f1c92ee01000a39d2f592d300e
Running halstead operator on 8fe90535c988d2f1c92ee01000a39d2f592d300eRunning maintainability operator on 8fe90535c988d2f1c92ee01000a39d2f592d300e

Running raw harvesterRunning cyclomatic operator on 8fe90535c988d2f1c92ee01000a39d2f592d300e

Running halstead harvesterRunning maintainability harvester

Running CC harvester
Creating 8fe90535c988d2f1c92ee01000a39d2f592d300e output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metricsRunning raw operator on 4729b198fbc98653918cdd3c6a642e5477728865Running maintainability operator on 4729b198fbc98653918cdd3c6a642e5477728865


Running halstead operator on 4729b198fbc98653918cdd3c6a642e5477728865
Running maintainability harvesterRunning cyclomatic operator on 4729b198fbc98653918cdd3c6a642e5477728865Running raw harvesterRunning halstead harvester



Running CC harvester
Creating 4729b198fbc98653918cdd3c6a642e5477728865 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on a393048d3fe094b9d8501b8974d70c2c74d19614

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running halstead operator on a393048d3fe094b9d8501b8974d70c2c74d19614
Running maintainability operator on a393048d3fe094b9d8501b8974d70c2c74d19614
Running raw harvester
Running halstead harvester
Running maintainability harvesterRunning cyclomatic operator on a393048d3fe094b9d8501b8974d70c2c74d19614

Running CC harvester
Creating a393048d3fe094b9d8501b8974d70c2c74d19614 output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metrics
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics
Running raw operator on d683eaeb97895d90ba685dc2708774082d0e0e3f

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running maintainability operator on d683eaeb97895d90ba685dc2708774082d0e0e3f
Running raw harvesterRunning halstead operator on d683eaeb97895d90ba685dc2708774082d0e0e3fRunning cyclomatic operator on d683eaeb97895d90ba685dc2708774082d0e0e3f
Running maintainability harvester


Running halstead harvester
Running CC harvester
Creating d683eaeb97895d90ba685dc2708774082d0e0e3f output
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'summary': False} for Raw metricsUsing ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False, 'by_function': True} for HC metrics

Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'C', 'multi': True, 'show': False, 'sort': False} for MI metrics
Running raw operator on 685b1af0405e0c94411951389310960ff7ac8e1eRunning halstead operator on 685b1af0405e0c94411951389310960ff7ac8e1e
Running maintainability operator on 685b1af0405e0c94411951389310960ff7ac8e1e

Running raw harvester
Using ('/Users/bgabor8/git/github/virtualenv/virtualenv.py',) with {'exclude': None, 'ignore': None, 'min': 'A', 'max': 'F', 'no_assert': True, 'show_closures': False, 'order': <function <lambda> at 0x1067d8d90>} for CC metrics
Running maintainability harvester
Running halstead harvester
Running cyclomatic operator on 685b1af0405e0c94411951389310960ff7ac8e1e
Running CC harvester
Creating 685b1af0405e0c94411951389310960ff7ac8e1e output
Saving data
Created index output
Completed building wily history, run `wily report <file>` or `wily index` to see more.

  1. report
CLICK ME

Could not locate wily.cfg, using default config.
Fixing path to /Users/bgabor8/git/github/virtualenv
Loaded configuration from wily.cfg
Generating cache for /Users/bgabor8/git/github/virtualenv
Cache path is /Users/bgabor8/.wily/a5f5d5cc0
Running report on virtualenv.py for metric ('mi',)
Output format is CONSOLE
Running report command
-----------History for ('mi',)------------
Initialised state indexes for archivers ['git']
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
Fetching metric mi for maintainability in virtualenv.py
Fetching metric virtualenv.py - mi for operator maintainability
╒════════════╤═════════════════╤════════════╤═════════════════════════╕
│ Revision   │ Author          │ Date       │ Maintainability Index   │
╞════════════╪═════════════════╪════════════╪═════════════════════════╡
│ ba9e73b    │ Bernat Gabor    │ 2019-05-06 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ f0ce306    │ Bernát Gábor    │ 2019-05-05 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 81904e4    │ Bernat Gabor    │ 2019-05-05 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 5e3a70c    │ Bernát Gábor    │ 2019-04-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 27a3171    │ Matt Cooper     │ 2019-04-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 1affb90    │ Matt Cooper     │ 2019-04-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 05933dd    │ Matt Cooper     │ 2019-04-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ debbaa4    │ Bernat Gabor    │ 2019-04-24 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ f9d0048    │ Bernát Gábor    │ 2019-04-24 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ dfca5ad    │ Bernát Gábor    │ 2019-04-24 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 1331037    │ Bernát Gábor    │ 2019-04-24 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ a0b556b    │ Bernat Gabor    │ 2019-04-24 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ f53a4ea    │ Bernát Gábor    │ 2019-04-24 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 1acc56f    │ Bernát Gábor    │ 2019-04-24 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 2c1e45a    │ Paul Moore      │ 2019-04-23 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 789cad5    │ Brian Skinn     │ 2019-04-11 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ c787671    │ Brian Skinn     │ 2019-04-10 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 124d0ed    │ Tithen-Firion   │ 2019-04-01 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 94c6bcb    │ Bernát Gábor    │ 2019-03-01 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 9025a9a    │ Bernát Gábor    │ 2019-03-01 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 3272f7b    │ Bernat Gabor    │ 2019-02-28 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ c37e89b    │ Bernát Gábor    │ 2019-02-28 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 824759c    │ Bernát Gábor    │ 2019-02-28 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 751f8f9    │ Aditya Bose     │ 2019-02-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 3374b37    │ Bernát Gábor    │ 2019-02-23 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ bdb1355    │ Bernát Gábor    │ 2019-02-22 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ bc1d76d    │ Bernat Gabor    │ 2019-02-22 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 2c482c8    │ Bernát Gábor    │ 2019-02-22 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 585b225    │ Anthony Sottile │ 2019-02-18 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 117f6f7    │ Anthony Sottile │ 2019-02-18 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ fef732c    │ Bernat Gabor    │ 2019-02-09 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ c9cf748    │ Bernat Gabor    │ 2019-02-09 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 6d75016    │ Bernát Gábor    │ 2019-02-09 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 76326e0    │ Bernat Gabor    │ 2019-02-09 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 5496332    │ rofl0r          │ 2019-02-09 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 3aab5f3    │ Bernát Gábor    │ 2019-02-09 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 162751b    │ Bernát Gábor    │ 2019-02-01 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ d53a3c4    │ daa             │ 2019-01-31 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 23e7f7a    │ daa             │ 2019-01-30 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ c862325    │ Anthony Sottile │ 2019-01-30 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ bcce79d    │ Anthony Sottile │ 2019-01-29 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ f244b82    │ Bernát Gábor    │ 2019-01-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 591282f    │ Bernat Gabor    │ 2019-01-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ cfd9c81    │ Anthony Sottile │ 2019-01-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 3532355    │ Bernat Gabor    │ 2019-01-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 8fe9053    │ Anthony Sottile │ 2019-01-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 4729b19    │ Bernát Gábor    │ 2019-01-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ a393048    │ daa             │ 2019-01-25 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ d683eae    │ Anthony Sottile │ 2019-01-15 │ 0 (0)                   │
├────────────┼─────────────────┼────────────┼─────────────────────────┤
│ 685b1af    │ Bernat Gabor    │ 2019-01-15 │ 0 (0)                   │
╘════════════╧═════════════════╧════════════╧═════════════════════════╛

Code Coverage

This isn't a criticism so please don't take it as such. I am also using Azure pipelines on an open source project and looking to send coverage results to codecover.io, which requires the use of an upload token. I was looking around to see how people were doing this and stumbled across your azure-pipelines.yml file and noticed that you have your token inside of the file but in plain text. I considered doing this but realized that now anybody could push coverage results.

Can you tell me if this is a safe approach or is there something that I'm overlooking?

How to use wily in pipeline

Hi,

I want to use the wily in jenkins pipeline to check the cyclometic complexity , halstead complexity. if it is more than certain value, it should not proceed further but the wily graph or report shows the output alone either in html or tabular. how to use wily in pipeline job

Consider adding Python 3.5 support

This project uses black, but that's not a requirement to execute it. It also uses f-strings, but those could be replaced with str.format easily

Please 👍 if you want to see this back-ported to 3.5

Support multiple metrics in graph command

In the same way report supports multiple metrics, the graph command should also support multiple metrics, and/or files

I would seperate this into metrics (first) then files. Metrics could adopt the default metrics function that report uses.

Consider using Pipenv or Poetry lock file

Both Poetry and Pipenv allow for a python equivalent of a Ruby/NPM lock file.

Using one of these tools to generate a lockfile for wily should make it easier for contributors to reproduce the same development environment and have a better awareness of the projects' dependency tree.

I'm more familiar with Pipenv than Poetry but one benefit of Poetry is that it already works nicely with pyproject.toml and the so the Lockfile would be the only new file that would need to be tracked.

With Pipenv we would need a Pipfile and Pipfiel.lock and the Pipfile would duplicate what's in the requires section of the pyproject.toml

Initial setup has too many steps

Requirement to :

  • add wily to .gitignore
  • run build
    Before the diff, report and graph commands can work is not ideal. Especially for the pre-commit plugin where it installs wily into a different venv so you need to install wily twice to run the build

wily graph gives "plotly.exceptions.PlotlyEmptyDataError: Empty data list found. Make sure that you populated the list of data objects you're sending and try again."

I've run wily on a project here at work, and while a wily report .... works for every file I try, any time I do a wily graph ... with any file I get:

Traceback (most recent call last):
  File "/Users/pzelnip/.virtualenvs/myproj/bin/wily", line 11, in <module>
    sys.exit(cli())
  File "/Users/pzelnip/.virtualenvs/myproj/lib/python3.6/site-packages/click/core.py", line 716, in __call__
    return self.main(*args, **kwargs)
  File "/Users/pzelnip/.virtualenvs/myproj/lib/python3.6/site-packages/click/core.py", line 696, in main
    rv = self.invoke(ctx)
  File "/Users/pzelnip/.virtualenvs/myproj/lib/python3.6/site-packages/click/core.py", line 1060, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/pzelnip/.virtualenvs/myproj/lib/python3.6/site-packages/click/core.py", line 889, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/pzelnip/.virtualenvs/myproj/lib/python3.6/site-packages/click/core.py", line 534, in invoke
    return callback(*args, **kwargs)
  File "/Users/pzelnip/.virtualenvs/myproj/lib/python3.6/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Users/pzelnip/.virtualenvs/myproj/lib/python3.6/site-packages/wily/__main__.py", line 224, in graph
    graph(config=config, paths=[files], metrics=metrics, output=output)
  File "/Users/pzelnip/.virtualenvs/myproj/lib/python3.6/site-packages/wily/commands/graph.py", line 92, in graph
    filename=filename,
  File "/Users/pzelnip/.virtualenvs/myproj/lib/python3.6/site-packages/plotly/offline/offline.py", line 618, in plot
    '100%', '100%', global_requirejs=False)
  File "/Users/pzelnip/.virtualenvs/myproj/lib/python3.6/site-packages/plotly/offline/offline.py", line 244, in _plot_html
    figure = tools.return_figure_from_figure_or_data(figure_or_data, validate)
  File "/Users/pzelnip/.virtualenvs/myproj/lib/python3.6/site-packages/plotly/tools.py", line 1521, in return_figure_from_figure_or_data
    "Empty data list found. Make sure that you populated the "
plotly.exceptions.PlotlyEmptyDataError: Empty data list found. Make sure that you populated the list of data objects you're sending and try again.
Questions? Visit support.plot.ly

Is there an extra setup step to getting graph to work? All I've done is the pip install wily since that's all that's mentioned in the docs

In case it matters:

Python 3.6.2
OS: OSX 10.12.6 (Sierra)
wily==1.4.0

Show version number in CLI

--help command should show wily.__version__ in heading.

Also a --version/-V flag should be available in the CLI

Add directory/path aggregation metrics

  • Should be built as part of build command
  • IF build adds revisions, should be updated in index
  • Should work with report, diff and graph commands
  • Graph to be updated to show aggregate or granular for path graphing

Wily fails to build cache

  • Python 3.6.6 on Ubuntu as a WSL on Windows 10
  • wily==1.8.0 (btw would be nice to see version number when using "wily" or "wily help"
  • fairly big project
  • after like 10-15 minutes I receive the following output
Found 50 revisions from 'git' archiver in '/mnt/d/Projects/bliss_deployment/work/zope/checkout/bliss.git'.
Running operators - raw,cyclomatic,maintainability


Failed to build cache: ''
multiprocessing.pool.RemoteTraceback:
"""
Traceback (most recent call last):
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 119, in worker
    result = (True, func(*args, **kwds))
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 47, in starmapstar
    return list(itertools.starmap(args[0], args[1]))
  File "/mnt/d/Projects/envs/wily/lib/python3.6/site-packages/wily/commands/build.py", line 24, in run_operator
    return operator.name, instance.run(revision, config)
  File "/mnt/d/Projects/envs/wily/lib/python3.6/site-packages/wily/operators/cyclomatic.py", line 81, in run
    raise TypeError
TypeError
"""

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/mnt/d/Projects/envs/wily/bin/wily", line 11, in <module>
    sys.exit(cli())
  File "/mnt/d/Projects/envs/wily/lib/python3.6/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/mnt/d/Projects/envs/wily/lib/python3.6/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/mnt/d/Projects/envs/wily/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/mnt/d/Projects/envs/wily/lib/python3.6/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/mnt/d/Projects/envs/wily/lib/python3.6/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/mnt/d/Projects/envs/wily/lib/python3.6/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/mnt/d/Projects/envs/wily/lib/python3.6/site-packages/wily/__main__.py", line 123, in build
    operators=resolve_operators(config.operators),
  File "/mnt/d/Projects/envs/wily/lib/python3.6/site-packages/wily/commands/build.py", line 125, in build
    raise e
  File "/mnt/d/Projects/envs/wily/lib/python3.6/site-packages/wily/commands/build.py", line 84, in build
    [(operator, revision, config) for operator in operators],
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 296, in starmap
    return self._map_async(func, iterable, starmapstar, chunksize).get()
  File "/usr/lib/python3.6/multiprocessing/pool.py", line 670, in get
    raise self._value
TypeError```

pre-commit hook is broken in 1.12.2

Because of the dynamic cache folders, the pre-commit hook will execute from a different directory and not detect the cache folder of the root path

➜  notations git:(master) ✗ git commit -m "add while test"
wily.....................................................................Failed
hookid: wily

Using default metrics []
Traceback (most recent call last):
  File "/Users/anthonyshaw/.cache/pre-commit/repo9vvhlva6/py_env-python3.6/bin/wily", line 11, in <module>
    sys.exit(cli())
  File "/Users/anthonyshaw/.cache/pre-commit/repo9vvhlva6/py_env-python3.6/lib/python3.6/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/Users/anthonyshaw/.cache/pre-commit/repo9vvhlva6/py_env-python3.6/lib/python3.6/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/Users/anthonyshaw/.cache/pre-commit/repo9vvhlva6/py_env-python3.6/lib/python3.6/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/Users/anthonyshaw/.cache/pre-commit/repo9vvhlva6/py_env-python3.6/lib/python3.6/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/Users/anthonyshaw/.cache/pre-commit/repo9vvhlva6/py_env-python3.6/lib/python3.6/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/Users/anthonyshaw/.cache/pre-commit/repo9vvhlva6/py_env-python3.6/lib/python3.6/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/Users/anthonyshaw/.cache/pre-commit/repo9vvhlva6/py_env-python3.6/lib/python3.6/site-packages/wily/__main__.py", line 202, in diff
    config=config, files=files, metrics=metrics, changes_only=not all, detail=detail
  File "/Users/anthonyshaw/.cache/pre-commit/repo9vvhlva6/py_env-python3.6/lib/python3.6/site-packages/wily/commands/diff.py", line 35, in diff
    raise RuntimeError("Missing index, run `wily build`.")
RuntimeError: Missing index, run `wily build`.

Cache Test failes on Windows if using different partition

If you're working on a Windows OS and wily is cloned to a different partition, the test test_store_twice failes.

OS: Windows 10 Version 1803 (Build 17134.471)
Commit: 7ba461c
Python: 3.6.8rc1
wily path: P:\Python\wily
Python path: C:\Program Files\Python36\python3.6.exe

Error:

______________________________ test_store_twice _______________________________

tmpdir = local('C:\\Users\\Florian\\AppData\\Local\\Temp\\pytest-of-unknown\\pytest-3\\test_store_twice0')

    def test_store_twice(tmpdir):
        """ Test that you can't write the same revision twice """
        config = DEFAULT_CONFIG
        cache_path = pathlib.Path(tmpdir) / ".wily"
        cache_path.mkdir()
        config.cache_path = cache_path
        target_path = str(pathlib.Path(tmpdir) / "foo" / "bar.py")
        _TEST_STATS = {"operator_data": {"test": {target_path: {"metric1": 1}}}}
        _TEST_REVISION = Revision(
            key="12345",
            author_name="Anthony Shaw",
            author_email="[email protected]",
            date="17/01/1990",
            message="my changes",
        )
        fn = cache.store(config, ARCHIVER_GIT, _TEST_REVISION, _TEST_STATS)
        with pytest.raises(RuntimeError):
>           cache.store(config, ARCHIVER_GIT, _TEST_REVISION, _TEST_STATS)

test\unit\test_cache.py:135:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
wily\cache.py:129: in store
    new_key = os.path.relpath(str(k), str(config.path))
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

path = '..\\test_store_twice0\\foo\\bar.py'
start = 'C:\\Users\\Florian\\AppData\\Local\\Temp\\pytest-of-unknown\\pytest-3\\test_git_revisions0'

    def relpath(path, start=None):
        """Return a relative version of a path"""
        path = os.fspath(path)
        if isinstance(path, bytes):
            sep = b'\\'
            curdir = b'.'
            pardir = b'..'
        else:
            sep = '\\'
            curdir = '.'
            pardir = '..'

        if start is None:
            start = curdir

        if not path:
            raise ValueError("no path specified")

        start = os.fspath(start)
        try:
            start_abs = abspath(normpath(start))
            path_abs = abspath(normpath(path))
            start_drive, start_rest = splitdrive(start_abs)
            path_drive, path_rest = splitdrive(path_abs)
            if normcase(start_drive) != normcase(path_drive):
                raise ValueError("path is on mount %r, start on mount %r" % (
>                   path_drive, start_drive))
E                   ValueError: path is on mount 'P:', start on mount 'C:'

.tox\py36\lib\ntpath.py:584: ValueError```

Documentation error for wily.cfg

I tried to use the config file from the docs, but it did not work. The config file expects a [wily] header but one is not present in the example file.

Installs with pip on python 2

Hi,

I pip installed wily on a python2. And pip allowed me to do that. But it shouldn't work given that you use f-strings. I think it is possible to indicate a minimal python version (3.6?) on pipy.
Perhaps this isn't an issue against the code base, but as I can't think of a better place to report it, I'll do it here.

Bert

If no directory specified, give warning/error message

I did a:

wily build -n 2000

to produce metrics over the last 2000 commits. That finished quickly, but of course then any report showed no data as I failed to specify the directory to analyze.

It took me a bit to figure that out (I assumed that since it coincided with using the -n param that I had stumbled across a bug). I think it'd be better if wily spat out a warning or an error if one leaves off the target(s) to analyze. Something like:

$ wily build

WARNING: no target(s) specified, do you want to do "wily build somepath/"?

Found 150 revisions from 'git' archiver in '/path/to/your/repo'.
Running operators - raw,maintainability,cyclomatic
Processing |#                               | 10/450

TypeError: unsupported operand type(s) for +: 'int' and 'dict'

I attempted to run wily build nengo/ on the master branch of https://github.com/nengo/nengo and I get the following error:

~/C/nengo (nengo) wily build nengo/                                           (master) 
Found 50 revisions from 'git' archiver in '/home/tbekolay/Code/nengo'.
Running operators - maintainability,halstead,cyclomatic,raw
Processing |                                | 1/200Failed to build cache: 'unsupported operand type(s) for +: 'int' and 'dict''
Traceback (most recent call last):
  File "/home/tbekolay/.virtualenvs/nengo/bin/wily", line 10, in <module>
    sys.exit(cli())
  File "/home/tbekolay/.virtualenvs/nengo/lib/python3.7/site-packages/click/core.py", line 764, in __call__
    return self.main(*args, **kwargs)
  File "/home/tbekolay/.virtualenvs/nengo/lib/python3.7/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/home/tbekolay/.virtualenvs/nengo/lib/python3.7/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/tbekolay/.virtualenvs/nengo/lib/python3.7/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/tbekolay/.virtualenvs/nengo/lib/python3.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/tbekolay/.virtualenvs/nengo/lib/python3.7/site-packages/click/decorators.py", line 17, in new_func
    return f(get_current_context(), *args, **kwargs)
  File "/home/tbekolay/.virtualenvs/nengo/lib/python3.7/site-packages/wily/__main__.py", line 132, in build
    operators=resolve_operators(config.operators),
  File "/home/tbekolay/.virtualenvs/nengo/lib/python3.7/site-packages/wily/commands/build.py", line 127, in build
    raise e
  File "/home/tbekolay/.virtualenvs/nengo/lib/python3.7/site-packages/wily/commands/build.py", line 116, in build
    result[str(root)][metric.name] = func(values)
TypeError: unsupported operand type(s) for +: 'int' and 'dict'

This is a little puzzling since the line that it's pointing to doesn't contain an addition statement, as far as I can tell.

This was run in a Python 3.7 virtual environment with wily version 1.12.2. Let me know if I can provide any more information to help with debugging.

Git archiver guard is too specific

The git archiver will stop if “.wily/“ is not in .gitignore. This is very specific, there could be other ways to specify the folder, eg
.wily

Enhance the API to support the cyclomatic data

The cyclomatic data is not file-level like the maintainability and raw metrics. It is a tree of the entities within that module. Eg.:

"operator_data": {
    "cyclomatic": {
      "test/unit/test_config.py": [
        [
          "test_config_empty_defaults",
          5,
          0,
          5,
          false,
          null,
          [],
          2
        ],
        [
          "test_config_archiver",
          22,
          0,
          22,
          false,
          null,
          [],
          2
        ],
        [
          "test_config_operators",
          41,
          0,
          41,
          false,
          null,
          [],
          2
        ],
        [
          "test_config_archiver",
          60,
          0,
          60,
          false,
          null,
          [],
          2
        ]
      ],

The API (the report, graph and diff commands) only support file-attributes and don't have a way to specify a function, class etc within a module.

  1. Extend the cache API to fetch an attribute within a file (function, class). I like the way PyTest works to specify classes/test functions, e.g. module:class:function
  2. Consider creating aggregate metrics (e.g. average cyclomatic complexity of module) as a file-level attribute to make it easy to use within existing API
  3. Think through the graph API.

Each of these should be broken up into seperate PRs IMO.

Jupyter noteboooks

Not working with jupyter notebooks. Because of the underlying notebooks JSON code, does this make it too difficult to capture metrics?

Support HTML reports

Provide an option for the wily report command to output in HTML.

I'm a fan of the --cov-report=html option in pytest-cov

Cannot override targets from wily.cfg

Example wily.cfg file:

[wily]
max_revisions = 100
path = ./tests,config.py,./load

Run:
wily build

Expected behavior:
Generates wily cache. Existing code in the WilyConfig class has support for defaulting the targets to the passed path.

Actual behavior:
Prints help message because targets are missing.

Possible Solution:
Remove required=True from the click option, set config.targets only if targets are passed, and do a check that config.targets are defined before running build.

wily build is finding EOL and syntax errors in clean code

I am getting Halstead harvester EOL while scanning string literal and unknown syntax errors when doing wily build . on code that runs as expected and passes both black and flake8 tests. Is this a know issue? Some lines that are sighted do not even have string literals on them or near them.

Wily Report CLI Syntax Change

Consider moving the --metric option from the [OPTIONS] part of the wily report [OPTIONS] FILE to be after the required FILE parameter. From my initial experience, this would make the order in which the metric is specified consistent with the wily graph flow (e.g., wily graph [OPTIONS] FILES METRICS).

Build a ranking command

Build a command which can list files, methods or functions in order of any of the metrics, e.g. complexity.

Useful for reducing complexity.

Wily fails to properly handle `'error'` value returned from radon

If a radon harvestor fails to run on a revision or file, it simply puts the value 'error' for the dictionary.

Internally to radon, the

Wily should

  • Log this error and the file that produced it as a warning, not a debug message
  • Handle it gracefully and either skip this file from the index revision, or the whole revision
  • Commands should either not contain this revision or show 'invalid' instead of crashing :-)

This issue should contain

  • A test to build against some large projects which are known to have issues

See #36 for example

Add halstead metrics as an operator

Ensure that the following halstead metrics can be captured:

  • Effort
  • Volume
  • Vocabulary
  • Difficulty
  • Length

This would require a new operator, radon can already capture all of these metrics (it uses some to calculate maintainability index).

Don't think this should be a default operator.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.