A counting program used for different Python packages and modules.
Project description
PyPi-Counter
Table of Contents
Overview
-
This project is a tool that, on its own, will provide assistance to computer science professors to assist in grading assignments. This tool will count and output the number of 'common errors' (e.g., Classes without docstrings, functions without docstrings, etc.) as well as the number of common computing structures (e.g., functions, Classes, looping constructs, imports, etc.) all as specified by the user in the command line interface.
-
This project also can serve as a collaborative enhancement to import this tool into Allegheny College's own GatorGrader to create new GatorGrader checks. The program utilizes LibCST, which parses Python code as a CST (Concrete Syntax Tree) that keeps all formatting details (comments, white spaces, parentheses, etc.). As a released tool on PiPy, this tool can be imported into any other automated grading tool as well.
Usefulness of Project
- Within LibCST, it has many nodes to "match" modules, expressions, and statements which allowed us as programmers to complete our user stories in a more uniform way. This project is useful because of the exploration of LibCST, which ultimately allows end users to specify a given construct they would like to identify in the source code (as LibCST will find all matches of this construct).
Getting Started
Importing into Another Grading Tool
If you would like to display the results for all of our functions, please follow the following steps. Please note that these steps will only work if your program is able to use Typer
as a dependency.
- Install from PyPi by running
poetry add pypi-counter
orpip install pypi
in your terminal. - Add the following import statements to your main program file:
from pypi_count import command_line_interface
andfrom pypi_count import *
andimport typer
- Add the desired file you want analyzed as a part of the main arguments in the following way:
cli = typer.Typer()
@cli.command()
def main(
analyze: Path = typer.Option("path/to/file"),
):
Throughout this example, analyze
is an instance variable that stores the
result of the parsed file. Functions must be called on a parsed file.
4. Add the following syntax inside your main function: command_line_interface.main(analyze)
.
This will display the counting results for all of our available functions in the format that they are given.
Alternatively, the following steps should be used if you would like to add the PyPi-Counter as a part of your program or project. This will ensure that only specified functions will be displayed in your output along with the rest of your program.
- Install from PyPi by running
poetry add pypi-counter
in your terminal. - Import the PyPiCounter package with the syntax:
from pypi_count.py_counter import PyPiCount
. - Call
PyPiCount
Class on specified file with the following syntax:stored_path = PyPiCount("path_to_file")
Throughout this example,stored_path
is an instance variable that stores the result of the parsed file. Functions must be called on a parsed file. - Run the functions in the package using the
stored_path.[function_name]
syntax. For example,stored_path.count_comments()
For best results, we recommend adding a print statement, as the functions will only return the number of the specified construct. For example,
console.print(f"Number of comments in this file: {stored_path.count_comments()}")
Will produce:
Number of comments in this file: 26
The list of functions available are:
count_class_definitions(file_name)
# returns the number of class definitions
count_comments(file_name)
# returns the number of comments
count_import_statements(file_name)
# returns the number of import statements
count_for_loops(file_name)
# returns the number of for loops
count_while_loops(file_name)
# returns the number of while loops
count_function_definitions(file_name)
# returns the number of function definitions
count_functions_without_docstrings(file_name)
# returns the number of functions without docstrings
count_functions_with_docstrings(file_name)
# returns the number of functions with docstrings
count_classes_with_docstrings(file_name)
# returns the number of classes with docstrings
count_classes_without_docstrings(file_name)
# returns the number of classes without docstrings
count_function_parameters(file_name, function_name)
# returns the number of function parameters
# after specifying the function name
count_assignment_statements(file_name)
# returns the number of assignment statements
count_augmented_assignment_statements(file_name)
# returns the number of assignment statements that include
an augmented assignment operator (+=, -=)
Stand-Alone Usage
Users can get started with this project by following the following steps:
- Install the package with pip, using the command
pip install pypi-counter
,pipx install pypi-counter
, orpoetry add pypi-counter
- To familiarize yourself with the arguments accepted for this project, run the
command
poetry run pypicount --help
if your program contains a poetry.lock file orpypicount --help
if your program does not use poetry. This command displays all of the different arguments that can be passed. The list of the different arguments are listed below:
Usage: pypicount [OPTIONS] INPUT_FILE
Main method to display the different options.
Arguments:
INPUT_FILE [required]
Options:
--class-definitions [default: False]
--import-statements [default: False]
--comments [default: False]
--function-definitions [default: False]
--if-statements [default: False]
--function-without-docstrings [default: False]
--function-with-docstrings [default: False]
--class-with-docstrings [default: False]
--class-without-docstrings [default: False]
--function-parameters TEXT
--assignment-statements [default: False]
--augmented-assignment-statements
[default: False]
--while-loops [default: False]
--for-loops [default: False]
--install-completion Install completion for the current shell.
--show-completion Show completion for the current shell, to
copy it or customize the installation.
--help Show this message and exit.
These are the different types of arguments that PyPi-Counter will accept in this release. As the path to a file is a required parameter, you will not be able to run this program without specifying a path to a file in your run command.
Once you find your chosen arguments, run the following if using with poetry:
poetry run pypicount --[argument] path/to/file
or if you are using without poetry:
pypicount --[argument] path/to/file
Example of Output
Sample run command with installation using poetry:
poetry run pypicount --class-with-docstrings tests/input/sample_file.py
Sample Output:
# of functions with docstrings: 1
Sample run command with installation using pip:
pypicount --class-with-docstrings tests/input/sample_file.py
Sample Output:
# of functions with docstrings: 1
Help and Bug Fixes
- Users who are having trouble with navigating the program can come to the ReadMe for assistance.
- Users can also open an issue on our Issue Tracker
with the following format:
- Describe the bug
- Include steps to replicate the bug
- Expected behavior
- Screenshots
- Desktop OS
Authors
- The people who maintain and contribute to this project are
- Alexis Caldwell, @caldwella2
- Adriana Solis, @solisa986
- Rachael Harris, @rachaelharris
- Ramon Guzman, @guzmanr04
- Ryan Hilty, @RyanHiltyAllegheny
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for PyPi_Counter-0.3.2-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 1edd3165ad4e396fd682e3b5d8d36e643ce7e2c4c57fa6a6a16f16f348bd21ce |
|
MD5 | 39443872107b2d57226e2dccda600a0f |
|
BLAKE2b-256 | d7b14f8088093a0fa50f77417375e5333e96fa106aa856f6fded993b9342a662 |