Unverified Commit 6344e7a8 authored by Sébastien Eustace's avatar Sébastien Eustace
Browse files

Add support for local files as dependencies

parent c2bb760a
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -7,6 +7,7 @@
- Added support for Python 2.7.
- Added a fallback mechanism (opt-in) for missing dependencies.
- Added `search` command.
- Added support for local files as dependencies.

### Changes

+4 −1
Original line number Diff line number Diff line
@@ -59,7 +59,7 @@ class PipInstaller(BaseInstaller):
        return self._venv.run('pip', *args, **kwargs)

    def requirement(self, package, formatted=False):
        if formatted and not package.source_type == 'git':
        if formatted and not package.source_type:
            req = '{}=={}'.format(package.name, package.version)
            for h in package.hashes:
                req += ' --hash sha256:{}'.format(h)
@@ -68,6 +68,9 @@ class PipInstaller(BaseInstaller):

            return req

        if package.source_type == 'file':
            return os.path.realpath(package.source_reference)

        if package.source_type == 'git':
            return 'git+{}@{}#egg={}'.format(
                package.source_url,
+38 −2
Original line number Diff line number Diff line
@@ -75,6 +75,9 @@
                        },
                        {
                            "$ref": "#/definitions/git-dependency"
                        },
                        {
                            "$ref": "#/definitions/file-dependency"
                        }
                    ]
                }
@@ -95,6 +98,9 @@
                        },
                        {
                            "$ref": "#/definitions/git-dependency"
                        },
                        {
                            "$ref": "#/definitions/file-dependency"
                        }
                    ]
                }
@@ -157,7 +163,7 @@
                },
                "python": {
                    "type": "string",
                    "description": "The python versions for c=which the dependency should be installed."
                    "description": "The python versions for which the dependency should be installed."
                },
                "allows_prereleases": {
                    "type": "boolean",
@@ -200,7 +206,37 @@
                },
                "python": {
                    "type": "string",
                    "description": "The python versions for c=which the dependency should be installed."
                    "description": "The python versions for which the dependency should be installed."
                },
                "allows_prereleases": {
                    "type": "boolean",
                    "description": "Whether the dependency allows prereleases or not."
                },
                "optional": {
                    "type": "boolean",
                    "description": "Whether the dependency is optional or not."
                },
                "extras": {
                    "type": "array",
                    "description": "The required extras for this dependency.",
                    "items": {
                        "type": "string"
                    }
                }
            }
        },
        "file-dependency": {
            "type": "object",
            "required": ["file"],
            "additionalProperties": false,
            "properties": {
                "file": {
                    "type": "string",
                    "description": "The path to the file."
                },
                "python": {
                    "type": "string",
                    "description": "The python versions for which the dependency should be installed."
                },
                "allows_prereleases": {
                    "type": "boolean",
+31 −9
Original line number Diff line number Diff line
@@ -43,7 +43,7 @@ setup(**setup_kwargs)


PKG_INFO = """\
Metadata-Version: 1.1
Metadata-Version: 2.1
Name: {name}
Version: {version}
Summary: {summary}
@@ -96,14 +96,7 @@ class SdistBuilder(Builder):
            tar_info.size = len(setup)
            tar.addfile(tar_info, BytesIO(setup))

            pkg_info = encode(PKG_INFO.format(
                name=self._meta.name,
                version=self._meta.version,
                summary=self._meta.summary,
                home_page=self._meta.home_page,
                author=to_str(self._meta.author),
                author_email=to_str(self._meta.author_email),
            ))
            pkg_info = self.build_pkg_info()

            tar_info = tarfile.TarInfo(pjoin(tar_dir, 'PKG-INFO'))
            tar_info.size = len(pkg_info)
@@ -172,6 +165,35 @@ class SdistBuilder(Builder):
            after='\n'.join(after)
        ))

    def build_pkg_info(self):
        pkg_info = PKG_INFO.format(
            name=self._meta.name,
            version=self._meta.version,
            summary=self._meta.summary,
            home_page=self._meta.home_page,
            author=to_str(self._meta.author),
            author_email=to_str(self._meta.author_email),
        )

        if self._meta.keywords:
            pkg_info += "Keywords: {}\n".format(self._meta.keywords)

        if self._meta.requires_python:
            pkg_info += 'Requires-Python: {}\n'.format(
                self._meta.requires_python
            )

        for classifier in self._meta.classifiers:
            pkg_info += 'Classifier: {}\n'.format(classifier)

        for extra in sorted(self._meta.provides_extra):
            pkg_info += 'Provides-Extra: {}\n'.format(extra)

        for dep in sorted(self._meta.requires_dist):
            pkg_info += 'Requires-Dist: {}\n'.format(dep)

        return encode(pkg_info)

    @classmethod
    def find_packages(cls, path):
        """
+1 −0
Original line number Diff line number Diff line
@@ -4,6 +4,7 @@ import re
from poetry.version.requirements import Requirement

from .dependency import Dependency
from .file_dependency import FileDependency
from .locker import Locker
from .package import Package
from .utils.link import Link
Loading