diff --git a/poetry/console/commands/check.py b/poetry/console/commands/check.py index f6531dab992..0711ca76b11 100644 --- a/poetry/console/commands/check.py +++ b/poetry/console/commands/check.py @@ -1,8 +1,5 @@ from pathlib import Path -from poetry.core.pyproject.toml import PyProjectTOML -from poetry.factory import Factory - from .command import Command @@ -12,6 +9,9 @@ class CheckCommand(Command): description = "Checks the validity of the pyproject.toml file." def handle(self) -> int: + from poetry.core.pyproject.toml import PyProjectTOML + from poetry.factory import Factory + # Load poetry config and display errors, if any poetry_file = Factory.locate(Path.cwd()) config = PyProjectTOML(poetry_file).poetry_config diff --git a/poetry/console/commands/remove.py b/poetry/console/commands/remove.py index 10d06197727..0e02100d1db 100644 --- a/poetry/console/commands/remove.py +++ b/poetry/console/commands/remove.py @@ -5,7 +5,7 @@ from cleo.helpers import argument from cleo.helpers import option -from .installer_command import InstallerCommand +from poetry.console.commands.installer_command import InstallerCommand class RemoveCommand(InstallerCommand): diff --git a/poetry/console/commands/source/add.py b/poetry/console/commands/source/add.py index 1b097076b84..22a245a7cea 100644 --- a/poetry/console/commands/source/add.py +++ b/poetry/console/commands/source/add.py @@ -10,8 +10,6 @@ from poetry.config.source import Source from poetry.console.commands.command import Command -from poetry.factory import Factory -from poetry.repositories import Pool class SourceAddCommand(Command): @@ -39,7 +37,7 @@ class SourceAddCommand(Command): ] @staticmethod - def source_to_table(source: Source) -> Table: + def source_to_table(source: "Source") -> Table: source_table: Table = table() for key, value in source.to_dict().items(): source_table.add(key, value) @@ -47,6 +45,9 @@ def source_to_table(source: Source) -> Table: return source_table def handle(self) -> Optional[int]: + from poetry.factory import Factory + from poetry.repositories import Pool + name = self.argument("name") url = self.argument("url") is_default = self.option("default") diff --git a/poetry/factory.py b/poetry/factory.py index 03b55175cd4..4972fa04ee2 100644 --- a/poetry/factory.py +++ b/poetry/factory.py @@ -16,7 +16,6 @@ from poetry.packages.project_package import ProjectPackage from poetry.plugins.plugin_manager import PluginManager from poetry.poetry import Poetry -from poetry.repositories.pypi_repository import PyPiRepository if TYPE_CHECKING: @@ -156,6 +155,8 @@ def configure_sources( if io.is_debug(): io.write_line("Deactivating the PyPI repository") else: + from poetry.repositories.pypi_repository import PyPiRepository + default = not poetry.pool.has_primary_repositories() poetry.pool.add_repository(PyPiRepository(), default, not default) diff --git a/poetry/installation/chooser.py b/poetry/installation/chooser.py index 4f9b469d823..0e632f8770f 100644 --- a/poetry/installation/chooser.py +++ b/poetry/installation/chooser.py @@ -1,5 +1,6 @@ import re +from typing import TYPE_CHECKING from typing import List from typing import Optional from typing import Tuple @@ -8,11 +9,14 @@ from poetry.core.packages.package import Package from poetry.core.packages.utils.link import Link -from poetry.repositories.pool import Pool from poetry.utils.env import Env from poetry.utils.patterns import wheel_file_re +if TYPE_CHECKING: + from poetry.repositories.pool import Pool + + class InvalidWheelName(Exception): pass @@ -49,7 +53,7 @@ class Chooser: A Chooser chooses an appropriate release archive for packages. """ - def __init__(self, pool: Pool, env: Env) -> None: + def __init__(self, pool: "Pool", env: Env) -> None: self._pool = pool self._env = env diff --git a/poetry/installation/pip_installer.py b/poetry/installation/pip_installer.py index 438864a3bdb..5c0b3fe7cab 100644 --- a/poetry/installation/pip_installer.py +++ b/poetry/installation/pip_installer.py @@ -12,7 +12,6 @@ from poetry.core.pyproject.toml import PyProjectTOML from poetry.installation.base_installer import BaseInstaller -from poetry.repositories.pool import Pool from poetry.utils._compat import encode from poetry.utils.env import Env from poetry.utils.helpers import safe_rmtree @@ -22,10 +21,11 @@ if TYPE_CHECKING: from poetry.core.packages.package import Package + from poetry.repositories.pool import Pool class PipInstaller(BaseInstaller): - def __init__(self, env: Env, io: IO, pool: Pool) -> None: + def __init__(self, env: Env, io: IO, pool: "Pool") -> None: self._env = env self._io = io self._pool = pool diff --git a/poetry/packages/locker.py b/poetry/packages/locker.py index 6855c14c35a..692124e9e60 100644 --- a/poetry/packages/locker.py +++ b/poetry/packages/locker.py @@ -24,8 +24,6 @@ from tomlkit import table from tomlkit.exceptions import TOMLKitError -import poetry.repositories - from poetry.core.packages.dependency import Dependency from poetry.core.packages.package import Package from poetry.core.semver.helpers import parse_constraint @@ -40,6 +38,8 @@ if TYPE_CHECKING: from tomlkit.toml_document import TOMLDocument + from poetry.repositories import Repository + logger = logging.getLogger(__name__) @@ -87,19 +87,18 @@ def is_fresh(self) -> bool: return False - def locked_repository( - self, with_dev_reqs: bool = False - ) -> poetry.repositories.Repository: + def locked_repository(self, with_dev_reqs: bool = False) -> "Repository": """ Searches and returns a repository of locked packages. """ from poetry.factory import Factory + from poetry.repositories import Repository if not self.is_locked(): - return poetry.repositories.Repository() + return Repository() lock_data = self.lock_data - packages = poetry.repositories.Repository() + packages = Repository() if with_dev_reqs: locked_packages = lock_data["package"] diff --git a/poetry/utils/helpers.py b/poetry/utils/helpers.py index 714606ac3ec..a19874a0ce2 100644 --- a/poetry/utils/helpers.py +++ b/poetry/utils/helpers.py @@ -6,6 +6,7 @@ from contextlib import contextmanager from pathlib import Path +from typing import TYPE_CHECKING from typing import Any from typing import Callable from typing import Dict @@ -13,10 +14,7 @@ from typing import List from typing import Optional -import requests - from poetry.config.config import Config -from poetry.core.packages.package import Package try: @@ -25,6 +23,12 @@ from collections import Mapping +if TYPE_CHECKING: + from requests import Session + + from poetry.core.packages.package import Package + + _canonicalize_regex = re.compile("[-_]+") @@ -92,9 +96,11 @@ def merge_dicts(d1: Dict, d2: Dict) -> None: def download_file( url: str, dest: str, - session: Optional[requests.Session] = None, + session: Optional["Session"] = None, chunk_size: int = 1024, ) -> None: + import requests + get = requests.get if not session else session.get with get(url, stream=True) as response: @@ -107,7 +113,7 @@ def download_file( def get_package_version_display_string( - package: Package, root: Optional[Path] = None + package: "Package", root: Optional[Path] = None ) -> str: if package.source_type in ["file", "directory"] and root: return "{} {}".format(