From 4ebb118f5f3763e2162ee5318898558ea126f725 Mon Sep 17 00:00:00 2001 From: wisp3rwind <17089248+wisp3rwind@users.noreply.github.com> Date: Thu, 30 May 2019 10:47:17 +0200 Subject: [PATCH 1/2] functemplate: Adapt ast syntax to PEP570 changes on python3.8 --- beets/util/functemplate.py | 46 +++++++++++++++++++++----------------- 1 file changed, 26 insertions(+), 20 deletions(-) diff --git a/beets/util/functemplate.py b/beets/util/functemplate.py index 5d9900f0b..79dcb9ad4 100644 --- a/beets/util/functemplate.py +++ b/beets/util/functemplate.py @@ -118,30 +118,36 @@ def compile_func(arg_names, statements, name='_the_func', debug=False): bytecode of the compiled function. """ if six.PY2: - func_def = ast.FunctionDef( - name=name.encode('utf-8'), - args=ast.arguments( - args=[ast.Name(n, ast.Param()) for n in arg_names], - vararg=None, - kwarg=None, - defaults=[ex_literal(None) for _ in arg_names], - ), - body=statements, - decorator_list=[], + name = name.encode('utf-8') + args = ast.arguments( + args=[ast.Name(n, ast.Param()) for n in arg_names], + vararg=None, + kwarg=None, + defaults=[ex_literal(None) for _ in arg_names], + ) + elif sys.version_info >= (3, 8): + args = ast.arguments( + args=[ast.arg(arg=n, annotation=None) for n in arg_names], + posonlyargs=[], + kwonlyargs=[], + kw_defaults=[], + defaults=[ex_literal(None) for _ in arg_names], ) else: - func_def = ast.FunctionDef( - name=name, - args=ast.arguments( - args=[ast.arg(arg=n, annotation=None) for n in arg_names], - kwonlyargs=[], - kw_defaults=[], - defaults=[ex_literal(None) for _ in arg_names], - ), - body=statements, - decorator_list=[], + args = ast.arguments( + args=[ast.arg(arg=n, annotation=None) for n in arg_names], + kwonlyargs=[], + kw_defaults=[], + defaults=[ex_literal(None) for _ in arg_names], ) + func_def = ast.FunctionDef( + name=name, + args=args, + body=statements, + decorator_list=[], + ) + # The ast.Module signature changed in 3.8 to accept a list of types to # ignore. if sys.version_info >= (3, 8): From ade1df52a2ae06d8cd0e704327ac0a6ae2d16746 Mon Sep 17 00:00:00 2001 From: Adrian Sampson Date: Thu, 30 May 2019 18:14:40 -0400 Subject: [PATCH 2/2] Use "feature detection" for 3.8 compat (#3278) --- beets/util/functemplate.py | 23 +++++++++-------------- 1 file changed, 9 insertions(+), 14 deletions(-) diff --git a/beets/util/functemplate.py b/beets/util/functemplate.py index 79dcb9ad4..af22b7908 100644 --- a/beets/util/functemplate.py +++ b/beets/util/functemplate.py @@ -125,21 +125,16 @@ def compile_func(arg_names, statements, name='_the_func', debug=False): kwarg=None, defaults=[ex_literal(None) for _ in arg_names], ) - elif sys.version_info >= (3, 8): - args = ast.arguments( - args=[ast.arg(arg=n, annotation=None) for n in arg_names], - posonlyargs=[], - kwonlyargs=[], - kw_defaults=[], - defaults=[ex_literal(None) for _ in arg_names], - ) else: - args = ast.arguments( - args=[ast.arg(arg=n, annotation=None) for n in arg_names], - kwonlyargs=[], - kw_defaults=[], - defaults=[ex_literal(None) for _ in arg_names], - ) + args_fields = { + 'args': [ast.arg(arg=n, annotation=None) for n in arg_names], + 'kwonlyargs': [], + 'kw_defaults': [], + 'defaults': [ex_literal(None) for _ in arg_names], + } + if 'posonlyargs' in ast.arguments._fields: # Added in Python 3.8. + args_fields['posonlyargs'] = [] + args = ast.arguments(**args_fields) func_def = ast.FunctionDef( name=name,