Exemple #1
0
 def get_or_create_lockfile(self):
     from requirementslib.models.lockfile import Lockfile as Req_Lockfile
     lockfile = None
     try:
         lockfile = Req_Lockfile.load(self.lockfile_location)
     except OSError:
         lockfile = Req_Lockfile(self.lockfile_content)
         return lockfile
     else:
         if lockfile._lockfile is not None:
             return lockfile
         if self.lockfile_exists and self.lockfile_content:
             from .vendor.plette.lockfiles import Lockfile
             lockfile_dict = self.lockfile_content.copy()
             sources = lockfile_dict["_meta"].get("sources", [])
             if not sources:
                 sources = self.pipfile_sources
             elif not isinstance(sources, list):
                 sources = [
                     sources,
                 ]
             lockfile_dict["_meta"]["sources"] = [{
                 "name":
                 s["name"],
                 "url":
                 s["url"],
                 "verify_ssl":
                 (s["verify_ssl"] if isinstance(s["verify_ssl"], bool) else
                  (True if s["verify_ssl"].lower() == "true" else False))
             } for s in sources]
             _created_lockfile = Lockfile(lockfile_dict)
             lockfile._lockfile = lockfile.projectfile.model = _created_lockfile
             return lockfile
         elif self.pipfile_exists:
             from .vendor.plette.lockfiles import Lockfile, PIPFILE_SPEC_CURRENT
             lockfile_dict = {
                 "_meta": {
                     "hash": {
                         "sha256": self.calculate_pipfile_hash()
                     },
                     "pipfile-spec": PIPFILE_SPEC_CURRENT,
                     "sources": self.pipfile_sources,
                     "requires": self.parsed_pipfile.get("requires", {})
                 },
                 "default": self._lockfile["default"].copy(),
                 "develop": self._lockfile["develop"].copy()
             }
             lockfile._lockfile = Lockfile(lockfile_dict)
             return lockfile
def test_lockfile_requirements(pathlib_tmpdir):
    lockfile = pathlib_tmpdir.joinpath("Pipfile.lock")
    lockfile.write_text(
        textwrap.dedent(u"""
    {
        "_meta": {
            "hash": {
                "sha256": "88d256c1798cc297772ecd3d2152013e0b28201a5364a1c0f8e4dde79b6e200c"
            },
            "pipfile-spec": 6,
            "requires": {},
            "sources": [
                {
                    "name": "pypi",
                    "url": "https://pypi.org/simple",
                    "verify_ssl": true
                }
            ]
        },
        "default": {},
        "develop": {
            "alabaster": {
                "hashes": [
                    "sha256:674bb3bab080f598371f4443c5008cbfeb1a5e622dd312395d2d82af2c54c456",
                    "sha256:b63b1f4dc77c074d386752ec4a8a7517600f6c0db8cd42980cae17ab7b3275d7"
                ],
                "version": "==0.7.11"
            },
            "apipkg": {
                "hashes": [
                    "sha256:37228cda29411948b422fae072f57e31d3396d2ee1c9783775980ee9c9990af6",
                    "sha256:58587dd4dc3daefad0487f6d9ae32b4542b185e1c36db6993290e7c41ca2b47c"
                ],
                "markers": "python_version >= '2.7' and python_version != '3.0.*' and python_version != '3.1.*' and python_version != '3.2.*' and python_version != '3.3.*'",
                "version": "==1.5"
            },
            "appdirs": {
                "hashes": [
                    "sha256:9e5896d1372858f8dd3344faf4e5014d21849c756c8d5701f78f8a103b372d92",
                    "sha256:d8b24664561d0d34ddfaec54636d502d7cea6e29c3eaf68f3df6180863e2166e"
                ],
                "version": "==1.4.3"
            },
            "argparse": {
                "hashes": [
                    "sha256:62b089a55be1d8949cd2bc7e0df0bddb9e028faefc8c32038cc84862aefdd6e4",
                    "sha256:c31647edb69fd3d465a847ea3157d37bed1f95f19760b11a47aa91c04b666314"
                ],
                "markers": "python_version == '2.6'",
                "version": "==1.4.0"
            },
            "certifi": {
                "hashes": [
                    "sha256:376690d6f16d32f9d1fe8932551d80b23e9d393a8578c5633a2ed39a64861638",
                    "sha256:456048c7e371c089d0a77a5212fb37a2c2dce1e24146e3b7e0261736aaeaa22a"
                ],
                "version": "==2018.8.24"
            },
            "chardet": {
                "hashes": [
                    "sha256:84ab92ed1c4d4f16916e05906b6b75a6c0fb5db821cc65e70cbd64a3e2a5eaae",
                    "sha256:fc323ffcaeaed0e0a02bf4d117757b98aed530d9ed4531e3e15460124c106691"
                ],
                "version": "==3.0.4"
            },
            "requests": {
                "path": ".",
                "editable": true
            }
        }
    }
    """.strip()))
    loaded = Lockfile.load(lockfile.as_posix())
    dump_to = pathlib_tmpdir.joinpath("new_lockfile")
    dump_to.mkdir()
    from_data = Lockfile.from_data(dump_to.as_posix(),
                                   json.loads(lockfile.read_text()),
                                   meta_from_project=False)
    assert isinstance(loaded.dev_requirements[0], Requirement)
    assert isinstance(loaded.dev_requirements_list[0], dict)
    with cd(pathlib_tmpdir.as_posix()):
        auto_detected_path = Lockfile()
        assert (auto_detected_path.path.absolute().as_posix() ==
                lockfile.absolute().as_posix())
        assert auto_detected_path["develop-editable"]["requests"] is not None