Commit f32cf660 by Sébastien Eustace

Improve CLI reactivity by deferring imports

parent af3b46d7
......@@ -10,6 +10,7 @@
- Improved dependency resolution to avoid unnecessary operations.
- Improved dependency resolution speed.
- Improved CLI reactivity by deferring imports.
### Fixed
......
from poetry.console import Application
from .poetry import Poetry
__version__ = Poetry.VERSION
console = Application()
from .__version__ import __version__
from .application import Application
def main():
Application().run()
......@@ -4,8 +4,9 @@ from cleo import Application as BaseApplication
from cleo.inputs import ArgvInput
from cleo.outputs import ConsoleOutput
from poetry import __version__
from poetry.io.raw_argv_input import RawArgvInput
from poetry.poetry import Poetry
from .commands import AboutCommand
from .commands import AddCommand
......@@ -28,13 +29,15 @@ from .commands.debug import DebugResolveCommand
class Application(BaseApplication):
def __init__(self):
super().__init__('Poetry', Poetry.VERSION)
super().__init__('Poetry', __version__)
self._poetry = None
self._skip_io_configuration = False
@property
def poetry(self) -> Poetry:
def poetry(self):
from poetry.poetry import Poetry
if self._poetry is not None:
return self._poetry
......
......@@ -3,10 +3,6 @@ import re
from typing import List
from typing import Tuple
from poetry.installation import Installer
from poetry.semver.version_parser import VersionParser
from poetry.version.version_selector import VersionSelector
from .venv_command import VenvCommand
......@@ -28,6 +24,9 @@ If you do not specify a version constraint, poetry will choose a suitable one ba
"""
def handle(self):
from poetry.installation import Installer
from poetry.semver.version_parser import VersionParser
packages = self.argument('name')
is_dev = self.option('dev')
......@@ -142,6 +141,8 @@ If you do not specify a version constraint, poetry will choose a suitable one ba
name,
required_version=None
) -> Tuple[str, str]:
from poetry.version.version_selector import VersionSelector
selector = VersionSelector(self.poetry.pool)
package = selector.find_best_candidate(name, required_version)
......
from .venv_command import VenvCommand
from poetry.masonry import Builder
class BuildCommand(VenvCommand):
"""
......@@ -12,6 +10,8 @@ class BuildCommand(VenvCommand):
"""
def handle(self):
from poetry.masonry import Builder
fmt = 'all'
if self.option('format'):
fmt = self.option('format')
......
import jsonschema
from .command import Command
......
from cleo import Command as BaseCommand
from poetry.poetry import Poetry
from ..styles.poetry import PoetryStyle
class Command(BaseCommand):
@property
def poetry(self) -> Poetry:
def poetry(self):
return self.get_application().poetry
def reset_poetry(self) -> None:
......
import json
import re
from poetry.config import Config
from .command import Command
......@@ -38,6 +36,8 @@ To remove a repository (repo is a short alias for repositories):
"""
def __init__(self):
from poetry.config import Config
super().__init__()
self._config = Config.create('config.toml')
......
......@@ -2,11 +2,6 @@ import re
from typing import List
from poetry.packages import Dependency
from poetry.puzzle import Solver
from poetry.repositories.repository import Repository
from poetry.semver.version_parser import VersionParser
from ..command import Command
......@@ -19,6 +14,11 @@ class DebugResolveCommand(Command):
"""
def handle(self):
from poetry.packages import Dependency
from poetry.puzzle import Solver
from poetry.repositories.repository import Repository
from poetry.semver.version_parser import VersionParser
packages = self.argument('package')
if not packages:
......
from poetry.installation import Installer
from .venv_command import VenvCommand
......@@ -24,6 +22,8 @@ exist it will look for <comment>pyproject.toml</> and do the same.
"""
def handle(self):
from poetry.installation import Installer
installer = Installer(
self.output,
self.venv,
......
from poetry.installation import Installer
from .venv_command import VenvCommand
......@@ -17,6 +15,8 @@ the current directory, processes it, and locks the depdencies in the <comment>py
"""
def handle(self):
from poetry.installation import Installer
installer = Installer(
self.output,
self.venv,
......
from poetry.masonry.publishing.publisher import Publisher
from .command import Command
......@@ -22,6 +20,8 @@ the config command.
"""
def handle(self):
from poetry.masonry.publishing.publisher import Publisher
# Building package first, unless told otherwise
if not self.option('no-build'):
self.call('build')
......
from poetry.installation import Installer
from .venv_command import VenvCommand
......@@ -20,6 +18,8 @@ list of installed packages
<info>poetry remove</info>"""
def handle(self):
from poetry.installation import Installer
packages = self.argument('packages')
is_dev = self.option('dev')
......
from poetry.semver import statisfies
from poetry.version.version_selector import VersionSelector
from .venv_command import VenvCommand
......@@ -241,6 +238,8 @@ lists all packages available."""
self.set_style(color, color)
def find_latest_package(self, package):
from poetry.version.version_selector import VersionSelector
# find the latest version allowed in this pool
if package.source_type == 'git':
return
......@@ -253,6 +252,8 @@ lists all packages available."""
)
def get_update_status(self, latest, package):
from poetry.semver import statisfies
if latest.full_pretty_version == package.full_pretty_version:
return 'up-to-date'
......
from poetry.installation import Installer
from .venv_command import VenvCommand
......@@ -15,6 +13,8 @@ class UpdateCommand(VenvCommand):
"""
def handle(self):
from poetry.installation import Installer
packages = self.argument('packages')
installer = Installer(
......
from poetry.utils.venv import Venv
from .command import Command
......@@ -11,6 +9,8 @@ class VenvCommand(Command):
super().__init__(name)
def initialize(self, i, o):
from poetry.utils.venv import Venv
super().initialize(i, o)
self._venv = Venv.create(o, self.poetry.package.name)
......
import os
import tarfile
import poetry
import poetry.poetry
from contextlib import contextmanager
from tempfile import TemporaryDirectory
......@@ -26,7 +26,7 @@ class CompleteBuilder(Builder):
dist_dir = self._path / 'dist'
with self.unpacked_tarball(sdist_file) as tmpdir:
wheel_info = WheelBuilder.make_in(
poetry.Poetry.create(tmpdir), self._venv, self._io, dist_dir,
poetry.poetry.Poetry.create(tmpdir), self._venv, self._io, dist_dir,
original=self._poetry
)
......
......@@ -7,9 +7,9 @@ import zipfile
from pathlib import Path
from poetry import __version__
from poetry import Poetry
from poetry.io import NullIO
from poetry.masonry.builders import CompleteBuilder
from poetry.poetry import Poetry
from poetry.utils.venv import NullVenv
fixtures_dir = Path(__file__).parent / 'fixtures'
......
......@@ -5,10 +5,10 @@ import tarfile
from pathlib import Path
from poetry import Poetry
from poetry.io import NullIO
from poetry.masonry.builders.sdist import SdistBuilder
from poetry.packages import Package
from poetry.poetry import Poetry
from poetry.utils.venv import NullVenv
from tests.helpers import get_dependency
......
......@@ -3,9 +3,9 @@ import shutil
from pathlib import Path
from poetry import Poetry
from poetry.io import NullIO
from poetry.masonry.builders import WheelBuilder
from poetry.poetry import Poetry
from poetry.utils.venv import NullVenv
......
......@@ -2,7 +2,7 @@ import toml
from pathlib import Path
from poetry import Poetry
from poetry.poetry import Poetry
fixtures_dir = Path(__file__).parent / 'fixtures'
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment