)]}'
{"etc/trove/trove-taskmanager.conf.sample":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"13c8343ac64e747505d7f4ba066ef76ad49c4873","unresolved":false,"context_lines":[{"line_number":48,"context_line":"# Service type to use when searching catalog."},{"line_number":49,"context_line":"#swift_service_type \u003d object-store"},{"line_number":50,"context_line":"# Service type to use when searching catalog."},{"line_number":51,"context_line":"#heat_service_type \u003d orchestration"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"# Config options for enabling volume service"},{"line_number":54,"context_line":"trove_volume_support \u003d True"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"AAAAW3%2F%2FPFU%3D","line":51,"updated":"2014-04-15 21:31:28.000000000","message":"i think service type is by the default mentioned in all clients, no need to do this explicitly, i guess","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"726fad92c21075e55b98619374768ca7f53548ec","unresolved":false,"context_lines":[{"line_number":48,"context_line":"# Service type to use when searching catalog."},{"line_number":49,"context_line":"#swift_service_type \u003d object-store"},{"line_number":50,"context_line":"# Service type to use when searching catalog."},{"line_number":51,"context_line":"#heat_service_type \u003d orchestration"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"# Config options for enabling volume service"},{"line_number":54,"context_line":"trove_volume_support \u003d True"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"AAAAXH%2F%2F%2Bj0%3D","line":51,"in_reply_to":"AAAAW3%2F%2FO70%3D","updated":"2014-04-16 05:32:07.000000000","message":"I\u0027m not talking about _url attributes. I\u0027m fine with them. But I think that *_servise_type is totally not needed.  They already mentioned in each pythonclient. So, I think you need to remove them","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"a9c425a75d98d6d5f0ad56668d43872f46c15991","unresolved":false,"context_lines":[{"line_number":48,"context_line":"# Service type to use when searching catalog."},{"line_number":49,"context_line":"#swift_service_type \u003d object-store"},{"line_number":50,"context_line":"# Service type to use when searching catalog."},{"line_number":51,"context_line":"#heat_service_type \u003d orchestration"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"# Config options for enabling volume service"},{"line_number":54,"context_line":"trove_volume_support \u003d True"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"AAAAW3%2F%2FO70%3D","line":51,"in_reply_to":"AAAAW3%2F%2FPFU%3D","updated":"2014-04-15 22:07:10.000000000","message":"With *_url in conf files, you have ability to select any URL. So you could choose v1 or v2 for cinder. Similarly you could choose v2 or v3 for nova. Without these values, how do I allow precise queries into the catalog?","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"cf62450fd33d48b9ed71e0328950aadc2fb82015","unresolved":false,"context_lines":[{"line_number":48,"context_line":"# Service type to use when searching catalog."},{"line_number":49,"context_line":"#swift_service_type \u003d object-store"},{"line_number":50,"context_line":"# Service type to use when searching catalog."},{"line_number":51,"context_line":"#heat_service_type \u003d orchestration"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"# Config options for enabling volume service"},{"line_number":54,"context_line":"trove_volume_support \u003d True"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"AAAAXH%2F%2F5hA%3D","line":51,"in_reply_to":"AAAAXH%2F%2F%2Bio%3D","updated":"2014-04-16 16:00:44.000000000","message":"So each of the *_service_type config opts have defaults. And the defaults are shown above in the conf file. Would it suffice if I changed the wording from:\n\n    # Service type to use when searching catalog.\n\nto\n\n    # Service type to use when searching catalog. Shown here is the default value.\n\nEach python-*client will simply take the URL given to them. And the URL for service type \"volume\" is different from the URL for service type \"volumev2\". To my knowledge, the way we\u0027re using the python-*clients, they never know about service types.\n\nIf there is an argument here, it should be that no one will ever change these service types and thus, they should be removed. Is that what you\u0027re saying? If so, keep in mind that removing them would provide LESS flexibility than the existing *_url opts.","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2e5a1e35a67d98b90e6fbc06d3fab00ee972bc10","unresolved":false,"context_lines":[{"line_number":48,"context_line":"# Service type to use when searching catalog."},{"line_number":49,"context_line":"#swift_service_type \u003d object-store"},{"line_number":50,"context_line":"# Service type to use when searching catalog."},{"line_number":51,"context_line":"#heat_service_type \u003d orchestration"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"# Config options for enabling volume service"},{"line_number":54,"context_line":"trove_volume_support \u003d True"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"AAAAXH%2F%2F%2Bio%3D","line":51,"in_reply_to":"AAAAXH%2F%2F%2Bj0%3D","updated":"2014-04-16 05:35:47.000000000","message":"I don\u0027t think that service type should be optional. As I know, service type is a part of the OpenStack program definition. So, it\u0027s totally static. And I don\u0027t think that it would changed","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"560bc39465132fdc45e325a181568429bba5ed59","unresolved":false,"context_lines":[{"line_number":67,"context_line":"# Region name of this node. Used when searching catalog. Default value is None."},{"line_number":68,"context_line":"#os_region_name \u003d RegionOne"},{"line_number":69,"context_line":"# Service type to use when searching catalog."},{"line_number":70,"context_line":"#nova_service_type \u003d compute"},{"line_number":71,"context_line":"# Service type to use when searching catalog."},{"line_number":72,"context_line":"#cinder_service_type \u003d volumev2"},{"line_number":73,"context_line":"# Service type to use when searching catalog."}],"source_content_type":"application/octet-stream","patch_set":20,"id":"7adec928_7bf4945a","line":70,"updated":"2014-05-20 01:05:45.000000000","message":"Can we change this to nova_compute_service_type? I think it\u0027s slightly better since we keep the 1:1 mapping between the service_type and the url strings, so that you\u0027d be able to transform one to another dynamically using simple string concatenation. \n\nExamples might help illustrate what I mean. We have:\n\n cinder_url \u003d\u003e cinder_service_type, and\n swift_url \u003d\u003e swift_service_type. \n\nSo why then is it:\n nova_compute_url \u003d\u003e nova_service_type?","commit_id":"49efa692d40fa354ab24a72adfaaf437bbf5637b"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"4b44cbbed808627f5ca2293850fbe14feaa96bdb","unresolved":false,"context_lines":[{"line_number":67,"context_line":"# Region name of this node. Used when searching catalog. Default value is None."},{"line_number":68,"context_line":"#os_region_name \u003d RegionOne"},{"line_number":69,"context_line":"# Service type to use when searching catalog."},{"line_number":70,"context_line":"#nova_service_type \u003d compute"},{"line_number":71,"context_line":"# Service type to use when searching catalog."},{"line_number":72,"context_line":"#cinder_service_type \u003d volumev2"},{"line_number":73,"context_line":"# Service type to use when searching catalog."}],"source_content_type":"application/octet-stream","patch_set":20,"id":"7adec928_56924d4c","line":70,"in_reply_to":"7adec928_7bf4945a","updated":"2014-05-20 01:49:50.000000000","message":"Done","commit_id":"49efa692d40fa354ab24a72adfaaf437bbf5637b"}],"etc/trove/trove.conf.sample":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"13c8343ac64e747505d7f4ba066ef76ad49c4873","unresolved":false,"context_lines":[{"line_number":64,"context_line":"# Service type to use when searching catalog."},{"line_number":65,"context_line":"#swift_service_type \u003d object-store"},{"line_number":66,"context_line":"# Service type to use when searching catalog."},{"line_number":67,"context_line":"#heat_service_type \u003d orchestration"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"# Config option for showing the IP address that nova doles out"},{"line_number":70,"context_line":"network_label_regex \u003d ^private$"}],"source_content_type":"application/octet-stream","patch_set":19,"id":"AAAAW3%2F%2FPFM%3D","line":67,"updated":"2014-04-15 21:31:28.000000000","message":"same, also, heat option here is not needed.","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"}],"trove/common/cfg.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                     \u0027taskmanager updates statuses, \u0027"},{"line_number":54,"context_line":"                     \u0027service status \u003d FAILED_TIMEOUT_GUESTAGENT, \u0027"},{"line_number":55,"context_line":"                     \u0027instance task status \u003d BUILDING_ERROR_TIMEOUT_GA\u0027),"},{"line_number":56,"context_line":"    cfg.StrOpt(\u0027nova_compute_url\u0027),"},{"line_number":57,"context_line":"    cfg.StrOpt(\u0027cinder_url\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027heat_url\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027swift_url\u0027),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3CA%3D","line":56,"updated":"2014-01-21 11:13:12.000000000","message":"We\u0027ve discussed this one, let defaults be, and override them from service catalog, or use them if service catalog hadn\u0027t public endpoint for given service","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"7395b704eca114685e202e4d52fa28503db939f5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                     \u0027taskmanager updates statuses, \u0027"},{"line_number":56,"context_line":"                     \u0027service status \u003d FAILED_TIMEOUT_GUESTAGENT, \u0027"},{"line_number":57,"context_line":"                     \u0027instance task status \u003d BUILDING_ERROR_TIMEOUT_GA\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027os_region_name\u0027, help\u003d\u0027region name of this node\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027nova_compute_url\u0027, help\u003d\u0027URL without the tenant segment\u0027),"},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027nova_service_type\u0027, default\u003d\u0027compute\u0027,"},{"line_number":61,"context_line":"               help\u003d\u0027Service type to use when searching catalog\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2F5HY%3D","line":58,"updated":"2014-02-24 09:02:14.000000000","message":"Maybe this should be exposed in the sample config? Even if it is a comment saying that the default value is None. It\u0027s still useful to know that it\u0027s configurable.","commit_id":"b2585f4d337a3868bedfd60fd7720ad980bed2ae"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"0efd868f99039979a98cc25ac277a1177d93e9ac","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                     \u0027taskmanager updates statuses, \u0027"},{"line_number":56,"context_line":"                     \u0027service status \u003d FAILED_TIMEOUT_GUESTAGENT, \u0027"},{"line_number":57,"context_line":"                     \u0027instance task status \u003d BUILDING_ERROR_TIMEOUT_GA\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027os_region_name\u0027, help\u003d\u0027region name of this node\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027nova_compute_url\u0027, help\u003d\u0027URL without the tenant segment\u0027),"},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027nova_service_type\u0027, default\u003d\u0027compute\u0027,"},{"line_number":61,"context_line":"               help\u003d\u0027Service type to use when searching catalog\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2FzTc%3D","line":58,"in_reply_to":"AAAAU3%2F%2F46A%3D","updated":"2014-02-24 18:14:16.000000000","message":"Done","commit_id":"b2585f4d337a3868bedfd60fd7720ad980bed2ae"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1df96ef23ef4f8c55933c58551a889e2139be2b7","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                     \u0027taskmanager updates statuses, \u0027"},{"line_number":56,"context_line":"                     \u0027service status \u003d FAILED_TIMEOUT_GUESTAGENT, \u0027"},{"line_number":57,"context_line":"                     \u0027instance task status \u003d BUILDING_ERROR_TIMEOUT_GA\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027os_region_name\u0027, help\u003d\u0027region name of this node\u0027),"},{"line_number":59,"context_line":"    cfg.StrOpt(\u0027nova_compute_url\u0027, help\u003d\u0027URL without the tenant segment\u0027),"},{"line_number":60,"context_line":"    cfg.StrOpt(\u0027nova_service_type\u0027, default\u003d\u0027compute\u0027,"},{"line_number":61,"context_line":"               help\u003d\u0027Service type to use when searching catalog\u0027),"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2F46A%3D","line":58,"in_reply_to":"AAAAU3%2F%2F5HY%3D","updated":"2014-02-24 09:06:19.000000000","message":"Agreed","commit_id":"b2585f4d337a3868bedfd60fd7720ad980bed2ae"}],"trove/common/remote.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from trove.common import exception"},{"line_number":20,"context_line":"from trove.openstack.common.importutils import import_class"},{"line_number":21,"context_line":"from trove.openstack.common import log as logging"},{"line_number":22,"context_line":"from cinderclient.v2 import client as CinderClient"},{"line_number":23,"context_line":"from heatclient.v1 import client as HeatClient"},{"line_number":24,"context_line":"from novaclient.v1_1.client import Client"},{"line_number":25,"context_line":"from swiftclient.client import Connection"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3Bw%3D","line":22,"updated":"2014-01-21 11:13:12.000000000","message":"blank line","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    if endpoint and endpoint.get(endpoint_type):"},{"line_number":67,"context_line":"        return endpoint[endpoint_type]"},{"line_number":68,"context_line":"    else:"},{"line_number":69,"context_line":"        raise exception.NoServiceEndpoint()"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"def dns_client(context):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3BE%3D","line":69,"updated":"2014-01-21 11:13:12.000000000","message":"we should be able to pass endpoint type into error mesage","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        url \u003d get_endpoint(context.service_catalog,"},{"line_number":85,"context_line":"                           service_type\u003d\u0027compute\u0027)"},{"line_number":86,"context_line":"    else:"},{"line_number":87,"context_line":"        url \u003d \"%s/%s/\" % (CONF.nova_compute_url, context.tenant)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    LOG.debug(\u0027Novaclient connection created using URL \"%s\" (from %s)\u0027 %"},{"line_number":90,"context_line":"              (url, \u0027conf\u0027 if CONF.nova_compute_url else \u0027catalog\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3As%3D","line":87,"updated":"2014-01-21 11:13:12.000000000","message":"please use correct formatting: \n\"%(nova_url)s/%(tenant)s/\" % {\u0027nova_url\u0027: CONF.nova_compute_url, \u0027tenant\u0027:  context.tenant}","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        url \u003d \"%s/%s/\" % (CONF.nova_compute_url, context.tenant)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    LOG.debug(\u0027Novaclient connection created using URL \"%s\" (from %s)\u0027 %"},{"line_number":90,"context_line":"              (url, \u0027conf\u0027 if CONF.nova_compute_url else \u0027catalog\u0027))"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    client \u003d Client(context.user, context.auth_token,"},{"line_number":93,"context_line":"                    project_id\u003dcontext.tenant, auth_url\u003dPROXY_AUTH_URL)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3Ag%3D","line":90,"updated":"2014-01-21 11:13:12.000000000","message":"keyword formatting, \n_() from gettextutils","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        url \u003d get_endpoint(context.service_catalog,"},{"line_number":113,"context_line":"                           service_type\u003d\u0027volumev2\u0027)"},{"line_number":114,"context_line":"    else:"},{"line_number":115,"context_line":"        url \u003d \"%s/%s/\" % (CONF.cinder_url, context.tenant)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    LOG.debug(\u0027Cinderclient connection created using URL \"%s\" (from %s)\u0027 %"},{"line_number":118,"context_line":"              (url, \u0027conf\u0027 if CONF.cinder_url else \u0027catalog\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3AA%3D","line":115,"updated":"2014-01-21 11:13:12.000000000","message":"same","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":114,"context_line":"    else:"},{"line_number":115,"context_line":"        url \u003d \"%s/%s/\" % (CONF.cinder_url, context.tenant)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    LOG.debug(\u0027Cinderclient connection created using URL \"%s\" (from %s)\u0027 %"},{"line_number":118,"context_line":"              (url, \u0027conf\u0027 if CONF.cinder_url else \u0027catalog\u0027))"},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"    client \u003d CinderClient.Client(context.user, context.auth_token,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3AI%3D","line":117,"updated":"2014-01-21 11:13:12.000000000","message":"same","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        url \u003d get_endpoint(context.service_catalog,"},{"line_number":131,"context_line":"                           service_type\u003d\u0027orchestration\u0027)"},{"line_number":132,"context_line":"    else:"},{"line_number":133,"context_line":"        url \u003d \"%s/%s/\" % (CONF.heat_url, context.tenant)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    LOG.debug(\u0027Heatclient connection created using URL \"%s\" (from %s)\u0027 %"},{"line_number":136,"context_line":"              (url, \u0027conf\u0027 if CONF.heat_url else \u0027catalog\u0027))"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B3AE%3D","line":133,"updated":"2014-01-21 11:13:12.000000000","message":"same","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        url \u003d \"%s/%s/\" % (CONF.heat_url, context.tenant)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"    LOG.debug(\u0027Heatclient connection created using URL \"%s\" (from %s)\u0027 %"},{"line_number":136,"context_line":"              (url, \u0027conf\u0027 if CONF.heat_url else \u0027catalog\u0027))"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"    client \u003d HeatClient.Client(token\u003dcontext.auth_token,"},{"line_number":139,"context_line":"                               os_no_client_auth\u003dTrue,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B2%2F8%3D","line":136,"updated":"2014-01-21 11:13:12.000000000","message":"same","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    else:"},{"line_number":149,"context_line":"        url \u003d CONF.swift_url + context.tenant"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    LOG.debug(\u0027Swiftclient connection created using URL \"%s\" (from %s)\u0027 %"},{"line_number":152,"context_line":"              (url, \u0027conf\u0027 if CONF.swift_url else \u0027catalog\u0027))"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    client \u003d Connection(preauthurl\u003durl,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B2%2Fw%3D","line":151,"updated":"2014-01-21 11:13:12.000000000","message":"same","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":9431,"name":"Khyati Sheth","email":"khysheth@ebaysf.com","username":"khysheth"},"change_message_id":"3bb3f4fa4dce94cc9810ecdb6f103d29485cd2a3","unresolved":false,"context_lines":[{"line_number":88,"context_line":"                           service_type\u003d\u0027compute\u0027)"},{"line_number":89,"context_line":"    except exception.NoServiceEndpoint:"},{"line_number":90,"context_line":"        from_conf \u003d True"},{"line_number":91,"context_line":"        url \u003d \u0027%(nova_url)s/%(tenant)s/\u0027 % {\u0027nova_url\u0027: CONF.nova_compute_url,"},{"line_number":92,"context_line":"                                            \u0027tenant\u0027: context.tenant}"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    LOG.debug(_(\u0027Novaclient connection created using URL %(url)s \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2ByQM%3D","line":91,"updated":"2014-01-22 06:31:10.000000000","message":"The trailing slash \u0027/\u0027 in the formatted url should be removed. \n\u0027%(nova_url)s/%(tenant)s/\u0027 should change to \u0027%(nova_url)s/%(tenant)s\u0027\n\nRefer - https://bugs.launchpad.net/trove/+bug/1271126 and https://review.openstack.org/#/c/68175/","commit_id":"1296fc021232b5564a0cf6b9ec85bdefce857df7"},{"author":{"_account_id":9431,"name":"Khyati Sheth","email":"khysheth@ebaysf.com","username":"khysheth"},"change_message_id":"3bb3f4fa4dce94cc9810ecdb6f103d29485cd2a3","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                           service_type\u003d\u0027volumev2\u0027)"},{"line_number":122,"context_line":"    except exception.NoServiceEndpoint:"},{"line_number":123,"context_line":"        from_conf \u003d True"},{"line_number":124,"context_line":"        url \u003d \u0027%(cinder_url)s/%(tenant)s/\u0027 % {\u0027cinder_url\u0027: CONF.cinder_url,"},{"line_number":125,"context_line":"                                              \u0027tenant\u0027: context.tenant}"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    LOG.debug(_(\u0027Cinderclient connection created using URL %(url)s \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2ByP4%3D","line":124,"updated":"2014-01-22 06:31:10.000000000","message":"The trailing slash \u0027/\u0027 in the formatted url should be removed. \u0027%(cinder_url)s/%(tenant)s/\u0027 should change to \u0027%(cinder_url)s/%(tenant)s\u0027\n\nRefer - https://bugs.launchpad.net/trove/+bug/1271126 and https://review.openstack.org/#/c/68175/","commit_id":"1296fc021232b5564a0cf6b9ec85bdefce857df7"},{"author":{"_account_id":9431,"name":"Khyati Sheth","email":"khysheth@ebaysf.com","username":"khysheth"},"change_message_id":"3bb3f4fa4dce94cc9810ecdb6f103d29485cd2a3","unresolved":false,"context_lines":[{"line_number":144,"context_line":"                           service_type\u003d\u0027orchestration\u0027)"},{"line_number":145,"context_line":"    except exception.NoServiceEndpoint:"},{"line_number":146,"context_line":"        from_conf \u003d True"},{"line_number":147,"context_line":"        url \u003d \u0027%(heat_url)s/%(tenant)s/\u0027 % {\u0027heat_url\u0027: CONF.heat_url,"},{"line_number":148,"context_line":"                                            \u0027tenant\u0027: context.tenant}"},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"    LOG.debug(_(\u0027Heatclient connection created using URL %(url)s \u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUH%2F%2ByPg%3D","line":147,"updated":"2014-01-22 06:31:10.000000000","message":"The trailing slash \u0027/\u0027 in the formatted url should be removed. \u0027%(heat_url)s/%(tenant)s/\u0027 should change to \u0027%(heat_url)s/%(tenant)s\u0027\n\nRefer - https://bugs.launchpad.net/trove/+bug/127112 and https://review.openstack.org/#/c/68175/","commit_id":"1296fc021232b5564a0cf6b9ec85bdefce857df7"},{"author":{"_account_id":1925,"name":"Vipul Sabhaya","email":"vipuls@gmail.com","username":"vipuls"},"change_message_id":"7c1d2a669fb838c917a941197ddcab5d9336bad8","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        url \u003d get_endpoint(context.service_catalog,"},{"line_number":88,"context_line":"                           service_type\u003d\u0027compute\u0027)"},{"line_number":89,"context_line":"    except exception.NoServiceEndpoint:"},{"line_number":90,"context_line":"        from_conf \u003d True"},{"line_number":91,"context_line":"        url \u003d \u0027%(nova_url)s/%(tenant)s\u0027 % {\u0027nova_url\u0027: CONF.nova_compute_url,"},{"line_number":92,"context_line":"                                           \u0027tenant\u0027: context.tenant}"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2Brwg%3D","line":90,"updated":"2014-01-23 08:03:50.000000000","message":"I propose we reverse this logic.  If we think of the catalog as being the default location, then we should be able to override the catalog values via CONF.","commit_id":"6b97597f6e2f01ad5ca4f24f1267b6b69042633f"},{"author":{"_account_id":1925,"name":"Vipul Sabhaya","email":"vipuls@gmail.com","username":"vipuls"},"change_message_id":"7c1d2a669fb838c917a941197ddcab5d9336bad8","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    LOG.debug(_(\u0027Novaclient connection created using URL %(url)s \u0027"},{"line_number":95,"context_line":"                \u0027(from %(source)s)\u0027) %"},{"line_number":96,"context_line":"              {\u0027url\u0027: url,"},{"line_number":97,"context_line":"               \u0027source\u0027: \u0027conf\u0027 if from_conf else \u0027catalog\u0027})"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    client \u003d Client(context.user, context.auth_token,"},{"line_number":100,"context_line":"                    project_id\u003dcontext.tenant, auth_url\u003dPROXY_AUTH_URL)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2BrwY%3D","line":97,"updated":"2014-01-23 08:03:50.000000000","message":"Seems a bit too verbose to log this each time we obtain a client.  It will happen a lot.","commit_id":"6b97597f6e2f01ad5ca4f24f1267b6b69042633f"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"2a8ba4547a0b4332c118fc3811d1fede3fa70b89","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def cinder_client(context):"},{"line_number":131,"context_line":"    if not CONF.cinder_url:"},{"line_number":132,"context_line":"        url \u003d get_endpoint(context.service_catalog,"},{"line_number":133,"context_line":"                           service_type\u003dCONF.cinder_service_type,"},{"line_number":134,"context_line":"                           endpoint_region\u003dCONF.os_region_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAUX%2F%2BbA8%3D","line":131,"updated":"2014-02-21 08:44:19.000000000","message":"testing for the negative condition first looks like an anti-pattern","commit_id":"5dff4c119ba7cf0a2d907a215e2db6175f04346b"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"620a888e2e65bf923e044def9119c0b81512104a","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"def cinder_client(context):"},{"line_number":131,"context_line":"    if not CONF.cinder_url:"},{"line_number":132,"context_line":"        url \u003d get_endpoint(context.service_catalog,"},{"line_number":133,"context_line":"                           service_type\u003dCONF.cinder_service_type,"},{"line_number":134,"context_line":"                           endpoint_region\u003dCONF.os_region_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAU3%2F%2F618%3D","line":131,"in_reply_to":"AAAAUX%2F%2BbA8%3D","updated":"2014-02-24 03:33:32.000000000","message":"Good point. Thank you.","commit_id":"5dff4c119ba7cf0a2d907a215e2db6175f04346b"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"7395b704eca114685e202e4d52fa28503db939f5","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":"    Adds trailing slash if necessary."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    if not url:"},{"line_number":42,"context_line":"        return url"},{"line_number":43,"context_line":"    if not url.endswith(\u0027/\u0027):"},{"line_number":44,"context_line":"        return \u0027%(url)s/\u0027 % {\u0027url\u0027: url}"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2F48E%3D","line":41,"updated":"2014-02-24 09:02:14.000000000","message":"is this ever false, though? You\u0027re checking that it isn\u0027t before calling normalize_url. I think that\u0027s a better place to check for this anyway. It doesn\u0027t make sense to call this on None.","commit_id":"b2585f4d337a3868bedfd60fd7720ad980bed2ae"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"0efd868f99039979a98cc25ac277a1177d93e9ac","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":"    Adds trailing slash if necessary."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    if not url:"},{"line_number":42,"context_line":"        return url"},{"line_number":43,"context_line":"    if not url.endswith(\u0027/\u0027):"},{"line_number":44,"context_line":"        return \u0027%(url)s/\u0027 % {\u0027url\u0027: url}"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2Fz5o%3D","line":41,"in_reply_to":"AAAAU3%2F%2F48E%3D","updated":"2014-02-24 18:14:16.000000000","message":"I don\u0027t see any harm in a function validating its input. That said, I have removed it.","commit_id":"b2585f4d337a3868bedfd60fd7720ad980bed2ae"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"7395b704eca114685e202e4d52fa28503db939f5","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"def swift_client(context):"},{"line_number":165,"context_line":"    if CONF.swift_url:"},{"line_number":166,"context_line":"        url \u003d \u0027%(swift_url)s%(tenant)s\u0027 % {\u0027swift_url\u0027: CONF.swift_url,"},{"line_number":167,"context_line":"                                           \u0027tenant\u0027: context.tenant}"},{"line_number":168,"context_line":"    else:"},{"line_number":169,"context_line":"        url \u003d get_endpoint(context.service_catalog,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2F48o%3D","line":166,"updated":"2014-02-24 09:02:14.000000000","message":"missed a normalize_url call here?","commit_id":"b2585f4d337a3868bedfd60fd7720ad980bed2ae"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"0efd868f99039979a98cc25ac277a1177d93e9ac","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"def swift_client(context):"},{"line_number":165,"context_line":"    if CONF.swift_url:"},{"line_number":166,"context_line":"        url \u003d \u0027%(swift_url)s%(tenant)s\u0027 % {\u0027swift_url\u0027: CONF.swift_url,"},{"line_number":167,"context_line":"                                           \u0027tenant\u0027: context.tenant}"},{"line_number":168,"context_line":"    else:"},{"line_number":169,"context_line":"        url \u003d get_endpoint(context.service_catalog,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2FzSo%3D","line":166,"in_reply_to":"AAAAU3%2F%2F45E%3D","updated":"2014-02-24 18:14:16.000000000","message":"Swift URL has a different format than the others. I\u0027ve added a comment stating that.","commit_id":"b2585f4d337a3868bedfd60fd7720ad980bed2ae"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1df96ef23ef4f8c55933c58551a889e2139be2b7","unresolved":false,"context_lines":[{"line_number":163,"context_line":""},{"line_number":164,"context_line":"def swift_client(context):"},{"line_number":165,"context_line":"    if CONF.swift_url:"},{"line_number":166,"context_line":"        url \u003d \u0027%(swift_url)s%(tenant)s\u0027 % {\u0027swift_url\u0027: CONF.swift_url,"},{"line_number":167,"context_line":"                                           \u0027tenant\u0027: context.tenant}"},{"line_number":168,"context_line":"    else:"},{"line_number":169,"context_line":"        url \u003d get_endpoint(context.service_catalog,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2F45E%3D","line":166,"in_reply_to":"AAAAU3%2F%2F48o%3D","updated":"2014-02-24 09:06:19.000000000","message":"agreed","commit_id":"b2585f4d337a3868bedfd60fd7720ad980bed2ae"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"b32d746030c71f397b557666257d42e624f95752","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def normalize_url(url):"},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":"    Adds trailing slash if necessary."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    if not url.endswith(\u0027/\u0027):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2Fr2I%3D","line":38,"updated":"2014-02-25 09:34:13.000000000","message":"Hm, might want to follow pep 257 on the docstring here: http://legacy.python.org/dev/peps/pep-0257/#one-line-docstrings","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"5bd9f992230882aa2e415a88e9397ddf8ad931bb","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def normalize_url(url):"},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":"    Adds trailing slash if necessary."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    if not url.endswith(\u0027/\u0027):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2FriQ%3D","line":38,"in_reply_to":"AAAAU3%2F%2Fr2I%3D","updated":"2014-02-25 09:50:42.000000000","message":"this rule is not required, please take a look at OS hacking rules.","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"5bee327b3b1bfafe01e84692168bc6f5e738710c","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def normalize_url(url):"},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":"    Adds trailing slash if necessary."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    if not url.endswith(\u0027/\u0027):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2FnRQ%3D","line":38,"in_reply_to":"AAAAU3%2F%2FrLI%3D","updated":"2014-02-25 17:06:35.000000000","message":"Done","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"902e9190c0a03247f82ce6e174a5431862c2f88c","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def normalize_url(url):"},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":"    Adds trailing slash if necessary."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    if not url.endswith(\u0027/\u0027):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2FrLI%3D","line":38,"in_reply_to":"AAAAU3%2F%2FrSw%3D","updated":"2014-02-25 10:29:37.000000000","message":"Until it\u0027s not marked as error with checking with flake8, it\u0027s not the error.","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"c28341d43120361eae2ca5a696f96787a6fd5f2c","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def normalize_url(url):"},{"line_number":38,"context_line":"    \"\"\""},{"line_number":39,"context_line":"    Adds trailing slash if necessary."},{"line_number":40,"context_line":"    \"\"\""},{"line_number":41,"context_line":"    if not url.endswith(\u0027/\u0027):"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2FrSw%3D","line":38,"in_reply_to":"AAAAU3%2F%2FriQ%3D","updated":"2014-02-25 10:17:03.000000000","message":"It\u0027s not required, but it\u0027s nice. Which OS hacking rules do you mean? http://docs.openstack.org/developer/hacking/#docstrings","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"d8c0fc3dbac343308a34e8474284afe9a582efb3","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        return url"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def get_endpoint(service_catalog, service_type\u003dNone, endpoint_region\u003dNone,"},{"line_number":44,"context_line":"                 endpoint_type\u003d\u0027publicURL\u0027):"},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    Select an endpoint from the service catalog"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAXH%2F%2FcNI%3D","line":43,"updated":"2014-04-21 19:03:09.000000000","message":"There is a method that gives you the URL for specific service_type, endpoint_type and region. It is sc.url_for(). You can use this method instead of getting a list and returning the first one.","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"72a0bb5bd004cb383a8120734f17fadee3c4ca6b","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        return url"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"def get_endpoint(service_catalog, service_type\u003dNone, endpoint_region\u003dNone,"},{"line_number":44,"context_line":"                 endpoint_type\u003d\u0027publicURL\u0027):"},{"line_number":45,"context_line":"    \"\"\""},{"line_number":46,"context_line":"    Select an endpoint from the service catalog"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAXH%2F%2FcJY%3D","line":43,"in_reply_to":"AAAAXH%2F%2FcNI%3D","updated":"2014-04-21 19:15:28.000000000","message":"So sc.url_for() will quietly return the first of potentially multiple matches. The code I found in glance (on which this is based) did not allow that to happen which I thought was better. It insisted on exactly one match or it would throw the RegionAmbiguity exception. Thoughts?","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":5293,"name":"Nikhil","email":"SlickNik@gmail.com","username":"slicknik"},"change_message_id":"d1ab645479e3ce196f2e0732141485e345eb7e26","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    if CONF.nova_compute_url:"},{"line_number":92,"context_line":"        url \u003d \u0027%(nova_url)s%(tenant)s\u0027 % {"},{"line_number":93,"context_line":"            \u0027nova_url\u0027: normalize_url(CONF.nova_compute_url),"},{"line_number":94,"context_line":"            \u0027tenant\u0027: context.tenant}"},{"line_number":95,"context_line":"    else:"},{"line_number":96,"context_line":"        url \u003d get_endpoint(context.service_catalog,"},{"line_number":97,"context_line":"                           service_type\u003dCONF.nova_service_type,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7adec928_0713035d","line":94,"updated":"2014-05-08 08:41:21.000000000","message":"It may be a good idea to move this URL generation code to the get_endpoint function as well. Then we don\u0027t need to repeat this logic for every service type.","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"ad753edccd308a52d73765c4325b06397e18eda8","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    if CONF.nova_compute_url:"},{"line_number":92,"context_line":"        url \u003d \u0027%(nova_url)s%(tenant)s\u0027 % {"},{"line_number":93,"context_line":"            \u0027nova_url\u0027: normalize_url(CONF.nova_compute_url),"},{"line_number":94,"context_line":"            \u0027tenant\u0027: context.tenant}"},{"line_number":95,"context_line":"    else:"},{"line_number":96,"context_line":"        url \u003d get_endpoint(context.service_catalog,"},{"line_number":97,"context_line":"                           service_type\u003dCONF.nova_service_type,"}],"source_content_type":"text/x-python","patch_set":19,"id":"7adec928_eea50005","line":94,"in_reply_to":"7adec928_0713035d","updated":"2014-05-08 22:48:10.000000000","message":"Some observations:\n\n- The existing code constructs the URL in each method (i.e. no utility function).\n- Swift URLs have a different template and would not be able to take advantage of the utility function.","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"f35c9c04db2f007b42fb8a94d5699d7cbfd5b890","unresolved":false,"context_lines":[{"line_number":151,"context_line":"def swift_client(context):"},{"line_number":152,"context_line":"    if CONF.swift_url:"},{"line_number":153,"context_line":"        # swift_url has a different format so doesn\u0027t need to be normalized"},{"line_number":154,"context_line":"        url \u003d \u0027%(swift_url)s%(tenant)s\u0027 % {\u0027swift_url\u0027: CONF.swift_url,"},{"line_number":155,"context_line":"                                           \u0027tenant\u0027: context.tenant}"},{"line_number":156,"context_line":"    else:"},{"line_number":157,"context_line":"        url \u003d get_endpoint(context.service_catalog,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAXX%2F%2F%2FF8%3D","line":154,"updated":"2014-04-24 20:40:21.000000000","message":"i mean while your at it normalize this url as well ;-)","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"ad5e49a8d04e11db604b5708700d7b5d498e9f03","unresolved":false,"context_lines":[{"line_number":151,"context_line":"def swift_client(context):"},{"line_number":152,"context_line":"    if CONF.swift_url:"},{"line_number":153,"context_line":"        # swift_url has a different format so doesn\u0027t need to be normalized"},{"line_number":154,"context_line":"        url \u003d \u0027%(swift_url)s%(tenant)s\u0027 % {\u0027swift_url\u0027: CONF.swift_url,"},{"line_number":155,"context_line":"                                           \u0027tenant\u0027: context.tenant}"},{"line_number":156,"context_line":"    else:"},{"line_number":157,"context_line":"        url \u003d get_endpoint(context.service_catalog,"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAXX%2F%2F%2Bvo%3D","line":154,"in_reply_to":"AAAAXX%2F%2F%2FF8%3D","updated":"2014-04-24 21:34:04.000000000","message":"The Swift URL is not like the others. The original code to the left is:\n\n    OBJECT_STORE_URL + context.tenant\n\nwhere\n\n    OBJECT_STORE_URL \u003d CONF.swift_url\n\nand the conf file\n\n    swift_url \u003d http://localhost:8080/v1/AUTH_\n\nSo I didn\u0027t need to check for trailing slash on Swift URL.","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"2383f22927eb1ed351ea80b146dac79ffc5d3ce3","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    if len(urls) \u003e 1:"},{"line_number":74,"context_line":"        raise exception.RegionAmbiguity(service_type\u003dservice_type,"},{"line_number":75,"context_line":"                                        endpoint_region\u003dendpoint_region)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    return urls[0]"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7adec928_7bd9f455","line":75,"updated":"2014-05-20 00:31:47.000000000","message":"do you need this? \n\nDo you care about Region Ambiguity or if there are multiple possible regions you should just pick any one?","commit_id":"49efa692d40fa354ab24a72adfaaf437bbf5637b"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"4b44cbbed808627f5ca2293850fbe14feaa96bdb","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    if len(urls) \u003e 1:"},{"line_number":74,"context_line":"        raise exception.RegionAmbiguity(service_type\u003dservice_type,"},{"line_number":75,"context_line":"                                        endpoint_region\u003dendpoint_region)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    return urls[0]"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"7adec928_36a781a8","line":75,"in_reply_to":"7adec928_7bd9f455","updated":"2014-05-20 01:49:50.000000000","message":"Hi Jamie. Thanks for the feedback. I talked with Nikhil and he was OK with the exception. In a way, it is similar to the explicitness required by the existing CONF.*_url options.","commit_id":"49efa692d40fa354ab24a72adfaaf437bbf5637b"}],"trove/common/wsgi.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":687,"context_line":""},{"line_number":688,"context_line":"    def process_request(self, request):"},{"line_number":689,"context_line":"        service_catalog \u003d None"},{"line_number":690,"context_line":"        if request.headers.get(\u0027X-Service-Catalog\u0027) is not None:"},{"line_number":691,"context_line":"            try:"},{"line_number":692,"context_line":"                catalog_header \u003d request.headers.get(\u0027X-Service-Catalog\u0027)"},{"line_number":693,"context_line":"                service_catalog \u003d jsonutils.loads(catalog_header)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B2%2BM%3D","line":690,"updated":"2014-01-21 11:13:12.000000000","message":"if request.headers.get(\u0027X-Service-Catalog\u0027) would be enough","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"b32d746030c71f397b557666257d42e624f95752","unresolved":false,"context_lines":[{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    def process_request(self, request):"},{"line_number":695,"context_line":"        service_catalog \u003d None"},{"line_number":696,"context_line":"        print(request.headers)"},{"line_number":697,"context_line":"        if request.headers.get(\u0027X-Service-Catalog\u0027):"},{"line_number":698,"context_line":"            try:"},{"line_number":699,"context_line":"                catalog_header \u003d request.headers.get(\u0027X-Service-Catalog\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2Frv0%3D","line":696,"updated":"2014-02-25 09:34:13.000000000","message":"shouldn\u0027t this be a LOG call? instead of print?","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"5bee327b3b1bfafe01e84692168bc6f5e738710c","unresolved":false,"context_lines":[{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    def process_request(self, request):"},{"line_number":695,"context_line":"        service_catalog \u003d None"},{"line_number":696,"context_line":"        print(request.headers)"},{"line_number":697,"context_line":"        if request.headers.get(\u0027X-Service-Catalog\u0027):"},{"line_number":698,"context_line":"            try:"},{"line_number":699,"context_line":"                catalog_header \u003d request.headers.get(\u0027X-Service-Catalog\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2FnQ4%3D","line":696,"in_reply_to":"AAAAU3%2F%2Frh0%3D","updated":"2014-02-25 17:06:35.000000000","message":"The print was accidental in the first place. I removed it.","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"5bd9f992230882aa2e415a88e9397ddf8ad931bb","unresolved":false,"context_lines":[{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    def process_request(self, request):"},{"line_number":695,"context_line":"        service_catalog \u003d None"},{"line_number":696,"context_line":"        print(request.headers)"},{"line_number":697,"context_line":"        if request.headers.get(\u0027X-Service-Catalog\u0027):"},{"line_number":698,"context_line":"            try:"},{"line_number":699,"context_line":"                catalog_header \u003d request.headers.get(\u0027X-Service-Catalog\u0027)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2Frh0%3D","line":696,"in_reply_to":"AAAAU3%2F%2Frv0%3D","updated":"2014-02-25 09:50:42.000000000","message":"yes, agreed","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"b32d746030c71f397b557666257d42e624f95752","unresolved":false,"context_lines":[{"line_number":696,"context_line":"        print(request.headers)"},{"line_number":697,"context_line":"        if request.headers.get(\u0027X-Service-Catalog\u0027):"},{"line_number":698,"context_line":"            try:"},{"line_number":699,"context_line":"                catalog_header \u003d request.headers.get(\u0027X-Service-Catalog\u0027)"},{"line_number":700,"context_line":"                service_catalog \u003d jsonutils.loads(catalog_header)"},{"line_number":701,"context_line":"            except ValueError:"},{"line_number":702,"context_line":"                raise webob.exc.HTTPInternalServerError("}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2Fru8%3D","line":699,"updated":"2014-02-25 09:34:13.000000000","message":"I think this line should be outside the try block. Can\u0027t think of a way for it to throw a ValueError and it would make the code more precise, too.\n\nYou could even pull it out of the if block so you can do \u0027if catalog_header\u0027 and don\u0027t have to repeat the dictionary lookup.","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"5bee327b3b1bfafe01e84692168bc6f5e738710c","unresolved":false,"context_lines":[{"line_number":696,"context_line":"        print(request.headers)"},{"line_number":697,"context_line":"        if request.headers.get(\u0027X-Service-Catalog\u0027):"},{"line_number":698,"context_line":"            try:"},{"line_number":699,"context_line":"                catalog_header \u003d request.headers.get(\u0027X-Service-Catalog\u0027)"},{"line_number":700,"context_line":"                service_catalog \u003d jsonutils.loads(catalog_header)"},{"line_number":701,"context_line":"            except ValueError:"},{"line_number":702,"context_line":"                raise webob.exc.HTTPInternalServerError("}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2FnQc%3D","line":699,"in_reply_to":"AAAAU3%2F%2FrhU%3D","updated":"2014-02-25 17:06:35.000000000","message":"One lookup now. Lookup call now with default so no exceptions should occur there.","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"5bd9f992230882aa2e415a88e9397ddf8ad931bb","unresolved":false,"context_lines":[{"line_number":696,"context_line":"        print(request.headers)"},{"line_number":697,"context_line":"        if request.headers.get(\u0027X-Service-Catalog\u0027):"},{"line_number":698,"context_line":"            try:"},{"line_number":699,"context_line":"                catalog_header \u003d request.headers.get(\u0027X-Service-Catalog\u0027)"},{"line_number":700,"context_line":"                service_catalog \u003d jsonutils.loads(catalog_header)"},{"line_number":701,"context_line":"            except ValueError:"},{"line_number":702,"context_line":"                raise webob.exc.HTTPInternalServerError("}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2FrhU%3D","line":699,"in_reply_to":"AAAAU3%2F%2Fru8%3D","updated":"2014-02-25 09:50:42.000000000","message":"agreed with lookup, but disagree about try except block","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"cc58a0c1da5e9dd6ac5ea96d0034f4ce547b8d1f","unresolved":false,"context_lines":[{"line_number":693,"context_line":""},{"line_number":694,"context_line":"    def process_request(self, request):"},{"line_number":695,"context_line":"        service_catalog \u003d None"},{"line_number":696,"context_line":"        catalog_header \u003d request.headers.get(\u0027X-Service-Catalog\u0027, None)"},{"line_number":697,"context_line":"        if catalog_header:"},{"line_number":698,"context_line":"            try:"},{"line_number":699,"context_line":"                service_catalog \u003d jsonutils.loads(catalog_header)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAU3%2F%2FgA8%3D","line":696,"updated":"2014-02-26 09:16:21.000000000","message":"the None isn\u0027t needed here, because it\u0027s already the default argument to get, but leaving it is fine, too I guess. It just makes me always go look at the documentation and see if None is indeed the default argument or not.","commit_id":"7dd6e4704c37fc3f9c354533f437c5ed5850bb7a"}],"trove/openstack/common/context.py":[{"author":{"_account_id":1925,"name":"Vipul Sabhaya","email":"vipuls@gmail.com","username":"vipuls"},"change_message_id":"7c1d2a669fb838c917a941197ddcab5d9336bad8","unresolved":false,"context_lines":[{"line_number":41,"context_line":"    def __init__(self, auth_token\u003dNone, user\u003dNone, tenant\u003dNone, domain\u003dNone,"},{"line_number":42,"context_line":"                 user_domain\u003dNone, project_domain\u003dNone, is_admin\u003dFalse,"},{"line_number":43,"context_line":"                 read_only\u003dFalse, show_deleted\u003dFalse, request_id\u003dNone,"},{"line_number":44,"context_line":"                 instance_uuid\u003dNone, service_catalog\u003dNone):"},{"line_number":45,"context_line":"        self.auth_token \u003d auth_token"},{"line_number":46,"context_line":"        self.user \u003d user"},{"line_number":47,"context_line":"        self.tenant \u003d tenant"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUH%2F%2Brv4%3D","line":44,"updated":"2014-01-23 08:03:50.000000000","message":"We can\u0027t change this class.  Everything in trove/openstack/common is copied directly from oslo-incubator.  look at trove/common/context.py instead.","commit_id":"6b97597f6e2f01ad5ca4f24f1267b6b69042633f"}],"trove/tests/unittests/common/test_remote.py":[{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"7395b704eca114685e202e4d52fa28503db939f5","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.assertEqual(\u0027%s/%s\u0027 % (cinder_url_from_conf, tenant_from_ctx),"},{"line_number":295,"context_line":"                         client.client.management_url)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        cinder_url_from_conf \u003d \u0027http://example.com/\u0027"},{"line_number":298,"context_line":"        cfg.CONF.set_override(\u0027cinder_url\u0027, cinder_url_from_conf)"},{"line_number":299,"context_line":"        client \u003d remote.create_cinder_client("},{"line_number":300,"context_line":"            TroveContext(tenant\u003dtenant_from_ctx))"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2F5GA%3D","line":297,"updated":"2014-02-24 09:02:14.000000000","message":"Maybe this should be a different test? It contains another assertion. Also, it took me a while to figure out how it\u0027s different from the assertion above until I noticed the slash. If it\u0027s split, the name of the test would point this out. Same for the other ones below.","commit_id":"b2585f4d337a3868bedfd60fd7720ad980bed2ae"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"0efd868f99039979a98cc25ac277a1177d93e9ac","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.assertEqual(\u0027%s/%s\u0027 % (cinder_url_from_conf, tenant_from_ctx),"},{"line_number":295,"context_line":"                         client.client.management_url)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        cinder_url_from_conf \u003d \u0027http://example.com/\u0027"},{"line_number":298,"context_line":"        cfg.CONF.set_override(\u0027cinder_url\u0027, cinder_url_from_conf)"},{"line_number":299,"context_line":"        client \u003d remote.create_cinder_client("},{"line_number":300,"context_line":"            TroveContext(tenant\u003dtenant_from_ctx))"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAU3%2F%2FzSA%3D","line":297,"in_reply_to":"AAAAU3%2F%2F5GA%3D","updated":"2014-02-24 18:14:16.000000000","message":"Done","commit_id":"b2585f4d337a3868bedfd60fd7720ad980bed2ae"},{"author":{"_account_id":2340,"name":"Ionut Artarisi","email":"iartarisi@suse.cz","username":"mapleoin"},"change_message_id":"b32d746030c71f397b557666257d42e624f95752","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.assertEqual(\u0027%s/%s\u0027 % (cinder_url_from_conf, tenant_from_ctx),"},{"line_number":295,"context_line":"                         client.client.management_url)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        cinder_url_from_conf \u003d \u0027http://example.com/\u0027"},{"line_number":298,"context_line":"        cfg.CONF.set_override(\u0027cinder_url\u0027, cinder_url_from_conf)"},{"line_number":299,"context_line":"        client \u003d remote.create_cinder_client("},{"line_number":300,"context_line":"            TroveContext(tenant\u003dtenant_from_ctx))"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2Frrc%3D","line":297,"updated":"2014-02-25 09:34:13.000000000","message":"looks like you created the new test, but still left the old code here","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"5bee327b3b1bfafe01e84692168bc6f5e738710c","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        self.assertEqual(\u0027%s/%s\u0027 % (cinder_url_from_conf, tenant_from_ctx),"},{"line_number":295,"context_line":"                         client.client.management_url)"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        cinder_url_from_conf \u003d \u0027http://example.com/\u0027"},{"line_number":298,"context_line":"        cfg.CONF.set_override(\u0027cinder_url\u0027, cinder_url_from_conf)"},{"line_number":299,"context_line":"        client \u003d remote.create_cinder_client("},{"line_number":300,"context_line":"            TroveContext(tenant\u003dtenant_from_ctx))"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAU3%2F%2FnQU%3D","line":297,"in_reply_to":"AAAAU3%2F%2Frrc%3D","updated":"2014-02-25 17:06:35.000000000","message":"Done","commit_id":"26b40c9c34d1c20bdd833996a696015d89210b99"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"f35c9c04db2f007b42fb8a94d5699d7cbfd5b890","unresolved":false,"context_lines":[{"line_number":510,"context_line":"                          TroveContext())"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    def test_create_with_conf_override(self):"},{"line_number":513,"context_line":"        swift_url_from_conf \u003d \u0027http://example.com/AUTH_\u0027"},{"line_number":514,"context_line":"        tenant_from_ctx \u003d \u0027abc\u0027"},{"line_number":515,"context_line":"        cfg.CONF.set_override(\u0027swift_url\u0027, swift_url_from_conf)"},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAXX%2F%2F%2FCM%3D","line":513,"updated":"2014-04-24 20:40:21.000000000","message":"i think you missed a similar test for testing with(out) trailing slash in the url...","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"ad5e49a8d04e11db604b5708700d7b5d498e9f03","unresolved":false,"context_lines":[{"line_number":510,"context_line":"                          TroveContext())"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":"    def test_create_with_conf_override(self):"},{"line_number":513,"context_line":"        swift_url_from_conf \u003d \u0027http://example.com/AUTH_\u0027"},{"line_number":514,"context_line":"        tenant_from_ctx \u003d \u0027abc\u0027"},{"line_number":515,"context_line":"        cfg.CONF.set_override(\u0027swift_url\u0027, swift_url_from_conf)"},{"line_number":516,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAXX%2F%2F%2Buc%3D","line":513,"in_reply_to":"AAAAXX%2F%2F%2FCM%3D","updated":"2014-04-24 21:34:04.000000000","message":"See my response in trove/common/remote.py.","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"f35c9c04db2f007b42fb8a94d5699d7cbfd5b890","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"class TestEndpoints(testtools.TestCase):"},{"line_number":538,"context_line":"    \"\"\""},{"line_number":539,"context_line":"    Copied from glance/tests/unit/test_auth.py."},{"line_number":540,"context_line":"    \"\"\""},{"line_number":541,"context_line":"    def setUp(self):"},{"line_number":542,"context_line":"        super(TestEndpoints, self).setUp()"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAXX%2F%2F%2FCI%3D","line":539,"updated":"2014-04-24 20:40:21.000000000","message":"cheater :-P","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"ad5e49a8d04e11db604b5708700d7b5d498e9f03","unresolved":false,"context_lines":[{"line_number":536,"context_line":""},{"line_number":537,"context_line":"class TestEndpoints(testtools.TestCase):"},{"line_number":538,"context_line":"    \"\"\""},{"line_number":539,"context_line":"    Copied from glance/tests/unit/test_auth.py."},{"line_number":540,"context_line":"    \"\"\""},{"line_number":541,"context_line":"    def setUp(self):"},{"line_number":542,"context_line":"        super(TestEndpoints, self).setUp()"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAXX%2F%2F%2BuI%3D","line":539,"in_reply_to":"AAAAXX%2F%2F%2FCI%3D","updated":"2014-04-24 21:34:04.000000000","message":":)","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"}],"trove/tests/unittests/common/test_wsgi.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":19,"context_line":"import testtools"},{"line_number":20,"context_line":"from testtools.matchers import Equals, Is, Not"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from proboscis import test"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"@test"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B2%2FA%3D","line":22,"updated":"2014-01-21 11:13:12.000000000","message":"for units we use testtools","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"80de9895125f2068f5d848f1d7833e6b80e905f7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from proboscis import test"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"@test"},{"line_number":26,"context_line":"class TestWsgi(testtools.TestCase):"},{"line_number":27,"context_line":"    def test_process_request(self):"},{"line_number":28,"context_line":"        middleware \u003d wsgi.ContextMiddleware(\"test_trove\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2B2%2Bk%3D","line":25,"updated":"2014-01-21 11:13:12.000000000","message":"no need to add decorator","commit_id":"43bab3cb67ee30c144cf559df7682363f5cff82c"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"f35c9c04db2f007b42fb8a94d5699d7cbfd5b890","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            \u0027X-User\u0027: \u0027do not use - deprecated\u0027,"},{"line_number":31,"context_line":"            \u0027X-User-ID\u0027: user_id,"},{"line_number":32,"context_line":"            \u0027X-Auth-Token\u0027: token,"},{"line_number":33,"context_line":"            \u0027X-Service-Catalog\u0027: \u0027[]\u0027"},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":"        req.environ \u003d {}"},{"line_number":36,"context_line":"        # invocation"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAXX%2F%2F%2FBk%3D","line":33,"updated":"2014-04-24 20:40:21.000000000","message":"at first i didnt think \u0027[]\u0027 was proper json then i was sadly mistaken... i was thinking something like this: \u0027{}\u0027 \nBut this is fine...","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"},{"author":{"_account_id":9683,"name":"Mat Lowery","email":"mlowery@ebaysf.com","username":"mat-lowery"},"change_message_id":"ad5e49a8d04e11db604b5708700d7b5d498e9f03","unresolved":false,"context_lines":[{"line_number":30,"context_line":"            \u0027X-User\u0027: \u0027do not use - deprecated\u0027,"},{"line_number":31,"context_line":"            \u0027X-User-ID\u0027: user_id,"},{"line_number":32,"context_line":"            \u0027X-Auth-Token\u0027: token,"},{"line_number":33,"context_line":"            \u0027X-Service-Catalog\u0027: \u0027[]\u0027"},{"line_number":34,"context_line":"        }"},{"line_number":35,"context_line":"        req.environ \u003d {}"},{"line_number":36,"context_line":"        # invocation"}],"source_content_type":"text/x-python","patch_set":19,"id":"AAAAXX%2F%2F%2Bto%3D","line":33,"in_reply_to":"AAAAXX%2F%2F%2FBk%3D","updated":"2014-04-24 21:34:04.000000000","message":"I double-checked the taskmanager log since you had me second-guessing. An excerpt:\n\n    ...\n    X-Roles: anotherrole,_member_,Member,heat_stack_owner\n    X-Service-Catalog: [...]\n    X-Tenant: demo\n    ...\n\nSo this is correct.","commit_id":"62d9bd8aa04aae622c409685ffc17640f72e560f"}]}
