)]}'
{"glance/cmd/pecan_api.py":[{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"a3173317316adc6c85db194c8d8e404bc911ad6b","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.StrOpt(\u0027bind_host\u0027, default\u003d\u00270.0.0.0\u0027,"},{"line_number":34,"context_line":"               help\u003d_(\u0027Address to bind the server.  Useful when \u0027"},{"line_number":35,"context_line":"                      \u0027selecting a particular network interface.\u0027)),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027bind_port\u0027,"},{"line_number":37,"context_line":"               help\u003d_(\u0027The port on which the server will listen.\u0027)),"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F8x%2BM%3D","line":36,"updated":"2013-12-20 12:29:42.000000000","message":"It would be nice to have default port too, I believe glance have one, conventionally","commit_id":"c943cb74322d514fbbda649139c6ebbcdd526a1d"},{"author":{"_account_id":5950,"name":"Ilya Shakhat","email":"shakhat@gmail.com","username":"shakhat"},"change_message_id":"984d2e4823caa06e5dff7abec6b7e996b4d2ae23","unresolved":false,"context_lines":[{"line_number":56,"context_line":""},{"line_number":57,"context_line":"CONF \u003d cfg.CONF"},{"line_number":58,"context_line":"CONF.register_opts(bind_opts)"},{"line_number":59,"context_line":"CONF.register_opts(socket_opts)"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"# If ../glance/__init__.py exists, add ../ to Python search path, so that"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F8yCY%3D","line":59,"updated":"2013-12-20 11:44:23.000000000","message":"In runtime fails on this line with \u0027duplicate option: tcp_keepidle\u0027 error. See general review comment for more details","commit_id":"c943cb74322d514fbbda649139c6ebbcdd526a1d"},{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"d267ff056e06babdbc1fa541779d72a6597452f3","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    cfg.StrOpt(\u0027bind_host\u0027, default\u003d\u00270.0.0.0\u0027,"},{"line_number":34,"context_line":"               help\u003d_(\u0027Address to bind the server.  Useful when \u0027"},{"line_number":35,"context_line":"                      \u0027selecting a particular network interface.\u0027)),"},{"line_number":36,"context_line":"    cfg.IntOpt(\u0027bind_port\u0027,"},{"line_number":37,"context_line":"               help\u003d_(\u0027The port on which the server will listen.\u0027)),"},{"line_number":38,"context_line":"]"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F8j4%3D","line":36,"updated":"2013-12-26 15:22:33.000000000","message":"I see u specifed 9292 as default port in pe/config.py. \nBut no reference here. So what port will be used in case it wont be provided?","commit_id":"2117a4e447c16cbe0179be93c1399c1ad35f753c"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"52cd0afe85e7629914bb8856c461ddb45883ddbb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import sys"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":"from wsgiref import simple_server"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from glance.common import config"},{"line_number":28,"context_line":"from glance.openstack.common import log"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FxgU%3D","line":25,"updated":"2014-01-08 16:46:10.000000000","message":"Hmm, why are we using wsgiref HTTP-server implementation here? I\u0027m not sure, this is the best choice for production installations. We probably want to use either eventlet, or fastcgi/uwsgi+production http server for this instead.","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"355336b36e102ca28abf988768585fa6850089cc","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import sys"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from oslo.config import cfg"},{"line_number":25,"context_line":"from wsgiref import simple_server"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"from glance.common import config"},{"line_number":28,"context_line":"from glance.openstack.common import log"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FuIQ%3D","line":25,"in_reply_to":"AAAAUH%2F%2FxgU%3D","updated":"2014-01-09 07:57:05.000000000","message":"uwsgi can be used with pecan without any specific modifications, just config.py is required, but there probably will be problems with  oslo.config\n\n+1 for eventlet httpserver here","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"52cd0afe85e7629914bb8856c461ddb45883ddbb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from glance.pe.api import app"},{"line_number":30,"context_line":"import glance.store"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Some of the options are registered glance.common.wsgi invocation of which is"},{"line_number":33,"context_line":"# hardcoded to glance.store."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FxeM%3D","line":32,"updated":"2014-01-08 16:46:10.000000000","message":"I think, this comment only confuses people :)","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"615c4027539371d019304962114f79c03c6119a7","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from glance.pe.api import app"},{"line_number":30,"context_line":"import glance.store"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"# Some of the options are registered glance.common.wsgi invocation of which is"},{"line_number":33,"context_line":"# hardcoded to glance.store."},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Frho%3D","line":32,"in_reply_to":"AAAAUH%2F%2FxeM%3D","updated":"2014-01-09 17:25:49.000000000","message":"Removed","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"52cd0afe85e7629914bb8856c461ddb45883ddbb","unresolved":false,"context_lines":[{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# If ../glance/__init__.py exists, add ../ to Python search path, so that"},{"line_number":40,"context_line":"# it will override what happens to be installed in /usr/(local/)lib/python..."},{"line_number":41,"context_line":"possible_topdir \u003d os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),"},{"line_number":42,"context_line":"                                   os.pardir,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Fxho%3D","line":39,"updated":"2014-01-08 16:46:10.000000000","message":"I\u0027m not sure, why this is needed.","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"615c4027539371d019304962114f79c03c6119a7","unresolved":false,"context_lines":[{"line_number":36,"context_line":"CONF \u003d cfg.CONF"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"# If ../glance/__init__.py exists, add ../ to Python search path, so that"},{"line_number":40,"context_line":"# it will override what happens to be installed in /usr/(local/)lib/python..."},{"line_number":41,"context_line":"possible_topdir \u003d os.path.normpath(os.path.join(os.path.abspath(sys.argv[0]),"},{"line_number":42,"context_line":"                                   os.pardir,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Frhg%3D","line":39,"in_reply_to":"AAAAUH%2F%2Fxho%3D","updated":"2014-01-09 17:25:49.000000000","message":"Removed","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"}],"glance/pe/api/app.py":[{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"a3173317316adc6c85db194c8d8e404bc911ad6b","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class VersionSelectorApplication(object):"},{"line_number":50,"context_line":"    def __init__(self):"},{"line_number":51,"context_line":"        #only v2 is supported"},{"line_number":52,"context_line":"        pc \u003d get_pecan_config()"},{"line_number":53,"context_line":"        self.v2 \u003d setup_app(pecan_config\u003dpc)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F8x4Y%3D","line":51,"updated":"2013-12-20 12:29:42.000000000","message":"v1 will be deprecated in Icehouse?\nIn any case in VersionSelector you should route reqeust based on environ variable, and in case v1 will be deprecated raise appropriate exception.\n\nSee ceilometer implementation for reference","commit_id":"c943cb74322d514fbbda649139c6ebbcdd526a1d"},{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"d267ff056e06babdbc1fa541779d72a6597452f3","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class VersionSelectorApplication(object):"},{"line_number":50,"context_line":"    def __init__(self):"},{"line_number":51,"context_line":"        #only v2 is supported"},{"line_number":52,"context_line":"        pc \u003d get_pecan_config()"},{"line_number":53,"context_line":"        self.v2 \u003d setup_app(pecan_config\u003dpc)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F8jU%3D","line":51,"updated":"2013-12-26 15:22:33.000000000","message":"Please provide workaround to serve v1","commit_id":"2117a4e447c16cbe0179be93c1399c1ad35f753c"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"63d66c1d40afaf0e5dc9069e2861090223ccd4ae","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"class VersionSelectorApplication(object):"},{"line_number":50,"context_line":"    def __init__(self):"},{"line_number":51,"context_line":"        #only v2 is supported"},{"line_number":52,"context_line":"        pc \u003d get_pecan_config()"},{"line_number":53,"context_line":"        self.v2 \u003d setup_app(pecan_config\u003dpc)"},{"line_number":54,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F8R4%3D","line":51,"in_reply_to":"AAAAT3%2F%2F8jU%3D","updated":"2013-12-26 16:57:06.000000000","message":"After the discussion with Mark and Boris we decided to drop v1 for pecan api","commit_id":"2117a4e447c16cbe0179be93c1399c1ad35f753c"}],"glance/pe/api/config.py":[{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"508318becea8d4085770b26bc56aa0d7c19fb1ed","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    \u0027root\u0027: \u0027glance.pe.api.controllers.root.RootController\u0027,"},{"line_number":22,"context_line":"    \u0027modules\u0027: [\u0027glance.pe.api\u0027],"},{"line_number":23,"context_line":"    \u0027static_root\u0027: \u0027%(confdir)s/public\u0027,"},{"line_number":24,"context_line":"    \u0027template_path\u0027: \u0027%(confdir)s/glance/pe/api/templates\u0027,"},{"line_number":25,"context_line":"    \u0027debug\u0027: False,"},{"line_number":26,"context_line":"    \u0027enable_acl\u0027: True,"},{"line_number":27,"context_line":"    \u0027acl_public_routes\u0027: [\u0027/\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FuMk%3D","line":24,"updated":"2014-01-09 07:54:07.000000000","message":"you dont need static root and template path options","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"91477f5b660729a0730a7f109809911456bd8dc5","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    \u0027root\u0027: \u0027glance.pe.api.controllers.root.RootController\u0027,"},{"line_number":22,"context_line":"    \u0027modules\u0027: [\u0027glance.pe.api\u0027],"},{"line_number":23,"context_line":"    \u0027static_root\u0027: \u0027%(confdir)s/public\u0027,"},{"line_number":24,"context_line":"    \u0027template_path\u0027: \u0027%(confdir)s/glance/pe/api/templates\u0027,"},{"line_number":25,"context_line":"    \u0027debug\u0027: False,"},{"line_number":26,"context_line":"    \u0027enable_acl\u0027: True,"},{"line_number":27,"context_line":"    \u0027acl_public_routes\u0027: [\u0027/\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FYFI%3D","line":24,"in_reply_to":"AAAAUH%2F%2Fr2c%3D","updated":"2014-01-14 13:38:35.000000000","message":"This directories dont even exist\n\nThis options should be used if there some kind of StaticMiddleware","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"615c4027539371d019304962114f79c03c6119a7","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    \u0027root\u0027: \u0027glance.pe.api.controllers.root.RootController\u0027,"},{"line_number":22,"context_line":"    \u0027modules\u0027: [\u0027glance.pe.api\u0027],"},{"line_number":23,"context_line":"    \u0027static_root\u0027: \u0027%(confdir)s/public\u0027,"},{"line_number":24,"context_line":"    \u0027template_path\u0027: \u0027%(confdir)s/glance/pe/api/templates\u0027,"},{"line_number":25,"context_line":"    \u0027debug\u0027: False,"},{"line_number":26,"context_line":"    \u0027enable_acl\u0027: True,"},{"line_number":27,"context_line":"    \u0027acl_public_routes\u0027: [\u0027/\u0027],"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Fr2c%3D","line":24,"in_reply_to":"AAAAUH%2F%2FuMk%3D","updated":"2014-01-09 17:25:49.000000000","message":"Pecan rises an exception when these options unset.","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"508318becea8d4085770b26bc56aa0d7c19fb1ed","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    \u0027modules\u0027: [\u0027glance.pe.api\u0027],"},{"line_number":23,"context_line":"    \u0027static_root\u0027: \u0027%(confdir)s/public\u0027,"},{"line_number":24,"context_line":"    \u0027template_path\u0027: \u0027%(confdir)s/glance/pe/api/templates\u0027,"},{"line_number":25,"context_line":"    \u0027debug\u0027: False,"},{"line_number":26,"context_line":"    \u0027enable_acl\u0027: True,"},{"line_number":27,"context_line":"    \u0027acl_public_routes\u0027: [\u0027/\u0027],"},{"line_number":28,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FuMg%3D","line":25,"updated":"2014-01-09 07:54:07.000000000","message":"maybe use cfg.CONF.debug here?","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"615c4027539371d019304962114f79c03c6119a7","unresolved":false,"context_lines":[{"line_number":22,"context_line":"    \u0027modules\u0027: [\u0027glance.pe.api\u0027],"},{"line_number":23,"context_line":"    \u0027static_root\u0027: \u0027%(confdir)s/public\u0027,"},{"line_number":24,"context_line":"    \u0027template_path\u0027: \u0027%(confdir)s/glance/pe/api/templates\u0027,"},{"line_number":25,"context_line":"    \u0027debug\u0027: False,"},{"line_number":26,"context_line":"    \u0027enable_acl\u0027: True,"},{"line_number":27,"context_line":"    \u0027acl_public_routes\u0027: [\u0027/\u0027],"},{"line_number":28,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Fr2g%3D","line":25,"in_reply_to":"AAAAUH%2F%2FuMg%3D","updated":"2014-01-09 17:25:49.000000000","message":"Done","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"}],"glance/pe/api/controllers/v2/__init__.py":[{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"a3173317316adc6c85db194c8d8e404bc911ad6b","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAATn%2F8x1Q%3D","line":1,"updated":"2013-12-20 12:29:42.000000000","message":"IMO it will be better to use something like v2/base.py and name it BaseController","commit_id":"c943cb74322d514fbbda649139c6ebbcdd526a1d"},{"author":{"_account_id":6849,"name":"Roman Podoliaka","email":"roman.podoliaka@gmail.com","username":"rpodolyaka"},"change_message_id":"52cd0afe85e7629914bb8856c461ddb45883ddbb","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class Controller(rest.RestController):"},{"line_number":27,"context_line":"    \"\"\"Version 2 API controller root.\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    #@wsme_pecan.wsexpose(\u0027json\u0027)"},{"line_number":30,"context_line":"    @pecan.expose(\u0027json\u0027)"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        return {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Fxc8%3D","line":29,"updated":"2014-01-08 16:46:10.000000000","message":"stale comment?","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"615c4027539371d019304962114f79c03c6119a7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class Controller(rest.RestController):"},{"line_number":27,"context_line":"    \"\"\"Version 2 API controller root.\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    #@wsme_pecan.wsexpose(\u0027json\u0027)"},{"line_number":30,"context_line":"    @pecan.expose(\u0027json\u0027)"},{"line_number":31,"context_line":"    def get(self):"},{"line_number":32,"context_line":"        return {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Fr2E%3D","line":29,"in_reply_to":"AAAAUH%2F%2Fxc8%3D","updated":"2014-01-09 17:25:49.000000000","message":"Done","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"}],"glance/pe/api/middleware/__init__.py":[{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"508318becea8d4085770b26bc56aa0d7c19fb1ed","unresolved":false,"context_lines":[{"line_number":21,"context_line":"AuthTokenMiddleware \u003d auth_token.AuthTokenMiddleware"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"__all__ \u003d (ParsableErrorMiddleware,"},{"line_number":24,"context_line":"           AuthTokenMiddleware)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FuL4%3D","line":24,"updated":"2014-01-09 07:54:07.000000000","message":"This is ok, but why do you think this is better option then to do import from origin?","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"615c4027539371d019304962114f79c03c6119a7","unresolved":false,"context_lines":[{"line_number":21,"context_line":"AuthTokenMiddleware \u003d auth_token.AuthTokenMiddleware"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"__all__ \u003d (ParsableErrorMiddleware,"},{"line_number":24,"context_line":"           AuthTokenMiddleware)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Frh4%3D","line":24,"in_reply_to":"AAAAUH%2F%2FuL4%3D","updated":"2014-01-09 17:25:49.000000000","message":"Didn\u0027t understand.\nExplain please.","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"}],"glance/tests/unit/pecan_api/base.py":[{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"d267ff056e06babdbc1fa541779d72a6597452f3","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    \"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    SOURCE_DATA \u003d {\u0027test_source\u0027: {\u0027somekey\u0027: \u0027666\u0027}}"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    def path_get(self, project_file\u003dNone):"},{"line_number":41,"context_line":"        \"\"\"Get the absolute path to a file. Used for testing the API."},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAT3%2F%2F8gM%3D","line":39,"updated":"2013-12-26 15:22:33.000000000","message":"pecan goes with WebTest library included, It covers pretty much everything that is used for testing of wsgi application, please take a look","commit_id":"2117a4e447c16cbe0179be93c1399c1ad35f753c"},{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"508318becea8d4085770b26bc56aa0d7c19fb1ed","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            },"},{"line_number":85,"context_line":"        }"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        return pecan.testing.load_test_app(self.config)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _request_json(self, path, params, expect_errors\u003dFalse, headers\u003dNone,"},{"line_number":90,"context_line":"                      method\u003d\"post\", extra_environ\u003dNone, status\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FuLk%3D","line":87,"updated":"2014-01-09 07:54:07.000000000","message":"origin config should be used for test app creation","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"615c4027539371d019304962114f79c03c6119a7","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            },"},{"line_number":85,"context_line":"        }"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"        return pecan.testing.load_test_app(self.config)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def _request_json(self, path, params, expect_errors\u003dFalse, headers\u003dNone,"},{"line_number":90,"context_line":"                      method\u003d\"post\", extra_environ\u003dNone, status\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FrkY%3D","line":87,"in_reply_to":"AAAAUH%2F%2FuLk%3D","updated":"2014-01-09 17:25:49.000000000","message":"In this config acls disabled. Should i import origin config and then switch off acls?","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"508318becea8d4085770b26bc56aa0d7c19fb1ed","unresolved":false,"context_lines":[{"line_number":104,"context_line":"        :param path_prefix: prefix of the url path"},{"line_number":105,"context_line":"        \"\"\""},{"line_number":106,"context_line":"        full_path \u003d path_prefix + path"},{"line_number":107,"context_line":"        print(\u0027%s: %s %s\u0027 % (method.upper(), full_path, params))"},{"line_number":108,"context_line":"        response \u003d getattr(self.app, \"%s_json\" % method)("},{"line_number":109,"context_line":"            str(full_path),"},{"line_number":110,"context_line":"            params\u003dparams,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FuLI%3D","line":107,"updated":"2014-01-09 07:54:07.000000000","message":"this is should be logging, and I think debug is appropriate level for this","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"508318becea8d4085770b26bc56aa0d7c19fb1ed","unresolved":false,"context_lines":[{"line_number":113,"context_line":"            extra_environ\u003dextra_environ,"},{"line_number":114,"context_line":"            expect_errors\u003dexpect_errors"},{"line_number":115,"context_line":"        )"},{"line_number":116,"context_line":"        print(\u0027GOT:%s\u0027 % response)"},{"line_number":117,"context_line":"        return response"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def put_json(self, path, params, expect_errors\u003dFalse, headers\u003dNone,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FuLE%3D","line":116,"updated":"2014-01-09 07:54:07.000000000","message":"same","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"}],"glance/tests/unit/pecan_api/test_root.py":[{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"508318becea8d4085770b26bc56aa0d7c19fb1ed","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        data \u003d self.get_json(\u0027/\u0027, path_prefix\u003d\u0027\u0027)"},{"line_number":24,"context_line":"        self.assertEqual(data[\u0027default_version\u0027][\u0027id\u0027], \u0027v2\u0027)"},{"line_number":25,"context_line":"        # Check fields are not empty"},{"line_number":26,"context_line":"        [self.assertNotIn(f, [\u0027\u0027, []]) for f in data.keys()]"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class TestV2Root(base.FunctionalTest):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FuK0%3D","line":26,"updated":"2014-01-09 07:54:07.000000000","message":"Can you please clarify, what are you testing here?","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"615c4027539371d019304962114f79c03c6119a7","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        data \u003d self.get_json(\u0027/\u0027, path_prefix\u003d\u0027\u0027)"},{"line_number":24,"context_line":"        self.assertEqual(data[\u0027default_version\u0027][\u0027id\u0027], \u0027v2\u0027)"},{"line_number":25,"context_line":"        # Check fields are not empty"},{"line_number":26,"context_line":"        [self.assertNotIn(f, [\u0027\u0027, []]) for f in data.keys()]"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class TestV2Root(base.FunctionalTest):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Frl4%3D","line":26,"in_reply_to":"AAAAUH%2F%2FuK0%3D","updated":"2014-01-09 17:25:49.000000000","message":"Looks like dummy copy/paste...\nRemoved.\n(Can\u0027t see any sense in this check)","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":8907,"name":"Dmitry Shulyak","email":"dshulyak@mirantis.com","username":"dshulyak"},"change_message_id":"508318becea8d4085770b26bc56aa0d7c19fb1ed","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_get_v2_root(self):"},{"line_number":32,"context_line":"        data \u003d self.get_json(\u0027/\u0027)"},{"line_number":33,"context_line":"        assert data \u003d\u003d {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2FuKo%3D","line":33,"updated":"2014-01-09 07:54:07.000000000","message":"this is works, but it is better to use assertEqual method","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"},{"author":{"_account_id":9601,"name":"Oleh Anufriiev","email":"oanufriev@mirantis.com","username":"oanufriev"},"change_message_id":"615c4027539371d019304962114f79c03c6119a7","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def test_get_v2_root(self):"},{"line_number":32,"context_line":"        data \u003d self.get_json(\u0027/\u0027)"},{"line_number":33,"context_line":"        assert data \u003d\u003d {}"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAUH%2F%2Frlw%3D","line":33,"in_reply_to":"AAAAUH%2F%2FuKo%3D","updated":"2014-01-09 17:25:49.000000000","message":"Done","commit_id":"d2e41b31c91d8471f5ab344d45c75acfdbe5a538"}]}
