示例#1
0
def convert(
    project: Project, filename: PathLike, options: Optional[Namespace]
) -> Tuple[Dict[str, Any], Dict[str, Any]]:
    with open(filename, encoding="utf-8") as fp:
        data = toml.load(fp)
    result = {}
    settings = {}
    if "pipenv" in data:
        settings["allow_prereleases"] = data["pipenv"].get("allow_prereleases", False)
    if "requires" in data:
        python_version = data["requires"].get("python_full_version") or data[
            "requires"
        ].get("python_version")
        result["requires-python"] = f">={python_version}"
    if "source" in data:
        settings["source"] = data["source"]
    result["dependencies"] = make_array(
        [
            convert_pipfile_requirement(k, req)
            for k, req in data.get("packages", {}).items()
        ],
        True,
    )
    settings["dev-dependencies"] = {
        "dev": make_array(
            [
                convert_pipfile_requirement(k, req)
                for k, req in data.get("dev-packages", {}).items()
            ],
            True,
        )
    }
    return result, settings
示例#2
0
def convert(project, filename):
    with open(filename, encoding="utf-8") as fp:
        data = toml.load(fp)
    result = {}
    settings = {}
    if "pipenv" in data:
        settings["allow_prereleases"] = data["pipenv"].get(
            "allow_prereleases", False)
    if "requires" in data:
        python_version = data["requires"].get(
            "python_full_version") or data["requires"].get("python_version")
        result["requires-python"] = f">={python_version}"
    if "source" in data:
        settings["source"] = data["source"]
    result["dependencies"] = make_array(
        [
            convert_pipfile_requirement(k, req)
            for k, req in data.get("packages", {}).items()
        ],
        True,
    )
    result["dev-dependencies"] = make_array(
        [
            convert_pipfile_requirement(k, req)
            for k, req in data.get("dev-packages", {}).items()
        ],
        True,
    )
    return result, settings
示例#3
0
def do_init(
    project: Project,
    name: str = "",
    version: str = "",
    license: str = "MIT",
    author: str = "",
    email: str = "",
    python_requires: str = "",
) -> None:
    """Bootstrap the project and create a pyproject.toml"""
    data = {
        "project": {
            "name": name,
            "version": version,
            "description": "",
            "authors": array_of_inline_tables([{"name": author, "email": email}]),
            "license": make_inline_table({"text": license}),
            "urls": {"homepage": ""},
            "dependencies": make_array([], True),
            "dev-dependencies": make_array([], True),
            "requires-python": python_requires,
            "dynamic": ["classifiers"],
        },
        "build-system": {"requires": ["pdm-pep517"], "build-backend": "pdm.pep517.api"},
    }
    if python_requires and python_requires != "*":
        get_specifier(python_requires)
    if not project.pyproject:
        project._pyproject = data
    else:
        project._pyproject["project"] = data["project"]
        project._pyproject["build-system"] = data["build-system"]
    project.write_pyproject()
示例#4
0
 def dev_dependencies(self, value: dict) -> None:
     self.settings["dev-dependencies"] = {
         "dev": make_array(
             [_convert_req(key, req) for key, req in value.items()], True
         ),
     }
     raise Unset()
示例#5
0
def format_lockfile(
    mapping: Dict[str, Candidate],
    fetched_dependencies: Dict[str, List[Requirement]],
    summary_collection: Dict[str, str],
) -> Dict:
    """Format lock file from a dict of resolved candidates, a mapping of dependencies
    and a collection of package summaries.
    """
    packages = tomlkit.aot()
    file_hashes = tomlkit.table()
    for k, v in sorted(mapping.items()):
        base = tomlkit.table()
        base.update(v.as_lockfile_entry())
        base.add("summary", summary_collection[strip_extras(k)[0]])
        deps = make_array([r.as_line() for r in fetched_dependencies[k]], True)
        if len(deps) > 0:
            base.add("dependencies", deps)
        packages.append(base)
        if v.hashes:
            key = f"{k} {v.version}"
            array = tomlkit.array()
            array.multiline(True)
            for filename, hash_value in v.hashes.items():
                inline = make_inline_table({"file": filename, "hash": hash_value})
                array.append(inline)
            if array:
                file_hashes.add(key, array)
    doc = tomlkit.document()
    doc.add("package", packages)
    metadata = tomlkit.table()
    metadata.add("files", file_hashes)
    doc.add("metadata", metadata)
    return doc
示例#6
0
 def dev_dependencies(self, value):
     return make_array(
         [
             Requirement.from_req_dict(name, req).as_line()
             for name, req in value.items()
         ],
         True,
     )
示例#7
0
 def dependencies(self, value: Dict[str, str]) -> List[str]:
     return make_array(
         [
             Requirement.from_req_dict(name, req).as_line()
             for name, req in value.items()
         ],
         True,
     )
示例#8
0
文件: legacy.py 项目: pi-dal/pdm
 def dev_dependencies(self, value: Dict[str, RequirementDict]) -> None:
     self.settings["dev-dependencies"] = {
         "dev": make_array(
             [
                 Requirement.from_req_dict(name, req).as_line()
                 for name, req in value.items()
             ],
             True,
         )
     }
     raise Unset()
示例#9
0
def convert(project, filename):
    ireqs, finder = parse_requirement_file(str(filename))
    reqs = [ireq_as_line(ireq) for ireq in ireqs]

    data = {"dependencies": make_array(reqs, True)}
    settings = {}
    if finder.index_urls:
        sources = [convert_url_to_source(finder.index_urls[0], "pypi")]
        sources.extend(convert_url_to_source(url) for url in finder.index_urls[1:])
        settings["source"] = sources

    return data, settings
示例#10
0
 def dependencies(self, source):
     rv = []
     value, extras = dict(source["dependencies"]), source.pop("extras", {})
     for key, req_dict in value.items():
         optional = getattr(req_dict, "items", None) and req_dict.pop(
             "optional", False)
         req = _convert_req(key, req_dict)
         if optional:
             extra = next((k for k, v in extras.items() if key in v), None)
             if extra:
                 self._data.setdefault("optional-dependencies",
                                       {}).setdefault(extra, []).append(req)
         else:
             rv.append(req)
     del source["dependencies"]
     return make_array(rv, True)
示例#11
0
    def name(self, metadata: Dict[str, Any]) -> str:
        # name
        module = metadata.pop("module")
        self._data["name"] = metadata.pop("dist-name", module)
        # version and description
        if (Path(module) / "__init__.py").exists():
            source = Path(module) / "__init__.py"
        else:
            source = Path(f"{module}.py")

        version = self._data.get("version")
        description = self._data.get("description")
        description_in_ast, version_in_ast = get_docstring_and_version_via_ast(
            source)
        self._data["version"] = version or version_in_ast or ""
        self._data["description"] = description or description_in_ast or ""
        self.warn_against_dynamic_version_or_docstring(
            source, self._data["version"], self._data["description"])
        # author and maintainer
        if "author" in metadata:
            self._data["authors"] = _get_author(metadata)
        if "maintainer" in metadata:
            self._data["maintainers"] = _get_author(metadata, "maintainer")
        if "license" in metadata:
            self._data["license"] = make_inline_table(
                {"text": metadata.pop("license")})
            self._data["dynamic"] = ["classifiers"]
        if "urls" in metadata:
            self._data["urls"] = metadata.pop("urls")
        if "home-page" in metadata:
            self._data.setdefault("urls",
                                  {})["homepage"] = metadata.pop("home-page")
        if "description-file" in metadata:
            self._data["readme"] = metadata.pop("description-file")
        if "requires-python" in metadata:
            self._data["requires-python"] = metadata.pop("requires-python")
            self._data["dynamic"] = ["classifiers"]
        # requirements
        self._data["dependencies"] = make_array(metadata.pop("requires", []),
                                                True)
        self._data["optional-dependencies"] = metadata.pop(
            "requires-extra", {})
        # Add remaining metadata as the same key
        self._data.update(metadata)
        return self._data["name"]
示例#12
0
def do_init(
    project: Project,
    name: str = "",
    version: str = "",
    description: str = "",
    license: str = "MIT",
    author: str = "",
    email: str = "",
    python_requires: str = "",
) -> None:
    """Bootstrap the project and create a pyproject.toml"""
    data = {
        "project": {
            "name": name,
            "version": version,
            "description": description,
            "authors": array_of_inline_tables([{"name": author, "email": email}]),
            "license": make_inline_table({"text": license}),
            "dependencies": make_array([], True),
        },
        "build-system": {
            "requires": ["pdm-pep517>=0.12.0"],
            "build-backend": "pdm.pep517.api",
        },
    }
    if python_requires and python_requires != "*":
        data["project"]["requires-python"] = python_requires  # type: ignore
    if name and version:
        readme = next(project.root.glob("README*"), None)
        if readme is None:
            readme = project.root.joinpath("README.md")
            readme.write_text(f"# {name}\n\n{description}\n")
        data["project"]["readme"] = readme.name  # type: ignore
    get_specifier(python_requires)
    if not project.pyproject:
        project._pyproject = data
    else:
        project._pyproject["project"] = data["project"]  # type: ignore
        project._pyproject["build-system"] = data["build-system"]  # type: ignore
    project.write_pyproject()
    signals.post_init.send(project)
示例#13
0
文件: flit.py 项目: LouisStAmour/pdm
 def name(self, metadata):
     # name
     module = metadata.pop("module")
     self._data["name"] = metadata.pop("dist-name", module)
     # version
     parent_dir = Path(self.filename).parent
     if (parent_dir / module / "__init__.py").exists():
         source = parent_dir / module / "__init__.py"
     else:
         source = parent_dir / f"{module}.py"
     self._data["version"] = self.VERSION_RE.findall(
         source.read_text(encoding="utf-8"))[0]
     # author and maintainer
     if "author" in metadata:
         self._data["authors"] = _get_author(metadata)
     if "maintainer" in metadata:
         self._data["maintainers"] = _get_author(metadata, "maintainer")
     if "license" in metadata:
         self._data["license"] = make_inline_table(
             {"text", metadata.pop("license")})
         self._data["dynamic"] = ["classifiers"]
     if "urls" in metadata:
         self._data["urls"] = metadata.pop("urls")
     if "home-page" in metadata:
         self._data.setdefault("urls",
                               {})["homepage"] = metadata.pop("home-page")
     if "description-file" in metadata:
         self._data["readme"] = metadata.pop("description-file")
     if "requires-python" in metadata:
         self._data["requires-python"] = metadata.pop("requires-python")
         self._data["dynamic"] = ["classifiers"]
     # requirements
     self._data["dependencies"] = make_array(metadata.pop("requires", []),
                                             True)
     self._data["optional-dependencies"] = metadata.pop(
         "requires-extra", {})
     # Add remaining metadata as the same key
     self._data.update(metadata)
     return self._data["name"]
示例#14
0
def convert(
    project: Project, filename: PathLike, options: Namespace
) -> tuple[Mapping[str, Any], Mapping[str, Any]]:
    ireqs, finder = parse_requirement_file(str(filename))
    with project.core.ui.logging("build"):
        reqs = [ireq_as_line(ireq, project.environment) for ireq in ireqs]

    deps = make_array(reqs, True)
    data: dict[str, Any] = {}
    settings: dict[str, Any] = {}
    if options.dev:
        settings["dev-dependencies"] = {options.group or "dev": deps}
    elif options.group:
        data["optional-dependencies"] = {options.group: deps}
    else:
        data["dependencies"] = deps
    if finder.index_urls:
        sources = [convert_url_to_source(finder.index_urls[0], "pypi")]
        sources.extend(convert_url_to_source(url) for url in finder.index_urls[1:])
        settings["source"] = sources

    return data, settings
示例#15
0
文件: utils.py 项目: pawamoy/pdm
def format_lockfile(
    mapping: dict[str, Candidate],
    fetched_dependencies: dict[str, list[Requirement]],
    summary_collection: dict[str, str],
) -> dict:
    """Format lock file from a dict of resolved candidates, a mapping of dependencies
    and a collection of package summaries.
    """
    packages = atoml.aot()
    file_hashes = atoml.table()
    for k, v in sorted(mapping.items()):
        base = atoml.table()
        base.update(v.as_lockfile_entry())  # type: ignore
        base.add("summary", summary_collection[strip_extras(k)[0]])
        deps = make_array(sorted(r.as_line() for r in fetched_dependencies[k]),
                          True)
        if len(deps) > 0:
            base.add("dependencies", deps)
        packages.append(base)  # type: ignore
        if v.hashes:
            key = f"{strip_extras(k)[0]} {v.version}"
            if key in file_hashes:
                continue
            array = atoml.array().multiline(True)
            for filename, hash_value in v.hashes.items():
                inline = make_inline_table({
                    "file": filename,
                    "hash": hash_value
                })
                array.append(inline)  # type: ignore
            if array:
                file_hashes.add(key, array)
    doc = atoml.document()
    doc.add("package", packages)  # type: ignore
    metadata = atoml.table()
    metadata.add("files", file_hashes)
    doc.add("metadata", metadata)  # type: ignore
    return cast(dict, doc)
示例#16
0
def convert(project, filename, options):
    ireqs, finder = parse_requirement_file(str(filename))
    with project.core.ui.logging("build"):
        reqs = [ireq_as_line(ireq, project.environment) for ireq in ireqs]

    deps = make_array(reqs, True)
    data = {"dependencies": [], "dev-dependencies": []}
    if options.dev and options.section:
        raise PdmUsageError(
            "Can't specify --dev and --section at the same time")
    elif options.dev:
        data["dev-dependencies"] = deps
    elif options.section:
        data["optional-dependencies"] = {options.section: deps}
    else:
        data["dependencies"] = deps
    settings = {}
    if finder.index_urls:
        sources = [convert_url_to_source(finder.index_urls[0], "pypi")]
        sources.extend(
            convert_url_to_source(url) for url in finder.index_urls[1:])
        settings["source"] = sources

    return data, settings
示例#17
0
 def dev_dependencies(self, value):
     return make_array(
         [_convert_req(key, req) for key, req in value.items()], True)