def migrate_events(self, state): spec = {} if state: spec['state'] = state for entry in self.billy_db.events.find(spec, timeout=False): e = Event( name=entry['description'], when=entry['when'], location=entry['location'], session=entry['session'], updated_at=entry['updated_at'], created_at=entry['created_at'], type=entry['type'], ) e.identifiers = [{'scheme': 'openstates', 'identifier': entry['_id']}] e._openstates_id = entry['_id'] if entry.get('+location_url'): e.add_location_url(entry['+location_url']) link = entry.get('link', entry.get("+link")) if link: e.add_link(link, 'link') blacklist = ["description", "when", "location", "session", "updated_at", "created_at", "end", "sources", "documents", "related_bills", "state", "+link", "link", "level", "participants", "country", "_all_ids", "type"] e.status = entry.get('status') typos = { "canceled": "cancelled" } if e.status in typos: e.status = typos[e.status] for key, value in entry.items(): if key in blacklist or not value or key.startswith("_"): continue e.extras[key] = value if entry.get('end'): end = entry['end'] try: end = dt.datetime.fromtimestamp(end) except TypeError: pass e.end = end for source in entry['sources']: e.add_source(url=source['url']) if e.sources == []: continue # XXX: print warning for document in entry.get('documents', []): e.add_document(name=document.get('name'), document_id=document.get('doc_id'), url=document['url'], mimetype=document.get( "mimetype", document.get( "+mimetype", "application/octet-stream"))) # Try to add the mimetype. If it fails, fall back to a generic # undeclared application/octet-stream. agenda = None for bill in entry.get('related_bills', []): if agenda is None: agenda = e.add_agenda_item( description="Bills up for Consideration" ) hcid = _hot_cache.get(bill.get('id', None), None) bid = bill['bill_id'] if bid is None: continue agenda.add_bill(bill=bid, id=hcid) for who in entry.get('participants', []): participant_type = who.get('participant_type', 'committee') # I've gone through the backlog of OpenStates data, they are # all committees of some sort. who_chamber = who.get('chamber') if who_chamber is None: for chamber in ["_chamber", "+chamber"]: f = who.get(chamber) if f: who_chamber = f break if who_chamber is None: # Freak of nature ... continue hcid = _hot_cache.get(who.get('id', None), None) e.add_participant( name=who['participant'], type={ "committee": "organization", "legislator": "person", "person": "person", }[participant_type], id=hcid, note=who['type'], chamber=who_chamber) self.save_object(e)