diff --git a/openstates/utils/__init__.py b/openstates/utils/__init__.py index 58fd21e5d7..68029c5388 100644 --- a/openstates/utils/__init__.py +++ b/openstates/utils/__init__.py @@ -1,4 +1,5 @@ from .lxmlize import LXMLMixin +from .dir import mkdir_p import re diff --git a/openstates/utils/dir.py b/openstates/utils/dir.py new file mode 100644 index 0000000000..00e48809b3 --- /dev/null +++ b/openstates/utils/dir.py @@ -0,0 +1,11 @@ +import errno +import os + +def mkdir_p(path): + try: + os.makedirs(path) + except OSError as exc: # Python >2.5 + if exc.errno == errno.EEXIST and os.path.isdir(path): + pass + else: + raise diff --git a/scripts/dc/dump_bill_json.py b/scripts/dc/dump_bill_json.py new file mode 100644 index 0000000000..03db2f7ffa --- /dev/null +++ b/scripts/dc/dump_bill_json.py @@ -0,0 +1,50 @@ +'''Dump JSON for a DC bill + +USAGE: + + $ python dump_bill_json.py PR21-0316 + +''' +import json +import pprint +import sys + +import requests + +from openstates.utils import mkdir_p + +def main(): + headers = {"Content-Type":"application/json"} + bill_url = "http://lims.dccouncil.us/_layouts/15/uploader/AdminProxy.aspx/GetPublicData" + try: + bill_id = sys.argv[1] + except IndexError: + msg = "\nERROR: You must supply a bill id! Example:\n\n\tpython {} PR21-0316\n".format(__file__) + sys.exit(msg) + bill_params = { "legislationId" : bill_id } + bill_info = requests.post(bill_url, headers=headers, data=json.dumps(bill_params)) + bill_info = decode_json(bill_info.json()["d"])["data"] + output_dir = 'data/dc/bills_raw/' + outfile = "".join([output_dir, "{}.json".format(bill_id)]) + mkdir_p(output_dir) + with open(outfile, 'w') as out: + json.dump(bill_info, out, sort_keys=True, indent=4, separators=(',', ': ')) + pprint.pprint(bill_info) + print("\nRaw bill data saved: {}\n".format(outfile)) + +def decode_json(stringy_json): + #the "json" they send is recursively string-encoded. + if type(stringy_json) == dict: + for key in stringy_json: + stringy_json[key] = decode_json(stringy_json[key]) + elif type(stringy_json) == list: + for i in range(len(stringy_json)): + stringy_json[i] = decode_json(stringy_json[i]) + elif type(stringy_json) in (str,unicode): + if len(stringy_json) > 0 and stringy_json[0] in ["[","{",u"[",u"{"]: + return decode_json(json.loads(stringy_json)) + return stringy_json + + +if __name__ == '__main__': + main()