Commit 6b096390 by Sébastien Eustace Committed by GitHub

Improve linting using isort and flake8 (#1531)

parent 98f4176f
[flake8]
max-line-length = 88
ignore = E501, E203, W503
per-file-ignores = __init__.py:F401
exclude =
.git
__pycache__
setup.py
build
dist
releases
.venv
.tox
.mypy_cache
.pytest_cache
.vscode
.github
poetry/utils/_compat.py
tests/fixtures/
tests/repositories/fixtures/
tests/utils/fixtures/
......@@ -17,4 +17,4 @@ assignees: ''
- [ ] I have searched the [documentation](https://poetry.eustace.io/docs/) and believe that my question is not covered.
## Issue
<!-- Now feel free to write your issue, but please be descriptive! Thanks again 🙌 ❤️ -->
\ No newline at end of file
<!-- Now feel free to write your issue, but please be descriptive! Thanks again 🙌 ❤️ -->
repos:
- repo: https://github.com/ambv/black
- repo: https://github.com/psf/black
rev: stable
hooks:
- id: black
- id: black
- repo: https://gitlab.com/pycqa/flake8
rev: 3.7.8
hooks:
- id: flake8
- repo: https://github.com/pre-commit/mirrors-isort
rev: v4.3.21
hooks:
- id: isort
additional_dependencies: [toml]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v2.3.0
hooks:
- id: trailing-whitespace
- id: end-of-file-fixer
- id: debug-statements
......@@ -102,6 +102,9 @@ $ poetry run pytest tests/
Poetry uses the [black](https://github.com/ambv/black) coding style and you must ensure that your
code follows it. If not, the CI will fail and your Pull Request will not be merged.
Similarly, the import statements are sorted with [isort](https://github.com/timothycrosley/isort)
and special care must be taken to respect it. If you don't, the CI will fail as well.
To make sure that you don't accidentally commit code that does not follow the coding style, you can
install a pre-commit hook that will check that everything is in order:
......@@ -109,6 +112,12 @@ install a pre-commit hook that will check that everything is in order:
$ poetry run pre-commit install
```
You can also run it anytime using:
```bash
$ poetry run pre-commit run --all-files
```
Your code must always be accompanied by corresponding tests, if tests are not present your code
will not be merged.
......
......@@ -157,13 +157,13 @@ or create a brand new one for you to always work isolated from your global Pytho
By default, Poetry will use the currently activated Python version
to create the virtualenv for the current project.
To easily switch between Python versions, it is recommended to
use [pyenv](https://github.com/pyenv/pyenv) or similar tools.
For instance, if your project is Python 2.7 only, a standard workflow
would be:
```bash
pyenv install 2.7.15
pyenv local 2.7.15 # Activate Python 2.7 for the current project
......
......@@ -220,7 +220,7 @@ poetry add ../my-package/dist/my-package-0.1.0.tar.gz
poetry add ../my-package/dist/my_package-0.1.0.whl
```
Path dependencies pointing to a local directory will be installed in editable mode (i.e. setuptools "develop mode").
Path dependencies pointing to a local directory will be installed in editable mode (i.e. setuptools "develop mode").
It means that changes in the local directory will be reflected directly in environment.
If you don't want the dependency to be installed in editable mode you can specify it in the `pyproject.toml` file:
......@@ -415,7 +415,7 @@ poetry lock
## version
This command shows the current version of the project or bumps the version of
This command shows the current version of the project or bumps the version of
the project and writes the new version back to `pyproject.toml` if a valid
bump rule is provided.
......
......@@ -104,13 +104,22 @@ $ poetry run pytest tests/
Poetry uses the [black](https://github.com/ambv/black) coding style and you must ensure that your
code follows it. If not, the CI will fail and your Pull Request will not be merged.
To make sure that you don't accidently commit code that does not follow the coding style, you can
Similarly, the import statements are sorted with [isort](https://github.com/timothycrosley/isort)
and special care must be taken to respect it. If you don't, the CI will fail as well.
To make sure that you don't accidentally commit code that does not follow the coding style, you can
install a pre-commit hook that will check that everything is in order:
```bash
$ poetry run pre-commit install
```
You can also run it anytime using:
```bash
$ poetry run pre-commit run --all-files
```
Your code must always be accompanied by corresponding tests, if tests are not present your code
will not be merged.
......
......@@ -33,7 +33,9 @@ from contextlib import closing
from contextlib import contextmanager
from functools import cmp_to_key
from gzip import GzipFile
from io import UnsupportedOperation, open
from io import UnsupportedOperation
from io import open
try:
from urllib.error import HTTPError
......@@ -853,7 +855,7 @@ def main():
base_url = Installer.BASE_URL
try:
r = urlopen(Installer.REPOSITORY_URL)
urlopen(Installer.REPOSITORY_URL)
except HTTPError as e:
if e.code == 404:
base_url = Installer.FALLBACK_BASE_URL
......
import os
import sys
from .__version__ import __version__ # noqa
_ROOT = os.path.dirname(os.path.realpath(__file__))
_VENDOR = os.path.join(_ROOT, "_vendor")
_CURRENT_VENDOR = os.path.join(
......@@ -9,5 +12,3 @@ _CURRENT_VENDOR = os.path.join(
# Add vendored dependencies to path.
sys.path.insert(0, _CURRENT_VENDOR)
from .__version__ import __version__ # noqa
import sys
if __name__ == "__main__":
from .console import main
......
......@@ -2,8 +2,10 @@ from __future__ import absolute_import
import os
import re
from copy import deepcopy
from typing import Any
from typing import Callable
from typing import Dict
from typing import Optional
......@@ -14,10 +16,16 @@ from poetry.utils._compat import basestring
from .config_source import ConfigSource
from .dict_config_source import DictConfigSource
_NOT_SET = object()
boolean_validator = lambda val: val in {"true", "false", "1", "0"}
boolean_normalizer = lambda val: val in ["true", "1"]
def boolean_validator(val):
return val in {"true", "false", "1", "0"}
def boolean_normalizer(val):
return val in ["true", "1"]
class Config(object):
......
import os
from cleo import Application as BaseApplication
from poetry import __version__
from .commands import AboutCommand
from .commands import AddCommand
from .commands import BuildCommand
from .commands import CheckCommand
from .commands import ConfigCommand
from .commands import ExportCommand
from .commands import InitCommand
from .commands import InstallCommand
from .commands import LockCommand
from .commands import NewCommand
from .commands import PublishCommand
from .commands import RemoveCommand
from .commands import RunCommand
from .commands import SearchCommand
from .commands import ShellCommand
from .commands import ShowCommand
from .commands import UpdateCommand
from .commands import VersionCommand
from .commands.debug import DebugCommand
from .commands.cache import CacheCommand
from .commands.self import SelfCommand
from .commands.about import AboutCommand
from .commands.add import AddCommand
from .commands.build import BuildCommand
from .commands.cache.cache import CacheCommand
from .commands.check import CheckCommand
from .commands.config import ConfigCommand
from .commands.debug.debug import DebugCommand
from .commands.env.env import EnvCommand
from .commands.export import ExportCommand
from .commands.init import InitCommand
from .commands.install import InstallCommand
from .commands.lock import LockCommand
from .commands.new import NewCommand
from .commands.publish import PublishCommand
from .commands.remove import RemoveCommand
from .commands.run import RunCommand
from .commands.search import SearchCommand
from .commands.self.self import SelfCommand
from .commands.shell import ShellCommand
from .commands.show import ShowCommand
from .commands.update import UpdateCommand
from .commands.version import VersionCommand
from .config import ApplicationConfig
from .commands.env import EnvCommand
class Application(BaseApplication):
def __init__(self):
......
from cleo import argument
from cleo import option
from .init import InitCommand
from .env_command import EnvCommand
from .init import InitCommand
class AddCommand(EnvCommand, InitCommand):
......@@ -49,7 +49,7 @@ If you do not specify a version constraint, poetry will choose a suitable one ba
loggers = ["poetry.repositories.pypi_repository"]
def handle(self):
from poetry.installation import Installer
from poetry.installation.installer import Installer
from poetry.semver import parse_constraint
from tomlkit import inline_table
......
from ..command import Command
from .clear import CacheClearCommand
......
......@@ -5,10 +5,9 @@ from cleo import argument
from cleo import option
from poetry.factory import Factory
from poetry.utils.helpers import (
keyring_repository_password_del,
keyring_repository_password_set,
)
from poetry.utils.helpers import keyring_repository_password_del
from poetry.utils.helpers import keyring_repository_password_set
from .command import Command
......@@ -42,12 +41,11 @@ To remove a repository (repo is a short alias for repositories):
@property
def unique_config_values(self):
from poetry.config.config import boolean_normalizer
from poetry.config.config import boolean_validator
from poetry.locations import CACHE_DIR
from poetry.utils._compat import Path
boolean_validator = lambda val: val in {"true", "false", "1", "0"}
boolean_normalizer = lambda val: val in ["true", "1"]
unique_config_values = {
"cache-dir": (
str,
......
import re
from typing import List
from cleo import argument
from cleo import option
......
from ..command import Command
from .info import EnvInfoCommand
from .list import EnvListCommand
from .remove import EnvRemoveCommand
......
......@@ -13,8 +13,8 @@ from typing import Union
from cleo import option
from tomlkit import inline_table
from poetry.utils._compat import Path
from poetry.utils._compat import OrderedDict
from poetry.utils._compat import Path
from poetry.utils._compat import urlparse
from .command import Command
......@@ -431,7 +431,7 @@ The <c1>init</c1> command creates a basic <comment>pyproject.toml</> file in the
require["version"] = version
else:
m = re.match(
"^([^><=!: ]+)((?:>=|<=|>|<|!=|~=|~|\^).*)$", requirement.strip()
r"^([^><=!: ]+)((?:>=|<=|>|<|!=|~=|~|\^).*)$", requirement.strip()
)
if m:
name, constraint = m.group(1), m.group(2)
......
......@@ -40,7 +40,7 @@ exist it will look for <comment>pyproject.toml</> and do the same.
def handle(self):
from clikit.io import NullIO
from poetry.installation import Installer
from poetry.installation.installer import Installer
from poetry.masonry.builders import EditableBuilder
from poetry.masonry.utils.module import ModuleOrPackageNotFound
......
......@@ -15,7 +15,7 @@ the current directory, processes it, and locks the depdencies in the <comment>po
loggers = ["poetry.repositories.pypi_repository"]
def handle(self):
from poetry.installation import Installer
from poetry.installation.installer import Installer
installer = Installer(
self.io, self.env, self.poetry.package, self.poetry.locker, self.poetry.pool
......
......@@ -28,7 +28,7 @@ list of installed packages
loggers = ["poetry.repositories.pypi_repository"]
def handle(self):
from poetry.installation import Installer
from poetry.installation.installer import Installer
packages = self.argument("packages")
is_dev = self.option("dev")
......
from ..command import Command
from .update import SelfUpdateCommand
......
......@@ -8,6 +8,12 @@ import tarfile
from functools import cmp_to_key
from gzip import GzipFile
from cleo import argument
from cleo import option
from ..command import Command
try:
from urllib.error import HTTPError
from urllib.request import urlopen
......@@ -15,11 +21,6 @@ except ImportError:
from urllib2 import HTTPError
from urllib2 import urlopen
from cleo import argument
from cleo import option
from ..command import Command
class SelfUpdateCommand(Command):
......
import sys
from os import environ
from distutils.util import strtobool
from os import environ
from .env_command import EnvCommand
......
......@@ -28,7 +28,7 @@ class UpdateCommand(EnvCommand):
loggers = ["poetry.repositories.pypi_repository"]
def handle(self):
from poetry.installation import Installer
from poetry.installation.installer import Installer
packages = self.argument("packages")
......
......@@ -20,7 +20,7 @@ class VersionCommand(Command):
]
help = """\
The version command shows the current version of the project or bumps the version of
The version command shows the current version of the project or bumps the version of
the project and writes the new version back to <comment>pyproject.toml</> if a valid
bump rule is provided.
......
import logging
from cleo.config import ApplicationConfig as BaseApplicationConfig
from clikit.api.application.application import Application
from clikit.api.args.raw_args import RawArgs
from clikit.api.event import PRE_HANDLE
from clikit.api.event import PreHandleEvent
from clikit.api.event import PreResolveEvent
from clikit.api.event.event_dispatcher import EventDispatcher
from clikit.api.formatter import Style
from clikit.api.io import Input
from clikit.api.io import InputStream
......@@ -11,6 +15,7 @@ from clikit.api.io import OutputStream
from clikit.api.io.flags import DEBUG
from clikit.api.io.flags import VERBOSE
from clikit.api.io.flags import VERY_VERBOSE
from clikit.api.io.io import IO
from clikit.formatter import AnsiFormatter
from clikit.formatter import PlainFormatter
from clikit.io.input_stream import StandardInputStream
......@@ -19,8 +24,8 @@ from clikit.io.output_stream import StandardOutputStream
from poetry.console.commands.command import Command
from poetry.console.commands.env_command import EnvCommand
from poetry.console.logging import IOFormatter
from poetry.console.logging import IOHandler
from poetry.console.logging.io_formatter import IOFormatter
from poetry.console.logging.io_handler import IOHandler
class ApplicationConfig(BaseApplicationConfig):
......@@ -68,7 +73,6 @@ class ApplicationConfig(BaseApplicationConfig):
logger.setLevel(level)
def set_env(self, event, event_name, _): # type: (PreHandleEvent, str, _) -> None
from poetry.semver import parse_constraint
from poetry.utils.env import EnvManager
command = event.command.config.handler # type: EnvCommand
......
from .io_formatter import IOFormatter
from .io_handler import IOHandler
import os
import tempfile
from io import open
from io import open
from subprocess import CalledProcessError
from clikit.api.io import IO
from clikit.io import NullIO
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
from .base_installer import BaseInstaller
try:
import urllib.parse as urlparse
except ImportError:
import urlparse
from poetry.repositories.pool import Pool
from poetry.utils._compat import encode
from poetry.utils.env import Env
from .base_installer import BaseInstaller
class PipInstaller(BaseInstaller):
def __init__(self, env, io, pool): # type: (Env, IO, Pool) -> None
......
import json
import os
import jsonschema
from io import open
from typing import List
import jsonschema
SCHEMA_DIR = os.path.join(os.path.dirname(__file__), "schemas")
......
......@@ -2,6 +2,7 @@
from .layout import Layout
DEFAULT = u"""__version__ = '{version}'
"""
......
......@@ -2,6 +2,7 @@
from .layout import Layout
DEFAULT = u"""__version__ = '{version}'
"""
......
......@@ -11,8 +11,9 @@ from poetry.utils._compat import Path
from poetry.utils._compat import unicode
from poetry.utils.env import SystemEnv
from .builders import SdistBuilder
from .builders import WheelBuilder
from .builders.sdist import SdistBuilder
from .builders.wheel import WheelBuilder
log = logging.getLogger(__name__)
......
from .builders import CompleteBuilder
from .builders import SdistBuilder
from .builders import WheelBuilder
from .builders.complete import CompleteBuilder
from .builders.sdist import SdistBuilder
from .builders.wheel import WheelBuilder
class Builder:
......
......@@ -41,7 +41,7 @@ class Builder(object):
def __init__(
self, poetry, env, io, ignore_packages_formats=False
): # type: (Poetry, Env, IO) -> None
): # type: ("Poetry", "Env", "IO", bool) -> None
self._poetry = poetry
self._env = env
self._io = io
......
import os
import tarfile
from contextlib import contextmanager
from poetry.factory import Factory
from poetry.io.null_io import NullIO
from poetry.utils._compat import Path
from poetry.utils.helpers import temporary_directory
from contextlib import contextmanager
from .builder import Builder
from .sdist import SdistBuilder
from .wheel import WheelBuilder
......
......@@ -16,7 +16,6 @@ from poetry.utils._compat import to_str
from ..utils.helpers import normalize_file_permissions
from ..utils.package_include import PackageInclude
from .builder import Builder
......@@ -268,9 +267,7 @@ class SdistBuilder(Builder):
return pkgdir, sorted(packages), pkg_data
@classmethod
def convert_dependencies(
cls, package, dependencies # type: Package # type: List[Dependency]
):
def convert_dependencies(cls, package, dependencies):
main = []
extras = defaultdict(list)
req_regex = re.compile(r"^(.+) \((.+)\)$")
......
......@@ -3,10 +3,9 @@ from __future__ import unicode_literals
import contextlib
import hashlib
import os
import re
import tempfile
import shutil
import stat
import tempfile
import zipfile
from base64 import urlsafe_b64encode
......@@ -19,7 +18,9 @@ from poetry.__version__ import __version__
from poetry.semver import parse_constraint
from poetry.utils._compat import decode
from ..utils.helpers import normalize_file_permissions, escape_name, escape_version
from ..utils.helpers import escape_name
from ..utils.helpers import escape_version
from ..utils.helpers import normalize_file_permissions
from ..utils.package_include import PackageInclude
from ..utils.tags import get_abbr_impl
from ..utils.tags import get_abi_tag
......
import logging
from poetry.utils.helpers import get_client_cert, get_cert, get_http_basic_auth
from poetry.utils.helpers import get_cert
from poetry.utils.helpers import get_client_cert
from poetry.utils.helpers import get_http_basic_auth
from .uploader import Uploader
......
import hashlib
import io
import math
import re
from typing import List, Optional
from typing import List
from typing import Optional
import requests
......@@ -11,7 +11,8 @@ from requests import adapters
from requests.exceptions import HTTPError
from requests.packages.urllib3 import util
from requests_toolbelt import user_agent
from requests_toolbelt.multipart import MultipartEncoder, MultipartEncoderMonitor
from requests_toolbelt.multipart import MultipartEncoder
from requests_toolbelt.multipart import MultipartEncoderMonitor
from poetry.__version__ import __version__
from poetry.utils._compat import Path
......@@ -19,7 +20,8 @@ from poetry.utils.helpers import normalize_version
from poetry.utils.patterns import wheel_file_re
from ..metadata import Metadata
from ..utils.helpers import escape_name, escape_version
from ..utils.helpers import escape_name
from ..utils.helpers import escape_version
_has_blake2 = hasattr(hashlib, "blake2b")
......
from typing import List
from poetry.utils._compat import Path
from poetry.utils.helpers import module_name
......
from typing import Dict
from typing import Generator
from typing import List
from .incompatibility_cause import ConflictCause
......
from collections import OrderedDict
from typing import Any
from typing import Dict
from typing import List
......
# -*- coding: utf-8 -*-
import time
from typing import Any
from typing import Dict
from typing import List
from typing import Union
from poetry.packages import Dependency
from poetry.packages import ProjectPackage
from poetry.packages import Package
from poetry.packages import ProjectPackage
from poetry.puzzle.provider import Provider
from poetry.semver import Version
from poetry.semver import VersionRange
......
......@@ -12,6 +12,7 @@ from .locker import Locker
from .package import Package
from .package_collection import PackageCollection
from .project_package import ProjectPackage
from .url_dependency import URLDependency
from .utils.link import Link
from .utils.utils import convert_markers
from .utils.utils import group_markers
......@@ -20,7 +21,6 @@ from .utils.utils import is_installable_dir
from .utils.utils import is_url
from .utils.utils import path_to_url
from .utils.utils import strip_extras
from .url_dependency import URLDependency
from .vcs_dependency import VCSDependency
......
import re
from .any_constraint import AnyConstraint
from .base_constraint import BaseConstraint
from .constraint import Constraint
from .union_constraint import UnionConstraint
......
......@@ -65,7 +65,11 @@ class MultiConstraint(BaseConstraint):
def intersect(self, other):
if isinstance(other, Constraint):
constraints = [c for c in self._constraints if c == other]
constraints = self._constraints
if other not in constraints:
constraints += (other,)
else:
constraints = (other,)
if len(constraints) == 1:
return constraints[0]
......
from .base_constraint import BaseConstraint
from .constraint import Constraint
from .empty_constraint import EmptyConstraint
from .multi_constraint import MultiConstraint
class UnionConstraint(BaseConstraint):
......
......@@ -2,11 +2,11 @@ from typing import Optional
import poetry.packages
from poetry.semver import parse_constraint
from poetry.semver import Version
from poetry.semver import VersionConstraint
from poetry.semver import VersionRange
from poetry.semver import VersionUnion
from poetry.semver import parse_constraint
from poetry.utils.helpers import canonicalize_name
from poetry.version.markers import AnyMarker
from poetry.version.markers import parse_marker
......
......@@ -6,6 +6,7 @@ from poetry.utils.toml_file import TomlFile
from .dependency import Dependency
# Patching pkginfo to support Metadata version 2.1 (PEP 566)
HEADER_ATTRS.update(
{"2.1": HEADER_ATTRS_2_0 + (("Provides-Extra", "provides_extra", True),)}
......
......@@ -8,6 +8,7 @@ from poetry.utils._compat import Path
from .dependency import Dependency
# Patching pkginfo to support Metadata version 2.1 (PEP 566)
HEADER_ATTRS.update(
{"2.1": HEADER_ATTRS_2_0 + (("Provides-Extra", "provides_extra", True),)}
......
import json
import re
import poetry.packages
import poetry.repositories
from hashlib import sha256
from typing import List
from tomlkit import document
from tomlkit import inline_table
from tomlkit import item
from tomlkit import table
from typing import List
import poetry.packages
import poetry.repositories
from poetry.utils._compat import Path
from poetry.utils.toml_file import TomlFile
......
......@@ -9,8 +9,8 @@ from warnings import warn
from poetry.semver import Version
from poetry.semver import parse_constraint
from poetry.spdx import license_by_id
from poetry.spdx import License
from poetry.spdx import license_by_id
from poetry.utils._compat import Path
from poetry.utils.helpers import canonicalize_name
from poetry.version.markers import AnyMarker
......@@ -21,8 +21,9 @@ from .dependency import Dependency
from .directory_dependency import DirectoryDependency
from .file_dependency import FileDependency
from .url_dependency import URLDependency
from .vcs_dependency import VCSDependency
from .utils.utils import create_nested_marker
from .vcs_dependency import VCSDependency
AUTHOR_REGEX = re.compile(r"(?u)^(?P<name>[- .,\w\d'’\"()]+)(?: <(?P<email>.+?)>)?$")
......
import posixpath
import re
from .utils import path_to_url
from .utils import splitext
try:
import urllib.parse as urlparse
except ImportError:
import urlparse
import re
from .utils import path_to_url
from .utils import splitext
class Link:
def __init__(self, url, comes_from=None, requires_python=None):
......
......@@ -11,6 +11,7 @@ from poetry.version.markers import MarkerUnion
from poetry.version.markers import MultiMarker
from poetry.version.markers import SingleMarker
try:
import urllib.parse as urlparse
except ImportError:
......
from __future__ import absolute_import
from __future__ import unicode_literals
from typing import Optional
from .__version__ import __version__
from .config.config import Config
from .packages import Locker
......
import glob
import logging
import os
import pkginfo
import re
import time
from clikit.ui.components import ProgressIndicator
from contextlib import contextmanager
from tempfile import mkdtemp
from typing import List
from typing import Optional
import pkginfo
from clikit.ui.components import ProgressIndicator
from poetry.factory import Factory
from poetry.mixology.incompatibility import Incompatibility
from poetry.mixology.incompatibility_cause import DependencyCause
from poetry.mixology.incompatibility_cause import PythonCause
from poetry.mixology.term import Term
from poetry.packages import Dependency
from poetry.packages import DependencyPackage
from poetry.packages import DirectoryDependency
......@@ -21,30 +27,22 @@ from poetry.packages import PackageCollection
from poetry.packages import URLDependency
from poetry.packages import VCSDependency
from poetry.packages import dependency_from_pep_508
from poetry.mixology.incompatibility import Incompatibility
from poetry.mixology.incompatibility_cause import DependencyCause
from poetry.mixology.incompatibility_cause import PythonCause
from poetry.mixology.term import Term
from poetry.repositories import Pool
from poetry.utils._compat import PY35
from poetry.utils._compat import Path
from poetry.utils._compat import OrderedDict
from poetry.utils._compat import Path
from poetry.utils._compat import urlparse
from poetry.utils.env import EnvCommandError
from poetry.utils.env import EnvManager
from poetry.utils.env import VirtualEnv
from poetry.utils.helpers import parse_requires
from poetry.utils.helpers import safe_rmtree
from poetry.utils.helpers import temporary_directory
from poetry.utils.env import EnvManager
from poetry.utils.env import EnvCommandError
from poetry.utils.env import VirtualEnv
from poetry.utils.inspector import Inspector
from poetry.utils.setup_reader import SetupReader
from poetry.utils.toml_file import TomlFile
from poetry.version.markers import MarkerUnion
from poetry.vcs.git import Git
from poetry.version.markers import MarkerUnion
from .exceptions import CompatibilityError
......@@ -278,7 +276,7 @@ class Provider:
package.source_url = dependency.path.as_posix()
if dependency.base != None:
if dependency.base is not None:
package.root_dir = dependency.base.as_posix()
for extra in dependency.extras:
......
......@@ -13,12 +13,10 @@ from poetry.version.markers import AnyMarker
from .exceptions import CompatibilityError
from .exceptions import SolverProblemError
from .operations import Install
from .operations import Uninstall
from .operations import Update
from .operations.operation import Operation
from .provider import Provider
......
import cgi
import re
try:
import urllib.parse as urlparse
except ImportError:
import urlparse
try:
from html import unescape
except ImportError:
try:
from html.parser import HTMLParser
except ImportError:
from HTMLParser import HTMLParser
unescape = HTMLParser().unescape
import warnings
from collections import defaultdict
from typing import Generator
from typing import Optional
from typing import Union
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
import requests
from cachecontrol import CacheControl
......@@ -38,10 +19,10 @@ from poetry.locations import CACHE_DIR
from poetry.packages import Package
from poetry.packages import dependency_from_pep_508
from poetry.packages.utils.link import Link
from poetry.semver import parse_constraint
from poetry.semver import Version
from poetry.semver import VersionConstraint
from poetry.semver import VersionRange
from poetry.semver import parse_constraint
from poetry.utils._compat import Path
from poetry.utils.helpers import canonicalize_name
from poetry.utils.inspector import Inspector
......@@ -52,7 +33,28 @@ from .auth import Auth
from .exceptions import PackageNotFound
from .pypi_repository import PyPiRepository
import warnings
try:
import urllib.parse as urlparse
except ImportError:
import urlparse
try:
from html import unescape
except ImportError:
try:
from html.parser import HTMLParser
except ImportError:
from HTMLParser import HTMLParser
unescape = HTMLParser().unescape
try:
from urllib.parse import quote
except ImportError:
from urllib import quote
with warnings.catch_warnings():
warnings.simplefilter("ignore")
......
......@@ -94,7 +94,7 @@ class Pool(BaseRepository):
def package(
self, name, version, extras=None, repository=None
): # type: (str, str, List[str], str) -> Package
): # type: (str, str, List[str], str) -> "Package"
if (
repository is not None
and repository not in self._lookup
......
......@@ -6,11 +6,6 @@ from typing import Dict
from typing import List
from typing import Union
try:
import urllib.parse as urlparse
except ImportError:
import urlparse
from cachecontrol import CacheControl
from cachecontrol.caches.file_cache import FileCache
from cachy import CacheManager
......@@ -19,12 +14,12 @@ from requests import get
from requests import session
from poetry.locations import CACHE_DIR
from poetry.packages import dependency_from_pep_508
from poetry.packages import Package
from poetry.packages import dependency_from_pep_508
from poetry.packages.utils.link import Link
from poetry.semver import parse_constraint
from poetry.semver import VersionConstraint
from poetry.semver import VersionRange
from poetry.semver import parse_constraint
from poetry.semver.exceptions import ParseVersionError
from poetry.utils._compat import Path
from poetry.utils._compat import to_str
......@@ -38,6 +33,12 @@ from .exceptions import PackageNotFound
from .repository import Repository
try:
import urllib.parse as urlparse
except ImportError:
import urlparse
logger = logging.getLogger(__name__)
......
from poetry.semver import parse_constraint
from poetry.semver import VersionConstraint
from poetry.semver import VersionRange
from poetry.semver import parse_constraint
from .base_repository import BaseRepository
......
import re
MODIFIERS = (
"[._-]?"
r"((?!post)(?:beta|b|c|pre|RC|alpha|a|patch|pl|p|dev)(?:(?:[.-]?\d+)*)?)?"
......
......@@ -2,6 +2,7 @@ import re
from typing import List
from typing import Optional
from typing import Union
from .empty_constraint import EmptyConstraint
from .exceptions import ParseVersionError
......
......@@ -5,7 +5,7 @@ class VersionConstraint:
def is_any(self): # type: () -> bool
raise NotImplementedError()
def allows(self, version): # type: (Version) -> bool
def allows(self, version): # type: ("Version") -> bool
raise NotImplementedError()
def allows_all(self, other): # type: (VersionConstraint) -> bool
......
from typing import List
from .empty_constraint import EmptyConstraint
from .version_constraint import VersionConstraint
from .version_union import VersionUnion
......@@ -58,7 +60,7 @@ class VersionRange(VersionConstraint):
def is_any(self):
return self._min is None and self._max is None
def allows(self, other): # type: (Version) -> bool
def allows(self, other): # type: ("Version") -> bool
if self._min is not None:
if other < self._min:
return False
......
from typing import List
from .empty_constraint import EmptyConstraint
from .version_constraint import VersionConstraint
......@@ -72,7 +74,7 @@ class VersionUnion(VersionConstraint):
def is_any(self):
return False
def allows(self, version): # type: (Version) -> bool
def allows(self, version): # type: ("Version") -> bool
return any([constraint.allows(version) for constraint in self._ranges])
def allows_all(self, other): # type: (VersionConstraint) -> bool
......@@ -214,7 +216,7 @@ class VersionUnion(VersionConstraint):
def _ranges_for(
self, constraint
): # type: (VersionConstraint) -> List[VersionRange]
): # type: (VersionConstraint) -> List["VersionRange"]
from .version_range import VersionRange
if constraint.is_empty():
......
......@@ -6,6 +6,7 @@ from io import open
from .license import License
from .updater import Updater
_licenses = None
......
......@@ -1844,4 +1844,4 @@
false,
false
]
}
\ No newline at end of file
}
......@@ -3,6 +3,7 @@ import os
from io import open
try:
from urllib.request import urlopen
except ImportError:
......
import sys
try:
from functools32 import lru_cache
except ImportError:
......
......@@ -5,6 +5,7 @@ to suit our purposes.
import os
import sys
WINDOWS = sys.platform.startswith("win") or (sys.platform == "cli" and os.name == "nt")
......
......@@ -9,8 +9,6 @@ import sys
import sysconfig
import warnings
import tomlkit
from contextlib import contextmanager
from typing import Any
from typing import Dict
......@@ -18,6 +16,8 @@ from typing import List
from typing import Optional
from typing import Tuple
import tomlkit
from clikit.api.io import IO
from poetry.locations import CACHE_DIR
......
......@@ -4,21 +4,25 @@ import shutil
import stat
import tempfile
try:
from collections.abc import Mapping
except ImportError:
from collections import Mapping
from contextlib import contextmanager
from typing import List
from typing import Optional
from keyring import delete_password, set_password, get_password
from keyring import delete_password
from keyring import get_password
from keyring import set_password
from keyring.errors import KeyringError
from poetry.config.config import Config
from poetry.version import Version
from poetry.utils._compat import Path
from poetry.version import Version
try:
from collections.abc import Mapping
except ImportError:
from collections import Mapping
_canonicalize_regex = re.compile("[-_]+")
......
from typing import Dict
from typing import List
from typing import Union
import logging
import os
import tarfile
import zipfile
from bz2 import BZ2File
from gzip import GzipFile
from typing import Dict
from typing import List
from typing import Union
import pkginfo
from requests import get
from ._compat import Path
......@@ -17,6 +18,7 @@ from .helpers import parse_requires
from .setup_reader import SetupReader
from .toml_file import TomlFile
logger = logging.getLogger(__name__)
......
import ast
try:
from configparser import ConfigParser
except ImportError:
from ConfigParser import ConfigParser
from typing import Any
from typing import Dict
from typing import Iterable
......@@ -14,8 +9,14 @@ from typing import Tuple
from typing import Union
from ._compat import PY35
from ._compat import basestring
from ._compat import Path
from ._compat import basestring
try:
from configparser import ConfigParser
except ImportError:
from ConfigParser import ConfigParser
class SetupReader(object):
......
......@@ -5,8 +5,8 @@ import sys
import pexpect
from clikit.utils.terminal import Terminal
from shellingham import detect_shell
from shellingham import ShellDetectionFailure
from shellingham import detect_shell
from ._compat import WINDOWS
from .env import VirtualEnv
......
# -*- coding: utf-8 -*-
from tomlkit.toml_file import TOMLFile as BaseTOMLFile
from typing import Union
from tomlkit.toml_file import TOMLFile as BaseTOMLFile
from ._compat import Path
......
......@@ -2,7 +2,6 @@
import re
import subprocess
from poetry.utils._compat import decode
......
from poetry.semver import parse_constraint
from poetry.semver import Version
from poetry.semver import VersionUnion
from poetry.semver import parse_constraint
PYTHON_VERSION = [
"2.7.*",
......
import re
from pyparsing import ParseException, ParseResults, stringStart, stringEnd
from pyparsing import ZeroOrMore, Group, Forward, QuotedString
from pyparsing import Literal as L # noqa
from typing import Any
from typing import Dict
from typing import Iterator
from typing import List
from pyparsing import Forward
from pyparsing import Group
from pyparsing import Literal as L # noqa
from pyparsing import ParseResults
from pyparsing import QuotedString
from pyparsing import ZeroOrMore
from pyparsing import stringEnd
from pyparsing import stringStart
class InvalidMarker(ValueError):
"""
......
# This file is dual licensed under the terms of the Apache License, Version
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.
from __future__ import absolute_import, division, print_function
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import string
import re
import string
try:
import urllib.parse as urlparse
except ImportError:
from urlparse import urlparse
from pyparsing import stringStart, stringEnd, originalTextFor, ParseException
from pyparsing import ZeroOrMore, Word, Optional, Regex, Combine
from pyparsing import Combine
from pyparsing import Literal as L # noqa
from pyparsing import Optional
from pyparsing import ParseException
from pyparsing import Regex
from pyparsing import Word
from pyparsing import ZeroOrMore
from pyparsing import originalTextFor
from pyparsing import stringEnd
from pyparsing import stringStart
from poetry.semver import parse_constraint
......@@ -21,6 +25,12 @@ from .markers import MARKER_EXPR
from .markers import parse_marker
try:
import urllib.parse as urlparse
except ImportError:
from urlparse import urlparse
LEGACY_REGEX = r"""
(?P<operator>(==|!=|<=|>=|<|>))
\s*
......
# This file is dual licensed under the terms of the Apache License, Version
# 2.0, and the BSD License. See the LICENSE file in the root of this repository
# for complete details.
from __future__ import absolute_import, division, print_function
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
import abc
import functools
......
......@@ -2,8 +2,8 @@ from typing import Union
from poetry.packages import Dependency
from poetry.packages import Package
from poetry.semver import parse_constraint
from poetry.semver import Version
from poetry.semver import parse_constraint
class VersionSelector(object):
......
......@@ -70,6 +70,39 @@ tox = "^3.0"
pytest-sugar = "^0.9.2"
httpretty = "^0.9.6"
[tool.poetry.scripts]
poetry = "poetry.console:main"
[tool.isort]
line_length = 88
force_single_line = true
atomic = true
include_trailing_comma = true
lines_after_imports = 2
lines_between_types = 1
multi_line_output = 3
use_parentheses = true
not_skip = "__init__.py"
skip_glob = ["*/setup.py"]
filter_files = true
known_first_party = "poetry"
known_third_party = [
"cachecontrol",
"cachy",
"cleo",
"clikit",
"html5lib",
"httpretty",
"jsonschema",
"keyring",
"pexpect",
"pkginfo",
"pyparsing",
"pytest",
"requests",
"requests_toolbelt",
"shellingham",
"tomlkit",
]
......@@ -11,6 +11,7 @@ from gzip import GzipFile
from cleo import Application
from cleo import Command
WINDOWS = sys.platform.startswith("win") or (sys.platform == "cli" and os.name == "nt")
......
import os
from poetry.locations import CACHE_DIR
def test_config_get_default_value(config):
assert config.get("virtualenvs.create") is True
......
......@@ -2,17 +2,12 @@ import os
import shutil
import tempfile
import httpretty
import pytest
try:
import urllib.parse as urlparse
except ImportError:
import urlparse
from typing import Any
from typing import Dict
import httpretty
import pytest
from poetry.config.config import Config as BaseConfig
from poetry.config.dict_config_source import DictConfigSource
from poetry.utils._compat import PY2
......@@ -20,6 +15,12 @@ from poetry.utils._compat import WINDOWS
from poetry.utils._compat import Path
try:
import urllib.parse as urlparse
except ImportError:
import urlparse
class Config(BaseConfig):
def get(self, setting_name, default=None): # type: (str, Any) -> Any
self.merge(self._config_source.config)
......@@ -40,14 +41,6 @@ class Config(BaseConfig):
return super(Config, self).all()
def tmp_dir():
dir_ = tempfile.mkdtemp(prefix="poetry_")
yield dir_
shutil.rmtree(dir_)
@pytest.fixture
def config_source():
source = DictConfigSource()
......
import sys
import pytest
from cleo.testers import CommandTester
from poetry.utils._compat import Path
from tests.helpers import get_dependency
from tests.helpers import get_package
......
......@@ -102,7 +102,7 @@ def test_set_pypi_token(app, config, config_source, auth_config_source):
def test_set_client_cert(app, config_source, auth_config_source, mocker):
init = mocker.spy(ConfigSource, "__init__")
mocker.spy(ConfigSource, "__init__")
command = app.find("config")
tester = CommandTester(command)
......@@ -115,7 +115,7 @@ def test_set_client_cert(app, config_source, auth_config_source, mocker):
def test_set_cert(app, config_source, auth_config_source, mocker):
init = mocker.spy(ConfigSource, "__init__")
mocker.spy(ConfigSource, "__init__")
command = app.find("config")
tester = CommandTester(command)
......
import sys
from cleo.testers import CommandTester
from poetry.utils._compat import Path
from tests.helpers import get_package
......
......@@ -538,10 +538,12 @@ def test_show_outdated_local_dependencies(app, poetry, installed, repo):
tester.execute("--outdated")
expected = """\
cachy 0.1.0 0.2.0
cachy 0.1.0 0.2.0
my-package 0.1.1 ../project_with_setup 0.1.2 ../project_with_setup
"""
assert expected == tester.io.fetch_output()
assert expected.rstrip() == "\n".join(
l.rstrip() for l in tester.io.fetch_output().splitlines()
)
@pytest.mark.parametrize("project_directory", ["project_with_git_dev_dependency"])
......
import pytest
from cleo import CommandTester
from poetry.console.commands import VersionCommand
......
import os
import pytest
import shutil
try:
import urllib.parse as urlparse
except ImportError:
import urlparse
import pytest
from cleo import ApplicationTester
from poetry.console import Application as BaseApplication
from poetry.factory import Factory
from poetry.installation.noop_installer import NoopInstaller
from poetry.poetry import Poetry as BasePoetry
from poetry.packages import Locker as BaseLocker
from poetry.poetry import Poetry as BasePoetry
from poetry.repositories import Pool
from poetry.repositories import Repository as BaseRepository
from poetry.repositories.exceptions import PackageNotFound
from poetry.utils._compat import PY2
from poetry.utils._compat import WINDOWS
from poetry.utils._compat import Path
from poetry.utils.toml_file import TomlFile
from poetry.repositories.exceptions import PackageNotFound
try:
import urllib.parse as urlparse
except ImportError:
import urlparse
@pytest.fixture()
......
from poetry.packages import Dependency
from poetry.packages import Package
from poetry.utils._compat import Path
......
......@@ -13,11 +13,10 @@ from poetry.packages import ProjectPackage
from poetry.repositories import Pool
from poetry.repositories import Repository
from poetry.repositories.installed_repository import InstalledRepository
from poetry.utils._compat import Path
from poetry.utils._compat import PY2
from poetry.utils.toml_file import TomlFile
from poetry.utils._compat import Path
from poetry.utils.env import NullEnv
from poetry.utils.toml_file import TomlFile
from tests.helpers import get_dependency
from tests.helpers import get_package
from tests.repositories.test_legacy_repository import (
......
This source diff could not be displayed because it is too large. You can view the blob instead.
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