ty does not enforce existence of type signatures on functions, so use ruff to do it

This commit is contained in:
Kovid Goyal
2026-07-07 13:56:54 +05:30
parent cc95fccc8d
commit 8860f1a0a7
8 changed files with 78 additions and 69 deletions

View File

@@ -60,7 +60,7 @@ def build_frozen_launcher(extra_include_dirs):
return build_frozen_launcher.writeable_src_dir
def run_tests(kitty_exe):
def run_tests(kitty_exe) -> None:
with tempfile.TemporaryDirectory() as tdir:
uenv = {
'KITTY_CONFIG_DIRECTORY': os.path.join(tdir, 'conf'),
@@ -78,7 +78,7 @@ def run_tests(kitty_exe):
raise SystemExit('Checking of kitty build failed')
def build_frozen_tools(kitty_exe):
def build_frozen_tools(kitty_exe) -> None:
cmd = SETUP_CMD + ['--prefix', os.path.dirname(kitty_exe)] + ['build-frozen-tools']
if run(*cmd, cwd=build_frozen_launcher.writeable_src_dir) != 0:
print('Building of frozen kitten failed', file=sys.stderr)

View File

@@ -40,7 +40,7 @@ def binary_includes():
class Env:
def __init__(self, package_dir):
def __init__(self, package_dir) -> None:
self.base = package_dir
self.lib_dir = j(self.base, 'lib')
self.py_dir = j(self.lib_dir, f'python{py_ver}')
@@ -65,7 +65,7 @@ def ignore_in_lib(base, items, ignored_dirs=None):
return ans
def import_site_packages(srcdir, dest):
def import_site_packages(srcdir, dest) -> None:
if not os.path.exists(dest):
os.mkdir(dest)
for x in os.listdir(srcdir):
@@ -82,7 +82,7 @@ def import_site_packages(srcdir, dest):
shutil.copytree(f, j(dest, x), ignore=ignore_in_lib)
def copy_libs(env):
def copy_libs(env) -> None:
print('Copying libs...')
for x in binary_includes():
@@ -92,7 +92,7 @@ def copy_libs(env):
subprocess.check_call(['chrpath', '-d', dest])
def add_ca_certs(env):
def add_ca_certs(env) -> None:
print('Downloading CA certs...')
from urllib.request import urlopen
cdata = urlopen(kitty_constants['cacerts_url']).read()
@@ -101,7 +101,7 @@ def add_ca_certs(env):
f.write(cdata)
def copy_python(env):
def copy_python(env) -> None:
print('Copying python...')
srcdir = j(PREFIX, f'lib/python{py_ver}')
@@ -138,7 +138,7 @@ def copy_python(env):
shutil.rmtree(env.py_dir)
def build_launcher(env):
def build_launcher(env) -> None:
iv['build_frozen_launcher']([path_to_freeze_dir(), env.obj_dir])
@@ -147,7 +147,7 @@ def is_elf(path):
return f.read(4) == b'\x7fELF'
def fix_permissions(files):
def fix_permissions(files) -> None:
for path in files:
os.chmod(path, 0o755)
@@ -166,7 +166,7 @@ def find_binaries(env):
return files
def strip_files(files, argv_max=(256 * 1024)):
def strip_files(files, argv_max=(256 * 1024)) -> None:
""" Strip a list of files """
while files:
cmd = list(STRIPCMD)
@@ -183,7 +183,7 @@ def strip_files(files, argv_max=(256 * 1024)):
[os.chmod(x, old_mode) for x, old_mode in unwritable_files]
def strip_binaries(files):
def strip_binaries(files) -> None:
print(f'Stripping {len(files)} files...')
before = sum(os.path.getsize(x) for x in files)
strip_files(files)
@@ -191,7 +191,7 @@ def strip_binaries(files):
print('Stripped {:.1f} MB'.format((before - after) / (1024 * 1024.)))
def create_tarfile(env, compression_level='9'):
def create_tarfile(env, compression_level='9') -> None:
print('Creating archive...')
base = OUTPUT_DIR
arch = 'arm64' if 'arm64' in os.environ['BYPY_ARCH'] else ('i686' if 'i386' in os.environ['BYPY_ARCH'] else 'x86_64')
@@ -222,7 +222,7 @@ def create_tarfile(env, compression_level='9'):
os.path.basename(ans), os.stat(ans).st_size / (1024.**2)))
def main():
def main() -> None:
args = globals()['args']
ext_dir = globals()['ext_dir']
env = Env(os.path.join(ext_dir, kitty_constants['appname']))

View File

@@ -56,7 +56,7 @@ def flipwritable(fn, mode=None):
STRIPCMD = ('/usr/bin/strip', '-x', '-S', '-')
def strip_files(files, argv_max=(256 * 1024)):
def strip_files(files, argv_max=(256 * 1024)) -> None:
"""
Strip a list of files
"""
@@ -120,7 +120,7 @@ def do_sign(app_dir: str) -> None:
verify_signature(app_dir)
def sign_app(app_dir, notarize):
def sign_app(app_dir, notarize) -> None:
# Copied from iTerm2: https://github.com/gnachman/iTerm2/blob/master/iTerm2.entitlements
create_entitlements_file({
'com.apple.security.automation.apple-events': True,
@@ -142,7 +142,7 @@ class Freeze(object):
FID = '@executable_path/../Frameworks'
def __init__(self, build_dir, dont_strip=False, sign_installers=False, notarize=False, skip_tests=False):
def __init__(self, build_dir, dont_strip=False, sign_installers=False, notarize=False, skip_tests=False) -> None:
self.build_dir = build_dir
self.skip_tests = skip_tests
self.sign_installers = sign_installers
@@ -160,7 +160,7 @@ class Freeze(object):
self.run()
def run_shell(self):
def run_shell(self) -> None:
with current_dir(self.contents_dir):
run_shell()
@@ -185,7 +185,7 @@ class Freeze(object):
return ret
@flush
def complete_sub_bundles(self):
def complete_sub_bundles(self) -> None:
count = 0
for qapp in glob.glob(join(self.contents_dir, '*.app')):
for exe in glob.glob(join(self.contents_dir, 'MacOS', '*')):
@@ -195,7 +195,7 @@ class Freeze(object):
raise SystemExit(f'Could not complete sub-bundles in {self.contents_dir}')
@flush
def add_ca_certs(self):
def add_ca_certs(self) -> None:
print('\nDownloading CA certs...')
from urllib.request import urlopen
cdata = None
@@ -213,16 +213,16 @@ class Freeze(object):
f.write(cdata)
@flush
def strip_files(self):
def strip_files(self) -> None:
print('\nStripping files...')
strip_files(self.to_strip)
@flush
def run_tests(self):
def run_tests(self) -> None:
iv['run_tests'](join(self.contents_dir, 'MacOS', 'kitty'))
@flush
def set_id(self, path_to_lib, new_id):
def set_id(self, path_to_lib, new_id) -> None:
old_mode = flipwritable(path_to_lib)
subprocess.check_call(
['install_name_tool', '-id', new_id, path_to_lib])
@@ -252,12 +252,12 @@ class Freeze(object):
break
@flush
def change_dep(self, old_dep, new_dep, is_id, path_to_lib):
def change_dep(self, old_dep, new_dep, is_id, path_to_lib) -> None:
cmd = ['-id', new_dep] if is_id else ['-change', old_dep, new_dep]
subprocess.check_call(['install_name_tool'] + cmd + [path_to_lib])
@flush
def fix_dependencies_in_lib(self, path_to_lib):
def fix_dependencies_in_lib(self, path_to_lib) -> None:
self.to_strip.append(path_to_lib)
old_mode = flipwritable(path_to_lib)
for dep, bname, is_id in self.get_local_dependencies(path_to_lib):
@@ -272,7 +272,7 @@ class Freeze(object):
flipwritable(path_to_lib, old_mode)
@flush
def add_python_framework(self):
def add_python_framework(self) -> None:
print('\nAdding Python framework')
src = join(f'{PREFIX}/python', 'Python.framework')
x = join(self.frameworks_dir, 'Python.framework')
@@ -292,7 +292,7 @@ class Freeze(object):
os.symlink(f'Versions/Current/{y}', y)
@flush
def install_dylib(self, path, set_id=True):
def install_dylib(self, path, set_id=True) -> None:
shutil.copy2(path, self.frameworks_dir)
if set_id:
self.set_id(
@@ -301,7 +301,7 @@ class Freeze(object):
self.fix_dependencies_in_lib(join(self.frameworks_dir, basename(path)))
@flush
def add_misc_libraries(self):
def add_misc_libraries(self) -> None:
for x in (
'sqlite3.0',
'z.1',
@@ -321,7 +321,7 @@ class Freeze(object):
self.fix_dependencies_in_lib(dest)
@flush
def add_package_dir(self, x, dest=None):
def add_package_dir(self, x, dest=None) -> None:
def ignore(root, files):
ans = []
for y in files:
@@ -341,7 +341,7 @@ class Freeze(object):
self.fix_dependencies_in_lib(f)
@flush
def add_stdlib(self):
def add_stdlib(self) -> None:
print('\nAdding python stdlib')
src = f'{PREFIX}/python/Python.framework/Versions/Current/lib/python{self.py_ver}'
dest = self.python_stdlib
@@ -362,7 +362,7 @@ class Freeze(object):
self.fix_dependencies_in_lib(dest2)
@flush
def freeze_python(self):
def freeze_python(self) -> None:
print('\nFreezing python')
kitty_dir = join(self.resources_dir, 'kitty')
bases = ('kitty', 'kittens', 'kitty_tests')
@@ -395,11 +395,11 @@ class Freeze(object):
self.fix_dependencies_in_lib(f)
@flush
def build_frozen_tools(self):
def build_frozen_tools(self) -> None:
iv['build_frozen_tools'](join(self.contents_dir, 'MacOS', 'kitty'))
@flush
def add_site_packages(self):
def add_site_packages(self) -> None:
print('\nAdding site-packages')
os.makedirs(self.site_packages)
sys_path = json.loads(subprocess.check_output([
@@ -426,14 +426,14 @@ class Freeze(object):
self.remove_bytecode(self.site_packages)
@flush
def add_modules_from_dir(self, src):
def add_modules_from_dir(self, src) -> None:
for x in glob.glob(join(src, '*.py')) + glob.glob(join(src, '*.so')):
shutil.copy2(x, self.site_packages)
if x.endswith('.so'):
self.fix_dependencies_in_lib(x)
@flush
def add_packages_from_dir(self, src):
def add_packages_from_dir(self, src) -> None:
for x in os.listdir(src):
x = join(src, x)
if os.path.isdir(x) and os.path.exists(join(x, '__init__.py')):
@@ -447,7 +447,7 @@ class Freeze(object):
'bdist_mpkg', 'altgraph')
@flush
def remove_bytecode(self, dest):
def remove_bytecode(self, dest) -> None:
for x in os.walk(dest):
root = x[0]
for f in x[-1]:
@@ -455,7 +455,7 @@ class Freeze(object):
os.remove(join(root, f))
@flush
def compile_py_modules(self):
def compile_py_modules(self) -> None:
self.remove_bytecode(join(self.resources_dir, 'Python'))
py_compile(join(self.resources_dir, 'Python'))
@@ -503,7 +503,7 @@ class Freeze(object):
return dmg
def main():
def main() -> None:
args = globals()['args']
ext_dir = globals()['ext_dir']
Freeze(