def handle_noargs(self, **options): # Imports are here to avoid an import loop created when the Hansard # search indexes are checked from core.models import Person from scorecards.models import Category, Entry # create the category try: category = Category.objects.get(slug="hansard-appearances") except Category.DoesNotExist: raise ImproperlyConfigured( "Please create a scorecard category with the slug 'hansard-appearances'" ) # Find all the people we should score for people = Person.objects.all().is_politician() # How far back should we look for hansard appearances? duration_string = "six months" lower_limit = datetime.date.today() - datetime.timedelta(183) for person in people: # NOTE: We could certainly do all this in a single query. hansard_count = person.hansard_entries.filter( sitting__start_date__gte=lower_limit).count() try: entry = person.scorecard_entries.get(category=category) except Entry.DoesNotExist: entry = Entry(content_object=person, category=category) if hansard_count < 6: entry.score = -1 # deal with the various ways we need to phrase this if hansard_count == 0: entry.remark = "Has not spoken in parliament in the last %s" % ( duration_string) elif hansard_count == 1: entry.remark = "Only spoke once in parliament in the last %s" % ( duration_string) else: entry.remark = "Hardly ever spoke in parliament, only %u times in the last %s" % ( hansard_count, duration_string) elif hansard_count < 60: entry.score = 0 entry.remark = "Sometimes spoke in parliament, %u times in the last %s" % ( hansard_count, duration_string) else: entry.score = 1 entry.remark = "Frequently spoke in parliament, %u times in the last %s" % ( hansard_count, duration_string) entry.date = datetime.date.today() entry.save()
def handle_noargs(self, **options): # Imports are here to avoid an import loop created when the Hansard # search indexes are checked from core.models import Person from scorecards.models import Category, Entry # create the category try: category = Category.objects.get(slug="contactability") except Category.DoesNotExist: raise ImproperlyConfigured( "Please create a scorecard category with the slug 'contactability'" ) # Find all the people we should score for # TODO - limit to just some people (mps, candidates, etc) people = Person.objects.all() for person in people: # count the number of different forms of contact they have - sum them up # manually as trying to do the distinct(kind) on the queryset was overly # complicated. contact_kinds = {} for c in person.contacts.all(): contact_kinds[c.kind.slug] = 1 contact_count = len(contact_kinds.keys()) # turn the count into a score score = -1 if contact_count >= 3: score = 0 if contact_count >= 4: score = 1 try: entry = person.scorecard_entries.get(category=category) except Entry.DoesNotExist: entry = Entry(content_object=person, category=category) entry.date = datetime.date.today() entry.score = score if score == -1: entry.remark = "There are few ways to reach this person" elif score == 0: entry.remark = "There are some ways to reach this person" else: entry.remark = "There are many ways to reach this person" entry.save()
def handle_noargs(self, **options): # Imports are here to avoid an import loop created when the Hansard # search indexes are checked from core.models import Person from scorecards.models import Category, Entry # create the category try: category = Category.objects.get(slug="hansard-appearances") except Category.DoesNotExist: raise ImproperlyConfigured("Please create a scorecard category with the slug 'hansard-appearances'") # Find all the people we should score for people = Person.objects.all().is_mp() # How far back should we look for hansard appearances? duration_string = "six months" lower_limit = datetime.date.today() - datetime.timedelta(183) for person in people: # NOTE: We could certainly do all this in a single query. hansard_count = person.hansard_entries.filter(sitting__start_date__gte=lower_limit).count() try: entry = person.scorecard_entries.get(category=category) except Entry.DoesNotExist: entry = Entry(content_object=person, category=category) if hansard_count < 6: entry.score = -1 # deal with the various ways we need to phrase this if hansard_count == 0: entry.remark = "Has not spoken in parliament in the last %s" % ( duration_string ) elif hansard_count == 1: entry.remark = "Only spoke once in parliament in the last %s" % ( duration_string ) else: entry.remark = "Hardly ever spoke in parliament, only %u times in the last %s" % ( hansard_count, duration_string ) elif hansard_count < 60: entry.score = 0 entry.remark = "Sometimes spoke in parliament, %u times in the last %s" % ( hansard_count, duration_string ) else: entry.score = 1 entry.remark = "Frequently spoke in parliament, %u times in the last %s" % ( hansard_count, duration_string ) entry.date = datetime.date.today() entry.save()
def handle_noargs(self, **options): # Imports are here to avoid an import loop created when the Hansard # search indexes are checked from core.models import Person from scorecards.models import Category, Entry # create the category try: category = Category.objects.get(slug = "contactability") except Category.DoesNotExist: raise ImproperlyConfigured("Please create a scorecard category with the slug 'contactability'") # Find all the people we should score for # TODO - limit to just some people (mps, candidates, etc) people = Person.objects.all() for person in people: # count the number of different forms of contact they have - sum them up # manually as trying to do the distinct(kind) on the queryset was overly # complicated. contact_kinds = {} for c in person.contacts.all(): contact_kinds[c.kind.slug] = 1 contact_count = len( contact_kinds.keys() ) # turn the count into a score score = -1 if contact_count >= 3: score = 0 if contact_count >= 4: score = 1 try: entry = person.scorecard_entries.get( category=category ) except Entry.DoesNotExist: entry = Entry(content_object=person, category=category ) entry.date = datetime.date.today() entry.score = score if score == -1: entry.remark = "There are few ways to reach this person" elif score == 0: entry.remark = "There are some ways to reach this person" else: entry.remark = "There are many ways to reach this person" entry.save()