Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
49 changes: 49 additions & 0 deletions .github/workflows/mypy.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: mypy
on:
pull_request:
paths:
- 'src/rez/**.py'
- 'src/rezplugins/**.py'
- 'pyproject.toml'
- '!src/rez/utils/_version.py'
- '!src/rez/data/**'
- '!src/rez/vendor/**'
- '!src/rez/backport/**'
push:
paths:
- 'src/rez/**.py'
- 'src/rezplugins/**.py'
- 'pyproject.toml'
- '!src/rez/utils/_version.py'
- '!src/rez/data/**'
- '!src/rez/vendor/**'
- '!src/rez/backport/**'

permissions:
contents: read

jobs:
mypy:
name: Run mypy static type analysis
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7

- name: Set up Python
uses: actions/setup-python@82c7e631bb3cdc910f68e0081d67478d79c6982d # v5.1.0
with:
python-version: "3.10"

- name: Install Dependencies
run: |
pip install mypy==1.14.1 mypy_baseline==0.7.1 types-setuptools

- name: Run mypy
run: >-
echo "To update the baseline run:"
echo "mypy | mypy-baseline sync --ignore-categories note syntax --ignore ".* is not subscriptable.*""
echo "then commit mypy-baseline.txt"
echo
mypy | mypy-baseline filter --ignore-categories=note --allow-unsynced
588 changes: 588 additions & 0 deletions mypy-baseline.txt

Large diffs are not rendered by default.

27 changes: 27 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,30 @@
[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

[tool.mypy]
python_version = "3.8"
files = ["src/rez/", "src/rezplugins/"]
exclude = [
'.*/rez/data/.*',
'.*/rez/vendor/.*',
'.*/rez/tests/.*',
'.*/rez/utils/lint_helper.py',
]
disable_error_code = ["var-annotated", "import-not-found"]
check_untyped_defs = true
# allow this for now:
allow_redefinition = true
follow_imports = "silent"

[[tool.mypy.overrides]]
module = 'rez.utils.lint_helper'
follow_imports = "skip"

[[tool.mypy.overrides]]
module = "rez.version._version"
disallow_untyped_defs = true

[[tool.mypy.overrides]]
module = "rez.version._requirement"
disallow_untyped_defs = true
2 changes: 2 additions & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,12 @@ def find_files(pattern, path=None, root="rez"):
'rez':
['utils/logging.conf'] +
['README*'] +
["py.typed"] +
find_files('*', 'completion') +
find_files('*', 'data') +
find_files('*.exe', 'vendor/distlib'),
'rezplugins':
["py.typed"] +
find_files('*.cmake', 'build_system', root='rezplugins') +
find_files('*', 'build_system/template_files', root='rezplugins'),
'rezgui':
Expand Down
4 changes: 2 additions & 2 deletions src/rez/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@


# TODO: Revamp logging. For now, this is here for backwards compatibility
def _init_logging():
def _init_logging() -> None:
logging_conf = os.getenv("REZ_LOGGING_CONF")
if logging_conf:
import logging.config
Expand Down Expand Up @@ -50,7 +50,7 @@ def _init_logging():
import traceback

if action == "print_stack":
def callback(sig, frame):
def callback(sig, frame) -> None:
txt = ''.join(traceback.format_stack(frame))
print()
print(txt)
Expand Down
6 changes: 3 additions & 3 deletions src/rez/bind/_pymodule.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@
import os.path


def commands():
def commands() -> None:
env.PYTHONPATH.append('{this.root}/python')


def commands_with_bin():
def commands_with_bin() -> None:
env.PYTHONPATH.append('{this.root}/python')
env.PATH.append('{this.root}/bin')

Expand Down Expand Up @@ -88,7 +88,7 @@ def bind(name, path, import_name=None, version_range=None, version=None,
except RezBindError as e:
print_warning(str(e))

def make_root(variant, root):
def make_root(variant, root) -> None:
pypath = make_dirs(root, "python")
copy_module(import_name, pypath)

Expand Down
4 changes: 2 additions & 2 deletions src/rez/bind/_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
import sys


def log(msg):
def log(msg) -> None:
if config.debug("bind_modules"):
print_debug(msg)

Expand Down Expand Up @@ -82,7 +82,7 @@ def find_exe(name, filepath=None):
return filepath


def extract_version(exepath, version_arg, word_index=-1, version_rank=3):
def extract_version(exepath, version_arg, word_index=-1, version_rank: int = 3):
"""Run an executable and get the program version.

Args:
Expand Down
6 changes: 3 additions & 3 deletions src/rez/bind/cmake.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@
import os.path


def setup_parser(parser):
def setup_parser(parser) -> None:
parser.add_argument("--exe", type=str, metavar="PATH",
help="manually specify the cmake executable to bind.")


def commands():
def commands() -> None:
env.PATH.append('{this.root}/bin')


Expand All @@ -28,7 +28,7 @@ def bind(path, version_range=None, opts=None, parser=None):
word_index=2 if os.name == 'nt' else -1)
check_version(version, version_range)

def make_root(variant, root):
def make_root(variant, root) -> None:
binpath = make_dirs(root, "bin")
link = os.path.join(binpath, "cmake")
platform_.symlink(exepath, link)
Expand Down
6 changes: 3 additions & 3 deletions src/rez/bind/gcc.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@
from rez.system import system


def setup_parser(parser):
def setup_parser(parser) -> None:
parser.add_argument('--exe',
type=str,
metavar='PATH',
help='bind other gcc version than default')


def commands():
def commands() -> None:
env.PATH.append('{this.root}/bin')


Expand All @@ -39,7 +39,7 @@ def bind(path, version_range=None, opts=None, parser=None):
raise RezBindError("gcc version different than g++ can not continue")

# create directories and symlink gcc and g++
def make_root(variant, root):
def make_root(variant, root) -> None:
bin_path = make_dirs(root, 'bin')

gcc_link_path = os.path.join(bin_path, 'gcc')
Expand Down
6 changes: 3 additions & 3 deletions src/rez/bind/hello_world.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@
import shutil


def commands():
def commands() -> None:
env.PATH.append('{this.root}/bin')
env.OH_HAI_WORLD = "hello"


def hello_world_source():
def hello_world_source() -> None:
import sys
from optparse import OptionParser

Expand All @@ -44,7 +44,7 @@ def bind(path, version_range=None, opts=None, parser=None):
version = Version("1.0")
check_version(version, version_range)

def make_root(variant, root):
def make_root(variant, root) -> None:
binpath = make_dirs(root, "bin")
binpathtmp = make_dirs(root, "bintmp")

Expand Down
8 changes: 4 additions & 4 deletions src/rez/bind/python.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,17 +15,17 @@
import os.path


def setup_parser(parser):
def setup_parser(parser) -> None:
parser.add_argument("--exe", type=str, metavar="PATH",
help="bind an interpreter other than the current "
"python interpreter")


def commands():
def commands() -> None:
env.PATH.append('{this.root}/bin')


def post_commands():
def post_commands() -> None:
# these are the builtin modules for this python executable. If we don't
# include these, some python behavior can be incorrect.
import os
Expand Down Expand Up @@ -67,7 +67,7 @@ def bind(path, version_range=None, opts=None, parser=None):
# make the package
#

def make_root(variant, root):
def make_root(variant, root) -> None:
binpath = make_dirs(root, "bin")
link = os.path.join(binpath, "python")
platform_.symlink(exepath, link)
Expand Down
4 changes: 2 additions & 2 deletions src/rez/bind/rez.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@
import os.path


def commands():
def commands() -> None:
env.PYTHONPATH.append('{this.root}')


def bind(path, version_range=None, opts=None, parser=None):
version = rez.__version__
check_version(version, version_range)

def make_root(variant, root):
def make_root(variant, root) -> None:
# copy source
rez_path = rez.__path__[0]
site_path = os.path.dirname(rez_path)
Expand Down
8 changes: 4 additions & 4 deletions src/rez/bind/rezgui.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,18 @@
import os.path


def setup_parser(parser):
def setup_parser(parser) -> None:
parser.add_argument(
"--gui-lib", type=str, default="PyQt-4", metavar="PKG",
help="manually specify the gui lib to use (default: %(default)s).")


def commands():
def commands() -> None:
env.PYTHONPATH.append('{this.root}')
env.PATH.append('{this.root}/bin')


def rez_gui_source():
def rez_gui_source() -> None:
from rez.cli._main import run
run("gui")

Expand All @@ -43,7 +43,7 @@ def bind(path, version_range=None, opts=None, parser=None):

gui_lib = getattr(opts, "gui_lib", "")

def make_root(variant, root):
def make_root(variant, root) -> None:
# copy source
rez_path = rez.__path__[0]
site_path = os.path.dirname(rez_path)
Expand Down
Loading
Loading