lkml.org 
[lkml]   [2018]   [Sep]   [17]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
SubjectRe: [PATCH] scripts/spdxcheck.py: improve Python 3 compat
From
Date
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>

\
 
 \ /
  Last update: 2018-09-17 17:41    [W:0.067 / U:0.108 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site