emory-libraries/eulxml

View on GitHub
eulxml/forms/xmlobject.py

Summary

Maintainability
F
1 wk
Test Coverage

Function formfields_for_xmlobject has a Cognitive Complexity of 72 (exceeds 5 allowed). Consider refactoring.
Open

def formfields_for_xmlobject(model, fields=None, exclude=None, widgets=None, options=None,
        declared_subforms=None, max_num=None, extra=None):
    """
    Returns three sorted dictionaries (:class:`django.utils.datastructures.SortedDict`).
     * The first is a dictionary of form fields based on the
Severity: Minor
Found in eulxml/forms/xmlobject.py - About 1 day 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

File xmlobject.py has 621 lines of code (exceeds 250 allowed). Consider refactoring.
Open

# file eulxml/forms/xmlobject.py
#
#   Copyright 2010,2011 Emory University Libraries
#
#   Licensed under the Apache License, Version 2.0 (the "License");
Severity: Major
Found in eulxml/forms/xmlobject.py - About 1 day to fix

    Cyclomatic complexity is too high in function formfields_for_xmlobject. (59)
    Open

    def formfields_for_xmlobject(model, fields=None, exclude=None, widgets=None, options=None,
            declared_subforms=None, max_num=None, extra=None):
        """
        Returns three sorted dictionaries (:class:`django.utils.datastructures.SortedDict`).
         * The first is a dictionary of form fields based on the
    Severity: Minor
    Found in eulxml/forms/xmlobject.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 update_instance has a Cognitive Complexity of 23 (exceeds 5 allowed). Consider refactoring.
    Open

        def update_instance(self):
            """Save bound form data into the XmlObject model instance and return the
            updated instance."""
    
            # NOTE: django model form has a save method - not applicable here,
    Severity: Minor
    Found in eulxml/forms/xmlobject.py - About 3 hrs 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

    Cyclomatic complexity is too high in method update_instance. (14)
    Open

        def update_instance(self):
            """Save bound form data into the XmlObject model instance and return the
            updated instance."""
    
            # NOTE: django model form has a save method - not applicable here,
    Severity: Minor
    Found in eulxml/forms/xmlobject.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 xmlobject_to_dict has a Cognitive Complexity of 21 (exceeds 5 allowed). Consider refactoring.
    Open

    def xmlobject_to_dict(instance, fields=None, exclude=None, prefix=''):
        """
        Generate a dictionary based on the data in an XmlObject instance to pass as
        a Form's ``initial`` keyword argument.
    
    
    Severity: Minor
    Found in eulxml/forms/xmlobject.py - About 2 hrs 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

    Cyclomatic complexity is too high in class XmlObjectFormType. (12)
    Open

    class XmlObjectFormType(type):
        """
        Metaclass for :class:`XmlObject`.
    
        Analogous to, and substantially based on, Django's ``ModelFormMetaclass``.
    Severity: Minor
    Found in eulxml/forms/xmlobject.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 method __new__. (12)
    Open

        def __new__(cls, name, bases, attrs):
            # let django do all the work of finding declared/inherited fields
            fields = [(field_name, attrs.pop(field_name)) for field_name, obj in list(six.iteritems(attrs)) if isinstance(obj, Field)]
            for base in bases[::-1]:
                    if hasattr(base, 'declared_fields'):
    Severity: Minor
    Found in eulxml/forms/xmlobject.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 update_instance has a Cognitive Complexity of 20 (exceeds 5 allowed). Consider refactoring.
    Open

        def update_instance(self):
            for form in getattr(self, 'deleted_forms', []):
                # update_instance may be called multiple times - instance can only
                # be removed the first time, so don't consider it an error if it's not present
                if form.instance in self.instances:
    Severity: Minor
    Found in eulxml/forms/xmlobject.py - About 2 hrs 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

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

    def xmlobject_to_dict(instance, fields=None, exclude=None, prefix=''):
        """
        Generate a dictionary based on the data in an XmlObject instance to pass as
        a Form's ``initial`` keyword argument.
    
    
    Severity: Minor
    Found in eulxml/forms/xmlobject.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 method is_valid. (10)
    Open

        def is_valid(self):
            """Returns True if this form and all subforms (if any) are valid.
    
            If all standard form-validation tests pass, uses :class:`~eulxml.xmlmap.XmlObject`
            validation methods to check for schema-validity (if a schema is associated)
    Severity: Minor
    Found in eulxml/forms/xmlobject.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 method update_instance. (10)
    Open

        def update_instance(self):
            for form in getattr(self, 'deleted_forms', []):
                # update_instance may be called multiple times - instance can only
                # be removed the first time, so don't consider it an error if it's not present
                if form.instance in self.instances:
    Severity: Minor
    Found in eulxml/forms/xmlobject.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 xmlobjectform_factory. (9)
    Open

    def xmlobjectform_factory(model, form=XmlObjectForm, fields=None, exclude=None,
                              widgets=None, max_num=None, label=None, can_delete=True,
                              extra=None, can_order=False):
        """Dynamically generate a new :class:`XmlObjectForm` class using the
        specified :class:`eulxml.xmlmap.XmlObject` class.
    Severity: Minor
    Found in eulxml/forms/xmlobject.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 method _html_output. (8)
    Open

        def _html_output(self, normal_row, error_row, row_ender,  help_text_html, errors_on_separate_row):
            """Extend BaseForm's helper function for outputting HTML. Used by as_table(), as_ul(), as_p().
    
            Combines the HTML version of the main form's fields with the HTML content
            for any subforms.
    Severity: Minor
    Found in eulxml/forms/xmlobject.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 _collect_fields. (6)
    Open

    def _collect_fields(field_parts_list, include_parents):
        """utility function to enable recursion in _parse_field_list()"""
        fields = []
        subpart_lists = defaultdict(list)
    
    
    Severity: Minor
    Found in eulxml/forms/xmlobject.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 method _init_subforms. (6)
    Open

        def _init_subforms(self, data=None, prefix=None):
            # initialize each subform class with the appropriate model instance and data
            self.subforms = SortedDict()    # create as sorted dictionary to preserve order
            for name, subform in six.iteritems(self.__class__.subforms):
                # instantiate the new form with the current field as instance, if available
    Severity: Minor
    Found in eulxml/forms/xmlobject.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 __new__ has a Cognitive Complexity of 13 (exceeds 5 allowed). Consider refactoring.
    Open

        def __new__(cls, name, bases, attrs):
            # let django do all the work of finding declared/inherited fields
            fields = [(field_name, attrs.pop(field_name)) for field_name, obj in list(six.iteritems(attrs)) if isinstance(obj, Field)]
            for base in bases[::-1]:
                    if hasattr(base, 'declared_fields'):
    Severity: Minor
    Found in eulxml/forms/xmlobject.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

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

        def _init_subforms(self, data=None, prefix=None):
            # initialize each subform class with the appropriate model instance and data
            self.subforms = SortedDict()    # create as sorted dictionary to preserve order
            for name, subform in six.iteritems(self.__class__.subforms):
                # instantiate the new form with the current field as instance, if available
    Severity: Minor
    Found in eulxml/forms/xmlobject.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

    Function xmlobjectform_factory has 10 arguments (exceeds 4 allowed). Consider refactoring.
    Open

    def xmlobjectform_factory(model, form=XmlObjectForm, fields=None, exclude=None,
    Severity: Major
    Found in eulxml/forms/xmlobject.py - About 1 hr to fix

      Function is_valid has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring.
      Open

          def is_valid(self):
              """Returns True if this form and all subforms (if any) are valid.
      
              If all standard form-validation tests pass, uses :class:`~eulxml.xmlmap.XmlObject`
              validation methods to check for schema-validity (if a schema is associated)
      Severity: Minor
      Found in eulxml/forms/xmlobject.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

      Function formfields_for_xmlobject has 8 arguments (exceeds 4 allowed). Consider refactoring.
      Open

      def formfields_for_xmlobject(model, fields=None, exclude=None, widgets=None, options=None,
      Severity: Major
      Found in eulxml/forms/xmlobject.py - About 1 hr to fix

        Function _collect_fields has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
        Open

        def _collect_fields(field_parts_list, include_parents):
            """utility function to enable recursion in _parse_field_list()"""
            fields = []
            subpart_lists = defaultdict(list)
        
        
        Severity: Minor
        Found in eulxml/forms/xmlobject.py - About 55 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

        Function _html_output has a Cognitive Complexity of 9 (exceeds 5 allowed). Consider refactoring.
        Open

            def _html_output(self, normal_row, error_row, row_ender,  help_text_html, errors_on_separate_row):
                """Extend BaseForm's helper function for outputting HTML. Used by as_table(), as_ul(), as_p().
        
                Combines the HTML version of the main form's fields with the HTML content
                for any subforms.
        Severity: Minor
        Found in eulxml/forms/xmlobject.py - About 55 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

        Function __init__ has 6 arguments (exceeds 4 allowed). Consider refactoring.
        Open

            def __init__(self, formclass=None, label=None, can_delete=True, can_order=False,
        Severity: Minor
        Found in eulxml/forms/xmlobject.py - About 45 mins to fix

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

          def xmlobjectform_factory(model, form=XmlObjectForm, fields=None, exclude=None,
                                    widgets=None, max_num=None, label=None, can_delete=True,
                                    extra=None, can_order=False):
              """Dynamically generate a new :class:`XmlObjectForm` class using the
              specified :class:`eulxml.xmlmap.XmlObject` class.
          Severity: Minor
          Found in eulxml/forms/xmlobject.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

          Function _html_output has 5 arguments (exceeds 4 allowed). Consider refactoring.
          Open

              def _html_output(self, normal_row, error_row, row_ender,  help_text_html, errors_on_separate_row):
          Severity: Minor
          Found in eulxml/forms/xmlobject.py - About 35 mins to fix

            Function __init__ has 5 arguments (exceeds 4 allowed). Consider refactoring.
            Open

                def __init__(self, data=None, instance=None, prefix=None, initial={}, **kwargs):
            Severity: Minor
            Found in eulxml/forms/xmlobject.py - About 35 mins to fix

              Function _html_subform_output has 5 arguments (exceeds 4 allowed). Consider refactoring.
              Open

                  def _html_subform_output(self, subform=None, name=None, gen_html=None, content=None,
              Severity: Minor
              Found in eulxml/forms/xmlobject.py - About 35 mins to fix

                Function _init_formsets has a Cognitive Complexity of 7 (exceeds 5 allowed). Consider refactoring.
                Open

                    def _init_formsets(self, data=None, prefix=None):
                        self.formsets = {}
                        for name, formset in six.iteritems(self.__class__.formsets):
                            if self.instance is not None:
                                subinstances = getattr(self.instance, name, None)
                Severity: Minor
                Found in eulxml/forms/xmlobject.py - About 35 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

                TODO found
                Open

                        # TODO: other list variants
                Severity: Minor
                Found in eulxml/forms/xmlobject.py by fixme

                FIXME found
                Open

                                data.update(node_data)   # FIXME: fields/exclude
                Severity: Minor
                Found in eulxml/forms/xmlobject.py by fixme

                FIXME found
                Open

                                # FIXME: pass can_delete, can_delete from subformfield to formset?
                Severity: Minor
                Found in eulxml/forms/xmlobject.py by fixme

                FIXME found
                Open

                            # FIXME: how to properly do non-required choice field?
                Severity: Minor
                Found in eulxml/forms/xmlobject.py by fixme

                FIXME found
                Open

                            # FIXME: is this backwards? should initial data override data from instance?
                Severity: Minor
                Found in eulxml/forms/xmlobject.py by fixme

                TODO found
                Open

                                # TODO: add an empty_label option (like django ModelChoiceField)
                Severity: Minor
                Found in eulxml/forms/xmlobject.py by fixme

                FIXME found
                Open

                                data.update(node_data)   # FIXME: fields/exclude
                Severity: Minor
                Found in eulxml/forms/xmlobject.py by fixme

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

                        ordered_fields = SortedDict(
                            [(field_order[key], formfields[field_order[key]]) for key in sorted(field_order.keys())
                                                                if field_order[key] in formfields ]
                Severity: Major
                Found in eulxml/forms/xmlobject.py and 2 other locations - About 2 hrs to fix
                eulxml/forms/xmlobject.py on lines 306..308
                eulxml/forms/xmlobject.py on lines 310..312

                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 60.

                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 3 locations. Consider refactoring.
                Open

                        ordered_formsets = SortedDict(
                            [(field_order[key], formsets[field_order[key]]) for key in sorted(field_order.keys())
                                                                if field_order[key] in formsets ]
                Severity: Major
                Found in eulxml/forms/xmlobject.py and 2 other locations - About 2 hrs to fix
                eulxml/forms/xmlobject.py on lines 302..304
                eulxml/forms/xmlobject.py on lines 306..308

                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 60.

                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 3 locations. Consider refactoring.
                Open

                        ordered_subforms = SortedDict(
                            [(field_order[key], subforms[field_order[key]]) for key in sorted(field_order.keys())
                                                                if field_order[key] in subforms ]
                Severity: Major
                Found in eulxml/forms/xmlobject.py and 2 other locations - About 2 hrs to fix
                eulxml/forms/xmlobject.py on lines 302..304
                eulxml/forms/xmlobject.py on lines 310..312

                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 60.

                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 isinstance(self.fields, ParsedFieldList):
                            self.parsed_fields = self.fields
                        elif self.fields is not None:
                            self.parsed_fields = _parse_field_list(self.fields, include_parents=True)
                Severity: Major
                Found in eulxml/forms/xmlobject.py and 1 other location - About 2 hrs to fix
                eulxml/forms/xmlobject.py on lines 106..109

                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 50.

                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 isinstance(self.exclude, ParsedFieldList):
                            self.parsed_exclude = self.exclude
                        elif self.exclude is not None:
                            self.parsed_exclude = _parse_field_list(self.exclude, include_parents=False)
                Severity: Major
                Found in eulxml/forms/xmlobject.py and 1 other location - About 2 hrs to fix
                eulxml/forms/xmlobject.py on lines 100..103

                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 50.

                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 isinstance(fields, ParsedFieldList):
                        fieldlist = fields
                    elif fields is not None:
                        fieldlist = _parse_field_list(fields, include_parents=True)
                Severity: Major
                Found in eulxml/forms/xmlobject.py and 1 other location - About 1 hr to fix
                eulxml/forms/xmlobject.py on lines 156..159

                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 38.

                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 isinstance(fields, ParsedFieldList):
                        fieldlist = fields
                    elif exclude is not None:
                        excludelist = _parse_field_list(exclude, include_parents=False)
                Severity: Major
                Found in eulxml/forms/xmlobject.py and 1 other location - About 1 hr to fix
                eulxml/forms/xmlobject.py on lines 150..153

                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 38.

                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 3 locations. Consider refactoring.
                Open

                        ordered_fields = SortedDict((name, formfields[name])
                                                    for name in fieldlist.fields
                                                    if name in formfields)
                Severity: Major
                Found in eulxml/forms/xmlobject.py and 2 other locations - About 50 mins to fix
                eulxml/forms/xmlobject.py on lines 294..296
                eulxml/forms/xmlobject.py on lines 297..299

                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 36.

                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 3 locations. Consider refactoring.
                Open

                        ordered_formsets = SortedDict((name, formsets[name])
                                                      for name in fieldlist.fields
                                                      if name in formsets)
                Severity: Major
                Found in eulxml/forms/xmlobject.py and 2 other locations - About 50 mins to fix
                eulxml/forms/xmlobject.py on lines 291..293
                eulxml/forms/xmlobject.py on lines 294..296

                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 36.

                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 3 locations. Consider refactoring.
                Open

                        ordered_subforms = SortedDict((name, subforms[name])
                                                      for name in fieldlist.fields
                                                      if name in subforms)
                Severity: Major
                Found in eulxml/forms/xmlobject.py and 2 other locations - About 50 mins to fix
                eulxml/forms/xmlobject.py on lines 291..293
                eulxml/forms/xmlobject.py on lines 297..299

                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 36.

                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

                There are no issues that match your filters.

                Category
                Status