From b7387312105c66afd637bb2d3029ec3329007756 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davide=20Col=C3=AC?= Date: Tue, 15 Apr 2025 18:10:24 +0200 Subject: [PATCH 1/3] BUG: Fix "Too Many" files error in GitPython MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Before: when you had a huge amount of files in your repo, you would get an error raised from GitPython and colint would not work - Now: files are batched 100 by 100 anf GitPython will process them nicely. Signed-off-by: Davide Colì --- colint/utils/os_utils.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/colint/utils/os_utils.py b/colint/utils/os_utils.py index 3dbdd3c..0262762 100644 --- a/colint/utils/os_utils.py +++ b/colint/utils/os_utils.py @@ -52,8 +52,12 @@ def get_valid_files(path: str | Path) -> list[str]: str(f) for f in Path(path).rglob("*") if f.is_file() and ".git" not in f.parts ] + valid_files = set(files) + if repo: # If a git repository exists, remove files in gitignore - repo_ignore = set(repo.ignored(files)) - files = list(set(files).difference(repo_ignore)) + batch_size = 100 + for k in range(0, len(files), batch_size): + repo_ignore = set(repo.ignored(files[k : k + batch_size])) + valid_files.difference_update(repo_ignore) - return sorted(files) + return sorted(list(valid_files)) From 7c34ffb9a272b11a830f356da6f068a7be55413a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davide=20Col=C3=AC?= Date: Tue, 15 Apr 2025 18:13:16 +0200 Subject: [PATCH 2/3] BUG: Fix Isort Inconsistencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Before: Isort would give different results depending on the subfolder you were in. - Now: Isort will always give the results as if you were in the Git repository main directory. Signed-off-by: Davide Colì --- colint/sort_libraries/sorter.py | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/colint/sort_libraries/sorter.py b/colint/sort_libraries/sorter.py index a312161..92db1c2 100644 --- a/colint/sort_libraries/sorter.py +++ b/colint/sort_libraries/sorter.py @@ -1,11 +1,12 @@ import io +import os from pathlib import Path import isort from ..params.isort_params import IsortParams from ..utils.jupyter_utils import JupyterNotebokParser -from ..utils.os_utils import get_valid_files +from ..utils.os_utils import get_git_repo, get_valid_files from ..utils.text_styling_utils import TextModifiers, style_text FILE_SORTED_MESSAGE = "! File has been sorted: " @@ -89,6 +90,12 @@ def sort_imports(path: str, only_check: bool, params: IsortParams) -> bool: bool: Boolean indicating if any imports have been sorted in any file. """ files = get_valid_files(path) + git_repo = get_git_repo(path) + current_directory = os.getcwd() + + if git_repo is not None: + new_dir = Path(git_repo.git_dir).parent.absolute() + os.chdir(str(new_dir)) some_file_has_been_sorted = False @@ -125,4 +132,7 @@ def sort_imports(path: str, only_check: bool, params: IsortParams) -> bool: if file_not_linted: print(__style_message(f, only_check)) + if os.getcwd() != current_directory: + os.chdir(current_directory) + return some_file_has_been_sorted From e432d94bce18ecae87e4034fea8ce1be8464f381 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davide=20Col=C3=AC?= Date: Tue, 15 Apr 2025 18:15:26 +0200 Subject: [PATCH 3/3] Convert setup.py/requirements.txt to pyproject.toml MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Migrated project configuration from `setup.py` and `requirements.txt` configuration to a more modern `pyproject.toml`. - Upgraded black to 25.1.0 - Upgraded isort to 6.0.1 Signed-off-by: Davide Colì --- pyproject.toml | 37 ++++++++++++++ requirements.txt | 48 ------------------- setup.py | 18 ------- {colint => src/colint}/__init__.py | 0 .../colint}/clean_jupyter/__init__.py | 0 .../colint}/clean_jupyter/clean_jupyter.py | 0 .../colint}/code_format/__init__.py | 0 .../colint}/code_format/code_format.py | 0 {colint => src/colint}/colinter.py | 2 +- .../pyproject.toml => src/colint/config.toml | 0 {colint => src/colint}/docformat/__init__.py | 0 .../colint}/docformat/apply_google_style.py | 0 {colint => src/colint}/docformat/docformat.py | 0 .../docformat/format_commented_lines.py | 0 .../colint}/docformat/format_docstring.py | 0 .../colint}/docformat/format_text.py | 0 .../colint}/grammar_libraries/__init__.py | 0 .../colint}/grammar_libraries/flake8error.py | 0 .../get_custom_style_guide.py | 0 .../grammar_libraries/grammar_check.py | 0 .../colint}/newline_fix/__init__.py | 0 .../colint}/newline_fix/newline_fix.py | 0 {colint => src/colint}/params/__init__.py | 0 {colint => src/colint}/params/black_params.py | 0 {colint => src/colint}/params/exceptions.py | 0 .../colint}/params/flake8_params.py | 0 {colint => src/colint}/params/isort_params.py | 0 {colint => src/colint}/params/params.py | 0 .../colint}/sort_libraries/__init__.py | 0 .../colint}/sort_libraries/sorter.py | 0 {colint => src/colint}/utils/__init__.py | 0 {colint => src/colint}/utils/exceptions.py | 0 {colint => src/colint}/utils/jupyter_utils.py | 0 {colint => src/colint}/utils/os_utils.py | 0 .../colint}/utils/text_styling_utils.py | 0 35 files changed, 38 insertions(+), 67 deletions(-) create mode 100644 pyproject.toml delete mode 100644 requirements.txt delete mode 100644 setup.py rename {colint => src/colint}/__init__.py (100%) rename {colint => src/colint}/clean_jupyter/__init__.py (100%) rename {colint => src/colint}/clean_jupyter/clean_jupyter.py (100%) rename {colint => src/colint}/code_format/__init__.py (100%) rename {colint => src/colint}/code_format/code_format.py (100%) rename {colint => src/colint}/colinter.py (98%) rename colint/pyproject.toml => src/colint/config.toml (100%) rename {colint => src/colint}/docformat/__init__.py (100%) rename {colint => src/colint}/docformat/apply_google_style.py (100%) rename {colint => src/colint}/docformat/docformat.py (100%) rename {colint => src/colint}/docformat/format_commented_lines.py (100%) rename {colint => src/colint}/docformat/format_docstring.py (100%) rename {colint => src/colint}/docformat/format_text.py (100%) rename {colint => src/colint}/grammar_libraries/__init__.py (100%) rename {colint => src/colint}/grammar_libraries/flake8error.py (100%) rename {colint => src/colint}/grammar_libraries/get_custom_style_guide.py (100%) rename {colint => src/colint}/grammar_libraries/grammar_check.py (100%) rename {colint => src/colint}/newline_fix/__init__.py (100%) rename {colint => src/colint}/newline_fix/newline_fix.py (100%) rename {colint => src/colint}/params/__init__.py (100%) rename {colint => src/colint}/params/black_params.py (100%) rename {colint => src/colint}/params/exceptions.py (100%) rename {colint => src/colint}/params/flake8_params.py (100%) rename {colint => src/colint}/params/isort_params.py (100%) rename {colint => src/colint}/params/params.py (100%) rename {colint => src/colint}/sort_libraries/__init__.py (100%) rename {colint => src/colint}/sort_libraries/sorter.py (100%) rename {colint => src/colint}/utils/__init__.py (100%) rename {colint => src/colint}/utils/exceptions.py (100%) rename {colint => src/colint}/utils/jupyter_utils.py (100%) rename {colint => src/colint}/utils/os_utils.py (100%) rename {colint => src/colint}/utils/text_styling_utils.py (100%) diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 0000000..0586ecb --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,37 @@ +[build-system] +requires = ["setuptools>=60.5", "wheel"] +build-backend = "setuptools.build_meta" + +[project] +name = "colint" +version = "0.1" +description = "" +authors = [ + { name = "Davide Colì", email = "davide.coli@secomind.com" }, +] +readme = "README.md" +requires-python = ">=3.10" +dependencies = [ + "black>=25.1.0", + "exceptiongroup>=1.2.2", + "flake8-docstrings>=1.7.0", + "GitPython>=3.1.43", + "ipykernel>=6.29.5", + "isort>=6.0.1", + "tokenize-rt>=6.0.0", + "toml>=0.10.2", + "tomli>=2.0.1", + "typing-extensions>=4.12.2", +] + +[project.scripts] +colint = "colint.colinter:main" + +[tool.setuptools] +package-dir = {"" = "src"} + +[tool.setuptools.packages.find] +where = ["src"] + +[tool.setuptools.package-data] +"colint" = ["*.toml"] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index e211846..0000000 --- a/requirements.txt +++ /dev/null @@ -1,48 +0,0 @@ -asttokens==2.4.1 -black==24.8.0 -click==8.1.7 -comm==0.2.2 -debugpy==1.8.5 -decorator==5.1.1 -exceptiongroup==1.2.2 -executing==2.1.0 -flake8==7.1.1 -flake8-docstrings==1.7.0 -gitdb==4.0.11 -GitPython==3.1.43 -ipykernel==6.29.5 -ipython==8.27.0 -isort==5.13.2 -jedi==0.19.1 -jupyter_client==8.6.3 -jupyter_core==5.7.2 -matplotlib-inline==0.1.7 -mccabe==0.7.0 -mypy-extensions==1.0.0 -nest-asyncio==1.6.0 -packaging==24.1 -parso==0.8.4 -pathspec==0.12.1 -pexpect==4.9.0 -platformdirs==4.3.2 -prompt_toolkit==3.0.47 -psutil==6.0.0 -ptyprocess==0.7.0 -pure_eval==0.2.3 -pycodestyle==2.12.1 -pydocstyle==6.3.0 -pyflakes==3.2.0 -Pygments==2.18.0 -python-dateutil==2.9.0.post0 -pyzmq==26.2.0 -six==1.16.0 -smmap==5.0.1 -snowballstemmer==2.2.0 -stack-data==0.6.3 -tokenize-rt==6.0.0 -toml==0.10.2 -tomli==2.0.1 -tornado==6.4.1 -traitlets==5.14.3 -typing_extensions==4.12.2 -wcwidth==0.2.13 diff --git a/setup.py b/setup.py deleted file mode 100644 index b93101f..0000000 --- a/setup.py +++ /dev/null @@ -1,18 +0,0 @@ -from setuptools import find_packages, setup - -with open("requirements.txt") as f: - requirements = f.read().splitlines() -setup( - name="colint", - version="0.1", - packages=find_packages(), - package_data={ - "colint": ["pyproject.toml"], - }, - install_requires=requirements, - entry_points={ - "console_scripts": [ - "colint=colint.colinter:main", - ], - }, -) diff --git a/colint/__init__.py b/src/colint/__init__.py similarity index 100% rename from colint/__init__.py rename to src/colint/__init__.py diff --git a/colint/clean_jupyter/__init__.py b/src/colint/clean_jupyter/__init__.py similarity index 100% rename from colint/clean_jupyter/__init__.py rename to src/colint/clean_jupyter/__init__.py diff --git a/colint/clean_jupyter/clean_jupyter.py b/src/colint/clean_jupyter/clean_jupyter.py similarity index 100% rename from colint/clean_jupyter/clean_jupyter.py rename to src/colint/clean_jupyter/clean_jupyter.py diff --git a/colint/code_format/__init__.py b/src/colint/code_format/__init__.py similarity index 100% rename from colint/code_format/__init__.py rename to src/colint/code_format/__init__.py diff --git a/colint/code_format/code_format.py b/src/colint/code_format/code_format.py similarity index 100% rename from colint/code_format/code_format.py rename to src/colint/code_format/code_format.py diff --git a/colint/colinter.py b/src/colint/colinter.py similarity index 98% rename from colint/colinter.py rename to src/colint/colinter.py index d07d7e3..d525c13 100644 --- a/colint/colinter.py +++ b/src/colint/colinter.py @@ -10,7 +10,7 @@ from .params.params import Params from .sort_libraries.sorter import sort_imports -config_file = Path(__file__).parent / "pyproject.toml" +config_file = Path(__file__).parent / "config.toml" params = Params.from_toml(config_file) COMMANDS = { diff --git a/colint/pyproject.toml b/src/colint/config.toml similarity index 100% rename from colint/pyproject.toml rename to src/colint/config.toml diff --git a/colint/docformat/__init__.py b/src/colint/docformat/__init__.py similarity index 100% rename from colint/docformat/__init__.py rename to src/colint/docformat/__init__.py diff --git a/colint/docformat/apply_google_style.py b/src/colint/docformat/apply_google_style.py similarity index 100% rename from colint/docformat/apply_google_style.py rename to src/colint/docformat/apply_google_style.py diff --git a/colint/docformat/docformat.py b/src/colint/docformat/docformat.py similarity index 100% rename from colint/docformat/docformat.py rename to src/colint/docformat/docformat.py diff --git a/colint/docformat/format_commented_lines.py b/src/colint/docformat/format_commented_lines.py similarity index 100% rename from colint/docformat/format_commented_lines.py rename to src/colint/docformat/format_commented_lines.py diff --git a/colint/docformat/format_docstring.py b/src/colint/docformat/format_docstring.py similarity index 100% rename from colint/docformat/format_docstring.py rename to src/colint/docformat/format_docstring.py diff --git a/colint/docformat/format_text.py b/src/colint/docformat/format_text.py similarity index 100% rename from colint/docformat/format_text.py rename to src/colint/docformat/format_text.py diff --git a/colint/grammar_libraries/__init__.py b/src/colint/grammar_libraries/__init__.py similarity index 100% rename from colint/grammar_libraries/__init__.py rename to src/colint/grammar_libraries/__init__.py diff --git a/colint/grammar_libraries/flake8error.py b/src/colint/grammar_libraries/flake8error.py similarity index 100% rename from colint/grammar_libraries/flake8error.py rename to src/colint/grammar_libraries/flake8error.py diff --git a/colint/grammar_libraries/get_custom_style_guide.py b/src/colint/grammar_libraries/get_custom_style_guide.py similarity index 100% rename from colint/grammar_libraries/get_custom_style_guide.py rename to src/colint/grammar_libraries/get_custom_style_guide.py diff --git a/colint/grammar_libraries/grammar_check.py b/src/colint/grammar_libraries/grammar_check.py similarity index 100% rename from colint/grammar_libraries/grammar_check.py rename to src/colint/grammar_libraries/grammar_check.py diff --git a/colint/newline_fix/__init__.py b/src/colint/newline_fix/__init__.py similarity index 100% rename from colint/newline_fix/__init__.py rename to src/colint/newline_fix/__init__.py diff --git a/colint/newline_fix/newline_fix.py b/src/colint/newline_fix/newline_fix.py similarity index 100% rename from colint/newline_fix/newline_fix.py rename to src/colint/newline_fix/newline_fix.py diff --git a/colint/params/__init__.py b/src/colint/params/__init__.py similarity index 100% rename from colint/params/__init__.py rename to src/colint/params/__init__.py diff --git a/colint/params/black_params.py b/src/colint/params/black_params.py similarity index 100% rename from colint/params/black_params.py rename to src/colint/params/black_params.py diff --git a/colint/params/exceptions.py b/src/colint/params/exceptions.py similarity index 100% rename from colint/params/exceptions.py rename to src/colint/params/exceptions.py diff --git a/colint/params/flake8_params.py b/src/colint/params/flake8_params.py similarity index 100% rename from colint/params/flake8_params.py rename to src/colint/params/flake8_params.py diff --git a/colint/params/isort_params.py b/src/colint/params/isort_params.py similarity index 100% rename from colint/params/isort_params.py rename to src/colint/params/isort_params.py diff --git a/colint/params/params.py b/src/colint/params/params.py similarity index 100% rename from colint/params/params.py rename to src/colint/params/params.py diff --git a/colint/sort_libraries/__init__.py b/src/colint/sort_libraries/__init__.py similarity index 100% rename from colint/sort_libraries/__init__.py rename to src/colint/sort_libraries/__init__.py diff --git a/colint/sort_libraries/sorter.py b/src/colint/sort_libraries/sorter.py similarity index 100% rename from colint/sort_libraries/sorter.py rename to src/colint/sort_libraries/sorter.py diff --git a/colint/utils/__init__.py b/src/colint/utils/__init__.py similarity index 100% rename from colint/utils/__init__.py rename to src/colint/utils/__init__.py diff --git a/colint/utils/exceptions.py b/src/colint/utils/exceptions.py similarity index 100% rename from colint/utils/exceptions.py rename to src/colint/utils/exceptions.py diff --git a/colint/utils/jupyter_utils.py b/src/colint/utils/jupyter_utils.py similarity index 100% rename from colint/utils/jupyter_utils.py rename to src/colint/utils/jupyter_utils.py diff --git a/colint/utils/os_utils.py b/src/colint/utils/os_utils.py similarity index 100% rename from colint/utils/os_utils.py rename to src/colint/utils/os_utils.py diff --git a/colint/utils/text_styling_utils.py b/src/colint/utils/text_styling_utils.py similarity index 100% rename from colint/utils/text_styling_utils.py rename to src/colint/utils/text_styling_utils.py