Skip to content

Commit 2680c14

Browse files
committed
chore: format all files with ruff and hatch fmt
1 parent 17f85a4 commit 2680c14

File tree

8 files changed

+57
-58
lines changed

8 files changed

+57
-58
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -254,7 +254,7 @@ Morgan was written because of insufficiencies of other mirroring solutions:
254254
from PyPI at regular intervals. It also has many non-standard-library
255255
dependencies.
256256
- [pypickup](https://github.com/UB-Quantic/pypickup) was started around the same time as Morgan. It is more fitting for
257-
and offline mirror than the above three but takes a different approach than Morgan. It
257+
an offline mirror than the above three but takes a different approach than Morgan. It
258258
doesn't include a server, instead relying on `pip`'s ability to install from
259259
a directory tree, so this tree needs to be accessible to your servers. It also
260260
favors CLI commands over a configuration file (e.g. an `add` command is used to

morgan/__init__.py

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -149,16 +149,16 @@ def _mirror(
149149
return None
150150

151151
if required_by:
152-
print("[{}]: {}".format(required_by, requirement))
152+
print(f"[{required_by}]: {requirement}")
153153
else:
154-
print("{}".format(requirement))
154+
print(f"{requirement}")
155155

156156
data: dict = None
157157

158158
# get information about this package from the Simple API in JSON
159159
# format as per PEP 691
160160
request = urllib.request.Request(
161-
"{}{}/".format(self.index_url, requirement.name),
161+
f"{self.index_url}{requirement.name}/",
162162
headers={
163163
"Accept": "application/vnd.pypi.simple.v1+json",
164164
},
@@ -186,10 +186,9 @@ def _mirror(
186186
if files is None:
187187
if required_by is None:
188188
raise Exception("No files match requirement")
189-
else:
190-
# this is a dependency, assume the dependency is not relevant
191-
# for any of our environments and don't return an error
192-
return None
189+
# this is a dependency, assume the dependency is not relevant
190+
# for any of our environments and don't return an error
191+
return None
193192

194193
if len(files) == 0:
195194
raise Exception(f"No files match requirement {requirement}")
@@ -294,7 +293,7 @@ def _filter_files(
294293
return files
295294

296295
def _matches_environments(self, fileinfo: dict) -> bool:
297-
if req := fileinfo.get("requires-python", None):
296+
if req := fileinfo.get("requires-python"):
298297
# The Python versions in all of our environments must be supported
299298
# by this file in order to match.
300299
# Some packages specify their required Python versions with a simple
@@ -318,7 +317,7 @@ def _matches_environments(self, fileinfo: dict) -> bool:
318317
print(f"\tIgnoring {fileinfo['filename']}: {e}")
319318
return False
320319

321-
if fileinfo.get("tags", None):
320+
if fileinfo.get("tags"):
322321
# At least one of the tags must match ALL of our environments
323322
for tag in fileinfo["tags"]:
324323
(intrp_name, intrp_ver) = parse_interpreter(tag.interpreter)
@@ -341,11 +340,10 @@ def _matches_environments(self, fileinfo: dict) -> bool:
341340

342341
if tag.platform == "any":
343342
return True
344-
else:
345-
for platformre in self._supported_platforms:
346-
if platformre.fullmatch(tag.platform):
347-
# tag matched, accept this file
348-
return True
343+
for platformre in self._supported_platforms:
344+
if platformre.fullmatch(tag.platform):
345+
# tag matched, accept this file
346+
return True
349347

350348
# none of the tags matched, reject this file
351349
return False
@@ -429,8 +427,8 @@ def _hash_file(self, filepath: str, hashalg: str) -> str:
429427
truehash = hashlib.new(hashalg)
430428
truehash.update(contents)
431429

432-
with open("{}.hash".format(filepath), "w") as out:
433-
out.write("{}={}".format(hashalg, truehash.hexdigest()))
430+
with open(f"{filepath}.hash", "w") as out:
431+
out.write(f"{hashalg}={truehash.hexdigest()}")
434432

435433
return truehash.hexdigest()
436434

@@ -455,16 +453,16 @@ def _extract_metadata(
455453
members = [member.name for member in archive.getmembers()]
456454
opener = archive.extractfile
457455
else:
458-
raise Exception("Unexpected distribution file {}".format(filepath))
456+
raise Exception(f"Unexpected distribution file {filepath}")
459457

460458
for member in members:
461459
try:
462460
md.parse(opener, member)
463461
except Exception as e:
464-
print("Failed parsing member {} of {}: {}".format(member, filepath, e))
462+
print(f"Failed parsing member {member} of {filepath}: {e}")
465463

466464
if md.seen_metadata_file():
467-
md.write_metadata_file("{}.metadata".format(filepath))
465+
md.write_metadata_file(f"{filepath}.metadata")
468466

469467
archive.close()
470468

@@ -487,7 +485,7 @@ def parse_interpreter(inp: str) -> Tuple[str, str]:
487485
if m.lastindex > 1:
488486
version = m.group(2)
489487
if m.lastindex > 2:
490-
version = "{}.{}".format(version, m.group(3))
488+
version = f"{version}.{m.group(3)}"
491489

492490
return (intr, version)
493491

@@ -624,14 +622,14 @@ def my_url(arg):
624622
if args.command == "generate_env":
625623
configurator.generate_env(args.env)
626624
return
627-
elif args.command == "generate_reqs":
625+
if args.command == "generate_reqs":
628626
configurator.generate_reqs(args.mode)
629627
return
630-
elif args.command == "serve":
628+
if args.command == "serve":
631629
server.run(args.index_path, args.host, args.port, args.no_metadata)
632630
return
633-
elif args.command == "version":
634-
print("Morgan v{}".format(__version__))
631+
if args.command == "version":
632+
print(f"Morgan v{__version__}")
635633
return
636634

637635
if not args.config:

morgan/configurator.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,17 @@
11
import argparse
2-
from collections import OrderedDict
32
import configparser
43
import os
54
import platform
65
import sys
76
import sysconfig
7+
from collections import OrderedDict
88

99
from packaging.version import Version
1010

1111
if Version(platform.python_version()) < Version("3.8"):
1212
import importlib_metadata as metadata
1313
else:
14-
import importlib.metadata as metadata
14+
from importlib import metadata
1515

1616

1717
def generate_env(name: str = "local"):
@@ -23,7 +23,7 @@ def generate_env(name: str = "local"):
2323
"""
2424

2525
config = configparser.ConfigParser()
26-
config["env.{}".format(name)] = {
26+
config[f"env.{name}"] = {
2727
"os_name": os.name,
2828
"platform_tag": sysconfig.get_platform(),
2929
"sys_platform": sys.platform,

morgan/metadata.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
import email.parser
22
import re
3-
from typing import Dict, Set, Callable, BinaryIO, Iterable
3+
from typing import BinaryIO, Callable, Dict, Iterable, Set
44

5-
from packaging.version import Version
5+
import tomli
6+
from packaging.markers import Marker
7+
from packaging.markers import Variable as MarkerVariable
68
from packaging.requirements import Requirement
7-
from packaging.utils import canonicalize_name
89
from packaging.specifiers import SpecifierSet
9-
from packaging.markers import Marker, Variable as MarkerVariable
10-
import tomli
10+
from packaging.utils import canonicalize_name
11+
from packaging.version import Version
1112

1213
from morgan.utils import filter_relevant_requirements
1314

morgan/server.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ def do_GET(self):
3737
self.end_headers()
3838
self.wfile.write(
3939
b"The server cannot generate a response "
40-
+ b"in any of the requested MIME types"
40+
b"in any of the requested MIME types"
4141
)
4242
return
4343

@@ -100,7 +100,7 @@ def _serve_project(self, ct, project):
100100

101101
path = pathlib.Path(index_path, project)
102102
if not path.exists() or not path.is_dir():
103-
self._serve_notfound("No such project {}".format(project))
103+
self._serve_notfound(f"No such project {project}")
104104
return
105105

106106
files = []
@@ -109,22 +109,22 @@ def _serve_project(self, ct, project):
109109
if re.search(r"\.(whl|zip|tar\.gz)$", entry.name):
110110
file = {
111111
"filename": entry.name,
112-
"url": "/{}/{}".format(project, entry.name),
112+
"url": f"/{project}/{entry.name}",
113113
"hashes": {},
114114
}
115115

116116
# read file hash
117-
hashfile = path.joinpath("{}.hash".format(entry.name))
117+
hashfile = path.joinpath(f"{entry.name}.hash")
118118
if hashfile.exists():
119-
with open(hashfile, "r") as hf:
119+
with open(hashfile) as hf:
120120
data = hf.read().strip().split("=")
121121
file["hashes"][data[0]] = data[1]
122122

123123
# do we have a metadata file?
124124
file["dist-info-metadata"] = (
125125
False
126126
if no_metadata
127-
else path.joinpath("{}.metadata".format(entry.name)).exists()
127+
else path.joinpath(f"{entry.name}.metadata").exists()
128128
)
129129

130130
files.append(file)
@@ -174,11 +174,11 @@ def _serve_file(self, project, filename):
174174

175175
path = pathlib.Path(index_path, project, filename)
176176
if not path.exists() or not path.is_file():
177-
self._serve_notfound("No such project {}".format(project))
177+
self._serve_notfound(f"No such project {project}")
178178
return
179179

180180
if no_metadata and re.search(r"\.metadata$", filename):
181-
self._serve_notfound("No such file {}".format(filename))
181+
self._serve_notfound(f"No such file {filename}")
182182
return
183183

184184
ct = "text/plain"

tests/test_init.py

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ def temp_index_path(self, tmpdir):
7979
requests = >=2.0.0
8080
"""
8181
)
82-
yield tmpdir
82+
return tmpdir
8383

8484
def test_mirrorer_initialization(self, temp_index_path):
8585
args = argparse.Namespace(
@@ -141,13 +141,13 @@ def test_file_hashing(self, temp_index_path):
141141

142142
expected_hash = hashlib.sha256(test_data).hexdigest()
143143

144-
# noqa: SLF001 # pylint: disable=W0212
144+
# pylint: disable=W0212
145145
digest = mirrorer._hash_file(test_file, "sha256")
146146

147147
assert digest == expected_hash, "Returned hash should match sha256 digest"
148148
hash_file = test_file + ".hash"
149149
assert os.path.exists(hash_file), "Hash file should be created"
150-
with open(hash_file, "r", encoding="utf-8") as file:
150+
with open(hash_file, encoding="utf-8") as file:
151151
assert file.read() == f"sha256={expected_hash}", (
152152
"Hash file content should be correctly formatted"
153153
)
@@ -168,7 +168,7 @@ def temp_index_path(self, tmp_path):
168168
platform_tag = manylinux
169169
"""
170170
)
171-
yield tmp_path
171+
return tmp_path
172172

173173
@pytest.fixture
174174
def make_mirrorer(self, temp_index_path):
@@ -179,7 +179,7 @@ def _make_mirrorer(mirror_all_versions):
179179
index_url="https://example.com/simple",
180180
config=os.path.join(temp_index_path, "morgan.ini"),
181181
mirror_all_versions=mirror_all_versions,
182-
package_type_regex=r"(whl|zip|tar\.gz)"
182+
package_type_regex=r"(whl|zip|tar\.gz)",
183183
)
184184
return Mirrorer(args)
185185

@@ -229,12 +229,12 @@ def test_filter_files_with_all_versions_mirrored(
229229
"""Test that file filtering correctly handles different version specifications."""
230230
mirrorer = make_mirrorer(
231231
mirror_all_versions=True,
232-
)
232+
)
233233
requirement = packaging.requirements.Requirement(
234234
f"sample_package{version_spec}"
235235
)
236236

237-
# noqa: SLF001 # pylint: disable=W0212
237+
# pylint: disable=W0212
238238
filtered_files = mirrorer._filter_files(
239239
requirement=requirement, required_by=None, files=sample_files
240240
)
@@ -260,7 +260,7 @@ def test_filter_files_with_latest_version_mirrored(
260260
f"sample_package{version_spec}"
261261
)
262262

263-
# noqa: SLF001 # pylint: disable=W0212
263+
# pylint: disable=W0212
264264
filtered_files = mirrorer._filter_files(
265265
requirement=requirement, required_by=None, files=sample_files
266266
)

tests/test_metadata_parser.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ def test_init(self, parser):
7878
def test_parse_metadata_file(self, parser, metadata_content):
7979
"""Test parsing a metadata file with dependencies"""
8080
mock_fp = io.BytesIO(metadata_content)
81-
# noqa: SLF001 # pylint: disable=W0212
81+
# pylint: disable=W0212
8282
parser._parse_metadata_file(mock_fp)
8383

8484
assert parser.name == "example-package"
@@ -115,7 +115,7 @@ def test_parse_pyproject(self, parser, pyproject_content):
115115
},
116116
},
117117
):
118-
# noqa: SLF001 # pylint: disable=W0212
118+
# pylint: disable=W0212
119119
parser._parse_pyproject(mock_fp)
120120

121121
assert parser.name == "example-package"
@@ -137,7 +137,7 @@ def test_parse_requirestxt(self, parser, requires_txt_content):
137137
mock_fp = io.BytesIO(requires_txt_content)
138138
mock_fp.name = "package.egg-info/requires.txt" # Not setup_requires.txt
139139

140-
# noqa: SLF001 # pylint: disable=W0212
140+
# pylint: disable=W0212
141141
parser._parse_requirestxt(mock_fp)
142142

143143
assert len(parser.core_dependencies) == 2

tests/test_server.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,23 @@
88
[
99
(server.GENL_HTML_TYPE, {"mime": server.GENL_HTML_TYPE, "priority": 0}),
1010
(
11-
"{};q=1".format(server.GENL_HTML_TYPE),
11+
f"{server.GENL_HTML_TYPE};q=1",
1212
{"mime": server.GENL_HTML_TYPE, "priority": 1},
1313
),
1414
(
15-
"{};q=0.9".format(server.GENL_HTML_TYPE),
15+
f"{server.GENL_HTML_TYPE};q=0.9",
1616
{"mime": server.GENL_HTML_TYPE, "priority": 0.9},
1717
),
1818
(
19-
"{} ; q=0.9".format(server.GENL_HTML_TYPE),
19+
f"{server.GENL_HTML_TYPE} ; q=0.9",
2020
{"mime": server.GENL_HTML_TYPE, "priority": 0.9},
2121
),
2222
(
23-
"{};q=0.9&charset=UTF-8".format(server.GENL_HTML_TYPE),
23+
f"{server.GENL_HTML_TYPE};q=0.9&charset=UTF-8",
2424
{"mime": server.GENL_HTML_TYPE, "priority": 0.9},
2525
),
2626
(
27-
"{};charset=UTF-8&q=0.9".format(server.GENL_HTML_TYPE),
27+
f"{server.GENL_HTML_TYPE};charset=UTF-8&q=0.9",
2828
{"mime": server.GENL_HTML_TYPE, "priority": 0.9},
2929
),
3030
],
@@ -47,7 +47,7 @@ def test_parse_accept_option(accept_option, exp_dict):
4747
server.PYPI_JSON_TYPE_V1,
4848
),
4949
(
50-
"{};q=0.5, {}; q=1".format(server.PYPI_JSON_TYPE_V1, server.GENL_HTML_TYPE),
50+
f"{server.PYPI_JSON_TYPE_V1};q=0.5, {server.GENL_HTML_TYPE}; q=1",
5151
server.GENL_HTML_TYPE,
5252
),
5353
(

0 commit comments

Comments
 (0)