Similar blocks of code found in 2 locations. Consider refactoring.
self.podcast = get_object_or_404(
(Podcast.objects.prefetch_related("episodes", "episodes").prefetch_related("subscribers", "subscribers"))
.annotate(num_episodes=Count("episodes"))
.annotate(downloaded_episodes=Count(Case(When(episodes__downloaded__isnull=False, then=1))))
.annotate(last_episode_date=Max("episodes__published")),
Similar blocks of code found in 2 locations. Consider refactoring.
Podcast.objects.prefetch_related("subscribers", "subscribers")
.prefetch_related("followers", "followers")
.annotate(num_episodes=Count("episodes"))
.annotate(downloaded_episodes=Count(Case(When(episodes__downloaded__isnull=False, then=1))))
.annotate(last_episode_date=Max("episodes__published"))
File podcast.py
has 261 lines of code (exceeds 250 allowed). Consider refactoring.
import logging
from urllib.parse import urlencode, urlparse, urlunparse
import requests
from actstream import action
Similar blocks of code found in 2 locations. Consider refactoring.
storage_directory = models.CharField(
null=False,
blank=False,
max_length=255,
default=STORAGE_DIRECTORY,
Similar blocks of code found in 2 locations. Consider refactoring.
naming_scheme = models.CharField(
null=False,
blank=False,
max_length=255,
default=DEFAULT_NAMING_SCHEME,
Similar blocks of code found in 2 locations. Consider refactoring.
@action(detail=True, renderer_classes=[renderers.StaticHTMLRenderer])
def shownotes(self, request, *args, **kwargs):
episode = self.get_object()
return Response(episode.shownotes)
Similar blocks of code found in 2 locations. Consider refactoring.
@action(detail=True, renderer_classes=[renderers.StaticHTMLRenderer])
def summary(self, request, *args, **kwargs):
podcast = self.get_object()
return Response(podcast.summary_p)
Function __iter__
has a Cognitive Complexity of 23 (exceeds 18 allowed). Consider refactoring.
def __iter__(self, **kwargs):
allowed_domains = kwargs.pop("allowed_domains", [])
for token in Filter.__iter__(self):
if token["type"] in ["StartTag", "EmptyTag"] and token["data"]:
data_alt = None
Function create_default_settings
has 6 arguments (exceeds 4 allowed). Consider refactoring.
def create_default_settings(
Function update
has 6 arguments (exceeds 4 allowed). Consider refactoring.
def update(
Avoid deeply nested control flow statements.
if data_alt:
token["data"][(None, "data-alt")] = data_alt
yield token
Function queue_download_task
has 5 arguments (exceeds 4 allowed). Consider refactoring.
def queue_download_task(
Function __init__
has 5 arguments (exceeds 4 allowed). Consider refactoring.
def __init__(self, verbose_name=None, name=None, min_value=None, max_value=None, **kwargs):
Avoid too many return
statements within this function.
return