)]}'
{"examples/authenticate.py":[{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"f9b2356984c0761a78e46c65a11215730b70e4b4","unresolved":false,"context_lines":[{"line_number":55,"context_line":"        \u0027project_domain_name\u0027: opts.project_domain_name,"},{"line_number":56,"context_line":"        \u0027user_domain_name\u0027: opts.user_domain_name,"},{"line_number":57,"context_line":"        \u0027user_name\u0027: opts.user_name,"},{"line_number":58,"context_line":"        \u0027password\u0027: opts.password,"},{"line_number":59,"context_line":"        \u0027verify\u0027: opts.verify,"},{"line_number":60,"context_line":"        \u0027token\u0027: opts.token,"},{"line_number":61,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_74c5005b","line":58,"updated":"2014-10-14 21:57:21.000000000","message":"This is now handled in the user preference review.","commit_id":"17006aa370c5c6ffa1e65d5161cba403d4bfd294"}],"examples/session.py":[{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"f9b2356984c0761a78e46c65a11215730b70e4b4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \u0027project_domain_name\u0027: opts.project_domain_name,"},{"line_number":37,"context_line":"        \u0027user_domain_name\u0027: opts.user_domain_name,"},{"line_number":38,"context_line":"        \u0027user_name\u0027: opts.user_name,"},{"line_number":39,"context_line":"        \u0027password\u0027: opts.password,"},{"line_number":40,"context_line":"        \u0027verify\u0027: opts.verify,"},{"line_number":41,"context_line":"        \u0027token\u0027: opts.token,"},{"line_number":42,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_14859406","line":39,"updated":"2014-10-14 21:57:21.000000000","message":"This is handled in the user preference review","commit_id":"17006aa370c5c6ffa1e65d5161cba403d4bfd294"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"f9b2356984c0761a78e46c65a11215730b70e4b4","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \u0027project_domain_name\u0027: opts.project_domain_name,"},{"line_number":37,"context_line":"        \u0027user_domain_name\u0027: opts.user_domain_name,"},{"line_number":38,"context_line":"        \u0027user_name\u0027: opts.user_name,"},{"line_number":39,"context_line":"        \u0027password\u0027: opts.password,"},{"line_number":40,"context_line":"        \u0027verify\u0027: opts.verify,"},{"line_number":41,"context_line":"        \u0027token\u0027: opts.token,"},{"line_number":42,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_94c26451","line":39,"updated":"2014-10-14 21:57:21.000000000","message":"This is now handled in the user preference review.","commit_id":"17006aa370c5c6ffa1e65d5161cba403d4bfd294"}],"openstack/auth/service_filter.py":[{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"d79654a5d0e916689f5631fa5dd4c6ab3df04be1","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class ValidVersion(object):"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    def __init__(self, module, path):"},{"line_number":19,"context_line":"        \"\"\"\" Valid service version."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        :param string module: Module associated with version."}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_5032a810","line":18,"updated":"2014-10-15 20:45:20.000000000","message":"It seems like path is commonly going to be the same string as module. Should path\u003dNone, then if it is, just take self.path \u003d module?]","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"82fda421c84ed3f0d7a2ddb47257bbfb8268a90b","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class ValidVersion(object):"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    def __init__(self, module, path):"},{"line_number":19,"context_line":"        \"\"\"\" Valid service version."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"        :param string module: Module associated with version."}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_2de6a315","line":18,"in_reply_to":"baa201ad_5032a810","updated":"2014-10-24 20:21:24.000000000","message":"Done","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"cd835689a224aab2c20043122764acb84566a373","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def get_module(self):"},{"line_number":110,"context_line":"        module \u003d self.__class__.__module__.split(\u0027.\u0027)"},{"line_number":111,"context_line":"        module \u003d \".\".join(module[:-1])"},{"line_number":112,"context_line":"        module \u003d module + \".\" + self.valid_versions[0].module"},{"line_number":113,"context_line":"        return module"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def get_service_module(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_4bd11d56","line":112,"updated":"2014-10-15 20:24:48.000000000","message":"We are only supporting one valid_version right now, the first one in the list.  Matching valid_versions, user_preferences, what is in the service catalog, and what versions are available if we tried discovery are outside of the scope of this change.","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"82fda421c84ed3f0d7a2ddb47257bbfb8268a90b","unresolved":false,"context_lines":[{"line_number":109,"context_line":"    def get_module(self):"},{"line_number":110,"context_line":"        module \u003d self.__class__.__module__.split(\u0027.\u0027)"},{"line_number":111,"context_line":"        module \u003d \".\".join(module[:-1])"},{"line_number":112,"context_line":"        module \u003d module + \".\" + self.valid_versions[0].module"},{"line_number":113,"context_line":"        return module"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def get_service_module(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_6d726b12","line":112,"in_reply_to":"baa201ad_4bd11d56","updated":"2014-10-24 20:21:24.000000000","message":"Done","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"}],"openstack/connection.py":[{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"9baef3df29422025eaad4d2df8c5c1fd87f074b2","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        for service in self.sess.get_services():"},{"line_number":81,"context_line":"            self._load(service)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"    def _load(self, service):"},{"line_number":84,"context_line":"        attr_name \u003d service.get_service_module()"},{"line_number":85,"context_line":"        module \u003d service.get_module() + \".potentate\""},{"line_number":86,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_6bd316d5","line":83,"updated":"2014-09-13 18:33:35.000000000","message":"Here is where we actually load the potentates.","commit_id":"17006aa370c5c6ffa1e65d5161cba403d4bfd294"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"d79654a5d0e916689f5631fa5dd4c6ab3df04be1","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _load(self, service):"},{"line_number":93,"context_line":"        attr_name \u003d service.get_service_module()"},{"line_number":94,"context_line":"        module \u003d service.get_module() + \".potentate\""},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            __import__(module)"},{"line_number":97,"context_line":"            potentate \u003d getattr(sys.modules[module], \"Potentate\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_cb4b4d29","line":94,"updated":"2014-10-15 20:45:20.000000000","message":"Since the potentate stuff is implementation details and not a name by which people will interact with the services, I think they should probably be named _potentate files. I wouldn\u0027t want people to start trying to use and depend on \".potentate\" stuff directly","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"82fda421c84ed3f0d7a2ddb47257bbfb8268a90b","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _load(self, service):"},{"line_number":93,"context_line":"        attr_name \u003d service.get_service_module()"},{"line_number":94,"context_line":"        module \u003d service.get_module() + \".potentate\""},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            __import__(module)"},{"line_number":97,"context_line":"            potentate \u003d getattr(sys.modules[module], \"Potentate\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_f6eb8875","line":94,"in_reply_to":"baa201ad_cb4b4d29","updated":"2014-10-24 20:21:24.000000000","message":"Done","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"d79654a5d0e916689f5631fa5dd4c6ab3df04be1","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        attr_name \u003d service.get_service_module()"},{"line_number":94,"context_line":"        module \u003d service.get_module() + \".potentate\""},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            __import__(module)"},{"line_number":97,"context_line":"            potentate \u003d getattr(sys.modules[module], \"Potentate\")"},{"line_number":98,"context_line":"            setattr(self, attr_name, potentate(self.session))"},{"line_number":99,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_b0b83476","line":96,"updated":"2014-10-15 20:45:20.000000000","message":"If we could drop 2.6, this could be something like\n\n    module \u003d importlib.import_module(module_name)\n    potentate \u003d getattr(module, \"Potentate\")\n    ...\n\n(just putting it out there before I forget about it, not really suggesting anything here)","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"82fda421c84ed3f0d7a2ddb47257bbfb8268a90b","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        attr_name \u003d service.get_service_module()"},{"line_number":94,"context_line":"        module \u003d service.get_module() + \".potentate\""},{"line_number":95,"context_line":"        try:"},{"line_number":96,"context_line":"            __import__(module)"},{"line_number":97,"context_line":"            potentate \u003d getattr(sys.modules[module], \"Potentate\")"},{"line_number":98,"context_line":"            setattr(self, attr_name, potentate(self.session))"},{"line_number":99,"context_line":"        except Exception as e:"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_4d4cc7c8","line":96,"in_reply_to":"baa201ad_b0b83476","updated":"2014-10-24 20:21:24.000000000","message":"After some discussion, we are sticking with 2.6 support.","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"}],"openstack/identity/identity_service.py":[{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"d79654a5d0e916689f5631fa5dd4c6ab3df04be1","unresolved":false,"context_lines":[{"line_number":16,"context_line":"class IdentityService(service_filter.ServiceFilter):"},{"line_number":17,"context_line":"    \"\"\"The identity service.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    valid_versions \u003d [service_filter.ValidVersion(\u0027v3\u0027, \u0027v3\u0027)]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def __init__(self, **kwargs):"},{"line_number":22,"context_line":"        \"\"\"Create an image service.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_eb23b102","line":19,"updated":"2014-10-15 20:45:20.000000000","message":"Should this also have a v2 filter?","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"82fda421c84ed3f0d7a2ddb47257bbfb8268a90b","unresolved":false,"context_lines":[{"line_number":16,"context_line":"class IdentityService(service_filter.ServiceFilter):"},{"line_number":17,"context_line":"    \"\"\"The identity service.\"\"\""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    valid_versions \u003d [service_filter.ValidVersion(\u0027v3\u0027, \u0027v3\u0027)]"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def __init__(self, **kwargs):"},{"line_number":22,"context_line":"        \"\"\"Create an image service.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_2d1f8309","line":19,"in_reply_to":"baa201ad_eb23b102","updated":"2014-10-24 20:21:24.000000000","message":"Done","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"}],"openstack/identity/v3/potentate.py":[{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"d79ba862a91f41b51a8b8db54d40d7e00e109dd4","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from openstack.identity.v3 import project"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class Potentate(object):"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"    def __init__(self, session):"},{"line_number":19,"context_line":"        self.session \u003d session"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa98f980_eb4706a1","line":16,"updated":"2014-09-13 18:30:46.000000000","message":"This is the one with an actual implementation.","commit_id":"17006aa370c5c6ffa1e65d5161cba403d4bfd294"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"c67ea57e970ab090d622dd3ae6932dd3f90aeb27","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    def __init__(self, session):"},{"line_number":19,"context_line":"        self.session \u003d session"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def create_project(self, data\u003d{}):"},{"line_number":22,"context_line":"        obj \u003d project.Project(data)"},{"line_number":23,"context_line":"        obj.create(self.session)"},{"line_number":24,"context_line":"        return obj"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_3029a49b","line":21,"updated":"2014-10-15 20:14:39.000000000","message":"Should data be kwargs?  Alternatively, should it be initialized to None instead?  brian\u0027s earliere comment:\n\nhttps://review.openstack.org/#/c/121660/1/openstack/network/v2/potentate.py","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"1ef3aac1d428ccc1dc5ab10ec6920b0ac66e4124","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    def __init__(self, session):"},{"line_number":19,"context_line":"        self.session \u003d session"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def create_project(self, data\u003d{}):"},{"line_number":22,"context_line":"        obj \u003d project.Project(data)"},{"line_number":23,"context_line":"        obj.create(self.session)"},{"line_number":24,"context_line":"        return obj"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_4bbbdde4","line":21,"in_reply_to":"baa201ad_3029a49b","updated":"2014-10-15 20:29:33.000000000","message":"I guess the danger of using kwargs here would be if there was another parameter we needed to pass in here and there was a name conflict between it and a field in the object.","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"d79654a5d0e916689f5631fa5dd4c6ab3df04be1","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    def __init__(self, session):"},{"line_number":19,"context_line":"        self.session \u003d session"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def create_project(self, data\u003d{}):"},{"line_number":22,"context_line":"        obj \u003d project.Project(data)"},{"line_number":23,"context_line":"        obj.create(self.session)"},{"line_number":24,"context_line":"        return obj"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_cbceed82","line":21,"in_reply_to":"baa201ad_3029a49b","updated":"2014-10-15 20:45:20.000000000","message":"I think we have to make kwargs work. Ideally we just have the expected args as named arguments and **kwargs to grow into, or something like that. At the highest level people aren\u0027t going to want to stuff their arguments into a data dict argument.\n\nMy comment on that other review is bad - I was hooked on the mutable default argument instead of what was actually happening here/there.","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"82fda421c84ed3f0d7a2ddb47257bbfb8268a90b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"    def __init__(self, session):"},{"line_number":19,"context_line":"        self.session \u003d session"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    def create_project(self, data\u003d{}):"},{"line_number":22,"context_line":"        obj \u003d project.Project(data)"},{"line_number":23,"context_line":"        obj.create(self.session)"},{"line_number":24,"context_line":"        return obj"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_168bacc3","line":21,"in_reply_to":"baa201ad_cbceed82","updated":"2014-10-24 20:21:24.000000000","message":"Done","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"0e514f8eff2e88b8f3dbab6d09384abe2a6b2aca","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        obj.get(self.session)"},{"line_number":29,"context_line":"        return obj"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def head_project(self, r_id):"},{"line_number":32,"context_line":"        obj \u003d project.Project({\u0027id\u0027: r_id})"},{"line_number":33,"context_line":"        obj.get(self.session)"},{"line_number":34,"context_line":"        return obj"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_569682f1","line":31,"updated":"2014-10-21 16:14:56.000000000","message":"This might just be because this change is older than the jenkins server example, where you don\u0027t do this, but I think we should drop the HTTP verb naming. I don\u0027t actually see a HEAD request documented for /v3/projects/{id}, but I\u0027m guessing it\u0027s something like getting project metadata. get_metadata?","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"82fda421c84ed3f0d7a2ddb47257bbfb8268a90b","unresolved":false,"context_lines":[{"line_number":28,"context_line":"        obj.get(self.session)"},{"line_number":29,"context_line":"        return obj"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def head_project(self, r_id):"},{"line_number":32,"context_line":"        obj \u003d project.Project({\u0027id\u0027: r_id})"},{"line_number":33,"context_line":"        obj.get(self.session)"},{"line_number":34,"context_line":"        return obj"}],"source_content_type":"text/x-python","patch_set":3,"id":"9aa7fdbe_d6b4c483","line":31,"in_reply_to":"9aa7fdbe_569682f1","updated":"2014-10-24 20:21:24.000000000","message":"removed.","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"},{"author":{"_account_id":8257,"name":"Brian Curtin","email":"brian@python.org","username":"briancurtin"},"change_message_id":"d79654a5d0e916689f5631fa5dd4c6ab3df04be1","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def head_project(self, r_id):"},{"line_number":32,"context_line":"        obj \u003d project.Project({\u0027id\u0027: r_id})"},{"line_number":33,"context_line":"        obj.get(self.session)"},{"line_number":34,"context_line":"        return obj"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def update_project(self, data\u003d{}):"}],"source_content_type":"text/x-python","patch_set":3,"id":"baa201ad_f009dc31","line":33,"updated":"2014-10-15 20:45:20.000000000","message":"obj.head?","commit_id":"0dd997ebb3b603117ea013cffba16c70ef90cfed"}],"openstack/session.py":[{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"f9b2356984c0761a78e46c65a11215730b70e4b4","unresolved":false,"context_lines":[{"line_number":38,"context_line":"            self.preference \u003d preference"},{"line_number":39,"context_line":"        else:"},{"line_number":40,"context_line":"            self.preference \u003d user_preference.UserPreference()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def _request(self, path, method, service\u003dNone, authenticate\u003dTrue,"},{"line_number":43,"context_line":"                 **kwargs):"},{"line_number":44,"context_line":"        \"\"\"Send an HTTP request with the specified characteristics."}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_a6758299","line":41,"updated":"2014-10-14 21:57:21.000000000","message":"Handle this in https://review.openstack.org/#/c/121252/","commit_id":"17006aa370c5c6ffa1e65d5161cba403d4bfd294"}],"openstack/user_preference.py":[{"author":{"_account_id":8736,"name":"Terry Howe","email":"terrylhowe@gmail.com","username":"terrylhowe"},"change_message_id":"f9b2356984c0761a78e46c65a11215730b70e4b4","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        \"\"\"Get a service preference.\"\"\""},{"line_number":64,"context_line":"        return self._preferences.get(service, None)"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    def get_services(self):"},{"line_number":67,"context_line":"        services \u003d []"},{"line_number":68,"context_line":"        for name, service in six.iteritems(self._services):"},{"line_number":69,"context_line":"            services.append(service)"}],"source_content_type":"text/x-python","patch_set":2,"id":"baa201ad_54939c5a","line":66,"updated":"2014-10-14 21:57:21.000000000","message":"This should be added to the user preference review","commit_id":"17006aa370c5c6ffa1e65d5161cba403d4bfd294"}]}
