def get_pyproject_dependencies(self, section: str) -> List[str]: """Get the dependencies array in the pyproject.toml""" if section == "default": return setdefault(self.meta, "dependencies", []) elif section == "dev": return setdefault(self.meta, "dev-dependencies", []) else: return setdefault( setdefault(self.meta, "optional-dependencies", {}), section, [])
def migrate_pyproject(project: Project): """Migrate the legacy pyproject format to PEP 621""" if project.pyproject and "project" in project.pyproject: pyproject = project.pyproject settings = {} updated_fields = [] for field in ("includes", "excludes", "build", "package-dir"): if field in pyproject["project"]: updated_fields.append(field) settings[field] = pyproject["project"][field] del pyproject["project"][field] if "dev-dependencies" in pyproject["project"]: if pyproject["project"]["dev-dependencies"]: settings["dev-dependencies"] = { "dev": pyproject["project"]["dev-dependencies"] } del pyproject["project"]["dev-dependencies"] updated_fields.append("dev-dependencies") if updated_fields: if "tool" not in pyproject or "pdm" not in pyproject["tool"]: setdefault(pyproject, "tool", {})["pdm"] = tomlkit.table() pyproject["tool"]["pdm"].update(settings) project.pyproject = pyproject project.write_pyproject() project.core.ui.echo( f"{termui.yellow('[AUTO-MIGRATION]')} These fields are moved from " f"[project] to [tool.pdm] table: {updated_fields}", err=True, ) return if not project.pyproject_file.exists() or not FORMATS["legacy"].check_fingerprint( project, project.pyproject_file ): return project.core.ui.echo( f"{termui.yellow('[AUTO-MIGRATION]')} Legacy pdm 0.x metadata detected, " "migrating to PEP 621...", err=True, ) do_import(project, project.pyproject_file, "legacy") project.core.ui.echo( termui.green("pyproject.toml") + termui.yellow( " has been migrated to PEP 621 successfully. " "Now you can safely delete the legacy metadata under [tool.pdm] table." ), err=True, )
def do_import( project: Project, filename: str, format: Optional[str] = None, options: Optional[Namespace] = None, ) -> None: """Import project metadata from given file. :param project: the project instance :param filename: the file name :param format: the file format, or guess if not given. :param options: other options parsed to the CLI. """ if not format: for key in FORMATS: if FORMATS[key].check_fingerprint(project, filename): break else: raise PdmUsageError( "Can't derive the file format automatically, " "please specify it via '-f/--format' option." ) else: key = format if options is None: options = Namespace(dev=False, section=None) project_data, settings = FORMATS[key].convert(project, filename, options) pyproject = project.pyproject or tomlkit.document() if "tool" not in pyproject or "pdm" not in pyproject["tool"]: setdefault(pyproject, "tool", {})["pdm"] = tomlkit.table() if "project" not in pyproject: pyproject.add("project", tomlkit.table()) pyproject["project"].add(tomlkit.comment("PEP 621 project metadata")) pyproject["project"].add( tomlkit.comment("See https://www.python.org/dev/peps/pep-0621/") ) merge_dictionary(pyproject["project"], project_data) merge_dictionary(pyproject["tool"]["pdm"], settings) pyproject["build-system"] = { "requires": ["pdm-pep517"], "build-backend": "pdm.pep517.api", } project.pyproject = pyproject project.write_pyproject()
def tool_settings(self): # type: () -> Union[Container, Dict] data = self.pyproject if not data: return {} return setdefault(setdefault(data, "tool", {}), "pdm", {})
def tool_settings(self) -> dict: data = self.pyproject if not data: return {} return setdefault(setdefault(data, "tool", {}), "pdm", {})