Messages in this thread | | | Subject | Re: [PATCH] scripts/spdxcheck.py: improve Python 3 compat | From | Jeremy Cline <> | Date | Mon, 17 Sep 2018 11:40:31 -0400 |
| |
On 09/16/2018 05:12 PM, Thomas Weißschuh wrote: > When reading lines from a text-mode fd strings are returned. > These can not be decoded again into strings, breaking the logic in > parser. > Just make sure all files are opened in binary mode on Python 3, so the > current logic keeps working. > > This remains compatible with Python 2 and should have no functional > change. > > Signed-off-by: Thomas Weißschuh <linux@weissschuh.net> > --- > scripts/spdxcheck.py | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/scripts/spdxcheck.py b/scripts/spdxcheck.py > index 839e190bbd7a..8f472f995d70 100755 > --- a/scripts/spdxcheck.py > +++ b/scripts/spdxcheck.py > @@ -250,12 +250,15 @@ if __name__ == '__main__': > > try: > if len(args.path) and args.path[0] == '-': > - parser.parse_lines(sys.stdin, args.maxlines, '-') > + parser.parse_lines( > + # always get the binary fd > + getattr(sys.stdin, 'buffer', sys.stdin), > + args.maxlines, '-')
I think a slightly more "Pythonic" way to do this would be:
try: parser.parse_lines(sys.stdin.buffer, args.maxlines, '-') except AttributeError: # Python 2 doesn't have a binary buffer interface on stdin parser.parse_lines(sys.stdin, args.maxlines, '-')
but they're equivalent so it's completely personal preference.
> else: > if args.path: > for p in args.path: > if os.path.isfile(p): > - parser.parse_lines(open(p), args.maxlines, p) > + parser.parse_lines(open(p, 'rb'), args.maxlines, p) > elif os.path.isdir(p): > scan_git_subtree(repo.head.reference.commit.tree, p) > else: >
For what it's worth:
Reviewed-by: Jeremy Cline <jcline@redhat.com>
| |