def test_find_name_prefix(self): name = 'Ard van der Steur' prefix, pos = Person.find_prefix(name) self.assertEqual(prefix, 'van der') name = 'Ard van derSteur' prefix, pos = Person.find_prefix(name) self.assertEqual(prefix, 'van') name = 'Ard van de Steur' prefix, pos = Person.find_prefix(name) self.assertEqual(prefix, 'van de') name = 'Ard van Steur' prefix, pos = Person.find_prefix(name) self.assertEqual(prefix, 'van') name = 'Gerard \'t Hooft' prefix, pos = Person.find_prefix(name) self.assertEqual(prefix, '\'t') name = 'Jan Peter Balkenende' prefix, pos = Person.find_prefix(name) self.assertEqual(prefix, '') name = 'Boris van der Ham' prefix, pos = Person.find_prefix(name) self.assertEqual(prefix, 'van der') name = 'van der Ham' prefix, pos = Person.find_prefix(name) self.assertEqual(prefix, 'van der') name = 'van derHam' prefix, pos = Person.find_prefix(name) self.assertEqual(prefix, 'van') name = 'von Martels' prefix, pos = Person.find_prefix(name) self.assertEqual(prefix, 'von')
def handle(self, *args, **options): Person.update_persons_all('nl') openkamer.parliament.update_initials() parties = PoliticalParty.objects.all() for party in parties: party.update_info(language='nl')
def save(self): data = self.cleaned_data person = Person( first_name=data['first_name'], last_name=data['last_name'], username=data['username'], email=data['email'] ) person.set_password(data['password']) person.save() # Send confirmation email TemplateEmail( subject='Registration', from_email='*****@*****.**', to_emails=person.email, template='email/confirmation_email.html', context={ 'user': person, 'activation_link': absreverse('person:confirmation', kwargs={'key': person.confirmation}) } ).send() return person
def signup(request): data = request.POST if 'username' not in data or 'password' not in data or 'email' not in data or data[ 'username'] == '' or data['password'] == '' or data['email'] == '': return utils.createError('Invalid input form.') _username = data.get('username', '') _email = data.get('email', '') _password = data.get('password', '') #--validation-- if Person.objects.filter(username=_username): return utils.createError('Username has been taken.') if Person.objects.filter(email=_email): return utils.createError('Email has been taken.') if len(_password) < 8: return utils.createError('Length of password must be at least 8.') #--create person-- _salt = utils.getRandomString() _hashed_password = utils.hashPassword(_password, _salt) person = Person(username=_username, salt=_salt, password=_hashed_password, email=_email) person.save() return utils.createResponse({ 'action': 'Sign up successfully', 'username': person.username, 'email': person.email })
def test_find_by_surname_initials(self): p_found = Person.find_surname_initials('Balkenende', 'J.P.') self.assertEqual(p_found, self.p1) p_found = Person.find_surname_initials('Balkenende', 'J.') self.assertEqual(p_found, self.p2) p_found = Person.find_surname_initials('Balkenende', '') self.assertEqual(p_found, None) p_found = Person.find_surname_initials('van der Steur', 'J.P.') self.assertEqual(p_found, None) p_found = Person.find_surname_initials('Koşer Kaya', 'F.') self.assertEqual(p_found, self.p5)
def create_person(self, data): fields_data, m2m_fields_data = self.split_data(data) person = Person(**fields_data) # person.full_clean() # full_clean called in save method person.save() for field_name, id_list in m2m_fields_data.items(): m2m_data = data.get(field_name) if m2m_data: getattr(person, field_name).set(id_list) return person
class CitationsTest(TestCase): def setUp(self): self.person1 = Person(full_name='João Carlos da Silva') self.person1.save() self.person2 = Person(full_name='Antonio da Silva') self.person2.save() self.person1_id = self.person1.pk self.person2_id = self.person2.pk citation2 = CitationName(person_id=self.person2_id, name='da Silva, A', default_name=True) citation2.save() def test_name_with_first_letters(self): result = name_with_first_letters(self.person1.full_name.split(), False) self.assertEqual(result, 'Silva, JC') result = name_with_first_letters(self.person1.full_name.split(), True) self.assertEqual(result, 'da Silva, JC') def test_names_without_last_name(self): result = names_without_last_name(self.person1.full_name.split(), False) self.assertEqual(result, 'Silva, João Carlos') result = names_without_last_name(self.person1.full_name.split(), True) self.assertEqual(result, 'da Silva, João Carlos') def test_first_name_and_first_letter(self): result = first_name_and_first_letter(self.person1.full_name.split(), False) self.assertEqual(result, 'Silva, João C') result = first_name_and_first_letter(self.person1.full_name.split(), True) self.assertEqual(result, 'da Silva, João C') def test_generate_citation_names(self): for person in Person.objects.all(): generate_citation_names(person) citation = CitationName.objects.filter(person_id=self.person1_id, default_name=True) self.assertEqual('Silva, JC', citation[0].name) citation = CitationName.objects.filter(person_id=self.person2_id, default_name=True) self.assertEqual('da Silva, A', citation[0].name) def test_citation_names(self): response = self.client.get(reverse('citation_names')) self.assertEqual(response.status_code, 302)
def setUp(self): self.person1 = Person(full_name='João Carlos da Silva') self.person1.save() self.person2 = Person(full_name='Antonio da Silva') self.person2.save() self.person1_id = self.person1.pk self.person2_id = self.person2.pk citation2 = CitationName(person_id=self.person2_id, name='da Silva, A', default_name=True) citation2.save()
def create_parliament_and_government(): PoliticalParty.objects.all().delete() PartyMember.objects.all().delete() ParliamentMember.objects.all().delete() create_parties(update_votes=False) create_governments() create_parliament_members(update_votes=False) for party in PoliticalParty.objects.all(): party.set_current_parliament_seats() set_party_votes_derived_info() set_individual_votes_derived_info() Person.update_persons_all(language='nl') stats.models.update_all()
def handle(self, *args, **kwargs): filename = kwargs['filename'] with open(filename, encoding='utf-8') as f: models = json.load(f) # Verify all data before Insertion, Fail if any one data is corrupted record_count = 0 for m in models: record_count = record_count + 1 valid_status = person_validation.validate_add(m) if not valid_status[0]: raise ValidationError(valid_status[1]) for person in models: person_data = person.get('data')[0] enabled = person_data.get('enabled') guid = person_data.get('guid') first_name = person.get('first_name') last_name = person.get('last_name') city = person.get('city') p_id = person.get('id') person_data_model_obj = PersonData(enabled=enabled, guid=guid) save_flag = True try: person_data_model_obj.save() except ValueError as e: save_flag = False person_data_model_obj.delete() self.stderr.write( 'PersonData Creation in DB Failed {id = ' + str(p_id) + '}', e) try: if save_flag: person_model = Person(id=p_id, first_name=first_name, last_name=last_name, city=city, data=person_data_model_obj) person_model.save(force_insert=True) except IntegrityError as e: person_data_model_obj.delete() self.stderr.write( 'Record Creation in DB Failed {id = ' + str(p_id) + '}', e) except ValueError as e: person_data_model_obj.delete() self.stderr.write( 'Record Creation in DB Failed {id = ' + str(p_id) + '}', e)
def set_district(request): try: state = request.POST["state"] if state != "XX" and state not in us.statenames: raise Exception() district = int(request.POST["district"]) except: return HttpResponseBadRequest() # Who represents? from person.models import Person mocs = None if state != "XX": mocs = [p.id for p in Person.from_state_and_district(state, district)] # Form response. response = HttpResponse( json.dumps({ "status": "ok", "mocs": mocs }), content_type="application/json") if request.user.is_authenticated: # Save to database. prof = request.user.userprofile() prof.congressionaldistrict = "%s%02d" % (state, district) prof.save() else: # Save in cookie. response.set_cookie("cong_dist", json.dumps({ "state": state, "district": district }), max_age=60*60*24*21) return response
def test_chantal_nijkerken_de_haan(self): wikidata_id = 'Q19830701' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts(fullname, wikidata_item) self.assertEqual(forename, 'Chantal') self.assertEqual(surname, 'Nijkerken-de Haan')
def parse_name_surname_initials(name): name = remove_forename(name) name = name.replace(',', '') initials = find_initials(name) surname_prefix, pos = Person.find_prefix(name) surname = name.replace(surname_prefix, '').replace(initials, '').replace(',', '').strip() return initials, surname, surname_prefix
def create_travels(max_items=None): travels = TKApi.get_items(PersoonReis, max_items=max_items) logger.info('{} travels found.'.format(len(travels))) if len(travels) < 1000: logger.error( 'Only {} travels found. This is unexpected. Skip re-creating travels.' .format(len(travels))) Travel.objects.all().delete() TravelPersonPosition.objects.all().delete() for travel in travels: person = Person.find_surname_initials(travel.persoon.achternaam, travel.persoon.initialen) if person is None: logger.warning('No person found for travel: {}'.format(travel.id)) continue if travel.van is None or travel.tot_en_met is None: logger.warning('No date found for travel: {}'.format(travel.id)) continue Travel.objects.create( person=person, destination=travel.bestemming, purpose=travel.doel, paid_by=travel.betaald_door, date_begin=travel.van, date_end=travel.tot_en_met, )
def homepage_summary(request): # parse & validate parameters try: state = request.GET["district"][0:2] district = int(request.GET["district"][2:]) if state not in statenames: raise Exception() except: return None from django.contrib.humanize.templatetags.humanize import ordinal # view people = Person.from_state_and_district(state, district) feeds = [p.get_feed() for p in people] events = Feed.get_events_for(feeds, 6) from events.templatetags.events_utils import render_event for i in range(len(events)): events[i] = render_event(events[i], feeds) if not isinstance(events[i]["date"], str): events[i]["date"] = events[i]["date"].strftime('%B %d, %Y') # can't JSON-serialize a datetime anyway, TODO handle date_has_no_time for k in list(events[i]): # remove anything else in case it is not JSON-serializable if k not in ('type', 'date', 'title', 'body_html', 'url'): del events[i][k] # form output return { "state": state, "district": district, "state_name": statenames[state], "district_ordinal": ordinal(district), "reps": [ { "link": p.get_absolute_url(), "name": p.name_and_title(), "title": p.role.get_description(), "photo": p.get_photo_url() } for p in people], "events": events, }
def set_district(request): try: state = request.POST["state"] if state != "XX" and state not in us.statenames: raise Exception() district = int(request.POST["district"]) except: return HttpResponseBadRequest() # Who represents? from person.models import Person mocs = None if state != "XX": mocs = [p.id for p in Person.from_state_and_district(state, district)] # Form response. response = HttpResponse( json.dumps({ "status": "ok", "mocs": mocs }), content_type="application/json") if request.user.is_authenticated(): # Save to database. prof = request.user.userprofile() prof.congressionaldistrict = "%s%02d" % (state, district) prof.save() else: # Save in cookie. response.set_cookie("cong_dist", json.dumps({ "state": state, "district": district }), max_age=60*60*24*21) return response
def get_person(document: Document, tk_person: TKPersoon = None, name: str = None): person = None if not tk_person: logger.warning('No document submitter found for document: {}'.format(document.document_id)) else: persons = Person.objects.filter(tk_id=tk_person.id) if len(persons): person = persons[0] if person is None: logger.warning('No person found for tk_persoon: {} ({})'.format(tk_person.achternaam, tk_person.initialen)) if person is None: if tk_person and tk_person.achternaam and tk_person.initialen: surname = tk_person.achternaam surname_prefix = tk_person.tussenvoegsel initials = tk_person.initialen else: initials, surname, surname_prefix = parse_name_surname_initials(name) person = Person.find_surname_initials(surname=surname, initials=initials) if not person: logger.warning('Cannot find person: {} ({}). Creating new person!'.format(surname, initials)) person = Person.objects.create(surname=surname, surname_prefix=surname_prefix, initials=initials) return person
def test_find_person_no_results_jean(self): person = Person(forename='Jean Baptiste Anne', surname_prefix='de', surname='Gerlache de Biourge', initials='J.B.A.') tkperson = openkamer.parliament.find_tkapi_person(person) self.assertIsNone(tkperson)
def test_find_no_results(self): person = Person(forename='Willem Caspar', surname_prefix='de', surname='Jonge', initials='J.') tkperson = openkamer.parliament.find_tkapi_person(person) self.assertIsNone(tkperson)
def get_or_create_person(wikidata_id, fullname='', wikidata_item=None, add_initials=False): persons = Person.objects.filter(wikidata_id=wikidata_id) if not wikidata_item: wikidata_item = wikidata.WikidataItem(wikidata_id) if persons.exists(): person = persons[0] else: if not fullname: fullname = wikidata_item.get_label(language='nl') forename, surname, surname_prefix = Person.get_name_parts( fullname, wikidata_item) person = Person.objects.create(forename=forename, surname=surname, surname_prefix=surname_prefix, wikidata_id=wikidata_id) person.update_info(language='nl', wikidata_item=wikidata_item) person.save() if add_initials and person.parlement_and_politiek_id: person.initials = scraper.persons.get_initials( person.parlement_and_politiek_id) person.save() assert person.wikidata_id == wikidata_id party_members = PartyMember.objects.filter(person=person) if not party_members.exists(): create_party_members_for_person(person) return person
def create_person(self): person = Person() person.sex = self.__generate_sex() person.birth_date = self.__generate_date() person.first_name = self.__generate_name(person.sex) person.last_name = self.__generate_surname(person.sex) person.pesel = self.__generate_pesel(person.birth_date, person.sex) person.email = self.__generate_email(person.first_name, person.last_name) person.phone = self.__generate_phone() person.password = self.__generate_password() logging.basicConfig(level=logging.DEBUG) logging.info( f"Created person {person.first_name} {person.last_name} with pesel {person.pesel}" ) return person
def test_sjoerd_sjoerdsma(self): wikidata_id = 'Q516335' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts(fullname, wikidata_item) self.assertEqual(forename, 'Sjoerd') self.assertEqual(surname, 'Sjoerdsma') self.assertEqual(surname_prefix, '')
def test_chantal_nijkerken_de_haan(self): wikidata_id = 'Q19830701' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts( fullname, wikidata_item) self.assertEqual(forename, 'Chantal') self.assertEqual(surname, 'Nijkerken-de Haan')
def test_fatma_koser_kaya(self): wikidata_id = 'Q467610' # Fatma Koşer Kaya wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts(fullname, wikidata_item) self.assertEqual(forename, 'Fatma') self.assertEqual(surname, 'Koşer Kaya') self.assertEqual(surname_prefix, '')
def test_jan_peter_balkenende(self): wikidata_id = 'Q133386' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts(fullname, wikidata_item) self.assertEqual(forename, 'Jan Peter') self.assertEqual(surname, 'Balkenende') self.assertEqual(surname_prefix, '')
def test_leendert_de_lange(self): wikidata_id = 'Q19839084' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts(fullname, wikidata_item) self.assertEqual(forename, 'Leendert') self.assertEqual(surname_prefix, 'de') self.assertEqual(surname, 'Lange')
def test_jan_kees_de_jager(self): wikidata_id = 'Q1666631' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts(fullname, wikidata_item) self.assertEqual(forename, 'Jan Kees') self.assertEqual(surname, 'Jager') self.assertEqual(surname_prefix, 'de')
def test_sybrand_van_haersma_buma(self): wikidata_id = 'Q377266' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts(fullname, wikidata_item) self.assertEqual(forename, 'Sybrand') self.assertEqual(surname, 'Haersma Buma') self.assertEqual(surname_prefix, 'van')
def test_person_str(): p = Person( first_name='a', last_name='b', birth_date='1969-01-01', ) assert str(p) == 'a b 1969-01-01'
def test_melanie_schultz_van_hagen(self): wikidata_id = 'Q435886' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts( fullname, wikidata_item) self.assertEqual(forename, 'Melanie') self.assertEqual(surname_prefix, '') self.assertEqual(surname, 'Schultz van Haegen')
def render_event(self, eventid, feeds): if feeds: from person.models import Person my_reps = set() for f in feeds: try: my_reps.add(Person.from_feed(f)) except ValueError: pass # not a person-related feed my_reps = sorted(my_reps, key = lambda p : p.sortname) else: my_reps = [] # fetch the whole vote and our summary, and keep it cached with this object # because in email updates this object is held in memory for the duration of # sending out all email updates if not hasattr(self, "_cached_event_data"): oursummary = self.get_summary() all_votes = { vv.person: vv.option for vv in self.voters.select_related('person', 'option') } self._cached_event_data = [oursummary, all_votes] else: oursummary, all_votes = self._cached_event_data return { "type": "Vote", "date": self.created, "title": self.question, "url": self.get_absolute_url(), "body_text_template": """{{summary|safe}} {% for voter in voters %}{{voter.name|safe}}: {{voter.vote|safe}} {% endfor %} {% if oursummary %}{{oursummary.plain_text|truncatewords:120|safe}}{% endif %}""", "body_html_template": """<p>{{summary}}</p> {% for voter in voters %} <p><a href="{{SITE_ROOT}}{{voter.url}}">{{voter.name}}</a>: {{voter.vote}}</p> {% endfor %} {% if oursummary %}{{oursummary.as_html|truncatewords_html:120|safe}}{% endif %} """, "context": { "summary": self.summary(), "oursummary": oursummary, "voters": [ { "url": p.get_absolute_url(), "name": p.name_lastonly(), "vote": all_votes[p].value } for p in my_reps if p in all_votes ] if feeds != None else [] }, "thumbnail_url": self.get_thumbnail_url(), "large_thumbnail_url": self.get_absolute_url() + "/card", }
def test_sybrand_van_haersma_buma(self): wikidata_id = 'Q377266' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts( fullname, wikidata_item) self.assertEqual(forename, 'Sybrand') self.assertEqual(surname, 'Haersma Buma') self.assertEqual(surname_prefix, 'van')
def test_leendert_de_lange(self): wikidata_id = 'Q19839084' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts( fullname, wikidata_item) self.assertEqual(forename, 'Leendert') self.assertEqual(surname_prefix, 'de') self.assertEqual(surname, 'Lange')
def test_sjoerd_sjoerdsma(self): wikidata_id = 'Q516335' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts( fullname, wikidata_item) self.assertEqual(forename, 'Sjoerd') self.assertEqual(surname, 'Sjoerdsma') self.assertEqual(surname_prefix, '')
def test_jan_kees_de_jager(self): wikidata_id = 'Q1666631' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts( fullname, wikidata_item) self.assertEqual(forename, 'Jan Kees') self.assertEqual(surname, 'Jager') self.assertEqual(surname_prefix, 'de')
def test_jan_peter_balkenende(self): wikidata_id = 'Q133386' wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts( fullname, wikidata_item) self.assertEqual(forename, 'Jan Peter') self.assertEqual(surname, 'Balkenende') self.assertEqual(surname_prefix, '')
def test_fatma_koser_kaya(self): wikidata_id = 'Q467610' # Fatma Koşer Kaya wikidata_item = wikidata.WikidataItem(wikidata_id) fullname = wikidata_item.get_label() forename, surname, surname_prefix = Person.get_name_parts( fullname, wikidata_item) self.assertEqual(forename, 'Fatma') self.assertEqual(surname, 'Koşer Kaya') self.assertEqual(surname_prefix, '')
def main(): from person.models import Person with open("1.json") as jsonfile: json_data = json.load(jsonfile) PersonList = [] for dicobj in json_data: person = Person(volume=dicobj["volume"], postdate=dicobj["postdate"], gender=dicobj["gender"],idnum=dicobj["idnum"],city=dicobj["city"],dec=dicobj["dec"],image_urls=dicobj["image_urls"][0] ) PersonList.append(person) Person.objects.bulk_create(PersonList)
class AccessRestrictedView( UnifiView ): def __call__( self, request, *args, **kwargs ): """ Due to security concerns, do not overload this function or any of its subclass overrides. """ self.request = request self.args = args self.kwargs = kwargs if self.request.user.is_authenticated(): self.user = self.request.user try: self.person = Person.objects.get( user=self.user ) except Person.DoesNotExist: self.person = Person( user=self.user ) self.person.save() return self.allow( *args, **kwargs ) else: return self.deny() def deny( self ): client = Client( self.request ) if client.is_banned(): return HttpResponse( status=403 ) else: return self.dialog( title = "Not Authenticated", message = "Velkommen til UNIFI, du er ikke pålogget. " + \ "For å logge deg på benytt universitetets " + \ "innloggingsportal." ) def render( self, template_name, context ): context['person'] = self.person context['rules'] = rules return builtin_render( self.request, template_name, context )
def render_event(self, eventid, feeds): if feeds: from person.models import Person my_reps = set() for f in feeds: try: my_reps.add(Person.from_feed(f)) except ValueError: pass # not a person-related feed my_reps = sorted(my_reps, key = lambda p : p.sortname) else: my_reps = [] # fetch the whole vote and our summary, and keep it cached with this object # because in email updates this object is held in memory for the duration of # sending out all email updates if not hasattr(self, "_cached_event_data"): oursummary = self.get_summary() all_votes = { vv.person: vv.option for vv in self.voters.select_related('person', 'option') } self._cached_event_data = [oursummary, all_votes] else: oursummary, all_votes = self._cached_event_data return { "type": "Vote", "date": self.created, "title": self.question, "url": self.get_absolute_url(), "body_text_template": """{{summary|safe}} {% for voter in voters %}{{voter.name|safe}}: {{voter.vote|safe}} {% endfor %} {% if oursummary %}{{oursummary.plain_text|truncatewords:120|safe}}{% endif %}""", "body_html_template": """<p>{{summary}}</p> {% for voter in voters %} <p><a href="{{SITE_ROOT}}{{voter.url}}">{{voter.name}}</a>: {{voter.vote}}</p> {% endfor %} {% if oursummary %}{{oursummary.as_html|truncatewords_html:120|safe}}{% endif %} """, "context": { "summary": self.summary(), "oursummary": oursummary, "voters": [ { "url": p.get_absolute_url(), "name": p.name_lastonly(), "vote": all_votes[p].value } for p in my_reps if p in all_votes ] if feeds != None else [] }, "thumbnail_url": self.get_thumbnail_url(), }
def find(surname, initials='', date=None): person = Person.find_surname_initials(surname, initials) if date: members = ParliamentMember.find_at_date(person, date) else: members = ParliamentMember.objects.filter(person=person).order_by('-joined') if members.exists(): return members[0] logger.info('ParliamentMember not found for: ' + str(surname) + ' (' + initials + ')') return None
def test_find_members(self): person = Person.find_by_fullname('Diederik Samsom') member = ParliamentMember.find('Samsom', initials='D.M.') self.assertEqual(member.person, person) member = ParliamentMember.find('Samsom', initials='D.M.', date=datetime.date(year=2004, month=6, day=1)) self.assertEqual(member.person, person) self.assertEqual(member.joined, datetime.date(year=2003, month=1, day=30)) member = ParliamentMember.find('Samsom', initials='D.M.', date=datetime.date(year=2016, month=6, day=1)) self.assertEqual(member.person, person) self.assertEqual(member.joined, datetime.date(year=2012, month=9, day=20))
def find(surname, initials='', date=None): person = Person.find_surname_initials(surname, initials) if date: members = ParliamentMember.find_at_date(person, date) else: members = ParliamentMember.objects.filter(person=person).order_by('-joined') if members.exists(): return members[0] logger.info('ParliamentMember not found for: {} ({})'.format(surname, initials)) return None
def test_individual_voting(self): pijkstra = Person.find_surname_initials('Dijkstra', 'P.A.') vote = VoteIndividual.objects.create( voting=self.voting, person_name='Dijkstra, P.A.', person_tk_id=pijkstra.tk_id, number_of_seats=1 ) vote.set_derived() self.assertEqual(vote.parliament_member.person.surname, 'Dijkstra')
def person_session_stats_export(request, session, cohort, statistic): try: stats = Person.load_session_stats(session) except ValueError: # no stats raise Http404() # collect data rows = [] for person_id, person_stats in stats["people"].items(): if cohort not in [c["key"] for c in person_stats["cohorts"]]: continue if statistic not in person_stats["stats"]: continue if "context" not in person_stats["stats"][statistic]: continue rows.append([ person_stats["stats"][statistic]["context"][cohort]["rank_ascending"], person_stats["stats"][statistic]["context"][cohort]["rank_descending"], person_stats["stats"][statistic]["context"][cohort]["percentile"], person_stats["stats"][statistic]["value"], int(person_id), "", # bioguide ID int(person_stats["role_id"]), "", # state "", # district ]) if len(rows) == 0: raise Http404() # assign sortname to the 2nd column so we can use it in sorting people = Person.objects.in_bulk([r[4] for r in rows]) roles = PersonRole.objects.in_bulk([r[6] for r in rows]) for r in rows: #if r[4] not in people: continue # database mismatch, happens during testing r[5] = people[r[4]].bioguideid r[6], r[7] = roles[r[6]].state, roles[r[6]].district if isinstance(roles[r[6]].district, int) else "" r[8] = people[r[4]].lastname.encode("utf-8") # sort by rank, then by name rows.sort(key = lambda r : (r[0], r[8])) # format CSV import csv, StringIO outfile = StringIO.StringIO() writer = csv.writer(outfile) writer.writerow(["rank_from_low", "rank_from_high", "percentile", statistic, "id", "bioguide_id", "state", "district", "name"]) for row in rows: writer.writerow(row) output = outfile.getvalue() # construct response if request.GET.get("inline") is None: r = HttpResponse(output, content_type='text/csv') r['Content-Disposition'] = 'attachment; filename=' + "govtrack-stats-%s-%s-%s.csv" % (session, cohort, statistic) else: r = HttpResponse(output, content_type='text/plain') return r
def test_get_member_for_person_at_date(self): person = Person.find_by_fullname('Diederik Samsom') members_all = ParliamentMember.objects.filter(person=person) self.assertEqual(members_all.count(), 4) members = ParliamentMember.find_at_date(person, datetime.date(year=2016, month=6, day=1)) self.assertEqual(members[0].joined, datetime.date(year=2012, month=9, day=20)) self.assertEqual(members.count(), 1) self.assertEqual(members[0].person, person) members = ParliamentMember.find_at_date(person, datetime.date(year=2004, month=6, day=1)) self.assertEqual(members[0].joined, datetime.date(year=2003, month=1, day=30)) self.assertEqual(members.count(), 1) self.assertEqual(members[0].person, person)
def parse(klass, row, carrier, areacode, phone_type): row = list(row) # Make row mutable person = Person() person.name = normalize_text(row[2]) address = Address() address.location = normalize_text(row[3]) address.neighborhood = normalize_text(row[4]) address.city = normalize_text(row[5]) address.state = normalize_text(row[6]) phone = Phone() phone.carrier = carrier phone.areacode = areacode phone.type = phone_type try: # document - try CPF person.document = validate_cpf(row[8][-11:]) person.nature = Person.NATURE_CHOICES_PHYSICAL[0] except CPFValidationError: # document - try CNPJ person.document = validate_cnpj(row[8][-14:]) person.nature = Person.NATURE_CHOICES_LEGAL[0] address.zipcode = validate_zipcode(row[7]) phone.number = validate_phone_number(row[1]) return klass(row, person, address, phone)
def make_person(name, building, relation, address=None, city=None, website=None, phone=None): # now associate applicant with building: # first find/make person people = Person.objects.filter(city=city).filter(name=name) person = None # check if a previous building object in the db exists if people.exists(): person = people[0] print "Already had Person: %s" % person.name else: # if not, # CREATE A NEW PERSON OBJECT HERE person = Person() person.name = name if city: person.city = city if address: person.address = address if website: person.website = website if phone: person.phone = phone person.save() # then find/make association: bpeople = BuildingPerson.objects.filter(building=building).filter(person=person) bperson = None # check if a previous building_person object in the db exists if bpeople.exists(): bperson = bpeople[0] print "Already had BuildingPerson: %s with: %s" % (bperson.person.name, bperson.building.address) else: # if not, # CREATE A NEW BUILDING PERSON OBJECT HERE bperson = BuildingPerson() bperson.person = person bperson.building = building bperson.relation = relation bperson.save() return (person, bperson)
def test_create_person(self): forename = 'Mark' surname = 'Rutte' person = Person.objects.create(forename=forename, surname=surname) self.assertEqual(Person.objects.count(), 1) self.assertTrue(Person.person_exists(forename, surname)) person.update_info() person.save() self.assertEqual(person.wikidata_id, 'Q57792') self.assertEqual(person.wikimedia_image_name.split('.')[1], 'jpg') response = requests.get(person.wikimedia_image_url) self.assertEqual(response.status_code, 200) self.assertEqual(person.birthdate, date(1967, 2, 14))
def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) context['persons_same_surname'] = Person.same_surname() context['persons_surname_only'] = Person.objects.filter(forename='', initials='') same_slug_ids = [] persons = Person.objects.all() for person in persons: persons_same_slug = Person.objects.filter(slug=person.slug) if persons_same_slug.count() > 1: for p in persons_same_slug: same_slug_ids.append(p.id) context['persons_same_slug'] = Person.objects.filter(pk__in=same_slug_ids).order_by('slug') return context
def render_event(self, eventid, feeds): if feeds: from person.models import Person my_reps = set() for f in feeds: try: my_reps.add(Person.from_feed(f)) except ValueError: pass # not a person-related feed my_reps = sorted(my_reps, key = lambda p : p.sortname) else: my_reps = [] oursummary = self.get_summary() # fetch the whole vote (don't restrict by my_reps in the hope of # making use of the db query cache) all_votes = { vv.person: vv.option for vv in self.voters.select_related('person', 'option') } return { "type": "Vote", "date": self.created, "title": self.question, "url": self.get_absolute_url(), "body_text_template": """{{summary|safe}} {% for voter in voters %}{{voter.name|safe}}: {{voter.vote|safe}} {% endfor %} {% if oursummary %}{{oursummary.plain_text|truncatewords:120|safe}}{% endif %}""", "body_html_template": """<p>{{summary}}</p> {% for voter in voters %} <p><a href="{{SITE_ROOT}}{{voter.url}}">{{voter.name}}</a>: {{voter.vote}}</p> {% endfor %} {% if oursummary %}{{oursummary.as_html|truncatewords_html:120|safe}}{% endif %} """, "context": { "summary": self.summary(), "oursummary": oursummary, "voters": [ { "url": p.get_absolute_url(), "name": p.name_lastonly(), "vote": all_votes[p].value } for p in my_reps if p in all_votes ] if feeds != None else [] } }
def setUp(self): logged, self.user, self.factory = system_authentication(self) self.assertEqual(logged, True) country = Country(id=31) country.save() city = City(country=country) city.save() person = Person(full_name="Fulano Testeiro") person.save() date_departure1 = datetime.date(2015, 1, 15) date_arrival1 = datetime.date(2015, 1, 16) date_departure2 = datetime.date(2014, 1, 15) date_arrival2 = datetime.date(2014, 1, 16) order_01 = 0 order_02 = 1 amount_paid = 666 mission1 = scientific_mission(person, amount_paid) mission1.save() route1_mission1 = create_route(city, mission1, date_departure1, order_01) route2_mission1 = create_route(city, mission1, date_arrival1, order_02) route1_mission1.save() route2_mission1.save() mission2 = scientific_mission(person, amount_paid) mission2.save() route1_mission2 = create_route(city, mission2, date_departure2, order_01) route2_mission2 = create_route(city, mission2, date_arrival2, order_02) route1_mission2.save() route2_mission2.save()
def create_person(wikidata_id, fullname, wikidata_item, add_initials): if not fullname: fullname = wikidata_item.get_label(language='nl') forename, surname, surname_prefix = Person.get_name_parts(fullname, wikidata_item) person = Person.objects.create( forename=forename, surname=surname, surname_prefix=surname_prefix, wikidata_id=wikidata_id ) person.update_info(language='nl', wikidata_item=wikidata_item) person.save() if add_initials and person.parlement_and_politiek_id: person.initials = scraper.persons.get_initials(person.parlement_and_politiek_id) person.save() assert person.wikidata_id == wikidata_id return person
def render_event(self, eventid, feeds): if feeds: from person.models import Person my_reps = set() for f in feeds: try: my_reps.add(Person.from_feed(f)) except ValueError: pass # not a person-related feed my_reps = sorted(my_reps, key = lambda p : p.sortname) else: my_reps = [] try: oursummary = self.oursummary except VoteSummary.DoesNotExist: oursummary = None return { "type": "Vote", "date": self.created, "title": self.question, "url": self.get_absolute_url(), "body_text_template": """{{summary|safe}} {% for voter in voters %}{{voter.name|safe}}: {{voter.vote|safe}} {% endfor %} {% if oursummary %}{{oursummary.plain_text|safe}}{% endif %}""", "body_html_template": """<p>{{summary}}</p> {% for voter in voters %} <p><a href="{{SITE_ROOT}}{{voter.url}}">{{voter.name}}</a>: {{voter.vote}}</p> {% endfor %} {% if oursummary %}{{oursummary.as_html|safe}}{% endif %} """, "context": { "summary": self.summary(), "oursummary": oursummary, "voters": [ { "url": p.get_absolute_url(), "name": p.name_lastonly(), "vote": self.voters.get(person=p).option.value } for p in my_reps if self.voters.filter(person=p).exists() ] if feeds != None else [] } }