Skip to content

Commit

Permalink
Merge pull request #287 from neutrinoceros/perf/minimize_importtime
Browse files Browse the repository at this point in the history
PERF: delay most costly import statements until they are needed
  • Loading branch information
neutrinoceros authored Nov 28, 2024
2 parents 8457cd5 + 6557598 commit 8e10dda
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 7 deletions.
19 changes: 16 additions & 3 deletions src/inifix/__init__.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,24 @@
from __future__ import annotations

from .io import dump
from .io import dumps
from .io import load
from .io import loads
from .validation import validate_inifile_schema
from .format import format_string

from importlib.metadata import version
from typing import TYPE_CHECKING

if TYPE_CHECKING: # pragma: no cover
from typing import Any


def __getattr__(name: str) -> Any:
if name == "__version__":
from importlib.metadata import version

return version("inifix")
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")


__version__ = version("inifix")
del version
del TYPE_CHECKING
10 changes: 6 additions & 4 deletions src/inifix/format.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,11 @@
import argparse
import os
import re
import sys
import warnings
from collections.abc import Iterable
from concurrent.futures import ThreadPoolExecutor
from difflib import unified_diff
from functools import partial
from io import StringIO
from tempfile import TemporaryDirectory
from typing import IO, Literal

from inifix._cli import Message, TaskResults, get_cpu_count
Expand Down Expand Up @@ -141,7 +138,10 @@ def iniformat(s: str, /) -> str:


def main(argv: list[str] | None = None) -> int:
parser = argparse.ArgumentParser()
from argparse import ArgumentParser
from concurrent.futures import ThreadPoolExecutor

parser = ArgumentParser()
parser.add_argument("files", nargs="+")
parser.add_argument(
"--diff",
Expand Down Expand Up @@ -232,6 +232,8 @@ def _format_single_file_cli(
)
return TaskResults(status, messages)

from tempfile import TemporaryDirectory

with TemporaryDirectory(dir=os.path.dirname(file)) as tmpdir:
tmpfile = os.path.join(tmpdir, "ini")
with open(tmpfile, "wb") as bfh:
Expand Down
14 changes: 14 additions & 0 deletions tests/test_namespace.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
from importlib.metadata import version

import pytest

import inifix


def test_dunder_version():
assert inifix.__version__ == version("inifix")


def test_unknown_member():
with pytest.raises(AttributeError):
inifix.unknown_member # noqa: B018

0 comments on commit 8e10dda

Please sign in to comment.