jarvisteach/appJar

View on GitHub
appJar/examples/showcase.py

Summary

Maintainability
D
2 days
Test Coverage

Cyclomatic complexity is too high in function toolbar. (11)
Open

def toolbar(btn):
    print(btn)
    if btn == "EXIT": app.stop()
    elif btn == "LOGOUT": logout()
    elif btn == "FILL": app.setTabBg("Tabs", app.getTabbedFrameSelectedTab("Tabs"), app.colourBox())
Severity: Minor
Found in appJar/examples/showcase.py by radon

Cyclomatic Complexity

Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

Construct Effect on CC Reasoning
if +1 An if statement is a single decision.
elif +1 The elif statement adds another decision.
else +0 The else statement does not cause a new decision. The decision is at the if.
for +1 There is a decision at the start of the loop.
while +1 There is a decision at the while statement.
except +1 Each except branch adds a new conditional path of execution.
finally +0 The finally block is unconditionally executed.
with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
assert +1 The assert statement internally roughly equals a conditional statement.
Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

Source: http://radon.readthedocs.org/en/latest/intro.html

Cyclomatic complexity is too high in function move. (7)
Open

def move(direction):
    if direction == ">":
        for item in app.getListBox("Animals"):
            app.addListItem("Sports",item)
            app.removeListItem("Animals", item)
Severity: Minor
Found in appJar/examples/showcase.py by radon

Cyclomatic Complexity

Cyclomatic Complexity corresponds to the number of decisions a block of code contains plus 1. This number (also called McCabe number) is equal to the number of linearly independent paths through the code. This number can be used as a guide when testing conditional logic in blocks.

Radon analyzes the AST tree of a Python program to compute Cyclomatic Complexity. Statements have the following effects on Cyclomatic Complexity:

Construct Effect on CC Reasoning
if +1 An if statement is a single decision.
elif +1 The elif statement adds another decision.
else +0 The else statement does not cause a new decision. The decision is at the if.
for +1 There is a decision at the start of the loop.
while +1 There is a decision at the while statement.
except +1 Each except branch adds a new conditional path of execution.
finally +0 The finally block is unconditionally executed.
with +1 The with statement roughly corresponds to a try/except block (see PEP 343 for details).
assert +1 The assert statement internally roughly equals a conditional statement.
Comprehension +1 A list/set/dict comprehension of generator expression is equivalent to a for loop.
Boolean Operator +1 Every boolean operator (and, or) adds a decision point.

Source: http://radon.readthedocs.org/en/latest/intro.html

Function toolbar has a Cognitive Complexity of 12 (exceeds 5 allowed). Consider refactoring.
Open

def toolbar(btn):
    print(btn)
    if btn == "EXIT": app.stop()
    elif btn == "LOGOUT": logout()
    elif btn == "FILL": app.setTabBg("Tabs", app.getTabbedFrameSelectedTab("Tabs"), app.colourBox())
Severity: Minor
Found in appJar/examples/showcase.py - About 1 hr to fix

Cognitive Complexity

Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

A method's cognitive complexity is based on a few simple rules:

  • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
  • Code is considered more complex for each "break in the linear flow of the code"
  • Code is considered more complex when "flow breaking structures are nested"

Further reading

Avoid deeply nested control flow statements.
Open

                for i in range(5):
                    l = "DD"+str(i)
                    app.label(l, l, pos=(0, i), tip=colours[i], bg=colours[i], fg="white", drag=[drag, drop])

Severity: Major
Found in appJar/examples/showcase.py - About 45 mins to fix

    Avoid deeply nested control flow statements.
    Open

                    with app.panedFrame("c"): app.label("Pane 3")
                    with app.panedFrame("d"): app.label("Pane 4")
    Severity: Major
    Found in appJar/examples/showcase.py - About 45 mins to fix

      Avoid deeply nested control flow statements.
      Open

                      with app.panedFrameVertical("b"): app.label("Pane 2")
                      with app.panedFrame("c"): app.label("Pane 3")
      Severity: Major
      Found in appJar/examples/showcase.py - About 45 mins to fix

        Avoid deeply nested control flow statements.
        Open

                        with app.panedFrame("d"): app.label("Pane 4")
        
        
        Severity: Major
        Found in appJar/examples/showcase.py - About 45 mins to fix

          Avoid deeply nested control flow statements.
          Open

                          with app.panedFrame("right"):
                              app.slider("TransparencyScale", 100, change=scale, interval=25)
                              app.spin("TransparencySpin", value=0, endValue=100, item='100', change=scale)
                              app.slider("FontScale", 12, show=True, change=scale, range=(6,40))
          
          
          Severity: Major
          Found in appJar/examples/showcase.py - About 45 mins to fix

            Function move has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.
            Open

            def move(direction):
                if direction == ">":
                    for item in app.getListBox("Animals"):
                        app.addListItem("Sports",item)
                        app.removeListItem("Animals", item)
            Severity: Minor
            Found in appJar/examples/showcase.py - About 45 mins to fix

            Cognitive Complexity

            Cognitive Complexity is a measure of how difficult a unit of code is to intuitively understand. Unlike Cyclomatic Complexity, which determines how difficult your code will be to test, Cognitive Complexity tells you how difficult your code will be to read and comprehend.

            A method's cognitive complexity is based on a few simple rules:

            • Code is not considered more complex when it uses shorthand that the language provides for collapsing multiple statements into one
            • Code is considered more complex for each "break in the linear flow of the code"
            • Code is considered more complex when "flow breaking structures are nested"

            Further reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

            def add(entry):
                if entry == "animalsEntry":
                    app.addListItem("Animals", app.getEntry("animalsEntry"))
                    app.clearEntry("animalsEntry")
                elif entry == "sportsEntry":
            Severity: Major
            Found in appJar/examples/showcase.py and 1 other location - About 3 hrs to fix
            appJar/examples/showcase.py on lines 101..110

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 71.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                elif direction == "<":
                    for item in app.getListBox("Sports"):
                        app.addListItem("Animals",item)
                        app.removeListItem("Sports", item)
                elif direction == "<<":
            Severity: Major
            Found in appJar/examples/showcase.py and 1 other location - About 3 hrs to fix
            appJar/examples/showcase.py on lines 112..118

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 71.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                    with app.pagedWindow("AddressBook"):
                        with app.page(): app.label("PP1")
                        with app.page(): app.label("PP2")
                        with app.page(): app.label("PP3")
            Severity: Major
            Found in appJar/examples/showcase.py and 1 other location - About 2 hrs to fix
            tests/widget_test.py on lines 3541..3547

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 58.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Similar blocks of code found in 2 locations. Consider refactoring.
            Open

                if direction == ">":
                    for item in app.getListBox("Animals"):
                        app.addListItem("Sports",item)
                        app.removeListItem("Animals", item)
            Severity: Minor
            Found in appJar/examples/showcase.py and 1 other location - About 30 mins to fix
            appJar/examples/showcase.py on lines 101..104

            Duplicated Code

            Duplicated code can lead to software that is hard to understand and difficult to change. The Don't Repeat Yourself (DRY) principle states:

            Every piece of knowledge must have a single, unambiguous, authoritative representation within a system.

            When you violate DRY, bugs and maintenance problems are sure to follow. Duplicated code has a tendency to both continue to replicate and also to diverge (leaving bugs as two similar implementations differ in subtle ways).

            Tuning

            This issue has a mass of 32.

            We set useful threshold defaults for the languages we support but you may want to adjust these settings based on your project guidelines.

            The threshold configuration represents the minimum mass a code block must have to be analyzed for duplication. The lower the threshold, the more fine-grained the comparison.

            If the engine is too easily reporting duplication, try raising the threshold. If you suspect that the engine isn't catching enough duplication, try lowering the threshold. The best setting tends to differ from language to language.

            See codeclimate-duplication's documentation for more information about tuning the mass threshold in your .codeclimate.yml.

            Refactorings

            Further Reading

            Expected 2 blank lines, found 1
            Open

            def calculator(key):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Multiple statements on one line (colon)
            Open

                elif btn == "CALENDAR": app.showSubWindow("DatePicker")
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Missing whitespace around modulo operator
            Open

                app.meter("Meter2", (app.meter("Meter2")[0]*100 - 1)%100)
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Surround operators with a single space on either side.

            - Always surround these binary operators with a single space on
              either side: assignment (=), augmented assignment (+=, -= etc.),
              comparisons (==, <, >, !=, <=, >=, in, not in, is, is not),
              Booleans (and, or, not).
            
            - If operators with different priorities are used, consider adding
              whitespace around the operators with the lowest priorities.
            
            Okay: i = i + 1
            Okay: submitted += 1
            Okay: x = x * 2 - 1
            Okay: hypot2 = x * x + y * y
            Okay: c = (a + b) * (a - b)
            Okay: foo(bar, key='word', *args, **kwargs)
            Okay: alpha[:-i]
            
            E225: i=i+1
            E225: submitted +=1
            E225: x = x /2 - 1
            E225: z = x **y
            E225: z = 1and 1
            E226: c = (a+b) * (a-b)
            E226: hypot2 = x*x + y*y
            E227: c = a|b
            E228: msg = fmt%(errno, errmsg)

            Multiple statements on one line (colon)
            Open

                elif btn == "ACCESS": app.showAccess()
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Missing whitespace after ':'
            Open

                    values={"German":20, "French":10, "English":60, "Dutch": 5, "Belgium":3, "Danish":2}
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Missing whitespace after ':'
            Open

                    values={"German":20, "French":10, "English":60, "Dutch": 5, "Belgium":3, "Danish":2}
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Missing whitespace around modulo operator
            Open

                app.meter("Meter1", (app.meter("Meter1")[0]*100 + 1)%100)
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Surround operators with a single space on either side.

            - Always surround these binary operators with a single space on
              either side: assignment (=), augmented assignment (+=, -= etc.),
              comparisons (==, <, >, !=, <=, >=, in, not in, is, is not),
              Booleans (and, or, not).
            
            - If operators with different priorities are used, consider adding
              whitespace around the operators with the lowest priorities.
            
            Okay: i = i + 1
            Okay: submitted += 1
            Okay: x = x * 2 - 1
            Okay: hypot2 = x * x + y * y
            Okay: c = (a + b) * (a - b)
            Okay: foo(bar, key='word', *args, **kwargs)
            Okay: alpha[:-i]
            
            E225: i=i+1
            E225: submitted +=1
            E225: x = x /2 - 1
            E225: z = x **y
            E225: z = 1and 1
            E226: c = (a+b) * (a-b)
            E226: hypot2 = x*x + y*y
            E227: c = a|b
            E228: msg = fmt%(errno, errmsg)

            Multiple statements on one line (colon)
            Open

                elif btn == "MAP": app.showSubWindow("Maps")
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Missing whitespace after ','
            Open

                    app.location = (600,50)
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Expected 2 blank lines, found 1
            Open

            def toolbar(btn):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Multiple statements on one line (colon)
            Open

                elif btn == "LOGOUT": logout()
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Multiple statements on one line (colon)
            Open

                elif name == "FontScale": app.setFont(size=app.getScale(name))
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Expected 2 blank lines, found 1
            Open

            def showTime():
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Expected 2 blank lines after class or function definition, found 1
            Open

            with gui("ShowCase") as app:
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Missing whitespace after ','
            Open

                            app.label("f","Font")
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Missing whitespace after ','
            Open

                            app.button("RESET", resetDD, 0,0)
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Unexpected spaces around keyword / parameter equals
            Open

                    with app.tab("Calculator", inPadding = (5,5)):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Don't use spaces around the '=' sign in function arguments.

            Don't use spaces around the '=' sign when used to indicate a
            keyword argument or a default parameter value, except when
            using a type annotation.
            
            Okay: def complex(real, imag=0.0):
            Okay: return magic(r=real, i=imag)
            Okay: boolean(a == b)
            Okay: boolean(a != b)
            Okay: boolean(a <= b)
            Okay: boolean(a >= b)
            Okay: def foo(arg: int = 42):
            Okay: async def foo(arg: int = 42):
            
            E251: def complex(real, imag = 0.0):
            E251: return magic(r = real, i = imag)
            E252: def complex(real, image: float=0.0):

            Missing whitespace after ','
            Open

                            app.label("RESET", "RESET", 0,1, bg="grey", submit=resetDD)
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Unexpected spaces around keyword / parameter equals
            Open

                        with app.panedFrame("a", sticky = "news"):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Don't use spaces around the '=' sign in function arguments.

            Don't use spaces around the '=' sign when used to indicate a
            keyword argument or a default parameter value, except when
            using a type annotation.
            
            Okay: def complex(real, imag=0.0):
            Okay: return magic(r=real, i=imag)
            Okay: boolean(a == b)
            Okay: boolean(a != b)
            Okay: boolean(a <= b)
            Okay: boolean(a >= b)
            Okay: def foo(arg: int = 42):
            Okay: async def foo(arg: int = 42):
            
            E251: def complex(real, imag = 0.0):
            E251: return magic(r = real, i = imag)
            E252: def complex(real, image: float=0.0):

            Multiple statements on one line (colon)
            Open

                        with app.page(): app.label("PP2")
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Unexpected spaces around keyword / parameter equals
            Open

                        with app.panedFrame("a", sticky = "news"):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Don't use spaces around the '=' sign in function arguments.

            Don't use spaces around the '=' sign when used to indicate a
            keyword argument or a default parameter value, except when
            using a type annotation.
            
            Okay: def complex(real, imag=0.0):
            Okay: return magic(r=real, i=imag)
            Okay: boolean(a == b)
            Okay: boolean(a != b)
            Okay: boolean(a <= b)
            Okay: boolean(a >= b)
            Okay: def foo(arg: int = 42):
            Okay: async def foo(arg: int = 42):
            
            E251: def complex(real, imag = 0.0):
            E251: return magic(r = real, i = imag)
            E252: def complex(real, image: float=0.0):

            Missing whitespace after ':'
            Open

                    values={"German":20, "French":10, "English":60, "Dutch": 5, "Belgium":3, "Danish":2}
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Unexpected spaces around keyword / parameter equals
            Open

            def logout(btn = None):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Don't use spaces around the '=' sign in function arguments.

            Don't use spaces around the '=' sign when used to indicate a
            keyword argument or a default parameter value, except when
            using a type annotation.
            
            Okay: def complex(real, imag=0.0):
            Okay: return magic(r=real, i=imag)
            Okay: boolean(a == b)
            Okay: boolean(a != b)
            Okay: boolean(a <= b)
            Okay: boolean(a >= b)
            Okay: def foo(arg: int = 42):
            Okay: async def foo(arg: int = 42):
            
            E251: def complex(real, imag = 0.0):
            E251: return magic(r = real, i = imag)
            E252: def complex(real, image: float=0.0):

            Expected 2 blank lines, found 1
            Open

            def meters():
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Expected 2 blank lines, found 1
            Open

            def move(direction):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Expected 2 blank lines, found 1
            Open

            def helpMe(nbtn):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Missing whitespace around operator
            Open

                    values={"German":20, "French":10, "English":60, "Dutch": 5, "Belgium":3, "Danish":2}
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Surround operators with a single space on either side.

            - Always surround these binary operators with a single space on
              either side: assignment (=), augmented assignment (+=, -= etc.),
              comparisons (==, <, >, !=, <=, >=, in, not in, is, is not),
              Booleans (and, or, not).
            
            - If operators with different priorities are used, consider adding
              whitespace around the operators with the lowest priorities.
            
            Okay: i = i + 1
            Okay: submitted += 1
            Okay: x = x * 2 - 1
            Okay: hypot2 = x * x + y * y
            Okay: c = (a + b) * (a - b)
            Okay: foo(bar, key='word', *args, **kwargs)
            Okay: alpha[:-i]
            
            E225: i=i+1
            E225: submitted +=1
            E225: x = x /2 - 1
            E225: z = x **y
            E225: z = 1and 1
            E226: c = (a+b) * (a-b)
            E226: hypot2 = x*x + y*y
            E227: c = a|b
            E228: msg = fmt%(errno, errmsg)

            Expected 1 blank line, found 0
            Open

                    def changePie(btn):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Expected 1 blank line, found 0
            Open

                    def getDate(btn=None):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Multiple statements on one line (colon)
            Open

                        with app.page(): app.label("PP1")
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Missing whitespace after ','
            Open

                        app.addListItem("Sports",item)
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Multiple statements on one line (colon)
            Open

                elif btn == "PIE-CHART": app.showSubWindow("Statistics")
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Missing whitespace after ','
            Open

                            app.link("RESET", resetDD, 0,2)
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Missing whitespace around operator
            Open

                        buttons=[["1", "2", "3", "C"], ["4", "5", "6", "+"], ["7", "8", "9", "-"], ["0", "*", "/", "="]]
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Surround operators with a single space on either side.

            - Always surround these binary operators with a single space on
              either side: assignment (=), augmented assignment (+=, -= etc.),
              comparisons (==, <, >, !=, <=, >=, in, not in, is, is not),
              Booleans (and, or, not).
            
            - If operators with different priorities are used, consider adding
              whitespace around the operators with the lowest priorities.
            
            Okay: i = i + 1
            Okay: submitted += 1
            Okay: x = x * 2 - 1
            Okay: hypot2 = x * x + y * y
            Okay: c = (a + b) * (a - b)
            Okay: foo(bar, key='word', *args, **kwargs)
            Okay: alpha[:-i]
            
            E225: i=i+1
            E225: submitted +=1
            E225: x = x /2 - 1
            E225: z = x **y
            E225: z = 1and 1
            E226: c = (a+b) * (a-b)
            E226: hypot2 = x*x + y*y
            E227: c = a|b
            E228: msg = fmt%(errno, errmsg)

            Multiple statements on one line (colon)
            Open

                            with app.panedFrameVertical("b"): app.label("Pane 2")
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Multiple statements on one line (colon)
            Open

                        with app.page(): app.label("PP3")
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Unexpected spaces around keyword / parameter equals
            Open

            def logout(btn = None):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Don't use spaces around the '=' sign in function arguments.

            Don't use spaces around the '=' sign when used to indicate a
            keyword argument or a default parameter value, except when
            using a type annotation.
            
            Okay: def complex(real, imag=0.0):
            Okay: return magic(r=real, i=imag)
            Okay: boolean(a == b)
            Okay: boolean(a != b)
            Okay: boolean(a <= b)
            Okay: boolean(a >= b)
            Okay: def foo(arg: int = 42):
            Okay: async def foo(arg: int = 42):
            
            E251: def complex(real, imag = 0.0):
            E251: return magic(r = real, i = imag)
            E252: def complex(real, image: float=0.0):

            Multiple statements on one line (colon)
            Open

                if btn == "EXIT": app.stop()
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Ambiguous variable name 'l'
            Open

                                l = "DD"+str(i)
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Never use the characters 'l', 'O', or 'I' as variable names.

            In some fonts, these characters are indistinguishable from the
            numerals one and zero. When tempted to use 'l', use 'L' instead.
            
            Okay: L = 0
            Okay: o = 123
            Okay: i = 42
            E741: l = 0
            E741: O = 123
            E741: I = 42
            
            Variables can be bound in several other contexts, including class
            and function definitions, 'global' and 'nonlocal' statements,
            exception handlers, and 'with' and 'for' statements.
            In addition, we have a special handling for function parameters.
            
            Okay: except AttributeError as o:
            Okay: with lock as L:
            Okay: foo(l=12)
            Okay: for a in foo(l=12):
            E741: except AttributeError as O:
            E741: with lock as l:
            E741: global I
            E741: nonlocal l
            E741: def foo(l):
            E741: def foo(l=12):
            E741: l = foo(l=12)
            E741: for l in range(10):
            E742: class I(object):
            E743: def l(x):

            Unexpected spaces around keyword / parameter equals
            Open

                    with app.tab("Calculator", inPadding = (5,5)):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Don't use spaces around the '=' sign in function arguments.

            Don't use spaces around the '=' sign when used to indicate a
            keyword argument or a default parameter value, except when
            using a type annotation.
            
            Okay: def complex(real, imag=0.0):
            Okay: return magic(r=real, i=imag)
            Okay: boolean(a == b)
            Okay: boolean(a != b)
            Okay: boolean(a <= b)
            Okay: boolean(a >= b)
            Okay: def foo(arg: int = 42):
            Okay: async def foo(arg: int = 42):
            
            E251: def complex(real, imag = 0.0):
            E251: return magic(r = real, i = imag)
            E252: def complex(real, image: float=0.0):

            Expected 2 blank lines, found 1
            Open

            def logout(btn = None):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Expected 2 blank lines, found 1
            Open

            def scale(name):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Missing whitespace after ','
            Open

                        app.addListItem("Animals",item)
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Missing whitespace after ','
            Open

                        with app.labelFrame("dnd", hideTitle=True, sticky="news", inPadding=(20,20)):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Missing whitespace after ':'
            Open

                    values={"German":20, "French":10, "English":60, "Dutch": 5, "Belgium":3, "Danish":2}
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Do not use bare 'except'
            Open

                except:
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            When catching exceptions, mention specific exceptions when possible.

            Okay: except Exception:
            Okay: except BaseException:
            E722: except:

            Missing whitespace after ','
            Open

                                app.slider("FontScale", 12, show=True, change=scale, range=(6,40))
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Unexpected spaces around keyword / parameter equals
            Open

                    with app.tab("Labels", sticky = "news"):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Don't use spaces around the '=' sign in function arguments.

            Don't use spaces around the '=' sign when used to indicate a
            keyword argument or a default parameter value, except when
            using a type annotation.
            
            Okay: def complex(real, imag=0.0):
            Okay: return magic(r=real, i=imag)
            Okay: boolean(a == b)
            Okay: boolean(a != b)
            Okay: boolean(a <= b)
            Okay: boolean(a >= b)
            Okay: def foo(arg: int = 42):
            Okay: async def foo(arg: int = 42):
            
            E251: def complex(real, imag = 0.0):
            E251: return magic(r = real, i = imag)
            E252: def complex(real, image: float=0.0):

            Expected 2 blank lines, found 1
            Open

            def login(btn):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Expected 2 blank lines, found 1
            Open

            def drop(lbl):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Too many leading '#' for block comment
            Open

            ## GUI Code starts here ##
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate inline comments by at least two spaces.

            An inline comment is a comment on the same line as a statement.
            Inline comments should be separated by at least two spaces from the
            statement. They should start with a # and a single space.
            
            Each line of a block comment starts with a # and a single space
            (unless it is indented text inside the comment).
            
            Okay: x = x + 1  # Increment x
            Okay: x = x + 1    # Increment x
            Okay: # Block comment
            E261: x = x + 1 # Increment x
            E262: x = x + 1  #Increment x
            E262: x = x + 1  #  Increment x
            E265: #Block comment
            E266: ### Block comment

            Missing whitespace after ':'
            Open

                    values={"German":20, "French":10, "English":60, "Dutch": 5, "Belgium":3, "Danish":2}
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Expected 2 blank lines, found 1
            Open

            def drag(lbl):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Expected 2 blank lines, found 1
            Open

            def add(entry):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Multiple statements on one line (colon)
            Open

                            with app.panedFrame("d"): app.label("Pane 4")
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Expected 2 blank lines, found 1
            Open

            def changeTab(tabName):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Missing whitespace after ','
            Open

                    app.size = (300,350)
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            Expected 2 blank lines, found 1
            Open

            def logoutFunction():
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Expected 2 blank lines, found 1
            Open

            def resetDD(btn):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Separate top-level function and class definitions with two blank lines.

            Method definitions inside a class are separated by a single blank
            line.
            
            Extra blank lines may be used (sparingly) to separate groups of
            related functions.  Blank lines may be omitted between a bunch of
            related one-liners (e.g. a set of dummy implementations).
            
            Use blank lines in functions, sparingly, to indicate logical
            sections.
            
            Okay: def a():\n    pass\n\n\ndef b():\n    pass
            Okay: def a():\n    pass\n\n\nasync def b():\n    pass
            Okay: def a():\n    pass\n\n\n# Foo\n# Bar\n\ndef b():\n    pass
            Okay: default = 1\nfoo = 1
            Okay: classify = 1\nfoo = 1
            
            E301: class Foo:\n    b = 0\n    def bar():\n        pass
            E302: def a():\n    pass\n\ndef b(n):\n    pass
            E302: def a():\n    pass\n\nasync def b(n):\n    pass
            E303: def a():\n    pass\n\n\n\ndef b(n):\n    pass
            E303: def a():\n\n\n\n    pass
            E304: @decorator\n\ndef a():\n    pass
            E305: def a():\n    pass\na()
            E306: def a():\n    def b():\n        pass\n    def c():\n        pass

            Multiple statements on one line (colon)
            Open

                elif btn == "FILL": app.setTabBg("Tabs", app.getTabbedFrameSelectedTab("Tabs"), app.colourBox())
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Multiple statements on one line (colon)
            Open

                            with app.panedFrame("c"): app.label("Pane 3")
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Unexpected spaces around keyword / parameter equals
            Open

                    with app.tab("Labels", sticky = "news"):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Don't use spaces around the '=' sign in function arguments.

            Don't use spaces around the '=' sign when used to indicate a
            keyword argument or a default parameter value, except when
            using a type annotation.
            
            Okay: def complex(real, imag=0.0):
            Okay: return magic(r=real, i=imag)
            Okay: boolean(a == b)
            Okay: boolean(a != b)
            Okay: boolean(a <= b)
            Okay: boolean(a >= b)
            Okay: def foo(arg: int = 42):
            Okay: async def foo(arg: int = 42):
            
            E251: def complex(real, imag = 0.0):
            E251: return magic(r = real, i = imag)
            E252: def complex(real, image: float=0.0):

            Module level import not at top of file
            Open

            from appJar import gui
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Place imports at the top of the file.

            Always put imports at the top of the file, just after any module
            comments and docstrings, and before module globals and constants.
            
            Okay: import os
            Okay: # this is a comment\nimport os
            Okay: '''this is a module docstring'''\nimport os
            Okay: r'''this is a module docstring'''\nimport os
            Okay:
            try:\n\timport x\nexcept ImportError:\n\tpass\nelse:\n\tpass\nimport y
            Okay:
            try:\n\timport x\nexcept ImportError:\n\tpass\nfinally:\n\tpass\nimport y
            E402: a=1\nimport os
            E402: 'One string'\n"Two string"\nimport os
            E402: a=1\nfrom sys import x
            
            Okay: if x:\n    import os

            Multiple statements on one line (colon)
            Open

                elif btn == "ADDRESS-BOOK": app.showSubWindow("AddressBook")
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Compound statements (on the same line) are generally discouraged.

            While sometimes it's okay to put an if/for/while with a small body
            on the same line, never do this for multi-clause statements.
            Also avoid folding such long lines!
            
            Always use a def statement instead of an assignment statement that
            binds a lambda expression directly to a name.
            
            Okay: if foo == 'blah':\n    do_blah_thing()
            Okay: do_one()
            Okay: do_two()
            Okay: do_three()
            
            E701: if foo == 'blah': do_blah_thing()
            E701: for x in lst: total += x
            E701: while t < 10: t = delay()
            E701: if foo == 'blah': do_blah_thing()
            E701: else: do_non_blah_thing()
            E701: try: something()
            E701: finally: cleanup()
            E701: if foo == 'blah': one(); two(); three()
            E702: do_one(); do_two(); do_three()
            E703: do_four();  # useless semicolon
            E704: def f(x): return 2*x
            E731: f = lambda x: 2*x

            Missing whitespace after ','
            Open

                    with app.tab("Calculator", inPadding = (5,5)):
            Severity: Minor
            Found in appJar/examples/showcase.py by pep8

            Each comma, semicolon or colon should be followed by whitespace.

            Okay: [a, b]
            Okay: (3,)
            Okay: a[1:4]
            Okay: a[:4]
            Okay: a[1:]
            Okay: a[1:4:2]
            E231: ['a','b']
            E231: foo(bar,baz)
            E231: [{'a':'b'}]

            There are no issues that match your filters.

            Category
            Status