Source: python-pyscss
Version: 1.4.0-2
Severity: serious
Tags: ftbfs

https://buildd.debian.org/status/logs.php?pkg=python-pyscss&ver=1.4.0-2%2Bb1

...
============================= test session starts ==============================
platform linux -- Python 3.11.0+, pytest-7.1.2, pluggy-1.0.0+repack
rootdir: /<<PKGBUILDDIR>>/scss
collected 249 items / 1 skipped

../../../scss/tests/test_cli.py .                                        [  0%]
../../../scss/tests/test_expression.py FFFFF                             [  2%]
../../../scss/tests/test_interactive.py ..                               [  3%]
../../../scss/tests/test_misc.py FFF...                                  [  5%]
../../../scss/tests/test_types.py .......                                [  8%]
../../../scss/tests/extension/test_core.py FFFFFFFFFFFFFFFFFFFFFFFFFFFFF [ 20%]
FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF                                        [ 33%]
../../../scss/tests/extension/test_extra.py ....                         [ 34%]
../../../scss/tests/extension/compass/test_gradients.py .x               [ 35%]
../../../scss/tests/extension/compass/test_helpers.py FFFFFFFFFFFFFFFF   [ 42%]
../../../scss/tests/extension/compass/test_images.py FFF                 [ 43%]
../../../scss/tests/files/bugs/append.scss F                             [ 43%]
../../../scss/tests/files/bugs/argspec-named-arguments.scss F            [ 44%]
../../../scss/tests/files/bugs/argspec-slurpy-arguments.scss F           [ 44%]
../../../scss/tests/files/bugs/at-rules-1.scss F                         [ 44%]
../../../scss/tests/files/bugs/at-rules-2.scss .                         [ 45%]
../../../scss/tests/files/bugs/at-rules-compressed-semicolon.scss F      [ 45%]
../../../scss/tests/files/bugs/at-rules-duplicate-media-queries.scss .   [ 46%]
../../../scss/tests/files/bugs/at-rules-interpolation.scss F             [ 46%]
../../../scss/tests/files/bugs/base64url.scss F                          [ 46%]
../../../scss/tests/files/bugs/colors-preserve-names.scss F              [ 47%]
../../../scss/tests/files/bugs/division-in-assignment.scss .             [ 47%]
../../../scss/tests/files/bugs/division-vs-literal-slash.scss .          [ 48%]
../../../scss/tests/files/bugs/extend-child-selector.scss F              [ 48%]
../../../scss/tests/files/bugs/extend-common-prefix-complex.scss F       [ 48%]
../../../scss/tests/files/bugs/extend-common-prefix.scss .               [ 49%]
../../../scss/tests/files/bugs/extend-selector-order.scss F              [ 49%]
../../../scss/tests/files/bugs/for-to-vs-through.scss .                  [ 50%]
../../../scss/tests/files/bugs/if-with-parentheses.scss F                [ 50%]
../../../scss/tests/files/bugs/interpolation-timing.scss F               [ 51%]
../../../scss/tests/files/bugs/names-equivalence.scss F                  [ 51%]
../../../scss/tests/files/bugs/selectors-adjacent-is-not-include.scss .  [ 51%]
../../../scss/tests/files/bugs/trailing-combinators.scss F               [ 52%]
../../../scss/tests/files/bugs/unit-float-precision.scss F               [ 52%]
../../../scss/tests/files/bugs/variables-font-face-default.scss F        [ 53%]
../../../scss/tests/files/compass/current-color.scss F                   [ 53%]
../../../scss/tests/files/compass/gradients.scss F                       [ 53%]
../../../scss/tests/files/general/000-smoketest.scss F                   [ 54%]
../../../scss/tests/files/general/css-calc.scss .                        [ 54%]
../../../scss/tests/files/general/each-destructuring-2.scss F            [ 55%]
../../../scss/tests/files/general/each-destructuring-3.scss F            [ 55%]
../../../scss/tests/files/general/each-destructuring.scss F              [ 55%]
../../../scss/tests/files/general/empty-list-included.scss F             [ 56%]
../../../scss/tests/files/general/global-variable-exists.scss F          [ 56%]
../../../scss/tests/files/general/if-lazy.scss F                         [ 57%]
../../../scss/tests/files/general/interpolation-acid.scss F              [ 57%]
../../../scss/tests/files/general/interpolation-mixin-name.scss F        [ 57%]
../../../scss/tests/files/general/maps-complex-keys.scss F               [ 58%]
../../../scss/tests/files/general/maps-example-lists.scss F              [ 58%]
../../../scss/tests/files/general/maps-example.scss F                    [ 59%]
../../../scss/tests/files/general/names-loop-variable.scss F             [ 59%]
../../../scss/tests/files/general/null-values.scss F                     [ 59%]
../../../scss/tests/files/general/scoping-mixin-2.scss F                 [ 60%]
../../../scss/tests/files/general/scoping-mixin.scss F                   [ 60%]
../../../scss/tests/files/general/scoping-nested-2.scss F                [ 61%]
../../../scss/tests/files/general/scoping-nested.scss F                  [ 61%]
../../../scss/tests/files/general/slurpy-keyword-args.scss F             [ 61%]
../../../scss/tests/files/kronuz/args.scss F                             [ 62%]
../../../scss/tests/files/kronuz/functions-context.scss F                [ 62%]
../../../scss/tests/files/kronuz/image-colors.scss F                     [ 63%]
../../../scss/tests/files/kronuz/imports-unused.scss F                   [ 63%]
../../../scss/tests/files/kronuz/linear-gradient.scss F                  [ 63%]
../../../scss/tests/files/kronuz/lists-circular-nth.scss F               [ 64%]
../../../scss/tests/files/kronuz/lists-operations.scss .                 [ 64%]
../../../scss/tests/files/kronuz/mixin-varargs.scss F                    [ 65%]
../../../scss/tests/files/kronuz/mixins-context.scss F                   [ 65%]
../../../scss/tests/files/kronuz/mul-em.scss .                           [ 65%]
../../../scss/tests/files/kronuz/mul-list.scss .                         [ 66%]
../../../scss/tests/files/kronuz/order-test-each.scss .                  [ 66%]
../../../scss/tests/files/kronuz/order-test-for.scss .                   [ 67%]
../../../scss/tests/files/kronuz/order-test.scss F                       [ 67%]
../../../scss/tests/files/kronuz/reversed-for.scss .                     [ 67%]
../../../scss/tests/files/kronuz/reversed-range.scss F                   [ 68%]
../../../scss/tests/files/kronuz/rgba-colors.scss F                      [ 68%]
../../../scss/tests/files/kronuz/scope-loop-variables.scss F             [ 69%]
../../../scss/tests/files/kronuz/scoping-control.scss F                  [ 69%]
../../../scss/tests/files/kronuz/selectors-append-nest.scss F            [ 69%]
../../../scss/tests/files/kronuz/selectors-nest.scss F                   [ 70%]
../../../scss/tests/files/kronuz/selectors-special.scss F                [ 70%]
../../../scss/tests/files/kronuz/sprite-map.scss F                       [ 71%]
../../../scss/tests/files/kronuz/style-nested.scss F                     [ 71%]
../../../scss/tests/files/kronuz/while-test.scss .                       [ 71%]
../../../scss/tests/files/original-doctests/000-general.scss F           [ 72%]
../../../scss/tests/files/original-doctests/001-variables.scss F         [ 72%]
../../../scss/tests/files/original-doctests/002-nesting-children.scss F  [ 73%]
../../../scss/tests/files/original-doctests/003-nesting-children-2.scss F [ 73%]
                                                                         [ 73%]
../../../scss/tests/files/original-doctests/004-nesting-children-3.scss F [ 73%]
                                                                         [ 73%]
../../../scss/tests/files/original-doctests/005-extends.scss .           [ 74%]
../../../scss/tests/files/original-doctests/006-extends-2.scss .         [ 74%]
../../../scss/tests/files/original-doctests/007-extends-3.scss F         [ 75%]
../../../scss/tests/files/original-doctests/008-extends-4.scss F         [ 75%]
../../../scss/tests/files/original-doctests/009-extends-5.scss F         [ 75%]
../../../scss/tests/files/original-doctests/010-math.scss .              [ 76%]
../../../scss/tests/files/original-doctests/011-math-2.scss .            [ 76%]
../../../scss/tests/files/original-doctests/012-math-3.scss .            [ 77%]
../../../scss/tests/files/original-doctests/013-nesting.scss F           [ 77%]
../../../scss/tests/files/original-doctests/014-nesting-2.scss F         [ 77%]
../../../scss/tests/files/original-doctests/015-nesting-3.scss .         [ 78%]
../../../scss/tests/files/original-doctests/016-variables.scss F         [ 78%]
../../../scss/tests/files/original-doctests/017-interpolation.scss F     [ 79%]
../../../scss/tests/files/original-doctests/018-mixins.scss F            [ 79%]
../../../scss/tests/files/original-doctests/019-mixins-2.scss F          [ 79%]
../../../scss/tests/files/original-doctests/020-mixins-3.scss F          [ 80%]
../../../scss/tests/files/original-doctests/021-extend.scss F            [ 80%]
../../../scss/tests/files/original-doctests/022-extend-multiple.scss .   [ 81%]
../../../scss/tests/files/original-doctests/023-extend-multiple-2.scss F [ 81%]
                                                                         [ 81%]
../../../scss/tests/files/original-doctests/024-extend-placeholder.scss F [ 81%]
                                                                         [ 81%]
../../../scss/tests/files/original-doctests/025-forum.scss .             [ 82%]
../../../scss/tests/files/original-doctests/026-forum-2.scss F           [ 82%]
../../../scss/tests/files/original-doctests/027-forum-3.scss .           [ 83%]
../../../scss/tests/files/original-doctests/028-errors.scss F            [ 83%]
../../../scss/tests/files/original-doctests/029-errors-2.scss F          [ 83%]
../../../scss/tests/files/original-doctests/030-errors-3.scss .          [ 84%]
../../../scss/tests/files/original-doctests/031-test.scss F              [ 84%]
../../../scss/tests/files/original-doctests/032-test-2.scss F            [ 85%]
../../../scss/tests/files/original-doctests/033-test-3.scss F            [ 85%]
../../../scss/tests/files/original-doctests/034-test-4.scss F            [ 85%]
../../../scss/tests/files/original-doctests/035-test-5.scss F            [ 86%]
../../../scss/tests/files/original-doctests/036-test-6.scss F            [ 86%]
../../../scss/tests/files/original-doctests/037-test-7.scss F            [ 87%]
../../../scss/tests/files/original-doctests/038-test-8.scss F            [ 87%]
../../../scss/tests/files/original-doctests/039-hover-extend.scss F      [ 87%]
../../../scss/tests/files/original-doctests/039-math-4.scss .            [ 88%]
../../../scss/tests/files/original-doctests/040-complex-sequence-extend.scss F 
[ 88%]
                                                                         [ 88%]
../../../scss/tests/files/original-doctests/041-another-extend.scss .    [ 89%]
../../../scss/tests/files/regressions/args-vars.scss F                   [ 89%]
../../../scss/tests/files/regressions/argspec-default-arguments.scss F   [ 89%]
../../../scss/tests/files/regressions/argspec-no-arguments.scss F        [ 90%]
../../../scss/tests/files/regressions/argspec-trailing-comma.scss F      [ 90%]
../../../scss/tests/files/regressions/interpolation-2.scss F             [ 91%]
../../../scss/tests/files/regressions/interpolation.scss F               [ 91%]
../../../scss/tests/files/regressions/issue-10.scss F                    [ 91%]
../../../scss/tests/files/regressions/issue-110.scss F                   [ 92%]
../../../scss/tests/files/regressions/issue-2.scss F                     [ 92%]
../../../scss/tests/files/regressions/issue-21.scss F                    [ 93%]
../../../scss/tests/files/regressions/issue-258.scss F                   [ 93%]
../../../scss/tests/files/regressions/issue-32.scss .                    [ 93%]
../../../scss/tests/files/regressions/issue-334-a.scss F                 [ 94%]
../../../scss/tests/files/regressions/issue-334-b.scss F                 [ 94%]
../../../scss/tests/files/regressions/issue-334-c.scss F                 [ 95%]
../../../scss/tests/files/regressions/issue-334-d.scss F                 [ 95%]
../../../scss/tests/files/regressions/issue-334-e.scss F                 [ 95%]
../../../scss/tests/files/regressions/issue-334-f.scss F                 [ 96%]
../../../scss/tests/files/regressions/issue-334-g.scss F                 [ 96%]
../../../scss/tests/files/regressions/issue-334-h.scss F                 [ 97%]
../../../scss/tests/files/regressions/issue-4.scss .                     [ 97%]
../../../scss/tests/files/regressions/issue-40.scss F                    [ 97%]
../../../scss/tests/files/regressions/issue-5.scss F                     [ 98%]
../../../scss/tests/files/regressions/issue-52.scss F                    [ 98%]
../../../scss/tests/files/regressions/issue-6.scss F                     [ 99%]
../../../scss/tests/files/regressions/issue-7.scss .                     [ 99%]
../../../scss/tests/files/regressions/nth-inside-each.scss F             [100%]

=================================== FAILURES ===================================
__________________________ test_reference_operations ___________________________

    def test_reference_operations():
        """Test the example expressions in the reference document:
    
        http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#operations
        """
        # TODO: break this into its own file and add the entire reference guide
    
        # Need to build the calculator manually to get at its namespace, and 
need
        # to use calculate() instead of evaluate_expression() so interpolation
        # works
        ns = CoreExtension.namespace.derive()
        calc = Calculator(ns).calculate
    
        # Simple example
>       assert calc('1in + 8pt') == Number(1.1111111111111112, "in")

../../../scss/tests/test_expression.py:44: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
../../../scss/calculator.py:116: in calculate
    result = self.evaluate_expression(expression, divide=divide)
../../../scss/calculator.py:134: in evaluate_expression
    ast = self.parse_expression(expr)
../../../scss/calculator.py:166: in parse_expression
    parser = SassExpression(SassExpressionScanner(expr))
../../../scss/grammar/expression.py:104: in __init__
    self.patterns.append((t, re.compile(p)))
/usr/lib/python3.11/re/__init__.py:227: in compile
    return _compile(pattern, flags)
/usr/lib/python3.11/re/__init__.py:294: in _compile
    p = _compiler.compile(pattern, flags)
/usr/lib/python3.11/re/_compiler.py:743: in compile
    p = _parser.parse(p, flags)
/usr/lib/python3.11/re/_parser.py:980: in parse
    p = _parse_sub(source, state, flags & SRE_FLAG_VERBOSE, 0)
/usr/lib/python3.11/re/_parser.py:455: in _parse_sub
    itemsappend(_parse(source, state, verbose, nested + 1,
/usr/lib/python3.11/re/_parser.py:863: in _parse
    p = _parse_sub(source, state, sub_verbose, nested + 1)
/usr/lib/python3.11/re/_parser.py:455: in _parse_sub
    itemsappend(_parse(source, state, verbose, nested + 1,
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

source = <re._parser.Tokenizer object at 0x7fc44e8cd6d0>
state = <re._parser.State object at 0x7fc44e8cda90>, verbose = 0, nested = 3
first = False

    def _parse(source, state, verbose, nested, first=False):
        # parse a simple pattern
        subpattern = SubPattern(state)
    
        # precompute constants into local variables
        subpatternappend = subpattern.append
        sourceget = source.get
        sourcematch = source.match
        _len = len
        _ord = ord
    
        while True:
    
            this = source.next
            if this is None:
                break # end of pattern
            if this in "|)":
                break # end of subpattern
            sourceget()
    
            if verbose:
                # skip whitespace and comments
                if this in WHITESPACE:
                    continue
                if this == "#":
                    while True:
                        this = sourceget()
                        if this is None or this == "\n":
                            break
                    continue
    
            if this[0] == "\\":
                code = _escape(source, this, state)
                subpatternappend(code)
    
            elif this not in SPECIAL_CHARS:
                subpatternappend((LITERAL, _ord(this)))
    
            elif this == "[":
                here = source.tell() - 1
                # character set
                set = []
                setappend = set.append
    ##          if sourcematch(":"):
    ##              pass # handle character classes
                if source.next == '[':
                    import warnings
                    warnings.warn(
                        'Possible nested set at position %d' % source.tell(),
                        FutureWarning, stacklevel=nested + 6
                    )
                negate = sourcematch("^")
                # check remaining characters
                while True:
                    this = sourceget()
                    if this is None:
                        raise source.error("unterminated character set",
                                           source.tell() - here)
                    if this == "]" and set:
                        break
                    elif this[0] == "\\":
                        code1 = _class_escape(source, this)
                    else:
                        if set and this in '-&~|' and source.next == this:
                            import warnings
                            warnings.warn(
                                'Possible set %s at position %d' % (
                                    'difference' if this == '-' else
                                    'intersection' if this == '&' else
                                    'symmetric difference' if this == '~' else
                                    'union',
                                    source.tell() - 1),
                                FutureWarning, stacklevel=nested + 6
                            )
                        code1 = LITERAL, _ord(this)
                    if sourcematch("-"):
                        # potential range
                        that = sourceget()
                        if that is None:
                            raise source.error("unterminated character set",
                                               source.tell() - here)
                        if that == "]":
                            if code1[0] is IN:
                                code1 = code1[1][0]
                            setappend(code1)
                            setappend((LITERAL, _ord("-")))
                            break
                        if that[0] == "\\":
                            code2 = _class_escape(source, that)
                        else:
                            if that == '-':
                                import warnings
                                warnings.warn(
                                    'Possible set difference at position %d' % (
                                        source.tell() - 2),
                                    FutureWarning, stacklevel=nested + 6
                                )
                            code2 = LITERAL, _ord(that)
                        if code1[0] != LITERAL or code2[0] != LITERAL:
                            msg = "bad character range %s-%s" % (this, that)
                            raise source.error(msg, len(this) + 1 + len(that))
                        lo = code1[1]
                        hi = code2[1]
                        if hi < lo:
                            msg = "bad character range %s-%s" % (this, that)
                            raise source.error(msg, len(this) + 1 + len(that))
                        setappend((RANGE, (lo, hi)))
                    else:
                        if code1[0] is IN:
                            code1 = code1[1][0]
                        setappend(code1)
    
                set = _uniq(set)
                # XXX: <fl> should move set optimization to compiler!
                if _len(set) == 1 and set[0][0] is LITERAL:
                    # optimization
                    if negate:
                        subpatternappend((NOT_LITERAL, set[0][1]))
                    else:
                        subpatternappend(set[0])
                else:
                    if negate:
                        set.insert(0, (NEGATE, None))
                    # charmap optimization can't be added here because
                    # global flags still are not known
                    subpatternappend((IN, set))
    
            elif this in REPEAT_CHARS:
                # repeat previous item
                here = source.tell()
                if this == "?":
                    min, max = 0, 1
                elif this == "*":
                    min, max = 0, MAXREPEAT
    
                elif this == "+":
                    min, max = 1, MAXREPEAT
                elif this == "{":
                    if source.next == "}":
                        subpatternappend((LITERAL, _ord(this)))
                        continue
    
                    min, max = 0, MAXREPEAT
                    lo = hi = ""
                    while source.next in DIGITS:
                        lo += sourceget()
                    if sourcematch(","):
                        while source.next in DIGITS:
                            hi += sourceget()
                    else:
                        hi = lo
                    if not sourcematch("}"):
                        subpatternappend((LITERAL, _ord(this)))
                        source.seek(here)
                        continue
    
                    if lo:
                        min = int(lo)
                        if min >= MAXREPEAT:
                            raise OverflowError("the repetition number is too 
large")
                    if hi:
                        max = int(hi)
                        if max >= MAXREPEAT:
                            raise OverflowError("the repetition number is too 
large")
                        if max < min:
                            raise source.error("min repeat greater than max 
repeat",
                                               source.tell() - here)
                else:
                    raise AssertionError("unsupported quantifier %r" % (char,))
                # figure out which item to repeat
                if subpattern:
                    item = subpattern[-1:]
                else:
                    item = None
                if not item or item[0][0] is AT:
                    raise source.error("nothing to repeat",
                                       source.tell() - here + len(this))
                if item[0][0] in _REPEATCODES:
                    raise source.error("multiple repeat",
                                       source.tell() - here + len(this))
                if item[0][0] is SUBPATTERN:
                    group, add_flags, del_flags, p = item[0][1]
                    if group is None and not add_flags and not del_flags:
                        item = p
                if sourcematch("?"):
                    # Non-Greedy Match
                    subpattern[-1] = (MIN_REPEAT, (min, max, item))
                elif sourcematch("+"):
                    # Possessive Match (Always Greedy)
                    subpattern[-1] = (POSSESSIVE_REPEAT, (min, max, item))
                else:
                    # Greedy Match
                    subpattern[-1] = (MAX_REPEAT, (min, max, item))
    
            elif this == ".":
                subpatternappend((ANY, None))
    
            elif this == "(":
                start = source.tell() - 1
                capture = True
                atomic = False
                name = None
                add_flags = 0
                del_flags = 0
                if sourcematch("?"):
                    # options
                    char = sourceget()
                    if char is None:
                        raise source.error("unexpected end of pattern")
                    if char == "P":
                        # python extensions
                        if sourcematch("<"):
                            # named group: skip forward to end of name
                            name = source.getuntil(">", "group name")
                            source.checkgroupname(name, 1, nested)
                        elif sourcematch("="):
                            # named backreference
                            name = source.getuntil(")", "group name")
                            source.checkgroupname(name, 1, nested)
                            gid = state.groupdict.get(name)
                            if gid is None:
                                msg = "unknown group name %r" % name
                                raise source.error(msg, len(name) + 1)
                            if not state.checkgroup(gid):
                                raise source.error("cannot refer to an open 
group",
                                                   len(name) + 1)
                            state.checklookbehindgroup(gid, source)
                            subpatternappend((GROUPREF, gid))
                            continue
    
                        else:
                            char = sourceget()
                            if char is None:
                                raise source.error("unexpected end of pattern")
                            raise source.error("unknown extension ?P" + char,
                                               len(char) + 2)
                    elif char == ":":
                        # non-capturing group
                        capture = False
                    elif char == "#":
                        # comment
                        while True:
                            if source.next is None:
                                raise source.error("missing ), unterminated 
comment",
                                                   source.tell() - start)
                            if sourceget() == ")":
                                break
                        continue
    
                    elif char in "=!<":
                        # lookahead assertions
                        dir = 1
                        if char == "<":
                            char = sourceget()
                            if char is None:
                                raise source.error("unexpected end of pattern")
                            if char not in "=!":
                                raise source.error("unknown extension ?<" + 
char,
                                                   len(char) + 2)
                            dir = -1 # lookbehind
                            lookbehindgroups = state.lookbehindgroups
                            if lookbehindgroups is None:
                                state.lookbehindgroups = state.groups
                        p = _parse_sub(source, state, verbose, nested + 1)
                        if dir < 0:
                            if lookbehindgroups is None:
                                state.lookbehindgroups = None
                        if not sourcematch(")"):
                            raise source.error("missing ), unterminated 
subpattern",
                                               source.tell() - start)
                        if char == "=":
                            subpatternappend((ASSERT, (dir, p)))
                        else:
                            subpatternappend((ASSERT_NOT, (dir, p)))
                        continue
    
                    elif char == "(":
                        # conditional backreference group
                        condname = source.getuntil(")", "group name")
                        if condname.isidentifier():
                            source.checkgroupname(condname, 1, nested)
                            condgroup = state.groupdict.get(condname)
                            if condgroup is None:
                                msg = "unknown group name %r" % condname
                                raise source.error(msg, len(condname) + 1)
                        else:
                            try:
                                condgroup = int(condname)
                                if condgroup < 0:
                                    raise ValueError
                            except ValueError:
                                msg = "bad character in group name %r" % 
condname
                                raise source.error(msg, len(condname) + 1) from 
None
                            if not condgroup:
                                raise source.error("bad group number",
                                                   len(condname) + 1)
                            if condgroup >= MAXGROUPS:
                                msg = "invalid group reference %d" % condgroup
                                raise source.error(msg, len(condname) + 1)
                            if condgroup not in state.grouprefpos:
                                state.grouprefpos[condgroup] = (
                                    source.tell() - len(condname) - 1
                                )
                            if not (condname.isdecimal() and 
condname.isascii()):
                                import warnings
                                warnings.warn(
                                    "bad character in group name %s at position 
%d" %
                                    (repr(condname) if source.istext else 
ascii(condname),
                                     source.tell() - len(condname) - 1),
                                    DeprecationWarning, stacklevel=nested + 6
                                )
                        state.checklookbehindgroup(condgroup, source)
                        item_yes = _parse(source, state, verbose, nested + 1)
                        if source.match("|"):
                            item_no = _parse(source, state, verbose, nested + 1)
                            if source.next == "|":
                                raise source.error("conditional backref with 
more than two branches")
                        else:
                            item_no = None
                        if not source.match(")"):
                            raise source.error("missing ), unterminated 
subpattern",
                                               source.tell() - start)
                        subpatternappend((GROUPREF_EXISTS, (condgroup, 
item_yes, item_no)))
                        continue
    
                    elif char == ">":
                        # non-capturing, atomic group
                        capture = False
                        atomic = True
                    elif char in FLAGS or char == "-":
                        # flags
                        flags = _parse_flags(source, state, char)
                        if flags is None:  # global flags
                            if not first or subpattern:
>                               raise source.error('global flags not at the 
> start '
                                                   'of the expression',
                                                   source.tell() - start)
E                               re.error: global flags not at the start of the 
expression at position 1

/usr/lib/python3.11/re/_parser.py:841: error
...
===== 200 failed, 48 passed, 1 skipped, 1 xfailed, 217 warnings in 25.94s ======
E: pybuild pybuild:379: test: plugin distutils failed with: exit code=1: cd 
/<<PKGBUILDDIR>>/.pybuild/cpython3_3.11_pyscss/build; python3.11 -m pytest 
{dir}/scss/tests
...

Reply via email to