Edgewall Software

Ticket #602: t602.diff

File t602.diff, 3.7 KB (added by trac@…, 8 years ago)

Patch which passes tests in python 3.5

  • genshi/filters/i18n.py

     
    11941194                elif arg:
    11951195                    strings.append(None)
    11961196            [_add(arg) for arg in node.args]
    1197             _add(node.starargs)
    1198             _add(node.kwargs)
     1197            if hasattr(node, 'starargs'):
     1198                _add(node.starargs)
     1199            if hasattr(node, 'kwargs'):
     1200                _add(node.kwargs)
    11991201            if len(strings) == 1:
    12001202                strings = strings[0]
    12011203            else:
  • genshi/template/astutil.py

     
    151151        def visit_arg(self, node):
    152152            self._write(node.arg)
    153153
     154    def visit_Starred(self, node):
     155        self._write('*')
     156        self.visit(node.value)
     157
    154158    # FunctionDef(identifier name, arguments args,
    155159    #                           stmt* body, expr* decorator_list)
    156160    def visit_FunctionDef(self, node):
     
    664668            if not first:
    665669                self._write(', ')
    666670            first = False
    667             # keyword = (identifier arg, expr value)
    668             self._write(keyword.arg)
    669             self._write('=')
     671            if not keyword.arg:
     672                # Python 3.5+ star-star args
     673                self._write('**')
     674            else:
     675                # keyword = (identifier arg, expr value)
     676                self._write(keyword.arg)
     677                self._write('=')
    670678            self.visit(keyword.value)
    671679        if getattr(node, 'starargs', None):
    672680            if not first:
  • genshi/template/directives.py

     
    266266        if isinstance(ast, _ast.Call):
    267267            self.name = ast.func.id
    268268            for arg in ast.args:
    269                 # only names
    270                 self.args.append(arg.id)
     269                if isinstance(arg, _ast.Starred):
     270                    # Python 3.5+
     271                    self.star_args = arg.value.id
     272                else:
     273                    # only names
     274                    self.args.append(arg.id)
    271275            for kwd in ast.keywords:
    272                 self.args.append(kwd.arg)
    273                 exp = Expression(kwd.value, template.filepath,
    274                                  lineno, lookup=template.lookup)
    275                 self.defaults[kwd.arg] = exp
     276                if kwd.arg is None:
     277                    # Python 3.5+
     278                    self.dstar_args = kwd.value.id
     279                else:
     280                    self.args.append(kwd.arg)
     281                    exp = Expression(kwd.value, template.filepath,
     282                                     lineno, lookup=template.lookup)
     283                    self.defaults[kwd.arg] = exp
    276284            if getattr(ast, 'starargs', None):
    277285                self.star_args = ast.starargs.id
    278286            if getattr(ast, 'kwargs', None):
  • genshi/template/eval.py

     
    600600        finally:
    601601            self.locals.pop()
    602602
     603    # Only used in Python 3.5+
     604    def visit_Starred(self, node):
     605        node.value = self.visit(node.value)
     606        return node
     607
    603608    def visit_Name(self, node):
    604609        # If the name refers to a local inside a lambda, list comprehension, or
    605610        # generator expression, leave it alone