def deploy_bro(): print('Deploying Bro') check_service(SERVICE_LOCK) make_conf(make_subnets(), NETWORK_CONF) make_conf(make_node(), NODE_CONF) #sleep(DEPLOY_DELAY) #Popen(DEPLOY_CMD,shell=True) return
def make_node(parent, tag, text, **attrs): if options.get("govtrack", False): # Rewrite bioguide_id attributes as just id with GovTrack person IDs. attrs2 = {} for k, v in attrs.items(): if v: if k == "bioguide_id": # remap "bioguide_id" attributes to govtrack "id" k = "id" v = str(utils.translate_legislator_id('bioguide', v, 'govtrack')) attrs2[k] = v attrs = attrs2 return utils.make_node(parent, tag, text, **attrs)
def output_vote(vote, options): logging.info("[%s] Writing to disk..." % vote['vote_id']) # output JSON - so easy! utils.write( json.dumps(vote, sort_keys=True, indent=2, default=utils.format_datetime), output_for_vote(vote["vote_id"], "json"), ) # output XML root = etree.Element("roll") root.set("where", "house" if vote['chamber'] == "h" else "senate") root.set("session", str(vote["congress"])) root.set("year", str(vote["date"].year)) root.set("roll", str(vote["number"])) root.set("source", "house.gov" if vote["chamber"] == "h" else "senate.gov") root.set("datetime", utils.format_datetime(vote['date'])) root.set("updated", utils.format_datetime(vote['updated_at'])) def get_votes(option): return len(vote["votes"].get(option, [])) root.set("aye", str(get_votes("Yea") + get_votes("Aye"))) root.set("nay", str(get_votes("Nay") + get_votes("No"))) root.set("nv", str(get_votes("Not Voting"))) root.set("present", str(get_votes("Present"))) utils.make_node(root, "category", vote["category"]) utils.make_node(root, "type", vote["type"]) utils.make_node(root, "question", vote["question"]) utils.make_node(root, "required", vote["requires"]) utils.make_node(root, "result", vote["result"]) if "bill" in vote: govtrack_type_codes = { 'hr': 'h', 's': 's', 'hres': 'hr', 'sres': 'sr', 'hjres': 'hj', 'sjres': 'sj', 'hconres': 'hc', 'sconres': 'sc' } utils.make_node(root, "bill", None, session=str(vote["bill"]["congress"]), type=govtrack_type_codes[vote["bill"]["type"]], number=str(vote["bill"]["number"])) if "amendment" in vote: n = utils.make_node(root, "amendment", None) if vote["amendment"]["type"] == "s": n.set("ref", "regular") n.set("session", str(vote["congress"])) n.set("number", "s" + str(vote["amendment"]["number"])) elif vote["amendment"]["type"] == "h-bill": n.set("ref", "bill-serial") n.set("session", str(vote["congress"])) n.set("number", str(vote["amendment"]["number"])) # well-known keys for certain vote types: +/-/P/0 option_keys = { "Aye": "+", "Yea": "+", "Nay": "-", "No": "-", "Present": "P", "Not Voting": "0" } # preferred order of output: ayes, nays, present, then not voting, and similarly for guilty/not-guilty # and handling other options like people's names for votes for the Speaker. option_sort_order = ('Aye', 'Yea', 'Guilty', 'No', 'Nay', 'Not Guilty', 'OTHER', 'Present', 'Not Voting') options_list = sorted(vote["votes"].keys(), key = lambda o : option_sort_order.index(o) if o in option_sort_order else option_sort_order.index("OTHER") ) for option in options_list: if option not in option_keys: option_keys[option] = option utils.make_node(root, "option", option, key=option_keys[option]) for option in options_list: for v in vote["votes"][option]: n = utils.make_node(root, "voter", None) if v == "VP": n.set("id", "0") n.set("VP", "1") elif not options.get("govtrack", False): n.set("id", str(v["id"])) else: n.set("id", str(utils.get_govtrack_person_id("bioguide" if vote["chamber"] == "h" else "lis", v["id"]))) n.set("vote", option_keys[option]) n.set("value", option) if v != "VP": n.set("state", v["state"]) xmloutput = etree.tostring(root, pretty_print=True, encoding="utf8") # mimick two hard line breaks in GovTrack's legacy output to ease running diffs xmloutput = re.sub('(source=".*?") ', r"\1\n ", xmloutput) xmloutput = re.sub('(updated=".*?") ', r"\1\n ", xmloutput) utils.write( xmloutput, output_for_vote(vote['vote_id'], "xml") )
def output_vote(vote, options, id_type=None): logging.info("[%s] Writing to disk..." % vote['vote_id']) # output JSON - so easy! utils.write(json.dumps(vote, sort_keys=True, indent=2, default=utils.format_datetime), output_for_vote(vote["vote_id"], "json"), options=options) # What kind of IDs are we passed for Members of Congress? # For current data, we infer from the chamber. For historical data from voteview, # we're passed the type in id_type, which is set to "bioguide". if not id_type: id_type = ("bioguide" if vote["chamber"] == "h" else "lis") # output XML root = etree.Element("roll") root.set("where", "house" if vote['chamber'] == "h" else "senate") root.set("session", str(vote["congress"])) root.set("year", str(vote["date"].year)) root.set("roll", str(vote["number"])) if "voteview" in vote["source_url"]: root.set("source", "keithpoole") else: root.set("source", "house.gov" if vote["chamber"] == "h" else "senate.gov") root.set("datetime", utils.format_datetime(vote['date'])) root.set("updated", utils.format_datetime(vote['updated_at'])) def get_votes(option): return len(vote["votes"].get(option, [])) root.set("aye", str(get_votes("Yea") + get_votes("Aye"))) root.set("nay", str(get_votes("Nay") + get_votes("No"))) root.set("nv", str(get_votes("Not Voting"))) root.set("present", str(get_votes("Present"))) utils.make_node(root, "category", vote["category"]) utils.make_node(root, "type", vote["type"]) utils.make_node(root, "question", vote["question"]) utils.make_node(root, "required", vote["requires"]) utils.make_node(root, "result", vote["result"]) if vote.get("bill"): govtrack_type_codes = { 'hr': 'h', 's': 's', 'hres': 'hr', 'sres': 'sr', 'hjres': 'hj', 'sjres': 'sj', 'hconres': 'hc', 'sconres': 'sc' } utils.make_node(root, "bill", None, session=str(vote["bill"]["congress"]), type=govtrack_type_codes[vote["bill"]["type"]], number=str(vote["bill"]["number"])) if "amendment" in vote: n = utils.make_node(root, "amendment", None) if vote["amendment"]["type"] == "s": n.set("ref", "regular") n.set("session", str(vote["congress"])) n.set("number", "s" + str(vote["amendment"]["number"])) elif vote["amendment"]["type"] == "h-bill": n.set("ref", "bill-serial") n.set("session", str(vote["congress"])) n.set("number", str(vote["amendment"]["number"])) # well-known keys for certain vote types: +/-/P/0 option_keys = { "Aye": "+", "Yea": "+", "Nay": "-", "No": "-", "Present": "P", "Not Voting": "0", "Guilty": "+", "Not Guilty": "-" } # preferred order of output: ayes, nays, present, then not voting, and similarly for guilty/not-guilty # and handling other options like people's names for votes for the Speaker. option_sort_order = ('Aye', 'Yea', 'Guilty', 'No', 'Nay', 'Not Guilty', 'OTHER', 'Present', 'Not Voting') options_list = sorted( vote["votes"].keys(), key=lambda o: option_sort_order.index(o) if o in option_sort_order else option_sort_order.index("OTHER")) for option in options_list: if option not in option_keys: option_keys[option] = option utils.make_node(root, "option", option, key=option_keys[option]) for option in options_list: for v in vote["votes"][option]: n = utils.make_node(root, "voter", None) if v == "VP": n.set("id", "0") n.set("VP", "1") elif not options.get("govtrack", False): n.set("id", str(v["id"])) else: n.set("id", str(utils.get_govtrack_person_id(id_type, v["id"]))) n.set("vote", option_keys[option]) n.set("value", option) if v != "VP": n.set("state", v["state"]) if v.get("voteview_votecode_extra") is not None: n.set("voteview_votecode_extra", v["voteview_votecode_extra"]) xmloutput = etree.tostring(root, pretty_print=True, encoding="utf8") # mimick two hard line breaks in GovTrack's legacy output to ease running diffs xmloutput = re.sub('(source=".*?") ', r"\1\n ", xmloutput) xmloutput = re.sub('(updated=".*?") ', r"\1\n ", xmloutput) utils.write(xmloutput, output_for_vote(vote['vote_id'], "xml"), options=options)
def output_vote(vote, options): logging.info("[%s] Writing to disk..." % vote["vote_id"]) # output JSON - so easy! utils.write( json.dumps(vote, sort_keys=True, indent=2, default=utils.format_datetime), output_for_vote(vote["vote_id"], "json"), ) # output XML root = etree.Element("roll") root.set("where", "house" if vote["chamber"] == "h" else "senate") root.set("session", str(vote["congress"])) root.set("year", str(vote["date"].year)) root.set("roll", str(vote["number"])) root.set("datetime", utils.format_datetime(vote["date"])) root.set("updated", utils.format_datetime(vote["updated_at"])) def get_votes(option): return len(vote["votes"].get(option, [])) root.set("aye", str(get_votes("Yea") + get_votes("Aye"))) root.set("nay", str(get_votes("Nay") + get_votes("No"))) root.set("present", str(get_votes("Present"))) root.set("nv", str(get_votes("Not Voting"))) root.set("source", "house.gov" if vote["chamber"] == "h" else "senate.gov") utils.make_node(root, "category", vote["category"]) utils.make_node(root, "type", vote["type"]) utils.make_node(root, "question", vote["question"]) utils.make_node(root, "required", vote["requires"]) utils.make_node(root, "result", vote["result"]) if "bill" in vote: govtrack_type_codes = { "hr": "h", "s": "s", "hres": "hr", "sres": "sr", "hjres": "hj", "sjres": "sj", "hconres": "hc", "sconres": "sc", } utils.make_node( root, "bill", None, session=str(vote["bill"]["congress"]), type=govtrack_type_codes[vote["bill"]["type"]], number=str(vote["bill"]["number"]), ) if "amendment" in vote: if vote["amendment"]["type"] == "s": utils.make_node(root, "amendment", None, ref="regular", number="s" + str(vote["amendment"]["number"])) elif vote["amendment"]["type"] == "h-bill": utils.make_node(root, "amendment", None, ref="bill-serial", number=str(vote["amendment"]["number"])) # well-known keys for certain vote types: +/-/P/0 option_keys = {"Aye": "+", "Yea": "+", "Nay": "-", "No": "-", "Present": "P", "Not Voting": "0"} # preferred order of output: ayes, nays, present, then not voting, and similarly for guilty/not-guilty # and handling other options like people's names for votes for the Speaker. option_sort_order = ("Aye", "Yea", "Guilty", "No", "Nay", "Not Guilty", "OTHER", "Present", "Not Voting") options_list = sorted( vote["votes"].keys(), key=lambda o: option_sort_order.index(o) if o in option_sort_order else option_sort_order.index("OTHER"), ) for option in options_list: if option not in option_keys: option_keys[option] = option utils.make_node(root, "option", option, key=option_keys[option]) for option in options_list: for v in vote["votes"][option]: attrs = {"vote": option_keys[option], "value": option} if v == "VP": attrs["id"] = "0" attrs["VP"] = "1" elif not options.get("govtrack", False): attrs["id"] = str(v["id"]) attrs["state"] = v["state"] else: attrs["id"] = str( utils.get_govtrack_person_id("bioguide" if vote["chamber"] == "h" else "lis", v["id"]) ) attrs["state"] = v["state"] utils.make_node(root, "voter", None, **attrs) utils.write(etree.tostring(root, pretty_print=True), output_for_vote(vote["vote_id"], "xml"))
def output_vote(vote, options, id_type=None): logging.info("[%s] Writing to disk..." % vote["vote_id"]) # output JSON - so easy! utils.write( json.dumps(vote, sort_keys=True, indent=2, default=utils.format_datetime), output_for_vote(vote["vote_id"], "json"), options=options, ) # What kind of IDs are we passed for Members of Congress? # For current data, we infer from the chamber. For historical data from voteview, # we're passed the type in id_type, which is set to "bioguide". if not id_type: id_type = "bioguide" if vote["chamber"] == "h" else "lis" # output XML root = etree.Element("roll") root.set("where", "house" if vote["chamber"] == "h" else "senate") root.set("session", str(vote["congress"])) root.set("year", str(vote["date"].year)) root.set("roll", str(vote["number"])) if "voteview" in vote["source_url"]: root.set("source", "keithpoole") else: root.set("source", "house.gov" if vote["chamber"] == "h" else "senate.gov") root.set("datetime", utils.format_datetime(vote["date"])) root.set("updated", utils.format_datetime(vote["updated_at"])) def get_votes(option): return len(vote["votes"].get(option, [])) root.set("aye", str(get_votes("Yea") + get_votes("Aye"))) root.set("nay", str(get_votes("Nay") + get_votes("No"))) root.set("nv", str(get_votes("Not Voting"))) root.set("present", str(get_votes("Present"))) utils.make_node(root, "category", vote["category"]) utils.make_node(root, "type", vote["type"]) utils.make_node(root, "question", vote["question"]) utils.make_node(root, "required", vote["requires"]) utils.make_node(root, "result", vote["result"]) if vote.get("bill"): govtrack_type_codes = { "hr": "h", "s": "s", "hres": "hr", "sres": "sr", "hjres": "hj", "sjres": "sj", "hconres": "hc", "sconres": "sc", } utils.make_node( root, "bill", None, session=str(vote["bill"]["congress"]), type=govtrack_type_codes[vote["bill"]["type"]], number=str(vote["bill"]["number"]), ) if "amendment" in vote: n = utils.make_node(root, "amendment", None) if vote["amendment"]["type"] == "s": n.set("ref", "regular") n.set("session", str(vote["congress"])) n.set("number", "s" + str(vote["amendment"]["number"])) elif vote["amendment"]["type"] == "h-bill": n.set("ref", "bill-serial") n.set("session", str(vote["congress"])) n.set("number", str(vote["amendment"]["number"])) # well-known keys for certain vote types: +/-/P/0 option_keys = { "Aye": "+", "Yea": "+", "Nay": "-", "No": "-", "Present": "P", "Not Voting": "0", "Guilty": "+", "Not Guilty": "-", } # preferred order of output: ayes, nays, present, then not voting, and similarly for guilty/not-guilty # and handling other options like people's names for votes for the Speaker. option_sort_order = ("Aye", "Yea", "Guilty", "No", "Nay", "Not Guilty", "OTHER", "Present", "Not Voting") options_list = sorted( vote["votes"].keys(), key=lambda o: option_sort_order.index(o) if o in option_sort_order else option_sort_order.index("OTHER"), ) for option in options_list: if option not in option_keys: option_keys[option] = option utils.make_node(root, "option", option, key=option_keys[option]) for option in options_list: for v in vote["votes"][option]: n = utils.make_node(root, "voter", None) if v == "VP": n.set("id", "0") n.set("VP", "1") elif not options.get("govtrack", False): n.set("id", str(v["id"])) else: n.set("id", str(utils.get_govtrack_person_id(id_type, v["id"]))) n.set("vote", option_keys[option]) n.set("value", option) if v != "VP": n.set("state", v["state"]) if v.get("voteview_votecode_extra") is not None: n.set("voteview_votecode_extra", v["voteview_votecode_extra"]) xmloutput = etree.tostring(root, pretty_print=True, encoding="utf8") # mimick two hard line breaks in GovTrack's legacy output to ease running diffs xmloutput = re.sub('(source=".*?") ', r"\1\n ", xmloutput) xmloutput = re.sub('(updated=".*?") ', r"\1\n ", xmloutput) utils.write(xmloutput, output_for_vote(vote["vote_id"], "xml"), options=options)
def output_vote(vote, options): logging.info("[%s] Writing to disk..." % vote['vote_id']) # output JSON - so easy! utils.write( json.dumps(vote, sort_keys=True, indent=2, default=utils.format_datetime), output_for_vote(vote["vote_id"], "json"), ) # output XML root = etree.Element("roll") root.set("where", "house" if vote['chamber'] == "h" else "senate") root.set("session", str(vote["congress"])) root.set("year", str(vote["date"].year)) root.set("roll", str(vote["number"])) root.set("datetime", utils.format_datetime(vote['date'])) root.set("updated", utils.format_datetime(vote['updated_at'])) def get_votes(option): return len(vote["votes"].get(option, [])) root.set("aye", str(get_votes("Yea") + get_votes("Aye"))) root.set("nay", str(get_votes("Nay") + get_votes("No"))) root.set("present", str(get_votes("Present"))) root.set("nv", str(get_votes("Not Voting"))) root.set("source", "house.gov" if vote["chamber"] == "h" else "senate.gov") utils.make_node(root, "category", vote["category"]) utils.make_node(root, "type", vote["type"]) utils.make_node(root, "question", vote["question"]) utils.make_node(root, "required", vote["requires"]) utils.make_node(root, "result", vote["result"]) if "bill" in vote: govtrack_type_codes = { 'hr': 'h', 's': 's', 'hres': 'hr', 'sres': 'sr', 'hjres': 'hj', 'sjres': 'sj', 'hconres': 'hc', 'sconres': 'sc' } utils.make_node(root, "bill", None, session=str(vote["bill"]["congress"]), type=govtrack_type_codes[vote["bill"]["type"]], number=str(vote["bill"]["number"])) if "amendment" in vote: if vote["amendment"]["type"] == "s": utils.make_node(root, "amendment", None, ref="regular", number="s" + str(vote["amendment"]["number"])) elif vote["amendment"]["type"] == "h-bill": utils.make_node(root, "amendment", None, ref="bill-serial", number=str(vote["amendment"]["number"])) # well-known keys for certain vote types: +/-/P/0 option_keys = { "Aye": "+", "Yea": "+", "Nay": "-", "No": "-", "Present": "P", "Not Voting": "0" } # preferred order of output: ayes, nays, present, then not voting, and similarly for guilty/not-guilty # and handling other options like people's names for votes for the Speaker. option_sort_order = ('Aye', 'Yea', 'Guilty', 'No', 'Nay', 'Not Guilty', 'OTHER', 'Present', 'Not Voting') options_list = sorted(vote["votes"].keys(), key = lambda o : option_sort_order.index(o) if o in option_sort_order else option_sort_order.index("OTHER") ) for option in options_list: if option not in option_keys: option_keys[option] = option utils.make_node(root, "option", option, key=option_keys[option]) for option in options_list: for v in vote["votes"][option]: attrs = { "vote": option_keys[option], "value": option } if v == "VP": attrs["id"] = "0" attrs["VP"] = "1" elif not options.get("govtrack", False): attrs["id"] = str(v["id"]) attrs["state"] = v["state"] else: attrs["id"] = str(utils.get_govtrack_person_id("bioguide" if vote["chamber"] == "h" else "lis", v["id"])) attrs["state"] = v["state"] utils.make_node(root, "voter", None, **attrs) utils.write( etree.tostring(root, pretty_print=True), output_for_vote(vote['vote_id'], "xml") )