Skip to content

Commit bc2a42a

Browse files
authored
Merge pull request #11 from chrisburr/dev
Add type hints and mypy CI
2 parents 5e6a0ba + 439d60e commit bc2a42a

File tree

8 files changed

+246
-139
lines changed

8 files changed

+246
-139
lines changed

.github/workflows/ci.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ jobs:
3333
run: |
3434
. "${CONDA}/bin/activate" test-env
3535
pytest
36+
- name: Run mypy
37+
run: |
38+
. "${CONDA}/bin/activate" test-env
39+
mypy
3640
- name: Run pylint
3741
run: |
3842
. "${CONDA}/bin/activate" test-env

.github/workflows/prepare_environment.sh

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@ set -euo pipefail
33

44
PYTHON_VERSION=$1
55

6-
conda create --quiet -c conda-forge -c free -n test-env \
6+
conda create --quiet -c conda-forge -n test-env \
77
python="$PYTHON_VERSION" \
88
"pytest>=4.6" pylint pytest-cov pycodestyle \
9-
setuptools setuptools_scm wheel
9+
setuptools setuptools_scm wheel mypy
1010
source "${CONDA}/bin/activate" test-env
1111
pip install ".[testing]"

pyproject.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,10 @@ build-backend = "setuptools.build_meta"
99
[tool.black]
1010
line-length = 120
1111
target-version = ['py39']
12+
13+
[tool.mypy]
14+
strict = true
15+
files = 'src/diraccfg'
16+
17+
[tool.pylint."messages control"]
18+
disable = ["unsubscriptable-object"]

src/diraccfg/__main__.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,16 @@
1+
from __future__ import annotations
2+
13
import argparse
24
import json
35
import os
46
import sys
7+
from typing import NoReturn
58

69
from .cfg import CFG
710
from .versions import parseVersion
811

912

10-
def parseArgs():
13+
def parseArgs() -> NoReturn:
1114
parser = argparse.ArgumentParser(description="Parser for DIRAC cfg files")
1215
subparsers = parser.add_subparsers(help="Actions to run with the ")
1316

@@ -27,15 +30,15 @@ def parseArgs():
2730
sys.exit(0)
2831

2932

30-
def dumpAsJson(cfgFilename):
33+
def dumpAsJson(cfgFilename: str) -> None:
3134
if not os.path.isfile(cfgFilename):
3235
sys.stderr.write(f"ERROR: {cfgFilename} does not exist\n")
3336
sys.exit(1)
3437
res = CFG().loadFromFile(cfgFilename)
3538
print(json.dumps(res.getAsDict()))
3639

3740

38-
def sortVersions(allow_pre_releases=False):
41+
def sortVersions(allow_pre_releases: bool = False) -> None:
3942
try:
4043
objs = json.loads(sys.stdin.read())
4144
except getattr(json, "JSONDecodeError", ValueError):
@@ -56,7 +59,7 @@ def sortVersions(allow_pre_releases=False):
5659
continue
5760
parsedVersions[obj] = (major, minor, patch, pre)
5861

59-
print(json.dumps(sorted(parsedVersions, key=parsedVersions.get, reverse=True)))
62+
print(json.dumps(sorted(parsedVersions, key=parsedVersions.__getitem__, reverse=True)))
6063

6164

6265
if __name__ == "__main__":

0 commit comments

Comments
 (0)