)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"bc4bd3d32026d991fbcf3286524eb1a49db6e6d5","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Example Initialization scripts"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Example scripts show how to do standard keystone operations"},{"line_number":10,"context_line":"from the client using the V3 APIs."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"One populates an Empty Keystone server."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"1ae5cdf2_7ec6a069","line":9,"updated":"2014-06-03 20:01:42.000000000","message":"Keystone*","commit_id":"7c8fe13a864093acd81966612cf58374b5b0e8a4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"bc4bd3d32026d991fbcf3286524eb1a49db6e6d5","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Example scripts show how to do standard keystone operations"},{"line_number":10,"context_line":"from the client using the V3 APIs."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"One populates an Empty Keystone server."},{"line_number":13,"context_line":"A partner script shows how to reverse the process."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I8ee87051d84658f5b744127955ee1c7370079403"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":14,"id":"1ae5cdf2_9ec36c56","line":12,"updated":"2014-06-03 20:01:42.000000000","message":"empty*","commit_id":"7c8fe13a864093acd81966612cf58374b5b0e8a4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32ea38216839b72e890181c00ca739db2e7fd94e","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Adam Young \u003cayoung@redhat.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-12-05 21:49:07 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Example Initialization scripts"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Example scripts show how to do standard keystone operations"},{"line_number":10,"context_line":"from the client using the V3 APIs.  Shows use of the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9a80dd14_3fe28401","line":7,"updated":"2015-03-12 16:58:59.000000000","message":"initialization*","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32ea38216839b72e890181c00ca739db2e7fd94e","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Example Initialization scripts"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Example scripts show how to do standard keystone operations"},{"line_number":10,"context_line":"from the client using the V3 APIs.  Shows use of the"},{"line_number":11,"context_line":"auth plugings for admin token and password, as well as"},{"line_number":12,"context_line":"session reuse."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9a80dd14_dfb408f4","line":9,"updated":"2015-03-12 16:58:59.000000000","message":"Keystone","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32ea38216839b72e890181c00ca739db2e7fd94e","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Example scripts show how to do standard keystone operations"},{"line_number":10,"context_line":"from the client using the V3 APIs.  Shows use of the"},{"line_number":11,"context_line":"auth plugings for admin token and password, as well as"},{"line_number":12,"context_line":"session reuse."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"initialize_keystone.py populates an Empty Keystone server."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9a80dd14_3fc9a479","line":11,"updated":"2015-03-12 16:58:59.000000000","message":"plugins*","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32ea38216839b72e890181c00ca739db2e7fd94e","unresolved":false,"context_lines":[{"line_number":11,"context_line":"auth plugings for admin token and password, as well as"},{"line_number":12,"context_line":"session reuse."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"initialize_keystone.py populates an Empty Keystone server."},{"line_number":15,"context_line":"teardonw_keystone.py reverses the process."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I8ee87051d84658f5b744127955ee1c7370079403"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9a80dd14_bfa4b4b9","line":14,"updated":"2015-03-12 16:58:59.000000000","message":"empty*","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32ea38216839b72e890181c00ca739db2e7fd94e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"session reuse."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"initialize_keystone.py populates an Empty Keystone server."},{"line_number":15,"context_line":"teardonw_keystone.py reverses the process."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I8ee87051d84658f5b744127955ee1c7370079403"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"9a80dd14_3f90c44d","line":15,"updated":"2015-03-12 16:58:59.000000000","message":"teardown*","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"dc6350d5ec1d08b1def0da2da88e95d2b32e8bc8","unresolved":false,"context_lines":[{"line_number":14,"context_line":"initialize_keystone.py populates an Empty Keystone server."},{"line_number":15,"context_line":"teardonw_keystone.py reverses the process."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I8ee87051d84658f5b744127955ee1c7370079403"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":20,"id":"da9b358b_16f765f6","line":17,"updated":"2015-03-31 08:54:42.000000000","message":"link to bug(wishlist)/bp?","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"}],"examples/scripts/README.txt":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"98d895335d5e31ab2d62fbd0503c6c08f2994389","unresolved":false,"context_lines":[{"line_number":5,"context_line":"initialize the identity, assignment, and service catalog subsystems."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"generate_revocation_events.py"},{"line_number":9,"context_line":"reads a list of users out of the usernames.txt file and creates a user entry for each, then removes them."},{"line_number":10,"context_line":"In doing so, it generates a revocation event for each user.  This list of events is fetched and used to test token"},{"line_number":11,"context_line":"validity."}],"source_content_type":"text/plain","patch_set":1,"id":"AAAAWH%2F%2BsUc%3D","line":8,"updated":"2014-03-25 01:48:46.000000000","message":"Remove this block","commit_id":"ee6ba94d4af2effa815e941c4a807603ff581dd3"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"270e0ebe801924630c79f665c2b77a1a17f42b09","unresolved":false,"context_lines":[{"line_number":5,"context_line":"initialize the identity, assignment, and service catalog subsystems."},{"line_number":6,"context_line":""},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"generate_revocation_events.py"},{"line_number":9,"context_line":"reads a list of users out of the usernames.txt file and creates a user entry for each, then removes them."},{"line_number":10,"context_line":"In doing so, it generates a revocation event for each user.  This list of events is fetched and used to test token"},{"line_number":11,"context_line":"validity."}],"source_content_type":"text/plain","patch_set":2,"id":"AAAAWH%2F%2BiHw%3D","line":8,"updated":"2014-03-26 05:12:53.000000000","message":"i removed this part since it wasn\u0027t included in scripts","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d2e23584f2385297e49c2c4b935432f72834cb81","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"teardown_keystone.py"},{"line_number":15,"context_line":"Performes the reverse of the initialize_keystone.py script, as a way to clean up for additional runs."}],"source_content_type":"text/plain","patch_set":2,"id":"AAAAWH%2F%2Bk%2BI%3D","line":15,"updated":"2014-03-25 19:25:51.000000000","message":".rst or .md would make this more useful","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"4ead1f8af88dd532e7f1036370a35ffc4123e72d","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"teardown_keystone.py"},{"line_number":15,"context_line":"Performes the reverse of the initialize_keystone.py script, as a way to clean up for additional runs."}],"source_content_type":"text/plain","patch_set":2,"id":"AAAAWH%2F%2Bn24%3D","line":15,"updated":"2014-03-25 14:08:04.000000000","message":"performs","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a415d970dff1d159d4b22affdd9f09fc701ebe85","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"teardown_keystone.py"},{"line_number":15,"context_line":"Performes the reverse of the initialize_keystone.py script, as a way to clean up for additional runs."}],"source_content_type":"text/plain","patch_set":2,"id":"AAAAWH%2F%2Bjgo%3D","line":15,"in_reply_to":"AAAAWH%2F%2Bk%2BI%3D","updated":"2014-03-25 23:12:21.000000000","message":"++, i vote for .md","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"bc4bd3d32026d991fbcf3286524eb1a49db6e6d5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"This file contains examples of how to use the Keystone client to perform basic tasks:"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"initialize_keystone.py"},{"line_number":4,"context_line":"If you have recently checked out the Keystone server code, and run the database"}],"source_content_type":"text/plain","patch_set":14,"id":"1ae5cdf2_dea8948f","line":1,"updated":"2014-06-03 20:01:42.000000000","message":"python-keystoneclient*","commit_id":"7c8fe13a864093acd81966612cf58374b5b0e8a4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"dc6350d5ec1d08b1def0da2da88e95d2b32e8bc8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"This file contains examples of how to use the Keystone client to perform basic tasks:"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"initialize_keystone.py"},{"line_number":4,"context_line":"If you have recently checked out the Keystone server code, and run the database"},{"line_number":5,"context_line":"migrations, this script shows how to initialize the identity, assignment, and"},{"line_number":6,"context_line":"service catalog subsystems."}],"source_content_type":"text/plain","patch_set":20,"id":"da9b358b_16ce45b4","line":3,"updated":"2015-03-31 08:54:42.000000000","message":"this seems odd as a paragraph title...","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"dc6350d5ec1d08b1def0da2da88e95d2b32e8bc8","unresolved":false,"context_lines":[{"line_number":5,"context_line":"migrations, this script shows how to initialize the identity, assignment, and"},{"line_number":6,"context_line":"service catalog subsystems."},{"line_number":7,"context_line":""},{"line_number":8,"context_line":"Requires the following environment variables for creating the initial objects:"},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    OS_SERVICE_ENDPOINT"},{"line_number":11,"context_line":"    OS_SERVICE_TOKEN"}],"source_content_type":"text/plain","patch_set":20,"id":"da9b358b_563bad9c","line":8,"updated":"2015-03-31 08:54:42.000000000","message":"This seems very terse...let the poet in you pour out....","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32ea38216839b72e890181c00ca739db2e7fd94e","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Performs the reverse of the initialize_keystone.py script, as a way to clean"},{"line_number":22,"context_line":"up for additional runs.  Removes all roles and assignments."},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"requires following environment variables for access to Keystone:"},{"line_number":25,"context_line":"    OS_SERVICE_ENDPOINT"},{"line_number":26,"context_line":"    OS_SERVICE_TOKEN"},{"line_number":27,"context_line":""}],"source_content_type":"text/plain","patch_set":20,"id":"9a80dd14_9f8ff022","line":24,"updated":"2015-03-12 16:58:59.000000000","message":"Requires the following environment variable to connect and authenticate with a Keystone server.","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"}],"examples/scripts/initialize_keystone.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"98d895335d5e31ab2d62fbd0503c6c08f2994389","unresolved":false,"context_lines":[{"line_number":81,"context_line":"def client_for_admin_user():"},{"line_number":82,"context_line":"    admin_client \u003d client.Client(auth_url\u003d\u0027http://localhost:5000/v3\u0027,"},{"line_number":83,"context_line":"                                 management_url\u003d\u0027http://localhost:35357/v3\u0027,"},{"line_number":84,"context_line":"                                 username\u003d\u0027admin\u0027,"},{"line_number":85,"context_line":"                                 password\u003d\u0027freeipa4all\u0027,"},{"line_number":86,"context_line":"                                 project_name\u003d\u0027admin\u0027,"},{"line_number":87,"context_line":"                                 debug\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2BsUE%3D","line":84,"updated":"2014-03-25 01:48:46.000000000","message":"Get these values out of ENV","commit_id":"ee6ba94d4af2effa815e941c4a807603ff581dd3"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"98d895335d5e31ab2d62fbd0503c6c08f2994389","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"def main():"},{"line_number":92,"context_line":"    management_url \u003d \u0027http://localhost:35357/v3\u0027"},{"line_number":93,"context_line":"    admin_client \u003d client.Client(endpoint\u003dmanagement_url, token\u003d\u0027freeipa4all\u0027)"},{"line_number":94,"context_line":"    build_admin_user(admin_client)"},{"line_number":95,"context_line":"    build_service_catalog(admin_client)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2BsUQ%3D","line":92,"updated":"2014-03-25 01:48:46.000000000","message":"Get this out of ENV.","commit_id":"ee6ba94d4af2effa815e941c4a807603ff581dd3"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d2e23584f2385297e49c2c4b935432f72834cb81","unresolved":false,"context_lines":[{"line_number":21,"context_line":"        regardless of what it looked like before."},{"line_number":22,"context_line":"    \"\"\""},{"line_number":23,"context_line":"    #default domain already exists"},{"line_number":24,"context_line":"    default_domain \u003d admin_client.domains.get(\u0027default\u0027)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    try:"},{"line_number":27,"context_line":"        admin_client.projects.create("}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2Bk9s%3D","line":24,"updated":"2014-03-25 19:25:51.000000000","message":"you don\u0027t \u0027need\u0027 to do this but it doesn\u0027t hurt. just using the \u0027default\u0027 string will work as well.","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d2e23584f2385297e49c2c4b935432f72834cb81","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        admin_project \u003d admin_client.projects.list(name\u003d\u0027admin\u0027,"},{"line_number":34,"context_line":"                                                   domain\u003ddefault_domain.id)[0]"},{"line_number":35,"context_line":"        admin_client.users.create(name\u003d\u0027admin\u0027,"},{"line_number":36,"context_line":"                                  domain\u003ddefault_domain.id,"},{"line_number":37,"context_line":"                                  default_project\u003dadmin_project.id,"},{"line_number":38,"context_line":"                                  password\u003d\u0027freeipa4all\u0027, )"},{"line_number":39,"context_line":"    except exceptions.Conflict:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2Bk9Y%3D","line":36,"updated":"2014-03-25 19:25:51.000000000","message":"shouldn\u0027t need .id","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a6aaba56bb5d0b8785931584f428ca4440699938","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        admin_project \u003d admin_client.projects.list(name\u003d\u0027admin\u0027,"},{"line_number":34,"context_line":"                                                   domain\u003ddefault_domain.id)[0]"},{"line_number":35,"context_line":"        admin_client.users.create(name\u003d\u0027admin\u0027,"},{"line_number":36,"context_line":"                                  domain\u003ddefault_domain.id,"},{"line_number":37,"context_line":"                                  default_project\u003dadmin_project.id,"},{"line_number":38,"context_line":"                                  password\u003d\u0027freeipa4all\u0027, )"},{"line_number":39,"context_line":"    except exceptions.Conflict:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2BiVo%3D","line":36,"in_reply_to":"AAAAWH%2F%2Bk9Y%3D","updated":"2014-03-26 04:10:21.000000000","message":"Done","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d2e23584f2385297e49c2c4b935432f72834cb81","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                                                   domain\u003ddefault_domain.id)[0]"},{"line_number":35,"context_line":"        admin_client.users.create(name\u003d\u0027admin\u0027,"},{"line_number":36,"context_line":"                                  domain\u003ddefault_domain.id,"},{"line_number":37,"context_line":"                                  default_project\u003dadmin_project.id,"},{"line_number":38,"context_line":"                                  password\u003d\u0027freeipa4all\u0027, )"},{"line_number":39,"context_line":"    except exceptions.Conflict:"},{"line_number":40,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2Bk9U%3D","line":37,"updated":"2014-03-25 19:25:51.000000000","message":"shouldn\u0027t need .id\n\nNot going to repeat this everwhere but anywhere you are using a returned object.id you should just use the object.","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a6aaba56bb5d0b8785931584f428ca4440699938","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                                                   domain\u003ddefault_domain.id)[0]"},{"line_number":35,"context_line":"        admin_client.users.create(name\u003d\u0027admin\u0027,"},{"line_number":36,"context_line":"                                  domain\u003ddefault_domain.id,"},{"line_number":37,"context_line":"                                  default_project\u003dadmin_project.id,"},{"line_number":38,"context_line":"                                  password\u003d\u0027freeipa4all\u0027, )"},{"line_number":39,"context_line":"    except exceptions.Conflict:"},{"line_number":40,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2BiVs%3D","line":37,"in_reply_to":"AAAAWH%2F%2Bk9U%3D","updated":"2014-03-26 04:10:21.000000000","message":"Done","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"d2e23584f2385297e49c2c4b935432f72834cb81","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        for interface in [\u0027public\u0027, \u0027admin\u0027, \u0027internal\u0027]:"},{"line_number":72,"context_line":"            admin_client.endpoints.create("},{"line_number":73,"context_line":"                identity_service.id,"},{"line_number":74,"context_line":"                url\u003d\u0027http://localhost:35357/v3\u0027,"},{"line_number":75,"context_line":"                interface\u003dinterface)"},{"line_number":76,"context_line":"    except exceptions.Conflict:"},{"line_number":77,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2Bk8M%3D","line":74,"updated":"2014-03-25 19:25:51.000000000","message":"for v3 do we use this URL or :5000 for everything?","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a6aaba56bb5d0b8785931584f428ca4440699938","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        for interface in [\u0027public\u0027, \u0027admin\u0027, \u0027internal\u0027]:"},{"line_number":72,"context_line":"            admin_client.endpoints.create("},{"line_number":73,"context_line":"                identity_service.id,"},{"line_number":74,"context_line":"                url\u003d\u0027http://localhost:35357/v3\u0027,"},{"line_number":75,"context_line":"                interface\u003dinterface)"},{"line_number":76,"context_line":"    except exceptions.Conflict:"},{"line_number":77,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2BiVk%3D","line":74,"in_reply_to":"AAAAWH%2F%2Bk8M%3D","updated":"2014-03-26 04:10:21.000000000","message":"5000 should be public/internal,\n35357 should be for admin only","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"4ead1f8af88dd532e7f1036370a35ffc4123e72d","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def main():"},{"line_number":91,"context_line":"    management_url \u003d \u0027http://localhost:35357/v3\u0027"},{"line_number":92,"context_line":"    admin_client \u003d client.Client(endpoint\u003dmanagement_url, token\u003d\u0027freeipa4all\u0027)"},{"line_number":93,"context_line":"    build_admin_user(admin_client)"},{"line_number":94,"context_line":"    build_service_catalog(admin_client)"},{"line_number":95,"context_line":"    admin_user_client \u003d client_for_admin_user()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2Bn5k%3D","line":92,"updated":"2014-03-25 14:08:04.000000000","message":"How about fetching the service token from the prompt or from the OS_SERVICE_TOKEN env variable instead of a hardcoded value ? Furthermore the default value in keystone.conf is \"ADMIN\".","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"a415d970dff1d159d4b22affdd9f09fc701ebe85","unresolved":false,"context_lines":[{"line_number":89,"context_line":""},{"line_number":90,"context_line":"def main():"},{"line_number":91,"context_line":"    management_url \u003d \u0027http://localhost:35357/v3\u0027"},{"line_number":92,"context_line":"    admin_client \u003d client.Client(endpoint\u003dmanagement_url, token\u003d\u0027freeipa4all\u0027)"},{"line_number":93,"context_line":"    build_admin_user(admin_client)"},{"line_number":94,"context_line":"    build_service_catalog(admin_client)"},{"line_number":95,"context_line":"    admin_user_client \u003d client_for_admin_user()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAWH%2F%2Bjfs%3D","line":92,"in_reply_to":"AAAAWH%2F%2Bn5k%3D","updated":"2014-03-25 23:12:21.000000000","message":"definitely a good idea to get this from env variables.","commit_id":"e9d0241126a77ae6b00c99c68288a9b2842e944f"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"50be6b7bec1c9816a8b3616268449cd5194a64af","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystoneclient import exceptions"},{"line_number":16,"context_line":"from keystoneclient.v3 import client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"AUTH_URL \u003d os.getenv(\u0027OS_PROJECT_NAME\u0027, \u0027http://localhost:5000/v3\u0027)"},{"line_number":19,"context_line":"MANAGEMENT_URL \u003d os.getenv(\u0027OS_AUTH_URL\u0027, \u0027http://localhost:35357/v3\u0027)"},{"line_number":20,"context_line":"SERVICE_TOKEN \u003d os.getenv(\u0027OS_SERVICE_TOKEN\u0027, \u0027openstack\u0027)"},{"line_number":21,"context_line":"USER_PASSWORD \u003d os.getenv(\u0027OS_PASSWORD\u0027, \u0027openstack\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Bg9Q%3D","line":18,"updated":"2014-03-26 09:20:01.000000000","message":"env variable should be OS_AUTH_URL","commit_id":"32112ae7bb749734c5b0451b66c23de7a3d85529"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2651cdd47396ff574b492c13fb70273dc40cf906","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from keystoneclient import exceptions"},{"line_number":16,"context_line":"from keystoneclient.v3 import client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"AUTH_URL \u003d os.getenv(\u0027OS_PROJECT_NAME\u0027, \u0027http://localhost:5000/v3\u0027)"},{"line_number":19,"context_line":"MANAGEMENT_URL \u003d os.getenv(\u0027OS_AUTH_URL\u0027, \u0027http://localhost:35357/v3\u0027)"},{"line_number":20,"context_line":"SERVICE_TOKEN \u003d os.getenv(\u0027OS_SERVICE_TOKEN\u0027, \u0027openstack\u0027)"},{"line_number":21,"context_line":"USER_PASSWORD \u003d os.getenv(\u0027OS_PASSWORD\u0027, \u0027openstack\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2BfBA%3D","line":18,"in_reply_to":"AAAAWH%2F%2Bg9Q%3D","updated":"2014-03-26 20:34:01.000000000","message":"oops - typo!","commit_id":"32112ae7bb749734c5b0451b66c23de7a3d85529"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"50be6b7bec1c9816a8b3616268449cd5194a64af","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from keystoneclient.v3 import client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"AUTH_URL \u003d os.getenv(\u0027OS_PROJECT_NAME\u0027, \u0027http://localhost:5000/v3\u0027)"},{"line_number":19,"context_line":"MANAGEMENT_URL \u003d os.getenv(\u0027OS_AUTH_URL\u0027, \u0027http://localhost:35357/v3\u0027)"},{"line_number":20,"context_line":"SERVICE_TOKEN \u003d os.getenv(\u0027OS_SERVICE_TOKEN\u0027, \u0027openstack\u0027)"},{"line_number":21,"context_line":"USER_PASSWORD \u003d os.getenv(\u0027OS_PASSWORD\u0027, \u0027openstack\u0027)"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Bg9E%3D","line":19,"updated":"2014-03-26 09:20:01.000000000","message":"env_variable should be OS_SERVICE_ENDPOINT","commit_id":"32112ae7bb749734c5b0451b66c23de7a3d85529"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2651cdd47396ff574b492c13fb70273dc40cf906","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from keystoneclient.v3 import client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"AUTH_URL \u003d os.getenv(\u0027OS_PROJECT_NAME\u0027, \u0027http://localhost:5000/v3\u0027)"},{"line_number":19,"context_line":"MANAGEMENT_URL \u003d os.getenv(\u0027OS_AUTH_URL\u0027, \u0027http://localhost:35357/v3\u0027)"},{"line_number":20,"context_line":"SERVICE_TOKEN \u003d os.getenv(\u0027OS_SERVICE_TOKEN\u0027, \u0027openstack\u0027)"},{"line_number":21,"context_line":"USER_PASSWORD \u003d os.getenv(\u0027OS_PASSWORD\u0027, \u0027openstack\u0027)"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2BfA8%3D","line":19,"in_reply_to":"AAAAWH%2F%2Bg9E%3D","updated":"2014-03-26 20:34:01.000000000","message":"agreed","commit_id":"32112ae7bb749734c5b0451b66c23de7a3d85529"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0816f5254265eb209eb6826b1e2d233ad297181f","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        print(\"identity service already exists.\")"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    try:"},{"line_number":75,"context_line":"        service \u003d admin_client.services.list(name\u003d\u0027identity\u0027,"},{"line_number":76,"context_line":"                                             type\u003d\u0027identity\u0027)[0]"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        admin_client.endpoints.create(service, AUTH_URL, \u0027public\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2BaLY%3D","line":75,"updated":"2014-03-27 00:39:06.000000000","message":"actually there is no list option for services","commit_id":"d83ff44fd0f1692c254aee035bdf963c270ecf2b"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"02c3adf8504df86ea0fe04536f1474c0de2d7b4d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"    except exceptions.Conflict:"},{"line_number":78,"context_line":"        pass"},{"line_number":79,"context_line":"    try:"},{"line_number":80,"context_line":"        identity_service \u003d admin_client.services.list(name\u003d\u0027identity\u0027,"},{"line_number":81,"context_line":"                                                      type\u003d\u0027identity\u0027)[0]"},{"line_number":82,"context_line":"        for interface in [\u0027public\u0027, \u0027admin\u0027, \u0027internal\u0027]:"},{"line_number":83,"context_line":"            admin_client.endpoints.create("}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAW3%2F%2Fxog%3D","line":80,"updated":"2014-04-10 13:46:44.000000000","message":"also, list doesn\u0027t exist in services. i\u0027ve proposed it here: https://review.openstack.org/#/c/83263/","commit_id":"7a2e4efd1e21a36251b1c8452beb792d12049354"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2af2e6af01b38e9363b3c352251960222179abce","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from keystoneclient.v3 import client"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"try:"},{"line_number":19,"context_line":"    OS_SERVICE_ENDPOINT \u003d os.environ[\u0027OS_SERVICE_ENDPOINT\u0027]"},{"line_number":20,"context_line":"    OS_SERVICE_TOKEN \u003d os.environ[\u0027OS_SERVICE_TOKEN\u0027]"},{"line_number":21,"context_line":"    #used for creating the ADMIN user"},{"line_number":22,"context_line":"    OS_PASSWORD \u003d os.environ[\u0027OS_PASSWORD\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_2ace7e2e","line":19,"updated":"2014-05-06 20:34:09.000000000","message":"isn\u0027t this deprecated in favor of OS_ENDPOINT?","commit_id":"938237d73f21d84859bd899d6a2954c3cb4aa94f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2af2e6af01b38e9363b3c352251960222179abce","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"try:"},{"line_number":19,"context_line":"    OS_SERVICE_ENDPOINT \u003d os.environ[\u0027OS_SERVICE_ENDPOINT\u0027]"},{"line_number":20,"context_line":"    OS_SERVICE_TOKEN \u003d os.environ[\u0027OS_SERVICE_TOKEN\u0027]"},{"line_number":21,"context_line":"    #used for creating the ADMIN user"},{"line_number":22,"context_line":"    OS_PASSWORD \u003d os.environ[\u0027OS_PASSWORD\u0027]"},{"line_number":23,"context_line":"    OS_USERNAME \u003d os.environ[\u0027OS_USERNAME\u0027]"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_8adceae5","line":20,"updated":"2014-05-06 20:34:09.000000000","message":"and OS_TOKEN?","commit_id":"938237d73f21d84859bd899d6a2954c3cb4aa94f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2af2e6af01b38e9363b3c352251960222179abce","unresolved":false,"context_lines":[{"line_number":23,"context_line":"    OS_USERNAME \u003d os.environ[\u0027OS_USERNAME\u0027]"},{"line_number":24,"context_line":"    OS_AUTH_URL \u003d os.environ[\u0027OS_AUTH_URL\u0027]"},{"line_number":25,"context_line":"    OS_PROJECT_NAME \u003d os.environ[\u0027OS_PROJECT_NAME\u0027]"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"except KeyError as e:"},{"line_number":28,"context_line":"    print (\u0027%s environment variables not set.\u0027 % e.message)"},{"line_number":29,"context_line":"    exit(1)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_6a5de678","line":26,"updated":"2014-05-06 20:34:09.000000000","message":"extra whitespace?","commit_id":"938237d73f21d84859bd899d6a2954c3cb4aa94f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2af2e6af01b38e9363b3c352251960222179abce","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"except KeyError as e:"},{"line_number":28,"context_line":"    print (\u0027%s environment variables not set.\u0027 % e.message)"},{"line_number":29,"context_line":"    exit(1)"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def build_admin_user(admin_client):"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_0a7b7af5","line":29,"updated":"2014-05-06 20:34:09.000000000","message":"exit is not a builtin, and all you\u0027re doing is raising a system exit with stdout instead of stderr\n\n  raise SystemExit(\u0027%s environment variables not set.\u0027 % e.message)","commit_id":"938237d73f21d84859bd899d6a2954c3cb4aa94f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2af2e6af01b38e9363b3c352251960222179abce","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        admin_client.projects.create("},{"line_number":43,"context_line":"            name\u003dOS_PROJECT_NAME, domain\u003ddefault_domain.id,"},{"line_number":44,"context_line":"            description\u003d\u0027For Administrative Actions Only\u0027)"},{"line_number":45,"context_line":"    except exceptions.Conflict:"},{"line_number":46,"context_line":"        pass"},{"line_number":47,"context_line":"    try:"},{"line_number":48,"context_line":"        admin_project \u003d admin_client.projects.list(name\u003dOS_PROJECT_NAME,"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_ca1d12c0","line":45,"updated":"2014-05-06 20:34:09.000000000","message":"i\u0027m not sure the error handling is particularly useful in an \"example.\" it\u0027s a just distraction from what you\u0027re trying to communicate... if you think they\u0027re particularly valuable, i\u0027d suggest refactoring to separate the try/except handling from the actual content of the example","commit_id":"938237d73f21d84859bd899d6a2954c3cb4aa94f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2af2e6af01b38e9363b3c352251960222179abce","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        admin_client.users.create(name\u003dOS_USERNAME,"},{"line_number":51,"context_line":"                                  domain\u003ddefault_domain.id,"},{"line_number":52,"context_line":"                                  default_project\u003dadmin_project.id,"},{"line_number":53,"context_line":"                                  password\u003dOS_PASSWORD, )"},{"line_number":54,"context_line":"    except exceptions.Conflict:"},{"line_number":55,"context_line":"        pass"},{"line_number":56,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_cae2729f","line":53,"updated":"2014-05-06 20:34:09.000000000","message":"trailing comma","commit_id":"938237d73f21d84859bd899d6a2954c3cb4aa94f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2af2e6af01b38e9363b3c352251960222179abce","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"def build_service_catalog(admin_client):"},{"line_number":78,"context_line":"    try:"},{"line_number":79,"context_line":"        admin_client.services.create(name\u003d\u0027identity\u0027,"},{"line_number":80,"context_line":"                                     type\u003d\u0027identity\u0027)"},{"line_number":81,"context_line":"    except exceptions.Conflict:"},{"line_number":82,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_0a145a9e","line":79,"updated":"2014-05-06 20:34:09.000000000","message":"name\u003d\u0027Keystone\u0027","commit_id":"938237d73f21d84859bd899d6a2954c3cb4aa94f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2af2e6af01b38e9363b3c352251960222179abce","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    except exceptions.Conflict:"},{"line_number":82,"context_line":"        pass"},{"line_number":83,"context_line":"    try:"},{"line_number":84,"context_line":"        identity_service \u003d admin_client.services.list(name\u003d\u0027identity\u0027,"},{"line_number":85,"context_line":"                                                      type\u003d\u0027identity\u0027)[0]"},{"line_number":86,"context_line":"        for interface in [\u0027public\u0027, \u0027admin\u0027, \u0027internal\u0027]:"},{"line_number":87,"context_line":"            admin_client.endpoints.create("}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_6a0fa688","line":84,"updated":"2014-05-06 20:34:09.000000000","message":"same","commit_id":"938237d73f21d84859bd899d6a2954c3cb4aa94f"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"2af2e6af01b38e9363b3c352251960222179abce","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    return admin_client"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"def main():"},{"line_number":106,"context_line":"    admin_client \u003d client.Client(endpoint\u003dOS_SERVICE_ENDPOINT,"},{"line_number":107,"context_line":"                                 token\u003dOS_SERVICE_TOKEN)"},{"line_number":108,"context_line":"    build_admin_user(admin_client)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9ad9bd40_4a3902f1","line":105,"updated":"2014-05-06 20:34:09.000000000","message":"if __name__ \u003d\u003d \u0027__main__\u0027:","commit_id":"938237d73f21d84859bd899d6a2954c3cb4aa94f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1d87c8e18ca62b01dd3fd85ead834f3863c2dc3e","unresolved":false,"context_lines":[{"line_number":18,"context_line":"try:"},{"line_number":19,"context_line":"    OS_SERVICE_ENDPOINT \u003d os.environ[\u0027OS_SERVICE_ENDPOINT\u0027]"},{"line_number":20,"context_line":"    OS_SERVICE_TOKEN \u003d os.environ[\u0027OS_SERVICE_TOKEN\u0027]"},{"line_number":21,"context_line":"    #used for creating the ADMIN user"},{"line_number":22,"context_line":"    OS_PASSWORD \u003d os.environ[\u0027OS_PASSWORD\u0027]"},{"line_number":23,"context_line":"    OS_USERNAME \u003d os.environ[\u0027OS_USERNAME\u0027]"},{"line_number":24,"context_line":"    OS_AUTH_URL \u003d os.environ[\u0027OS_AUTH_URL\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"1ae5cdf2_2a5956fe","line":21,"updated":"2014-06-10 17:41:13.000000000","message":"single space after the #","commit_id":"7c8fe13a864093acd81966612cf58374b5b0e8a4"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1d87c8e18ca62b01dd3fd85ead834f3863c2dc3e","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    \"\"\"The end state: admin user is created with the appropriate roles in the"},{"line_number":32,"context_line":"    admin project to perform administrative tasks."},{"line_number":33,"context_line":"    \"\"\""},{"line_number":34,"context_line":"    #default domain already exists"},{"line_number":35,"context_line":"    default_domain \u003d admin_client.domains.list(id\u003d\u0027default\u0027)[0]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1ae5cdf2_4a5ce2ed","line":34,"updated":"2014-06-10 17:41:13.000000000","message":"here too","commit_id":"7c8fe13a864093acd81966612cf58374b5b0e8a4"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"bc4bd3d32026d991fbcf3286524eb1a49db6e6d5","unresolved":false,"context_lines":[{"line_number":39,"context_line":"            name\u003dOS_PROJECT_NAME, domain\u003ddefault_domain.id,"},{"line_number":40,"context_line":"            description\u003d\u0027For Administrative Actions Only\u0027)"},{"line_number":41,"context_line":"    except exceptions.Conflict:"},{"line_number":42,"context_line":"        #default domain is likely to be created already"},{"line_number":43,"context_line":"        pass"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    admin_project \u003d admin_client.projects.list(name\u003dOS_PROJECT_NAME,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1ae5cdf2_1eaf5c95","line":42,"updated":"2014-06-03 20:01:42.000000000","message":"spaces after #","commit_id":"7c8fe13a864093acd81966612cf58374b5b0e8a4"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"1d87c8e18ca62b01dd3fd85ead834f3863c2dc3e","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    build_service_catalog(admin_client)"},{"line_number":90,"context_line":"    admin_user_client \u003d client_for_admin_user()"},{"line_number":91,"context_line":"    print(\"client created for %s\" % admin_user_client.username)"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":94,"context_line":"    initialize()"}],"source_content_type":"text/x-python","patch_set":14,"id":"1ae5cdf2_ea05aec2","line":92,"updated":"2014-06-10 17:41:13.000000000","message":"Extra newline is needed here","commit_id":"7c8fe13a864093acd81966612cf58374b5b0e8a4"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"1662606472be6d98c6e0daaa7eca91571da44b7f","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"def client_for_admin_user():"},{"line_number":78,"context_line":"    admin_client \u003d client.Client(auth_url\u003dOS_AUTH_URL,"},{"line_number":79,"context_line":"                                 management_url\u003dOS_SERVICE_ENDPOINT,"},{"line_number":80,"context_line":"                                 username\u003dOS_USERNAME,"},{"line_number":81,"context_line":"                                 password\u003dOS_PASSWORD,"},{"line_number":82,"context_line":"                                 project_name\u003dOS_PROJECT_NAME,"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_7abdfb01","line":79,"updated":"2014-12-02 03:40:38.000000000","message":"this keyword doesn\u0027t exit","commit_id":"96af018ab46033a8d3c6f4aea10e2a7ccf2877a6"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"243418ad5351e919610ef0781d88aae57d2370e0","unresolved":false,"context_lines":[{"line_number":52,"context_line":"    admin_project \u003d admin_client.projects.list(name\u003dOS_PROJECT_NAME,"},{"line_number":53,"context_line":"                                               domain\u003ddefault_domain.id)[0]"},{"line_number":54,"context_line":"    admin_client.users.create(name\u003dOS_USERNAME,"},{"line_number":55,"context_line":"                              domain\u003ddefault_domain.id,"},{"line_number":56,"context_line":"                              default_project\u003dadmin_project.id,"},{"line_number":57,"context_line":"                              password\u003dOS_PASSWORD)"},{"line_number":58,"context_line":"    admin_client.roles.create(name\u003d\u0027admin\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_3d128d58","line":55,"updated":"2014-12-02 04:19:36.000000000","message":"shouldn\u0027t need to do .id here, domain\u003d and project\u003d and all others should accept an object with an id attribute.","commit_id":"5c78bc71f5712a3b841fef3debfeea10a3e9e8a6"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"243418ad5351e919610ef0781d88aae57d2370e0","unresolved":false,"context_lines":[{"line_number":58,"context_line":"    admin_client.roles.create(name\u003d\u0027admin\u0027)"},{"line_number":59,"context_line":"    admin_user \u003d admin_client.users.list(name\u003d\u0027admin\u0027,"},{"line_number":60,"context_line":"                                         domain\u003d\u0027default\u0027)[0]"},{"line_number":61,"context_line":"    admin_role \u003d admin_client.roles.list(name\u003d\u0027admin\u0027)[0]"},{"line_number":62,"context_line":"    admin_client.roles.grant(role\u003dadmin_role.id,"},{"line_number":63,"context_line":"                             user\u003dadmin_user.id,"},{"line_number":64,"context_line":"                             domain\u003ddefault_domain.id)"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_fd7ba578","line":61,"updated":"2014-12-02 04:19:36.000000000","message":"role.create shouuld return this, you don\u0027t need to do a list()","commit_id":"5c78bc71f5712a3b841fef3debfeea10a3e9e8a6"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"243418ad5351e919610ef0781d88aae57d2370e0","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    admin_client.services.create(name\u003d\u0027Keystone\u0027,"},{"line_number":72,"context_line":"                                 type\u003d\u0027identity\u0027)"},{"line_number":73,"context_line":"    identity_service \u003d admin_client.services.list(name\u003d\u0027Keystone\u0027,"},{"line_number":74,"context_line":"                                                  type\u003d\u0027identity\u0027)[0]"},{"line_number":75,"context_line":"    for interface in [\u0027public\u0027, \u0027admin\u0027, \u0027internal\u0027]:"},{"line_number":76,"context_line":"        admin_client.endpoints.create("},{"line_number":77,"context_line":"            identity_service.id,"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_3dae0de8","line":74,"updated":"2014-12-02 04:19:36.000000000","message":"create should return the created object, you don\u0027t need to do a list afterwards.","commit_id":"5c78bc71f5712a3b841fef3debfeea10a3e9e8a6"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"243418ad5351e919610ef0781d88aae57d2370e0","unresolved":false,"context_lines":[{"line_number":77,"context_line":"            identity_service.id,"},{"line_number":78,"context_line":"            url\u003d\u0027http://localhost:35357/v3\u0027,"},{"line_number":79,"context_line":"            interface\u003dinterface)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"def client_for_admin_user():"},{"line_number":83,"context_line":"    password_plugin \u003d password.Password("}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_bd811d4f","line":80,"updated":"2014-12-02 04:19:36.000000000","message":"only admin should be port 35357","commit_id":"5c78bc71f5712a3b841fef3debfeea10a3e9e8a6"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"243418ad5351e919610ef0781d88aae57d2370e0","unresolved":false,"context_lines":[{"line_number":88,"context_line":"    user_client \u003d client.Client("},{"line_number":89,"context_line":"        session\u003dsess,"},{"line_number":90,"context_line":"        auth\u003dpassword_plugin,"},{"line_number":91,"context_line":"        project_name\u003dOS_PROJECT_NAME,"},{"line_number":92,"context_line":"        debug\u003dTrue)"},{"line_number":93,"context_line":"    return user_client"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_5dd7594f","line":91,"updated":"2014-12-02 04:19:36.000000000","message":"project_name is not a client param, you pass that to the password plugin. If you use project_name you also need to specify project_domain_id/_name","commit_id":"5c78bc71f5712a3b841fef3debfeea10a3e9e8a6"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"243418ad5351e919610ef0781d88aae57d2370e0","unresolved":false,"context_lines":[{"line_number":106,"context_line":"    for project in projects:"},{"line_number":107,"context_line":"        print(\"project %s\" % project.name)"},{"line_number":108,"context_line":"    user \u003d user_client.users.list(name\u003dOS_USERNAME,"},{"line_number":109,"context_line":"                                  domain\u003d\u0027default\u0027)[0]"},{"line_number":110,"context_line":"    print(\"client created for %s\" % user.id)"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"}],"source_content_type":"text/x-python","patch_set":18,"id":"5a890539_bd9afdc2","line":109,"updated":"2014-12-02 04:19:36.000000000","message":"this value should be able to be returned from build_admin_user","commit_id":"5c78bc71f5712a3b841fef3debfeea10a3e9e8a6"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"29507e638a5a5a548f5ed87e01ce3042eed81b38","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from keystoneclient import exceptions"},{"line_number":18,"context_line":"from keystoneclient import session"},{"line_number":19,"context_line":"from keystoneclient.v3 import client"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"try:"},{"line_number":22,"context_line":"    OS_SERVICE_ENDPOINT \u003d os.environ[\u0027OS_SERVICE_ENDPOINT\u0027]"},{"line_number":23,"context_line":"    OS_SERVICE_TOKEN \u003d os.environ[\u0027OS_SERVICE_TOKEN\u0027]"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a930d6b_84ca8e4d","line":20,"updated":"2015-01-22 00:44:28.000000000","message":"(nit) add newline","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32ea38216839b72e890181c00ca739db2e7fd94e","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from keystoneclient.v3 import client"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"try:"},{"line_number":22,"context_line":"    OS_SERVICE_ENDPOINT \u003d os.environ[\u0027OS_SERVICE_ENDPOINT\u0027]"},{"line_number":23,"context_line":"    OS_SERVICE_TOKEN \u003d os.environ[\u0027OS_SERVICE_TOKEN\u0027]"},{"line_number":24,"context_line":"    # used for creating the ADMIN user"},{"line_number":25,"context_line":"    OS_PASSWORD \u003d os.environ[\u0027OS_PASSWORD\u0027]"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a80dd14_3ff364a0","line":22,"updated":"2015-03-12 16:58:59.000000000","message":"nit: use os.environ.get(\u0027OS_SERVICE_ENDPOINT\u0027) \n\nThen we can use default values if needed.","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"f0078e8ad6f9d2e32d4513955f1a6f4a70594165","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    OS_AUTH_URL \u003d os.environ[\u0027OS_AUTH_URL\u0027]"},{"line_number":28,"context_line":"    OS_PROJECT_NAME \u003d os.environ[\u0027OS_PROJECT_NAME\u0027]"},{"line_number":29,"context_line":"except KeyError as e:"},{"line_number":30,"context_line":"    raise SystemExit(\u0027%s environment variables not set.\u0027 % e.message)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# The session is designed to be used with multiple auth plugins."},{"line_number":33,"context_line":"# Making it global is an easy way to share it."}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_6f04aa7e","line":30,"updated":"2015-02-02 00:39:30.000000000","message":"maybe this would be a good spot to use argparse and \n\nsession.Session.register_cli_options and auth.register_argsparse_arguments \n\n(yes there is a review to standardize that naming)","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32ea38216839b72e890181c00ca739db2e7fd94e","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def build_admin_user(admin_client):"},{"line_number":38,"context_line":"    \"\"\"The end state: admin user is created with the appropriate roles in the"},{"line_number":39,"context_line":"    admin project to perform administrative tasks."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    # default domain already exists"},{"line_number":42,"context_line":"    default_domain \u003d admin_client.domains.list(id\u003d\u0027default\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a80dd14_5f49f8ce","line":39,"updated":"2015-03-12 16:58:59.000000000","message":"https://www.python.org/dev/peps/pep-0257/#multi-line-docstrings","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32ea38216839b72e890181c00ca739db2e7fd94e","unresolved":false,"context_lines":[{"line_number":39,"context_line":"    admin project to perform administrative tasks."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    # default domain already exists"},{"line_number":42,"context_line":"    default_domain \u003d admin_client.domains.list(id\u003d\u0027default\u0027)[0]"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    try:"},{"line_number":45,"context_line":"        admin_client.projects.create("}],"source_content_type":"text/x-python","patch_set":20,"id":"9a80dd14_5f773802","line":42,"updated":"2015-03-12 16:58:59.000000000","message":"why not do: \n\n    default_domain \u003d admin_client.domains.get(\u0027default\u0027)","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32ea38216839b72e890181c00ca739db2e7fd94e","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        # default project is likely to be created already"},{"line_number":50,"context_line":"        pass"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    admin_project \u003d admin_client.projects.list(name\u003dOS_PROJECT_NAME,"},{"line_number":53,"context_line":"                                               domain\u003ddefault_domain.id)[0]"},{"line_number":54,"context_line":"    admin_client.users.create(name\u003dOS_USERNAME,"},{"line_number":55,"context_line":"                              domain\u003ddefault_domain,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a80dd14_7ff79c59","line":52,"updated":"2015-03-12 16:58:59.000000000","message":"if we are looking for a specific project, can we just use projects.get() instead?","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"32ea38216839b72e890181c00ca739db2e7fd94e","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    return admin_user"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"def build_service_catalog(admin_client):"},{"line_number":72,"context_line":"    identity_service \u003d admin_client.services.create(name\u003d\u0027Keystone\u0027,"},{"line_number":73,"context_line":"                                                    type\u003d\u0027identity\u0027)"},{"line_number":74,"context_line":"    for interface in [\u0027public\u0027, \u0027internal\u0027]:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9a80dd14_3fab641f","line":71,"updated":"2015-03-12 16:58:59.000000000","message":"missing doc strings?","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"f0078e8ad6f9d2e32d4513955f1a6f4a70594165","unresolved":false,"context_lines":[{"line_number":92,"context_line":"    user_client \u003d client.Client("},{"line_number":93,"context_line":"        session\u003dsess,"},{"line_number":94,"context_line":"        auth\u003dpassword_plugin,"},{"line_number":95,"context_line":"        project_name\u003dOS_PROJECT_NAME,"},{"line_number":96,"context_line":"        debug\u003dTrue)"},{"line_number":97,"context_line":"    return user_client"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_efd09af9","line":95,"updated":"2015-02-02 00:39:30.000000000","message":"nope - belongs to the plugin","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"f0078e8ad6f9d2e32d4513955f1a6f4a70594165","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        session\u003dsess,"},{"line_number":94,"context_line":"        auth\u003dpassword_plugin,"},{"line_number":95,"context_line":"        project_name\u003dOS_PROJECT_NAME,"},{"line_number":96,"context_line":"        debug\u003dTrue)"},{"line_number":97,"context_line":"    return user_client"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"da86d52c_0fcece5a","line":96,"updated":"2015-02-02 00:39:30.000000000","message":"hasn\u0027t worked for a really long time","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"29507e638a5a5a548f5ed87e01ce3042eed81b38","unresolved":false,"context_lines":[{"line_number":110,"context_line":"    for project in projects:"},{"line_number":111,"context_line":"        print(\"project %s\" % project.name)"},{"line_number":112,"context_line":"    print(\"client created for %s\" % user.id)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"if __name__ \u003d\u003d \u0027__main__\u0027:"},{"line_number":115,"context_line":"    initialize()"}],"source_content_type":"text/x-python","patch_set":20,"id":"1a930d6b_a4922a55","line":113,"updated":"2015-01-22 00:44:28.000000000","message":"(nit) add newline","commit_id":"d93835bd041aac1a9a763186324833c3b553c76c"}],"examples/scripts/teardown_keystone.py":[{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"98d895335d5e31ab2d62fbd0503c6c08f2994389","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"def main():"},{"line_number":54,"context_line":"    management_url \u003d \u0027http://localhost:35357/v3\u0027"},{"line_number":55,"context_line":"    admin_client \u003d client.Client(endpoint\u003dmanagement_url, token\u003d\u0027freeipa4all\u0027)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    tear_down_data(admin_client)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAWH%2F%2BsT4%3D","line":54,"updated":"2014-03-25 01:48:46.000000000","message":"Get this out of envvar","commit_id":"ee6ba94d4af2effa815e941c4a807603ff581dd3"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"50be6b7bec1c9816a8b3616268449cd5194a64af","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystoneclient.v3 import client"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"MANAGEMENT_URL \u003d os.getenv(\u0027OS_AUTH_URL\u0027, \u0027http://localhost:35357/v3\u0027)"},{"line_number":18,"context_line":"SERVICE_TOKEN \u003d os.getenv(\u0027OS_SERVICE_TOKEN\u0027, \u0027openstack\u0027)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Bg8g%3D","line":17,"updated":"2014-03-26 09:20:01.000000000","message":"should be OS_SERVICE_ENDPOINT","commit_id":"32112ae7bb749734c5b0451b66c23de7a3d85529"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2651cdd47396ff574b492c13fb70273dc40cf906","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"from keystoneclient.v3 import client"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"MANAGEMENT_URL \u003d os.getenv(\u0027OS_AUTH_URL\u0027, \u0027http://localhost:35357/v3\u0027)"},{"line_number":18,"context_line":"SERVICE_TOKEN \u003d os.getenv(\u0027OS_SERVICE_TOKEN\u0027, \u0027openstack\u0027)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2BfA4%3D","line":17,"in_reply_to":"AAAAWH%2F%2Bg8g%3D","updated":"2014-03-26 20:34:01.000000000","message":"agreed","commit_id":"32112ae7bb749734c5b0451b66c23de7a3d85529"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"0816f5254265eb209eb6826b1e2d233ad297181f","unresolved":false,"context_lines":[{"line_number":64,"context_line":"    for endpoint in admin_client.endpoints.list():"},{"line_number":65,"context_line":"        admin_client.endpoints.delete(endpoint)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    for service in admin_client.services.list():"},{"line_number":68,"context_line":"        admin_client.services.delete(service)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2BaLU%3D","line":67,"updated":"2014-03-27 00:39:06.000000000","message":"same for this","commit_id":"d83ff44fd0f1692c254aee035bdf963c270ecf2b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"bc4bd3d32026d991fbcf3286524eb1a49db6e6d5","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    OS_SERVICE_ENDPOINT \u003d os.environ[\u0027OS_SERVICE_ENDPOINT\u0027]"},{"line_number":19,"context_line":"    OS_SERVICE_TOKEN \u003d os.environ[\u0027OS_SERVICE_TOKEN\u0027]"},{"line_number":20,"context_line":"except KeyError as e:"},{"line_number":21,"context_line":"    raise SystemExit(\u0027%s environment variables not set.\u0027 % e.message)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def tear_down_service_catalog(admin_client):"}],"source_content_type":"text/x-python","patch_set":14,"id":"1ae5cdf2_7e9dc065","line":21,"updated":"2014-06-03 20:01:42.000000000","message":"should this be moved into a function or in \t\n\n    if __name__ \u003d\u003d \u0027__main__\u0027:\n        # check env vars\n        check_env_variables()\n        main()\n\nso that it\u0027s clear it is suppose to be done at the beginning of the script?","commit_id":"7c8fe13a864093acd81966612cf58374b5b0e8a4"}]}
