def test_invalidtype(self): p = Popolo() t = "hello this is a string, an invalid type!" try: p.add(t) except NotAValidType: pass
def csv_to_popolo(organisation, membership_file, term_dates_file): """ given a organisation name, a csv file with membership information and a file with the relevant term dates - creates a popolo. """ unique = lambda x: list(set(x)) if isinstance(organisation, tuple): org_id, org_name = organisation else: org_name = organisation org_id = get_hash(org_name) qg = QuickGrid().open(membership_file) dates = QuickGrid().open(term_dates_file) pop = Popolo() #create legislature org = Organization(classification="legislature", id=org_id, name=org_name) pop.add(org) #create periods for d in dates: e = Event() e.classification = "legislative period" e.id = "term/{0}".format(d["term"]) if d["start_date"]: e.start_date = d["start_date"] if d["end_date"]: e.end_date = d["end_date"] e.organization = org pop.add(e) groups = unique(qg.get_column("group")) areas = unique(qg.get_column("area")) #create parties for g in groups: o = Organization(classification="party", name=g, id=get_hash(g)) pop.add(o) #create constituencies for a in areas: n = Area(name=a, id=get_hash(a), type="constituency") pop.add(n) qg.generate_col("l_name", lambda x: x["name"].strip().lower().replace(" ", "")) #create people for k, nqg in qg.split_on_unique("l_name"): sources = unique([x["source"] for x in nqg]) alternates = [] if "other_names" in qg.header: alt_names = [x["other_names"] for x in nqg] alternates = [] for al in alt_names: if al: for a in al.split(";"): alternates.append({ "name": a, "lang": "en", "note": "altname" }) p = Person(name=nqg[0]["name"], id=get_hash(k), sources=sources) if "gender" in nqg.header: p.gender = nqg[0]["gender"] if alternates: p.other_names = alternates pop.add(p) #create memberships for r in qg: m = Membership() m.person = pop.persons.lookup_from_key[get_hash(r["l_name"])] m.area = pop.areas.lookup_from_key[get_hash(r["area"])] m.on_behalf_of = pop.organizations.lookup_from_key[get_hash( r["group"])] m.legislative_period = pop.events.lookup_from_key["term/{0}".format( r["term"])] m.organization = org m.role = "member" if r["start_date"]: m.start_date = r["start_date"] if r["end_date"]: m.end_date = r["end_date"] pop.add(m) return pop
def test_populate_from_scratch(self): """ test person """ pop = Popolo() """ test person """ person_attributes = { "id": "person1", "email": "*****@*****.**", "gender": "male", "honorific_prefix": "Dr", "honorific_suffix": "MBe", "image": "blahblah.jpg", "name": "Indiana Jones", "sort_name": "jones, indiana", "national_identity": "american", "biography": "steals things", "birth_date": datetime(1899, 7, 1).date(), "death_date": datetime(1999, 7, 1).date(), "family_name": "Jones", "given_name": "Indiana", "summary": "archaeologist", "wikidata": "Q174284", "phone": "9906753", "fax": "5559906753", "property": "123 fake street", "facebook": "https://www.facebook.com/indianajones/", "other_names": [{ "name": "Indiana Walton Jones" }], "sources": ["TV", "Movies"], "twitter": "indianajones", } p = Person() for k, v in six.iteritems(person_attributes): setattr(p, k, v) assert getattr(p, k) == v pop.add([p]) """ test organisation """ org_attributes = { "id": "org1", "name": "made up organisation", "wikidata": "Q20136634", "classification": "Parliament", "image": "parliament.jpg", "founding_date": datetime(1894, 7, 1).date(), "dissolution_date": datetime(1923, 7, 1).date(), "seat": 50, "other_names": ["banana republic"] } o = Organization() for k, v in six.iteritems(org_attributes): setattr(o, k, v) assert getattr(o, k) == v pop.add(o) """ test area """ area_attributes = { "id": "area1", "name": "Brighton", "type": "City", "wikidata": "Q131491" } a = Area() for k, v in six.iteritems(area_attributes): setattr(a, k, v) assert getattr(a, k) == v pop.add(a) """ test post """ post_attribute = { "id": "post1", "label": "Leader", "organization_id": "org1", } p = Post() for k, v in six.iteritems(post_attribute): setattr(p, k, v) assert getattr(p, k) == v pop.add(p) """ test event """ event_attributes = { "id": "event1", "classification": "legislative-term", "start_date": datetime(1900, 1, 1).date(), "end_date": datetime(1905, 1, 1).date(), "organization_id": "org1", } e = Event() for k, v in six.iteritems(event_attributes): setattr(e, k, v) assert getattr(e, k) == v pop.add(e) membership_attributes = { "role": "MP", "person_id": "person1", "organisation_id": "org1", "area_id": "area1", "post_id": "post1", "legislative_period_id": "event1", "start_date": datetime(1900, 5, 1).date(), "end_date": datetime(1903, 1, 1).date(), } m = Membership() for k, v in six.iteritems(membership_attributes): setattr(m, k, v) assert getattr(m, k) == v pop.add(m) """ can we save and reload this intact? """ j = pop.to_json() pop2 = Popolo(json.loads(j)) assert pop2.to_json() == pop.to_json() assert pop.memberships[0].id == pop2.memberships[0].id """ save to temp file """ filename = mktemp() pop.to_filename(filename) os.remove(filename)