Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork34k
gh-74453: Deprecate os.path.commonprefix#144436
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
base:main
Are you sure you want to change the base?
Changes fromall commits
f381a5ee8ca19ccc320d1879d6ec1f2086b166c39dFile filter
Filter by extension
Conversations
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -78,6 +78,9 @@ although there is currently no date scheduled for their removal. | ||
| * :mod:`os`: Calling :func:`os.register_at_fork` in a multi-threaded process. | ||
| * :mod:`os.path`: :func:`os.path.commonprefix` is deprecated, use | ||
| :func:`os.path.commonpath` for path prefixes. | ||
Member There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. It may be interesting to explain how commonprefix() is misleading and can lead to security issues. Same remark for commonprefix() deprecation documentation below. | ||
| * :class:`!pydoc.ErrorDuringImport`: A tuple value for *exc_info* parameter is | ||
| deprecated, use an exception instance. | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -34,71 +34,72 @@ def test_no_argument(self): | ||
| .format(self.pathmodule.__name__, attr)) | ||
| def test_commonprefix(self): | ||
| with warnings_helper.check_warnings((".*commonpath().*", DeprecationWarning)): | ||
| commonprefix = self.pathmodule.commonprefix | ||
Comment on lines 36 to +38 Member There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. May I suggest that you have: deftest_commonprefix(self):withwarnings_helper...:self.do_test_commonprefix()defdo_test_commonprefix(self):# the original test That way, the diff will be smaller | ||
| self.assertEqual( | ||
| commonprefix([]), | ||
| "" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix(["/home/swenson/spam", "/home/swen/spam"]), | ||
| "/home/swen" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix(["/home/swen/spam", "/home/swen/eggs"]), | ||
| "/home/swen/" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix(["/home/swen/spam", "/home/swen/spam"]), | ||
| "/home/swen/spam" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix(["home:swenson:spam", "home:swen:spam"]), | ||
| "home:swen" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix([":home:swen:spam", ":home:swen:eggs"]), | ||
| ":home:swen:" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix([":home:swen:spam", ":home:swen:spam"]), | ||
| ":home:swen:spam" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix([b"/home/swenson/spam", b"/home/swen/spam"]), | ||
| b"/home/swen" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix([b"/home/swen/spam", b"/home/swen/eggs"]), | ||
| b"/home/swen/" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix([b"/home/swen/spam", b"/home/swen/spam"]), | ||
| b"/home/swen/spam" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix([b"home:swenson:spam", b"home:swen:spam"]), | ||
| b"home:swen" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix([b":home:swen:spam", b":home:swen:eggs"]), | ||
| b":home:swen:" | ||
| ) | ||
| self.assertEqual( | ||
| commonprefix([b":home:swen:spam", b":home:swen:spam"]), | ||
| b":home:swen:spam" | ||
| ) | ||
| testlist = ['', 'abc', 'Xbcd', 'Xb', 'XY', 'abcd', | ||
| 'aXc', 'abd', 'ab', 'aX', 'abcX'] | ||
| for s1 in testlist: | ||
| for s2 in testlist: | ||
| p = commonprefix([s1, s2]) | ||
| self.assertStartsWith(s1, p) | ||
| self.assertStartsWith(s2, p) | ||
| if s1 != s2: | ||
| n = len(p) | ||
| self.assertNotEqual(s1[n:n+1], s2[n:n+1]) | ||
| def test_getsize(self): | ||
| filename = os_helper.TESTFN | ||
| @@ -606,8 +607,9 @@ def test_path_isdir(self): | ||
| self.assertPathEqual(os.path.isdir) | ||
| def test_path_commonprefix(self): | ||
| with warnings_helper.check_warnings((".*commonpath().*", DeprecationWarning)): | ||
| self.assertEqual(os.path.commonprefix([self.file_path, self.file_name]), | ||
| self.file_name) | ||
| def test_path_getsize(self): | ||
| self.assertPathEqual(os.path.getsize) | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -10,6 +10,7 @@ | ||
| from ntpath import ALL_BUT_LAST, ALLOW_MISSING | ||
| from test import support | ||
| from test.support import os_helper | ||
| from test.support import warnings_helper | ||
| from test.support.os_helper import FakePath | ||
| from test import test_genericpath | ||
| from tempfile import TemporaryFile | ||
| @@ -298,12 +299,13 @@ def test_isabs(self): | ||
| tester('ntpath.isabs("\\\\.\\C:")', 1) | ||
| def test_commonprefix(self): | ||
Member There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Ditto | ||
| with warnings_helper.check_warnings((".*commonpath().*", DeprecationWarning)): | ||
| tester('ntpath.commonprefix(["/home/swenson/spam", "/home/swen/spam"])', | ||
| "/home/swen") | ||
| tester('ntpath.commonprefix(["\\home\\swen\\spam", "\\home\\swen\\eggs"])', | ||
| "\\home\\swen\\") | ||
| tester('ntpath.commonprefix(["/home/swen/spam", "/home/swen/spam"])', | ||
| "/home/swen/spam") | ||
| def test_join(self): | ||
| tester('ntpath.join("")', '') | ||
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -1,7 +1,6 @@ | ||||||
| """Various utility functions.""" | ||||||
| fromcollectionsimportnamedtuple,Counter | ||||||
| __unittest=True | ||||||
| @@ -21,13 +20,25 @@ def _shorten(s, prefixlen, suffixlen): | ||||||
| s='%s[%d chars]%s'% (s[:prefixlen],skip,s[len(s)-suffixlen:]) | ||||||
| returns | ||||||
| def_commonprefix(m,/): | ||||||
Member There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Suggested change
as it's private, no need to enforce the / | ||||||
| ifnotm: | ||||||
| return"" | ||||||
| m=sorted(m) | ||||||
| prefix=m[0] | ||||||
| foriteminm[1:]: | ||||||
| foriinrange(len(prefix)): | ||||||
| ifitem[i]!=prefix[i]: | ||||||
| prefix=prefix[:i] | ||||||
| break | ||||||
Comment on lines +26 to +32 Member There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others.Learn more. Can we use the min/max + enumerate approach instead? | ||||||
| returnprefix | ||||||
| def_common_shorten_repr(*args): | ||||||
| args=tuple(map(safe_repr,args)) | ||||||
| maxlen=max(map(len,args)) | ||||||
| ifmaxlen<=_MAX_LENGTH: | ||||||
| returnargs | ||||||
| prefix=_commonprefix(args) | ||||||
| prefixlen=len(prefix) | ||||||
| common_len=_MAX_LENGTH- \ | ||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,2 @@ | ||
| Deprecate :func:`os.path.commonprefix` in favor of | ||
| :func:`os.path.commonpath` for path segment prefixes. |
Uh oh!
There was an error while loading.Please reload this page.