Title: PurePosixPath no longer correctly parses PureWindowsPath · Issue #103631 · python/cpython · GitHub
Open Graph Title: PurePosixPath no longer correctly parses PureWindowsPath · Issue #103631 · python/cpython
X Title: PurePosixPath no longer correctly parses PureWindowsPath · Issue #103631 · python/cpython
Description: Bug report In pathlib prior to Python 3.12, passing a PureWindowsPath to a PurePosixPath resulted in the Windows separator (\) being converted to the POSIX separator (/). However, in the current main branch the backslashes are preserved ...
Open Graph Description: Bug report In pathlib prior to Python 3.12, passing a PureWindowsPath to a PurePosixPath resulted in the Windows separator (\) being converted to the POSIX separator (/). However, in the current ma...
X Description: Bug report In pathlib prior to Python 3.12, passing a PureWindowsPath to a PurePosixPath resulted in the Windows separator (\) being converted to the POSIX separator (/). However, in the current ma...
Opengraph URL: https://github.com/python/cpython/issues/103631
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"PurePosixPath no longer correctly parses PureWindowsPath","articleBody":"# Bug report\r\n\r\nIn `pathlib` prior to Python 3.12, passing a `PureWindowsPath` to a `PurePosixPath` resulted in the Windows separator (`\\`) being converted to the POSIX separator (`/`). However, in the current main branch the backslashes are preserved in the `PurePosixPath` object.\r\n\r\nHere is an example which illustrates this:\r\n\r\n```pycon\r\nPython 3.12.0a7 (tags/v3.12.0a7:b861ba4, Apr 6 2023, 16:09:18) [Clang 10.0.0 ] on linux\r\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\r\n\u003e\u003e\u003e import pathlib\r\n\u003e\u003e\u003e print(pathlib.PurePosixPath(pathlib.PureWindowsPath(r\"a\\b\\c\")))\r\na\\b\\c\r\n\u003e\u003e\u003e print(pathlib.PurePosixPath(pathlib.PureWindowsPath(r\"a\\b\\c\")).as_posix())\r\na\\b\\c \r\n```\r\n\r\n\r\n```pycon\r\nPython 3.11.2 (tags/v3.11.2:878ead1, Mar 9 2023, 16:26:59) [Clang 10.0.0 ] on linux\r\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\r\n\u003e\u003e\u003e import pathlib\r\n\u003e\u003e\u003e print(pathlib.PurePosixPath(pathlib.PureWindowsPath(r\"a\\b\\c\")))\r\na/b/c\r\n\u003e\u003e\u003e print(pathlib.PurePosixPath(pathlib.PureWindowsPath(r\"a\\b\\c\")).as_posix())\r\na/b/c \r\n```\r\n\r\n(The behaviour is the same if using `PosixPath` or `WindowsPath` on the relevant platform; it's not specific to the \"pure\" variants.)\r\n\r\n-----\r\n\r\nBefore the recent refactoring of the module, passing one `Path` or `PurePath` object to another resulted in the `_parts` attribute being inspected. This was a list of the individual path elements (e.g. `['a', 'b', 'c']` for the path `a\\b\\c`). The `_parts` attribute was removed in GH-102476 and replaced with `_tail`, but with slightly different semantics.\r\n\r\nThe current code replaces any `os.altsep` in the path with `os.sep`, which for `WindowsPath` replaces `/` with `\\` but for `PosixPath` does nothing as there is no alternative separator. However, the following will produce a correct result:\r\n\r\n```pycon\r\nPython 3.12.0a7+ (heads/main:bd2ed06, Apr 19 2023, 15:27:47) [GCC 9.4.0] on linux\r\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\r\n\u003e\u003e\u003e import pathlib\r\n\u003e\u003e\u003e pathlib.PurePosixPath._flavour.altsep = \"\\\\\"\r\n\u003e\u003e\u003e pathlib.PurePosixPath(pathlib.PureWindowsPath(r\"a\\b\\c\")).as_posix()\r\n'a/b/c'\r\n```\r\n\r\nThus I think the problem can be isolated to these lines here:\r\n\r\nhttps://github.com/python/cpython/blob/da2273fec7b1644786b9616592b53b04fdec4024/Lib/pathlib.py#L316-L324\r\n\r\n\r\n\r\n# Your environment\r\n\r\n- CPython versions tested on: 3.8, 3.11 and 3.12 (alpha 7 and HEAD)\r\n- Operating system and architecture: Ubuntu 20.04 and Windows 10\r\n\r\n\u003c!--\r\nYou can freely edit this text. Remove any lines you believe are unnecessary.\r\n--\u003e\r\n\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-104949\n* gh-104991\n\u003c!-- /gh-linked-prs --\u003e\n","author":{"url":"https://github.com/domdfcoding","@type":"Person","name":"domdfcoding"},"datePublished":"2023-04-19T15:05:52.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":10},"url":"https://github.com/103631/cpython/issues/103631"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:ce116491-1524-2b96-cdbe-5de6c9db2456 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | B756:6FDD1:8E138B:BDEFA8:6969BEC7 |
| html-safe-nonce | 97725014849cd9a88572b98f1a0436a525c188da31d3af6cd70e8505a8cc8f22 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJCNzU2OjZGREQxOjhFMTM4QjpCREVGQTg6Njk2OUJFQzciLCJ2aXNpdG9yX2lkIjoiNjE4MzQ3ODQxMDgyMzE4ODE2NyIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | 655f8bd12c2913aa243a6c8b0ef90d12007f55bf54b2f76eef1603021d6044be |
| hovercard-subject-tag | issue:1675113352 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/103631/issue_layout |
| twitter:image | https://opengraph.githubassets.com/1d197adadd751e80e2e0182739a20df7978d350848f47b73d969a4490a70768e/python/cpython/issues/103631 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/1d197adadd751e80e2e0182739a20df7978d350848f47b73d969a4490a70768e/python/cpython/issues/103631 |
| og:image:alt | Bug report In pathlib prior to Python 3.12, passing a PureWindowsPath to a PurePosixPath resulted in the Windows separator (\) being converted to the POSIX separator (/). However, in the current ma... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | domdfcoding |
| hostname | github.com |
| expected-hostname | github.com |
| None | acedec8b5f975d9e3d494ddd8f949b0b8a0de59d393901e26f73df9dcba80056 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 83c08c21cdda978090dc44364b71aa5bc6dcea79 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width