diff --git a/repogen/__main__.py b/repogen/__main__.py index f0b0dc8..121278e 100644 --- a/repogen/__main__.py +++ b/repogen/__main__.py @@ -1,7 +1,6 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- import argparse -from os import path from pathlib import Path from repogen import apppage, apidata, pkg_info @@ -18,7 +17,7 @@ args = parser.parse_args() -packages = pkg_info.list_packages(args.input_dir) +packages = pkg_info.list_packages(Path(args.input_dir)) if args.gen_api: apidata.generate(packages, Path(args.output_dir, 'api')) diff --git a/repogen/apidata.py b/repogen/apidata.py index c2e57a2..5d76c68 100755 --- a/repogen/apidata.py +++ b/repogen/apidata.py @@ -82,4 +82,4 @@ def save_page(page: int, items: [PackageInfo]): parser.add_argument('-o', '--output-dir', required=True) args = parser.parse_args() - generate(pkg_info.list_packages(args.input_dir), args.output_dir) + generate(pkg_info.list_packages(Path(args.input_dir)), Path(args.output_dir)) diff --git a/repogen/apppage.py b/repogen/apppage.py index 5df68ae..890010e 100644 --- a/repogen/apppage.py +++ b/repogen/apppage.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- import math -from os.path import dirname, join from pathlib import Path from typing import List @@ -8,26 +7,26 @@ import pystache from repogen import pkg_info -from repogen.common import ITEMS_PER_PAGE +from repogen.common import ITEMS_PER_PAGE, ensure_open from repogen.pkg_info import PackageInfo class AppListingGenerator: def __init__(self, packages: List[PackageInfo]): - with open(join(dirname(__file__), 'templates', 'apps', 'detail.md'), encoding='utf-8') as f: + with Path(__file__).parent.joinpath('templates', 'apps', 'detail.md').open(encoding='utf-8') as f: self.details_template = f.read() - with open(join(dirname(__file__), 'templates', 'apps', 'list.html'), encoding='utf-8') as f: + with Path(__file__).parent.joinpath('templates', 'apps', 'list.html').open(encoding='utf-8') as f: self.index_template = f.read() self.packages = packages - def gen_details(self, outdir): + def gen_details(self, outdir: Path): for pkg in self.packages: - with open(join(outdir, '%s.md' % pkg['id']), 'w', encoding='utf-8') as f: + with ensure_open(outdir.joinpath('%s.md' % pkg['id']), mode='w', encoding='utf-8') as f: f.write(pystache.render(self.details_template, pkg)) - def _gen_page(self, outdir, items, pagination): + def _gen_page(self, outdir: Path, items, pagination): page = pagination['page'] maxp = pagination['max'] prevp = pagination['prev'] @@ -62,7 +61,7 @@ def _nav_item(p: int): def _page_path(p: int): return 'apps/index.html' if p == 1 else 'apps/page/%d.html' % p - with open(join(outdir, ('apps-page-%d.html' % page)), 'w', encoding='utf-8') as f: + with ensure_open(outdir.joinpath('apps-page-%d.html' % page), mode='w', encoding='utf-8') as f: f.write(pystache.render(self.index_template, { 'packages': items, 'pagePath': _page_path(page), 'firstPage': page == 1, @@ -72,7 +71,7 @@ def _page_path(p: int): } })) - def gen_list(self, outdir): + def gen_list(self, outdir: Path): pkgs = self.packages packages_length = len(pkgs) max_page = math.ceil(packages_length / ITEMS_PER_PAGE) @@ -89,9 +88,6 @@ def gen_list(self, outdir): def generate(packages: List[PackageInfo], outdir: Path, gen_details=True, gen_list=True): generator = AppListingGenerator(packages) - if not outdir.exists(): - outdir.mkdir(parents=True) - if gen_details: generator.gen_details(outdir) if gen_list: @@ -109,4 +105,4 @@ def generate(packages: List[PackageInfo], outdir: Path, gen_details=True, gen_li parser.add_argument('-o', '--output-dir', required=True) args = parser.parse_args() - generate(pkg_info.list_packages(args.input_dir), Path(args.output_dir)) + generate(pkg_info.list_packages(Path(args.input_dir)), Path(args.output_dir)) diff --git a/repogen/check_compat.py b/repogen/check_compat.py index 4c6708d..26eb263 100644 --- a/repogen/check_compat.py +++ b/repogen/check_compat.py @@ -1,4 +1,3 @@ -import os import subprocess from pathlib import Path diff --git a/repogen/common.py b/repogen/common.py index 2ff2e84..d70ea79 100644 --- a/repogen/common.py +++ b/repogen/common.py @@ -1,6 +1,6 @@ # -*- coding: utf-8 -*- import urllib -from os import path, PathLike +from os import PathLike from pathlib import Path from typing import Callable, TypeVar from urllib.parse import urljoin diff --git a/repogen/ipk_file.py b/repogen/ipk_file.py index 6b20ac1..e5117cc 100644 --- a/repogen/ipk_file.py +++ b/repogen/ipk_file.py @@ -1,10 +1,10 @@ +import io import json import re import tarfile -from typing import Optional, TypedDict, NotRequired +from typing import TypedDict, NotRequired import ar -import io class AppInfo(TypedDict): diff --git a/repogen/lintpkg.py b/repogen/lintpkg.py index 28c420b..d507caf 100644 --- a/repogen/lintpkg.py +++ b/repogen/lintpkg.py @@ -1,4 +1,3 @@ -from os import path from pathlib import Path from urllib.parse import urlparse from urllib.request import url2pathname @@ -80,7 +79,7 @@ def _validate_manifest_url(url: str, key: str, e: [str]): else: e.append(f"{key} must be accessible") case 'file': - assert path.isfile(url2pathname(manifest_url_pre.path)) + assert Path(url2pathname(manifest_url_pre.path)).exists() case _: e.append(f"{key} must be HTTPS URL") diff --git a/repogen/pkg_info.py b/repogen/pkg_info.py index f8bf0d6..68dd1a1 100644 --- a/repogen/pkg_info.py +++ b/repogen/pkg_info.py @@ -105,7 +105,7 @@ def from_package_info(pkgid: str, content: PackageRegistry, offline=False): def list_packages(pkgdir: Path, offline: bool = False) -> List[PackageInfo]: - paths: List[Path] = [pkgdir.joinpath(f) for f in pkgdir.iterdir() if f.is_file()] + paths: List[Path] = [f for f in pkgdir.iterdir() if f.is_file()] return sorted(filter(lambda x: x, map(lambda p: from_package_info_file(p, offline), paths)), key=lambda x: x['title'])