Skip to content

Commit

Permalink
fix(python): incorrect escaped characters cause warnings (#4538)
Browse files Browse the repository at this point in the history
Fixes #4532. Succinctly, the issue is that the README is copied over into the `__init__.py` file as a python comment. And then python warns that things like `\|` and `\'`, which while not often, do organically and correctly show up in markdown syntax, are invalid escapes. Some people who have set their python config to error on warnings end up erroring on this. The solution is to mark the README string as a raw string `r'''` so python does not try to register the escapes.

I'm not sure how to test this in code in this PR. I have done the following to make sure that this works:

I copied the repro repo from #4532 [here](https://github.com/kaizencc/cdk_invalid_char/blob/main) and got it to show the warning locally. then, I updated the actual file manually from `'''` to `r'''` and got `pytest -W error` to give me a thumbs up. So that shows that changing `'''` to `r'''` does not expect the escaped characters to be valid.

I tested my local jsii-pacmak by using it to package a module in `aws-cdk`, and unzipped the python package and confirmed that the `r'''` raw string indicator shows up for the README string in `__init__.py`, and nothing else.

These two combined confirms for me that this solution will work. Again I'm not sure of the best way to test that in jsii-pacmak.

---

By submitting this pull request, I confirm that my contribution is made under the terms of the [Apache 2.0 license].

[Apache 2.0 license]: https://www.apache.org/licenses/LICENSE-2.0
  • Loading branch information
kaizencc authored Jun 10, 2024
1 parent 8f61747 commit c5975d5
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 7 deletions.
2 changes: 1 addition & 1 deletion packages/@jsii/python-runtime/tests/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Python jsii runtime tests
## Development Iteration

When iterating on the jsii runtime for Python, the develomer must run
When iterating on the jsii runtime for Python, the developer must run
`yarn build` before making a subsequent attempt at running `pytest` (e.g: via
`yarn test`). This is because the tests run on the code installed in `.env` and
this is updated only by `yarn build`.
Expand Down
3 changes: 2 additions & 1 deletion packages/jsii-pacmak/lib/targets/python.ts
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,7 @@ const requirementsFile = path.resolve(
// we use single-quotes for multi-line strings to allow examples within the
// docstrings themselves to include double-quotes (see https://github.com/aws/jsii/issues/2569)
const DOCSTRING_QUOTES = "'''";
const RAW_DOCSTRING_QUOTES = `r${DOCSTRING_QUOTES}`;

export default class Python extends Target {
protected readonly generator: PythonGenerator;
Expand Down Expand Up @@ -1902,7 +1903,7 @@ class PythonModule implements PythonType {
*/
private emitModuleDocumentation(code: CodeMaker) {
if (this.moduleDocumentation) {
code.line(DOCSTRING_QUOTES);
code.line(RAW_DOCSTRING_QUOTES); // raw string so that python does not attempt to interpret invalid escapes that are valid in markdown
code.line(this.moduleDocumentation);
code.line(DOCSTRING_QUOTES);
}
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit c5975d5

Please sign in to comment.