fspacker.packers.factory 源代码

import logging
import time

__all__ = ["PackerFactory"]

from fspacker.parsers.project import Project
from fspacker.settings import get_settings

logger = logging.getLogger(__name__)


[文档] class PackerFactory: """打包工具.""" def __init__(self, info: Project) -> None: from fspacker.packers._base import BasePacker # noqa: PLC0415 from fspacker.packers._builtins import BuiltinsPacker # noqa: PLC0415 from fspacker.packers._entry import EntryPacker # noqa: PLC0415 from fspacker.packers._library import LibraryPacker # noqa: PLC0415 from fspacker.packers._post import get_post_packer # noqa: PLC0415 from fspacker.packers._pre import PrePacker # noqa: PLC0415 from fspacker.packers._runtime import RuntimePacker # noqa: PLC0415 from fspacker.packers._source import SourceResPacker # noqa: PLC0415 self.info: Project = info # 打包器集合, 注意打包顺序 self.packers: list[BasePacker] = [ PrePacker(self), SourceResPacker(self), LibraryPacker(self), BuiltinsPacker(self), EntryPacker(self), RuntimePacker(self), get_post_packer(self), ]
[文档] def setup(self) -> None: """初始化打包工具.""" for packer in self.packers: if packer: logger.info(f"初始化打包工具: {packer}") packer.setup()
[文档] def pack(self) -> None: """打包项目.""" logger.info(f"{'*' * 80}") logger.info( f"启动构建, 源码根目录: [[green underline]\ {self.info.project_dir}[/]]", ) t0 = time.perf_counter() try: for packer in self.packers: if packer: logger.info(f"启动打包: {packer}") packer.pack() except Exception: logger.exception( f"项目打包出错: [red bold]{self.info.normalized_name}", ) return logger.info(f"打包完成! 总用时: [{time.perf_counter() - t0:.4f}]s.") if not get_settings().mode.debug: logger.info(f"{'*' * 80}")