Skip to content

Commit 8438da0

Browse files
authored
Enable pyrefly (#245)
1 parent e98fbf8 commit 8438da0

9 files changed

Lines changed: 55 additions & 37 deletions

File tree

.github/workflows/ci.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ jobs:
2929
run: pylint trackpack test
3030
- name: Lint (ruff)
3131
run: ruff check --output-format=github .
32+
- name: Lint (pyrefly)
33+
run: pyrefly check
3234

3335
formatting:
3436
name: formatting

pyproject.toml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,12 @@ classifiers = [
1717
"Topic :: Utilities"
1818
]
1919

20+
[tool.pyrefly]
21+
project-includes = [
22+
"**/*.py*",
23+
"**/*.ipynb",
24+
]
25+
2026
[project.urls]
2127
"Homepage" = "https://github.com/offa/trackpack"
2228

@@ -26,6 +32,7 @@ trackpack = "trackpack.__main__:main"
2632
[project.optional-dependencies]
2733
dev = [
2834
"pylint == 4.0.4",
35+
"pyrefly==0.44.2",
2936
"pytest == 9.0.2",
3037
"ruff == 0.14.8"
3138
]

test/cli_test.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,27 +20,27 @@
2020

2121

2222
class TestCli(unittest.TestCase):
23-
def test_prints_help_if_no_arguments_passed(self):
23+
def test_prints_help_if_no_arguments_passed(self) -> None:
2424
with self.assertRaises(SystemExit) as context:
2525
cli.parse_args([])
2626
self.assertEqual(0, context.exception.code)
2727

28-
def test_pack_command_default(self):
28+
def test_pack_command_default(self) -> None:
2929
args = cli.parse_args(["pack"])
3030
self.assertEqual("pack", args.command)
3131
self.assertFalse(args.pack_explicit_files)
3232

33-
def test_pack_command_with_explicit_file(self):
33+
def test_pack_command_with_explicit_file(self) -> None:
3434
args = cli.parse_args(["pack", "f0.wav", "f1.wav"])
3535
self.assertEqual("pack", args.command)
3636
self.assertEqual(["f0.wav", "f1.wav"], args.pack_explicit_files)
3737

38-
def test_pack_with_custom_archive_name(self):
38+
def test_pack_with_custom_archive_name(self) -> None:
3939
args = cli.parse_args(["pack", "--archive-name", "xyz"])
4040
self.assertEqual("pack", args.command)
4141
self.assertEqual("xyz", args.archive_name)
4242

43-
def test_pack_with_date(self):
43+
def test_pack_with_date(self) -> None:
4444
args = cli.parse_args(["pack", "--append-date"])
4545
self.assertEqual("pack", args.command)
4646
self.assertTrue(args.append_date)

test/config_test.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,26 +22,26 @@
2222

2323

2424
class TestConfig(unittest.TestCase):
25-
def test_default_config(self):
25+
def test_default_config(self) -> None:
2626
cfg = config.Config()
2727
self.assertEqual("unnamed", cfg.name)
2828
self.assertEqual("unnamed", cfg.archive_name)
2929
self.assertEqual("Export", cfg.export_dir)
3030
self.assertFalse(cfg.append_date)
3131

32-
def test_extension_is_stripped_from_archivename(self):
32+
def test_extension_is_stripped_from_archivename(self) -> None:
3333
cfg = config.Config()
3434
cfg.archive_name = "stems.zip"
3535
self.assertEqual("stems", cfg.archive_name)
3636

3737
@patch("trackpack.config.date", Mock(today=lambda: datetime.date(2020, 1, 1)))
38-
def test_append_date_appends_date_to_archive_name(self):
38+
def test_append_date_appends_date_to_archive_name(self) -> None:
3939
cfg = config.Config()
4040
cfg.archive_name = "xyz"
4141
cfg.append_date = True
4242
self.assertEqual("xyz-2020-01-01", cfg.archive_name)
4343

44-
def test_load_from_yaml(self):
44+
def test_load_from_yaml(self) -> None:
4545
cfg = config.Config()
4646
cfg.load_from_yaml("name: project-1")
4747
self.assertEqual("project-1", cfg.name)
@@ -58,7 +58,7 @@ def test_load_from_yaml(self):
5858
self.assertTrue(cfg.append_date)
5959

6060
@patch("trackpack.config.date", Mock(today=lambda: datetime.date(2020, 1, 2)))
61-
def test_load_from_cli_args(self):
61+
def test_load_from_cli_args(self) -> None:
6262
args = cli.parse_args(["pack", "--archive-name", "proj.zip", "--append-date"])
6363
cfg = config.Config()
6464
cfg.archive_name = "should override"

test/trackpack_test.py

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
class TestTrackPack(unittest.TestCase):
2525
@patch("os.walk")
26-
def test_discover_audiofiles_returns_audio_files(self, walk_mock):
26+
def test_discover_audiofiles_returns_audio_files(self, walk_mock) -> None:
2727
walk_mock.return_value = _create_walk_files(
2828
[
2929
"proj stem2.wav",
@@ -52,7 +52,9 @@ def test_discover_audiofiles_returns_audio_files(self, walk_mock):
5252
)
5353

5454
@patch("os.walk")
55-
def test_discover_audiofiles_returns_only_related_audio_files(self, walk_mock):
55+
def test_discover_audiofiles_returns_only_related_audio_files(
56+
self, walk_mock
57+
) -> None:
5658
walk_mock.return_value = _create_walk_files(
5759
[
5860
"proj stem2.wav",
@@ -71,7 +73,9 @@ def test_discover_audiofiles_returns_only_related_audio_files(self, walk_mock):
7173
)
7274

7375
@patch("os.walk")
74-
def test_discover_audiofiles_master_track_matches_project_name(self, walk_mock):
76+
def test_discover_audiofiles_master_track_matches_project_name(
77+
self, walk_mock
78+
) -> None:
7579
walk_mock.return_value = _create_walk_files(
7680
[
7781
"example.wav",
@@ -86,7 +90,7 @@ def test_discover_audiofiles_master_track_matches_project_name(self, walk_mock):
8690
self.assertEqual("example.wav", master)
8791

8892
@patch("os.walk")
89-
def test_discover_audiofiles_fails_if_no_master(self, walk_mock):
93+
def test_discover_audiofiles_fails_if_no_master(self, walk_mock) -> None:
9094
walk_mock.return_value = _create_walk_files(
9195
["proj stem1.wav", "proj stem2.wav"]
9296
)
@@ -96,15 +100,17 @@ def test_discover_audiofiles_fails_if_no_master(self, walk_mock):
96100
trackpacker.discover_audiofiles()
97101

98102
@patch("os.walk")
99-
def test_discover_audiofiles_fails_if_no_stems(self, walk_mock):
103+
def test_discover_audiofiles_fails_if_no_stems(self, walk_mock) -> None:
100104
walk_mock.return_value = _create_walk_files(["proj.wav"])
101105

102106
with self.assertRaises(MissingFileException):
103107
trackpacker = TrackPacker("proj", "/tmp/export")
104108
trackpacker.discover_audiofiles()
105109

106110
@patch("os.walk")
107-
def test_discover_audiofiles_returns_explicit_passed_audio_files(self, walk_mock):
111+
def test_discover_audiofiles_returns_explicit_passed_audio_files(
112+
self, walk_mock
113+
) -> None:
108114
walk_mock.return_value = _create_walk_files(
109115
[
110116
"proj stem2.wav",
@@ -128,7 +134,7 @@ def test_discover_audiofiles_returns_explicit_passed_audio_files(self, walk_mock
128134
)
129135

130136
@patch("trackpack.trackpacker.ZipFile", autospec=True)
131-
def test_pack_files_creates_archive_of_stems(self, zip_mock):
137+
def test_pack_files_creates_archive_of_stems(self, zip_mock) -> None:
132138
trackpacker = TrackPacker("projname", "/tmp/proj/Export")
133139
trackpacker.pack_files(
134140
"archivename",
@@ -143,7 +149,7 @@ def test_pack_files_creates_archive_of_stems(self, zip_mock):
143149
)
144150

145151
@patch("trackpack.trackpacker.ZipFile", autospec=True)
146-
def test_pack_files_removes_project_name_from_stems(self, zip_mock):
152+
def test_pack_files_removes_project_name_from_stems(self, zip_mock) -> None:
147153
trackpacker = TrackPacker("proj1", "/tmp/x")
148154
trackpacker.pack_files(
149155
"archive1", _files_in_dir("/tmp/x", ["proj1 a.wav", "b.wav", "proj1 c.wav"])
@@ -157,7 +163,7 @@ def test_pack_files_removes_project_name_from_stems(self, zip_mock):
157163
)
158164

159165
@patch("trackpack.trackpacker.ZipFile", autospec=True)
160-
def test_pack_files_replaces_blanks_in_names(self, zip_mock):
166+
def test_pack_files_replaces_blanks_in_names(self, zip_mock) -> None:
161167
trackpacker = TrackPacker("proj1", "/tmp/st u v w")
162168
trackpacker.pack_files(
163169
"archive1",
@@ -178,15 +184,17 @@ def test_pack_files_replaces_blanks_in_names(self, zip_mock):
178184
)
179185

180186

181-
def _files_in_dir(dirpath, filenames):
187+
def _files_in_dir(dirpath: str, filenames: list[str]) -> list[str]:
182188
return [os.path.join(dirpath, file) for file in filenames]
183189

184190

185-
def _create_walk_files(files):
191+
def _create_walk_files(files: list[str]):
186192
return iter([("proj_export_dir", [], files)])
187193

188194

189-
def _create_zip_mock_calls(archive_name, proj_export_dir, files):
195+
def _create_zip_mock_calls(
196+
archive_name: str, proj_export_dir: str, files: dict[str, str]
197+
):
190198
call_list = [
191199
call(os.path.join(proj_export_dir, f"{archive_name}.zip"), "w"),
192200
call().__enter__(), # pylint: disable=unnecessary-dunder-call

trackpack/__main__.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,23 +17,24 @@
1717

1818
import sys
1919

20-
from trackpack import cli, config
20+
from trackpack import cli
21+
from trackpack.config import Config
2122
from trackpack.trackpacker import TrackPacker
2223

2324

24-
def __fail(msg):
25+
def __fail(msg: str) -> None:
2526
print(f"ERROR: {msg}")
2627
sys.exit(1)
2728

2829

29-
def __read_config(filename):
30+
def __read_config(filename: str) -> Config:
3031
with open(filename, "r", encoding="utf-8") as config_file:
31-
cfg = config.Config()
32+
cfg = Config()
3233
cfg.load_from_yaml(config_file)
3334
return cfg
3435

3536

36-
def main():
37+
def main() -> None:
3738
args = cli.parse_args(sys.argv[1:])
3839

3940
if args.command == "pack":

trackpack/cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
from trackpack.version import __version__
2020

2121

22-
def parse_args(args):
22+
def parse_args(args: list[str]) -> argparse.Namespace:
2323
parser = argparse.ArgumentParser(
2424
prog="trackpack", description="Audio tracks packaging"
2525
)

trackpack/config.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,32 +20,32 @@
2020

2121

2222
class Config:
23-
def __init__(self):
23+
def __init__(self) -> None:
2424
self.name = "unnamed"
2525
self._archive_name = "unnamed"
2626
self.export_dir = "Export"
2727
self.append_date = False
2828

2929
@property
30-
def archive_name(self):
30+
def archive_name(self) -> str:
3131
if self.append_date:
3232
return "-".join((self._archive_name, date.today().strftime("%Y-%m-%d")))
3333
return self._archive_name
3434

3535
@archive_name.setter
36-
def archive_name(self, archive_name):
36+
def archive_name(self, archive_name: str) -> None:
3737
if archive_name.endswith(".zip"):
3838
self._archive_name = archive_name[:-4]
3939
else:
4040
self._archive_name = archive_name
4141

42-
def load_from_yaml(self, yaml_content):
42+
def load_from_yaml(self, yaml_content) -> None:
4343
config = yaml.safe_load(yaml_content)
4444
self.name = config["name"]
4545
self.archive_name = config.get("archive_name", self.name)
4646
self.append_date = config.get("append_date", False)
4747

48-
def load_from_cli_args(self, cli_args):
48+
def load_from_cli_args(self, cli_args) -> None:
4949
if cli_args.archive_name:
5050
self.archive_name = cli_args.archive_name
5151
if cli_args.append_date:

trackpack/trackpacker.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,11 @@ class MissingFileException(Exception):
2424

2525

2626
class TrackPacker:
27-
def __init__(self, project_name, export_dir):
27+
def __init__(self, project_name: str, export_dir: str) -> None:
2828
self.__project_name = project_name
2929
self.__export_dir = export_dir
3030

31-
def discover_audiofiles(self, explicit_files=None):
31+
def discover_audiofiles(self, explicit_files: list[str] | None = None):
3232
(_, _, filenames) = next(os.walk(self.__export_dir))
3333
master = f"{self.__project_name}.wav"
3434
files = list(filter(lambda f: f.endswith(".wav"), filenames))
@@ -49,14 +49,14 @@ def discover_audiofiles(self, explicit_files=None):
4949

5050
return (master, [os.path.abspath(file) for file in files])
5151

52-
def pack_files(self, archive_name, files):
52+
def pack_files(self, archive_name: str, files: list[str]):
5353
with ZipFile(
5454
f"{os.path.join(self.__export_dir, archive_name)}.zip", "w"
5555
) as archive:
5656
for file in files:
5757
archive.write(file, self.__normalize_stem_name(os.path.basename(file)))
5858

59-
def __normalize_stem_name(self, stem_name):
59+
def __normalize_stem_name(self, stem_name: str) -> str:
6060
if stem_name.startswith(self.__project_name):
6161
stem_name = stem_name[len(self.__project_name) :]
6262
return stem_name.strip().replace(" ", "-")

0 commit comments

Comments
 (0)