src/districts/management/commands/import_districts.py
import logging from django.core.management import BaseCommand from associations.management.commands.import_associations import add_default_arguments as association_argumentsfrom associations.models import Associationfrom base import http, parsingfrom base.middleware import envfrom base.models import Valuefrom districts.models import District LOGGER = logging.getLogger("hbscorez") def add_default_arguments(parser): association_arguments(parser) parser.add_argument("--districts", "-d", nargs="+", type=int, metavar="orgID", help="IDs of Districts.") class Command(BaseCommand): def add_arguments(self, parser): add_default_arguments(parser) def handle(self, *args, **options): env.UPDATING.set_value(Value.TRUE) options["processed_districts"] = set() try: import_districts(options) except Exception: LOGGER.exception("Could not import Districts") env.UPDATING.set_value(Value.FALSE) def import_districts(options): associations_filters = {} if options["associations"]: associations_filters["bhv_id__in"] = options["associations"] associations = Association.objects.filter(**associations_filters) for association in associations: try: scrape_districs(association, options) except Exception: LOGGER.exception("Could not scrape Districts for Association %s", associations) def scrape_districs(association: Association, options): url = association.api_url() json = http.get_throttled(url) districts = parsing.parse_district_items(json) for bhv_id, name in districts.items(): try: scrape_district(int(bhv_id), name, association, options) except Exception: LOGGER.exception("Could not create District %s %s", bhv_id, name) Cyclomatic complexity is too high in function scrape_district. (8)
Function `scrape_district` has a Cognitive Complexity of 8 (exceeds 5 allowed). Consider refactoring.def scrape_district(bhv_id, name, association: Association, options): if options["districts"] and bhv_id not in options["districts"]: LOGGER.debug("SKIPPING District (options): %s %s", bhv_id, name) return district = District.objects.filter(bhv_id=bhv_id).first() if district is None: district = District.objects.create(name=name, bhv_id=bhv_id) LOGGER.info("CREATED District: %s", district) if association not in district.associations.all(): LOGGER.info("ADDING District to Association: %s - %s", association, district) district.associations.add(association) if bhv_id in options["processed_districts"]: LOGGER.debug("SKIPPING District: %s (already processed)", district) return options["processed_districts"].add(bhv_id) updated = False if district.name != name: district.name = name updated = True if updated: district.save() LOGGER.info("UPDATED District: %s", district) else: LOGGER.debug("UNCHANGED District: %s", district)