divio/django-cms

View on GitHub
cms/utils/plugins.py

Summary

Maintainability
F
3 days
Test Coverage

Function assign_plugins has a Cognitive Complexity of 23 (exceeds 5 allowed). Consider refactoring.
Open

def assign_plugins(request, placeholders, template=None, lang=None, is_fallback=False):
    """
    Fetch all plugins for the given ``placeholders`` and
    cast them down to the concrete instances in one query
    per type.
Severity: Minor
Found in cms/utils/plugins.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

Function downcast_plugins has a Cognitive Complexity of 21 (exceeds 5 allowed). Consider refactoring.
Open

def downcast_plugins(plugins,
                     placeholders=None, select_placeholder=False, request=None):
    plugin_types_map = defaultdict(list)
    plugin_lookup = {}
    plugin_ids = []
Severity: Minor
Found in cms/utils/plugins.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

File plugins.py has 278 lines of code (exceeds 250 allowed). Consider refactoring.
Open

from collections import defaultdict
from copy import deepcopy
from functools import lru_cache
from itertools import groupby, starmap
from operator import attrgetter, itemgetter
Severity: Minor
Found in cms/utils/plugins.py - About 2 hrs to fix

    Function copy_plugins_to_placeholder has a Cognitive Complexity of 11 (exceeds 5 allowed). Consider refactoring.
    Open

    def copy_plugins_to_placeholder(plugins, placeholder, language=None, root_plugin=None):
        plugin_pairs = []
        plugins_by_id = {}
    
        for source_plugin in get_bound_plugins(plugins):
    Severity: Minor
    Found in cms/utils/plugins.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 has_reached_plugin_limit has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring.
    Open

    def has_reached_plugin_limit(placeholder, plugin_type, language, template=None, parent_plugin=None):
        """
        Checks if placeholder has reached it's global plugin limit,
        if not then it checks if it has reached it's plugin_type limit.
        """
    Severity: Minor
    Found in cms/utils/plugins.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 get_bound_plugins has a Cognitive Complexity of 10 (exceeds 5 allowed). Consider refactoring.
    Open

    def get_bound_plugins(plugins):
        get_plugin = plugin_pool.get_plugin
        plugin_types_map = defaultdict(list)
        plugin_ids = []
        plugin_lookup = {}
    Severity: Minor
    Found in cms/utils/plugins.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

                        if fallback_plugins:
                            fallbacks[placeholder.pk] += fallback_plugins
                            break
        # These placeholders have no fallback
        non_fallback_phs = [ph for ph in placeholders if ph.pk not in fallbacks]
    Severity: Major
    Found in cms/utils/plugins.py - About 45 mins to fix

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

      def has_reached_plugin_limit(placeholder, plugin_type, language, template=None, parent_plugin=None):
      Severity: Minor
      Found in cms/utils/plugins.py - About 35 mins to fix

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

        def assign_plugins(request, placeholders, template=None, lang=None, is_fallback=False):
        Severity: Minor
        Found in cms/utils/plugins.py - About 35 mins to fix

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

          def create_default_plugins(request, placeholders, template, lang):
              """
              Create all default plugins for the given ``placeholders`` if they have
              a "default_plugins" configuration value in settings.
              return all plugins, children, grandchildren (etc.) created
          Severity: Minor
          Found in cms/utils/plugins.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

          Function reorder_plugins has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
          Open

          def reorder_plugins(placeholder, parent_id, language, order=None):
              """
              Reorder the plugins according the order parameter
          
              :param placeholder: placeholder instance which contains the given plugins
          Severity: Minor
          Found in cms/utils/plugins.py - About 25 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 get_plugin_restrictions has a Cognitive Complexity of 6 (exceeds 5 allowed). Consider refactoring.
          Open

          def get_plugin_restrictions(plugin, page=None, restrictions_cache=None):
              if restrictions_cache is None:
                  restrictions_cache = {}
          
              plugin_type = plugin.plugin_type
          Severity: Minor
          Found in cms/utils/plugins.py - About 25 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

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

              for plugin in plugins:
                  parent_not_available = (not plugin.parent_id or plugin.parent_id not in plugin_ids)
                  # The plugin either has no parent or needs to have a non-ghost parent
                  valid_parent = (parent_not_available or plugin.parent_id in plugin_lookup)
          
          
          Severity: Major
          Found in cms/utils/plugins.py and 1 other location - About 4 hrs to fix
          cms/utils/plugins.py on lines 295..301

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

          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

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

              for plugin in plugins:
                  parent_not_available = (not plugin.parent_id or plugin.parent_id not in plugin_ids)
                  # The plugin either has no parent or needs to have a non-ghost parent
                  valid_parent = (parent_not_available or plugin.parent_id in plugin_lookup)
          
          
          Severity: Major
          Found in cms/utils/plugins.py and 1 other location - About 4 hrs to fix
          cms/utils/plugins.py on lines 250..256

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

          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

              try:
                  child_classes = children_cache[plugin_type]
              except KeyError:
                  child_classes = plugin_class.get_child_classes(
                      slot=plugin.placeholder.slot,
          Severity: Major
          Found in cms/utils/plugins.py and 1 other location - About 1 hr to fix
          cms/utils/plugins.py on lines 159..163

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

          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

              try:
                  parent_classes = parents_cache[plugin_type]
              except KeyError:
                  parent_classes = plugin_class.get_parent_classes(
                      slot=plugin.placeholder.slot,
          Severity: Major
          Found in cms/utils/plugins.py and 1 other location - About 1 hr to fix
          cms/utils/plugins.py on lines 171..175

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

          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

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

              for plugin in plugins:
                  # Keep track of the plugin ids we've received
                  plugin_ids.append(plugin.pk)
                  plugin_types_map[plugin.plugin_type].append(plugin.pk)
          Severity: Minor
          Found in cms/utils/plugins.py and 1 other location - About 50 mins to fix
          cms/utils/plugins.py on lines 237..239

          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

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

              for plugin in plugins:
                  plugin_ids.append(plugin.pk)
                  plugin_types_map[plugin.plugin_type].append(plugin.pk)
          Severity: Minor
          Found in cms/utils/plugins.py and 1 other location - About 50 mins to fix
          cms/utils/plugins.py on lines 266..269

          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