-
Notifications
You must be signed in to change notification settings - Fork 2.4k
init: only add readme key if README file exists #10679
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
init: only add readme key if README file exists #10679
Conversation
Reviewer's GuideConditionally include the Sequence diagram for conditional readme key generation in poetry initsequenceDiagram
actor Developer
participant PoetryCLI
participant Layout
participant FileSystem
participant TOMLDocument
Developer->>PoetryCLI: run poetry init
PoetryCLI->>Layout: generate_project_content()
Layout->>TOMLDocument: build base project_content
Layout->>FileSystem: exists(basedir/README.<format>)
alt README exists
FileSystem-->>Layout: true
Layout->>TOMLDocument: set readme = README.<format>
else README missing
FileSystem-->>Layout: false
Layout->>TOMLDocument: remove readme key if present
end
Layout-->>PoetryCLI: TOMLDocument with conditional readme
PoetryCLI-->>Developer: write pyproject.toml
Class diagram for Layout.generate_project_content readme handlingclassDiagram
class Layout {
Path basedir
str _readme_format
str _license
str _python
generate_project_content() TOMLDocument
}
class TOMLDocument {
setitem(key, value) void
remove(key) void
pop(key, default) Any
}
class FileSystem {
exists(path) bool
}
Layout ..> TOMLDocument : generates
Layout ..> FileSystem : checks_exists
File-Level Changes
Assessment against linked issues
Possibly linked issues
Tips and commandsInteracting with Sourcery
Customizing Your ExperienceAccess your dashboard to:
Getting Help
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hey - I've left some high level feedback:
- In
generate_project_content, prefer using the existingbasedir/PathAPI (e.g.self.basedir / f"README.{self._readme_format}").exists()rather thanos.path.existsand avoid mixingPathwith the/operator on non-Paths. - Instead of
project_content.pop("readme", None), consider using the same removal mechanism as forlicense(e.g.project_content.remove("readme")) for consistency with theTOMLDocumentAPI. - In
tests/layouts/test_layout.py, clean up duplicate imports and unused imports (e.g.pytest, secondPath/Layoutimport) to keep the test module minimal and focused.
Prompt for AI Agents
Please address the comments from this code review:
## Overall Comments
- In `generate_project_content`, prefer using the existing `basedir`/`Path` API (e.g. `self.basedir / f"README.{self._readme_format}"`).`exists()` rather than `os.path.exists` and avoid mixing `Path` with the `/` operator on non-Paths.
- Instead of `project_content.pop("readme", None)`, consider using the same removal mechanism as for `license` (e.g. `project_content.remove("readme")`) for consistency with the `TOMLDocument` API.
- In `tests/layouts/test_layout.py`, clean up duplicate imports and unused imports (e.g. `pytest`, second `Path`/`Layout` import) to keep the test module minimal and focused.Help me be more useful! Please click π or π on each comment and I'll use the feedback to improve your reviews.
|
Hi After modifying the |
It makes sense that (many) tests in As far as I know, |
b345884 to
f7173ce
Compare
f7173ce to
fb66c1d
Compare
|
Hello @radoering, really sorry for the messy commit history. The important changes in this PR are:
Regarding the code:
The other commits are mainly minor formatting/linting adjustments from pre-commit. Environment: Could you please review this PR? Thanks! |
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [poetry](https://github.com/python-poetry/poetry) ([changelog](https://python-poetry.org/history/)) | minor | ` 2.2.1` -> `2.3.0` | --- ### Release Notes <details> <summary>python-poetry/poetry (poetry)</summary> ### [`v2.3.0`](https://github.com/python-poetry/poetry/blob/HEAD/CHANGELOG.md#230---2026-01-18) [Compare Source](python-poetry/poetry@2.2.1...2.3.0) ##### Added - **Add support for exporting `pylock.toml` files with `poetry-plugin-export`** ([#​10677](python-poetry/poetry#10677)). - Add support for specifying build constraints for dependencies ([#​10388](python-poetry/poetry#10388)). - Add support for publishing artifacts whose version is determined dynamically by the build-backend ([#​10644](python-poetry/poetry#10644)). - Add support for editable project plugins ([#​10661](python-poetry/poetry#10661)). - Check `requires-poetry` before any other validation ([#​10593](python-poetry/poetry#10593)). - Validate the content of `project.readme` when running `poetry check` ([#​10604](python-poetry/poetry#10604)). - Add the option to clear all caches by making the cache name in `poetry cache clear` optional ([#​10627](python-poetry/poetry#10627)). - Automatically update the cache for packages where the locked files differ from cached files ([#​10657](python-poetry/poetry#10657)). - Suggest to clear the cache if running a command with `--no-cache` solves an issue ([#​10585](python-poetry/poetry#10585)). - Propose `poetry init` when trying `poetry new` for an existing directory ([#​10563](python-poetry/poetry#10563)). - Add support for `poetry publish --skip-existing` for new Nexus OSS versions ([#​10603](python-poetry/poetry#10603)). - Show Poetry's own Python's path in `poetry debug info` ([#​10588](python-poetry/poetry#10588)). ##### Changed - **Drop support for Python 3.9** ([#​10634](python-poetry/poetry#10634)). - **Change the default of `installer.re-resolve` from `true` to `false`** ([#​10622](python-poetry/poetry#10622)). - **PEP 735 dependency groups are considered in the lock file hash** ([#​10621](python-poetry/poetry#10621)). - Deprecate `poetry.utils._compat.metadata`, which is sometimes used in plugins, in favor of `importlib.metadata` ([#​10634](python-poetry/poetry#10634)). - Improve managing free-threaded Python versions with `poetry python` ([#​10606](python-poetry/poetry#10606)). - Prefer JSON API to HTML API in legacy repositories ([#​10672](python-poetry/poetry#10672)). - When running `poetry init`, only add the readme field in the `pyproject.toml` if the readme file exists ([#​10679](python-poetry/poetry#10679)). - Raise an error if no hash can be determined for any distribution link of a package ([#​10673](python-poetry/poetry#10673)). - Require `dulwich>=0.25.0` ([#​10674](python-poetry/poetry#10674)). ##### Fixed - Fix an issue where `poetry remove` did not work for PEP 735 dependency groups with `include-group` items ([#​10587](python-poetry/poetry#10587)). - Fix an issue where `poetry remove` caused dangling `include-group` references in PEP 735 dependency groups ([#​10590](python-poetry/poetry#10590)). - Fix an issue where `poetry add` did not work for PEP 735 dependency groups with `include-group` items ([#​10636](python-poetry/poetry#10636)). - Fix an issue where PEP 735 dependency groups were not considered in the lock file hash ([#​10621](python-poetry/poetry#10621)). - Fix an issue where wrong markers were locked for a dependency that was required by several groups with different markers ([#​10613](python-poetry/poetry#10613)). - Fix an issue where non-deterministic markers were created in a method used by `poetry-plugin-export` ([#​10667](python-poetry/poetry#10667)). - Fix an issue where wrong wheels were chosen for installation in free-threaded Python environments if Poetry itself was not installed with free-threaded Python ([#​10614](python-poetry/poetry#10614)). - Fix an issue where `poetry publish` used the metadata of the project instead of the metadata of the build artifact ([#​10624](python-poetry/poetry#10624)). - Fix an issue where `poetry env use` just used another Python version instead of failing when the requested version was not supported by the project ([#​10685](python-poetry/poetry#10685)). - Fix an issue where `poetry env activate` returned the wrong command for `dash` ([#​10696](python-poetry/poetry#10696)). - Fix an issue where `data-dir` and `python.installation-dir` could not be set ([#​10595](python-poetry/poetry#10595)). - Fix an issue where Python and pip executables were not correctly detected on Windows ([#​10645](python-poetry/poetry#10645)). - Fix an issue where invalid template variables in `virtualenvs.prompt` caused an incomprehensible error message ([#​10648](python-poetry/poetry#10648)). ##### Docs - Add a warning about `~/.netrc` for Poetry credential configuration ([#​10630](python-poetry/poetry#10630)). - Clarify that the local configuration takes precedence over the global configuration ([#​10676](python-poetry/poetry#10676)). - Add an explanation in which cases `packages` are automatically detected ([#​10680](python-poetry/poetry#10680)). ##### poetry-core ([`2.3.0`](https://github.com/python-poetry/poetry-core/releases/tag/2.3.0)) - Normalize versions ([#​893](python-poetry/poetry-core#893)). - Fix an issue where unsatisfiable requirements did not raise an error ([#​891](python-poetry/poetry-core#891)). - Fix an issue where the implicit main group did not exist if it was explicitly declared as not having any dependencies ([#​892](python-poetry/poetry-core#892)). - Fix an issue where `python_full_version` markers with pre-release versions were parsed incorrectly ([#​893](python-poetry/poetry-core#893)). </details> --- ### Configuration π **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). π¦ **Automerge**: Disabled by config. Please merge this manually once you are satisfied. β» **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. π **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0MS4xNDYuMCIsInVwZGF0ZWRJblZlciI6IjQxLjE0Ni4wIiwidGFyZ2V0QnJhbmNoIjoibWFpbiIsImxhYmVscyI6W119--> Reviewed-on: https://git.walbeck.it/walbeck-it/docker-python-poetry/pulls/1654 Co-authored-by: renovate-bot <[email protected]> Co-committed-by: renovate-bot <[email protected]>
Problem
When running
poetry init, the generatedpyproject.tomlalways includes areadmekey, even if there is no README file in the project.This can cause
poetry installto fail, forcing the user to either create a README file or manually remove the key.Solution
Check if the README file exists before adding the
readmekey inpyproject.toml.README.md(or the specified format) exists, thereadmekey is added.This change fixes Issue #10217.
Impact
Minimal: only affects newly created projects with
poetry init.Does not change behavior for existing projects or other keys.
Testing
Added unit tests in
tests/layouts/test_layout.py:test_readme_key_present_if_readme_existstest_readme_key_removed_if_readme_missingAll tests pass locally on Windows.
Workarounds
Before this fix, users had to manually remove the
readmekey after runningpoetry init.Summary by Sourcery
Conditionally include the
readmeentry in newly generatedpyproject.tomlfiles based on the presence of a README file in the project directory.Bug Fixes:
poetry initfrom generating areadmekey when no README file exists, avoiding subsequent installation failures.Tests:
readmekey is omitted when the README file is missing and present when it exists.