Skip to content

Commit

Permalink
Add mypy to tox
Browse files Browse the repository at this point in the history
  • Loading branch information
hugovk committed Feb 20, 2025
1 parent 33d96ef commit aa491ab
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 9 deletions.
15 changes: 15 additions & 0 deletions .github/workflows/lint.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,3 +20,18 @@ jobs:
with:
python-version: "3.x"
- uses: tox-dev/action-pre-commit-uv@v1

mypy:
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
with:
persist-credentials: false
- uses: actions/setup-python@v5
with:
python-version: "3.x"
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Mypy
run: uvx --with tox-uv tox -e mypy
5 changes: 5 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -117,3 +117,8 @@ filterwarnings = [
"ignore:sys.monitoring isn't available, using default core:coverage.exceptions.CoverageWarning",
]
testpaths = [ "tests" ]

[tool.mypy]
pretty = true
#strict = true
show_error_codes = true
10 changes: 10 additions & 0 deletions requirements-mypy.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
freezegun
mypy==1.14.1
platformdirs
prettytable
pytablewriter
pytest
respx
termcolor
types-python-dateutil
types-python-slugify
15 changes: 8 additions & 7 deletions src/pypistats/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
import sys
import warnings
from pathlib import Path
from typing import Any

from platformdirs import user_cache_dir
from slugify import slugify
Expand All @@ -25,13 +26,13 @@
USER_AGENT = f"pypistats/{__version__}"


def _print_verbose(verbose: bool, *args, **kwargs) -> None:
def _print_verbose(verbose: bool, *args, **kwargs: Any) -> None:
"""Print if verbose"""
if verbose:
_print_stderr(*args, **kwargs)


def _print_stderr(*args, **kwargs) -> None:
def _print_stderr(*args, **kwargs: Any) -> None:
"""Print to stderr"""
print(*args, file=sys.stderr, **kwargs)

Expand Down Expand Up @@ -483,38 +484,38 @@ def _paramify(param_name: str, param_value: float | str | None) -> str:
return ""


def recent(package: str, period: str | None = None, **kwargs: str):
def recent(package: str, period: str | None = None, **kwargs: Any):
"""Retrieve the aggregate download quantities for the last day/week/month"""
endpoint = f"packages/{package}/recent"
params = _paramify("period", period)
return pypi_stats_api(endpoint, params, **kwargs)


def overall(package: str, mirrors: bool | str | None = None, **kwargs: str):
def overall(package: str, mirrors: bool | str | None = None, **kwargs: Any):
"""Retrieve the aggregate daily download time series with or without mirror
downloads"""
endpoint = f"packages/{package}/overall"
params = _paramify("mirrors", mirrors)
return pypi_stats_api(endpoint, params, **kwargs)


def python_major(package: str, version: str | None = None, **kwargs: str):
def python_major(package: str, version: str | None = None, **kwargs: Any):
"""Retrieve the aggregate daily download time series by Python major version
number"""
endpoint = f"packages/{package}/python_major"
params = _paramify("version", version)
return pypi_stats_api(endpoint, params, **kwargs)


def python_minor(package: str, version: str | None = None, **kwargs) -> str:
def python_minor(package: str, version: str | None = None, **kwargs: Any) -> str:
"""Retrieve the aggregate daily download time series by Python minor version
number"""
endpoint = f"packages/{package}/python_minor"
params = _paramify("version", version)
return pypi_stats_api(endpoint, params, **kwargs)


def system(package: str, os: str | None = None, **kwargs):
def system(package: str, os: str | None = None, **kwargs: Any):
"""Retrieve the aggregate daily download time series by operating system"""
endpoint = f"packages/{package}/system"
params = _paramify("os", os)
Expand Down
2 changes: 1 addition & 1 deletion src/pypistats/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ def subcommand(args):
if args is None:
args = []

def decorator(func):
def decorator(func) -> None:
func2 = getattr(pypistats, func.__name__)
parser = parent.add_parser(
func.__name__,
Expand Down
2 changes: 1 addition & 1 deletion tests/test_pypistats_cache.py
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ def test__load_cache_bad_data(self) -> None:
def test_cache_round_trip(self) -> None:
# Arrange
filename = pypistats.CACHE_DIR / "test_cache_round_trip.json"
data = "test data"
data = {"test": "data"}

# Act
pypistats._save_cache(filename, data)
Expand Down
7 changes: 7 additions & 0 deletions tox.ini
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ requires =
env_list =
cog
lint
mypy
pins
py{py3, 314, 313, 312, 311, 310, 39}

Expand Down Expand Up @@ -44,6 +45,12 @@ pass_env =
commands =
pre-commit run --all-files --show-diff-on-failure

[testenv:mypy]
deps =
-r requirements-mypy.txt
commands =
mypy . {posargs}

[testenv:pins]
deps =
-r requirements.txt
Expand Down

0 comments on commit aa491ab

Please sign in to comment.