)]}'
{"marconiclient/common/http.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"e4e5b0118b2eb4d344edcd3a5da9bbe9db309132","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"Implements an enumeration that is compatible with python-requests."},{"line_number":2,"context_line":"# At a low-level"},{"line_number":3,"context_line":"\u003e\u003e\u003e def request(self, method, url, ...):"},{"line_number":4,"context_line":"\u003e\u003e\u003e     call \u003d getattr(requests, http.lookup(method))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FljQ%3D","line":1,"updated":"2013-07-16 08:12:13.000000000","message":"pls, add license header","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"42721f41906fa23dde347aadcd99fbbfd3008392","unresolved":false,"context_lines":[{"line_number":1,"context_line":"\"\"\"Implements an enumeration that is compatible with python-requests."},{"line_number":2,"context_line":"# At a low-level"},{"line_number":3,"context_line":"\u003e\u003e\u003e def request(self, method, url, ...):"},{"line_number":4,"context_line":"\u003e\u003e\u003e     call \u003d getattr(requests, http.lookup(method))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FkLw%3D","line":1,"in_reply_to":"AAAAP3%2F%2FljQ%3D","updated":"2013-07-16 14:31:16.000000000","message":"Will do.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"e4e5b0118b2eb4d344edcd3a5da9bbe9db309132","unresolved":false,"context_lines":[{"line_number":6,"context_line":"# At the user level:"},{"line_number":7,"context_line":"\u003e\u003e\u003e self.connection.request(Http.get, url\u003d..., ...)"},{"line_number":8,"context_line":"\"\"\""},{"line_number":9,"context_line":"from flufl.enum import Enum"},{"line_number":10,"context_line":"from six.moves import zip"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Flg8%3D","line":9,"updated":"2013-07-16 08:12:13.000000000","message":"Do we really need is? I\u0027d prefer creating a small class with those attrs instead of adding a new dependency just for this usage. If you think this is going to be used somewhere else, then I\u0027m fine with it.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"42721f41906fa23dde347aadcd99fbbfd3008392","unresolved":false,"context_lines":[{"line_number":6,"context_line":"# At the user level:"},{"line_number":7,"context_line":"\u003e\u003e\u003e self.connection.request(Http.get, url\u003d..., ...)"},{"line_number":8,"context_line":"\"\"\""},{"line_number":9,"context_line":"from flufl.enum import Enum"},{"line_number":10,"context_line":"from six.moves import zip"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FkKI%3D","line":9,"in_reply_to":"AAAAP3%2F%2Flg8%3D","updated":"2013-07-16 14:31:16.000000000","message":"I think this will become necessary. However, it seems that a better place for this is in the common libraries, as Alex pointed out below.\n\nRegarding necessity, wherever an enumeration can be used to represent a set of well known states, I think that should be used instead of an int or a str, so we don\u0027t accidentally make a decision based on something that isn\u0027t a valid state (e.g., method\u003d\u0027gety\u0027).\n\nI suspect the use of enums will also be useful for the zmq side of the transport.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"e4e5b0118b2eb4d344edcd3a5da9bbe9db309132","unresolved":false,"context_lines":[{"line_number":10,"context_line":"from six.moves import zip"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"_methods \u003d \u0027head get put post delete patch options\u0027.split()"},{"line_number":14,"context_line":"Http \u003d Enum(\u0027Http\u0027, _methods)"},{"line_number":15,"context_line":"_enum_to_method \u003d dict((k, v) for k, v in zip(Http, _methods))"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Fljg%3D","line":13,"updated":"2013-07-16 08:12:13.000000000","message":"Can you make this a list instead of calling split on a string?\n\nAlso, can you make global variable\u0027s names uppercase?","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"42721f41906fa23dde347aadcd99fbbfd3008392","unresolved":false,"context_lines":[{"line_number":10,"context_line":"from six.moves import zip"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"_methods \u003d \u0027head get put post delete patch options\u0027.split()"},{"line_number":14,"context_line":"Http \u003d Enum(\u0027Http\u0027, _methods)"},{"line_number":15,"context_line":"_enum_to_method \u003d dict((k, v) for k, v in zip(Http, _methods))"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FkKE%3D","line":13,"in_reply_to":"AAAAP3%2F%2Fljg%3D","updated":"2013-07-16 14:31:16.000000000","message":"Will do. :)","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":7680,"name":"Alex Gaynor","email":"alex.gaynor@gmail.com","username":"alex_gaynor"},"change_message_id":"f89dcd8526f084a0e2ccc3453450d646d518c8a0","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"_methods \u003d \u0027head get put post delete patch options\u0027.split()"},{"line_number":14,"context_line":"Http \u003d Enum(\u0027Http\u0027, _methods)"},{"line_number":15,"context_line":"_enum_to_method \u003d dict((k, v) for k, v in zip(Http, _methods))"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def lookup(enum_value):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Fmws%3D","line":15,"updated":"2013-07-15 22:29:34.000000000","message":"Should this be a part of openstack.common?","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"42721f41906fa23dde347aadcd99fbbfd3008392","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"_methods \u003d \u0027head get put post delete patch options\u0027.split()"},{"line_number":14,"context_line":"Http \u003d Enum(\u0027Http\u0027, _methods)"},{"line_number":15,"context_line":"_enum_to_method \u003d dict((k, v) for k, v in zip(Http, _methods))"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def lookup(enum_value):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FkJ0%3D","line":15,"in_reply_to":"AAAAP3%2F%2Fmws%3D","updated":"2013-07-16 14:31:16.000000000","message":"Yes, I believe you\u0027re right. This has general applicability.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"e4e5b0118b2eb4d344edcd3a5da9bbe9db309132","unresolved":false,"context_lines":[{"line_number":21,"context_line":"    \u003e\u003e\u003e lookup(Http.get)"},{"line_number":22,"context_line":"    \u0027get\u0027"},{"line_number":23,"context_line":"    \u003e\u003e\u003e lookup(0)"},{"line_number":24,"context_line":"    KeyError"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    return _enum_to_method[enum_value]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FljM%3D","line":24,"updated":"2013-07-16 08:12:13.000000000","message":"Could you pls document enum with :param: and KeyError with :raise: ?","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"}],"marconiclient/controller/message.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"e4e5b0118b2eb4d344edcd3a5da9bbe9db309132","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    return Message(connection, **args)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Message(object):"},{"line_number":23,"context_line":"    # note(cpp-cabrera): limit slots to reduce memory footprint"},{"line_number":24,"context_line":"    __slots__ \u003d [\u0027_connection\u0027, \u0027href\u0027, \u0027ttl\u0027, \u0027age\u0027, \u0027body\u0027]"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Flig%3D","line":22,"updated":"2013-07-16 08:12:13.000000000","message":"pls, docstring","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"42721f41906fa23dde347aadcd99fbbfd3008392","unresolved":false,"context_lines":[{"line_number":19,"context_line":"    return Message(connection, **args)"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"class Message(object):"},{"line_number":23,"context_line":"    # note(cpp-cabrera): limit slots to reduce memory footprint"},{"line_number":24,"context_line":"    __slots__ \u003d [\u0027_connection\u0027, \u0027href\u0027, \u0027ttl\u0027, \u0027age\u0027, \u0027body\u0027]"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FkJs%3D","line":22,"in_reply_to":"AAAAP3%2F%2Flig%3D","updated":"2013-07-16 14:31:16.000000000","message":"docstrings, coming up!","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":7680,"name":"Alex Gaynor","email":"alex.gaynor@gmail.com","username":"alex_gaynor"},"change_message_id":"f89dcd8526f084a0e2ccc3453450d646d518c8a0","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self, connection\u003dNone, **args):"},{"line_number":27,"context_line":"        self._connection \u003d connection"},{"line_number":28,"context_line":"        [setattr(self, k, v) for k, v in six.iteritems(args)]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def reload(self):"},{"line_number":31,"context_line":"        resp \u003d self._connection.request(Http.get, self.href)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Fmwc%3D","line":28,"updated":"2013-07-15 22:29:34.000000000","message":"Please don\u0027t use a list comprehension where the result is unused, it\u0027s more confusing to the reader, write it out as a full forloop (same below).","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"42721f41906fa23dde347aadcd99fbbfd3008392","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self, connection\u003dNone, **args):"},{"line_number":27,"context_line":"        self._connection \u003d connection"},{"line_number":28,"context_line":"        [setattr(self, k, v) for k, v in six.iteritems(args)]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def reload(self):"},{"line_number":31,"context_line":"        resp \u003d self._connection.request(Http.get, self.href)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FkJw%3D","line":28,"in_reply_to":"AAAAP3%2F%2Fmwc%3D","updated":"2013-07-16 14:31:16.000000000","message":"Will do. Fixing on next patchset.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"e4e5b0118b2eb4d344edcd3a5da9bbe9db309132","unresolved":false,"context_lines":[{"line_number":27,"context_line":"        self._connection \u003d connection"},{"line_number":28,"context_line":"        [setattr(self, k, v) for k, v in six.iteritems(args)]"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def reload(self):"},{"line_number":31,"context_line":"        resp \u003d self._connection.request(Http.get, self.href)"},{"line_number":32,"context_line":"        args \u003d _args_from_dict(resp.json())"},{"line_number":33,"context_line":"        [setattr(self, k, v) for k, v in six.iteritems(args)]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Flik%3D","line":30,"updated":"2013-07-16 08:12:13.000000000","message":"pls, docstring","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":8092,"name":"Sriram Madapusi Vasudevan","email":"sriram1991mv@gmail.com","username":"thesriram"},"change_message_id":"837590c0dab866d2dccf8c2e5c2156db1c0c7732","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def reload(self):"},{"line_number":31,"context_line":"        resp \u003d self._connection.request(Http.get, self.href)"},{"line_number":32,"context_line":"        args \u003d _args_from_dict(resp.json())"},{"line_number":33,"context_line":"        [setattr(self, k, v) for k, v in six.iteritems(args)]"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def delete(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Fkh0%3D","line":32,"updated":"2013-07-16 13:18:17.000000000","message":"import json needs to be added.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":8092,"name":"Sriram Madapusi Vasudevan","email":"sriram1991mv@gmail.com","username":"thesriram"},"change_message_id":"2f2a3c6468be5fe1cea7ba9734a900db70152ad4","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def reload(self):"},{"line_number":31,"context_line":"        resp \u003d self._connection.request(Http.get, self.href)"},{"line_number":32,"context_line":"        args \u003d _args_from_dict(resp.json())"},{"line_number":33,"context_line":"        [setattr(self, k, v) for k, v in six.iteritems(args)]"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def delete(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FkIE%3D","line":32,"in_reply_to":"AAAAP3%2F%2FkU4%3D","updated":"2013-07-16 14:35:04.000000000","message":"You are right. I did\u0027nt see that.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"42721f41906fa23dde347aadcd99fbbfd3008392","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def reload(self):"},{"line_number":31,"context_line":"        resp \u003d self._connection.request(Http.get, self.href)"},{"line_number":32,"context_line":"        args \u003d _args_from_dict(resp.json())"},{"line_number":33,"context_line":"        [setattr(self, k, v) for k, v in six.iteritems(args)]"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def delete(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FkU4%3D","line":32,"in_reply_to":"AAAAP3%2F%2Fkh0%3D","updated":"2013-07-16 14:31:16.000000000","message":"It\u0027s not necessary. The response object generated by making the request is assumed to expose a `json()` method. In order for that to be implemented, the response object must necessarily import some form of json-handling module.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"e4e5b0118b2eb4d344edcd3a5da9bbe9db309132","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        args \u003d _args_from_dict(resp.json())"},{"line_number":33,"context_line":"        [setattr(self, k, v) for k, v in six.iteritems(args)]"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def delete(self):"},{"line_number":36,"context_line":"        self._connection.request(Http.delete, self.href)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Flic%3D","line":35,"updated":"2013-07-16 08:12:13.000000000","message":"pls, docstring","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6943,"name":"Zhihao Yuan","email":"zhihao.yuan@rackspace.com","username":"zyuan"},"change_message_id":"dfa7c292762bcd594c37c0facd40a1983a329b52","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Implements a message controller that understands Marconi messages.\"\"\""},{"line_number":16,"context_line":"import six"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import marconiclient.openstack.common.http as http"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"def _args_from_dict(msg):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAQn%2F%2F%2FsA%3D","line":18,"updated":"2013-07-17 20:36:35.000000000","message":"You can just do\n`from marconiclient.openstack.common import http`\neither way.","commit_id":"635c648a9461ee638bfcfb5836a1cbaf4919e684"},{"author":{"_account_id":6943,"name":"Zhihao Yuan","email":"zhihao.yuan@rackspace.com","username":"zyuan"},"change_message_id":"dfa7c292762bcd594c37c0facd40a1983a329b52","unresolved":false,"context_lines":[{"line_number":24,"context_line":"        \u0027ttl\u0027: msg[\u0027ttl\u0027],"},{"line_number":25,"context_line":"        \u0027age\u0027: msg[\u0027age\u0027],"},{"line_number":26,"context_line":"        \u0027body\u0027: msg[\u0027body\u0027]"},{"line_number":27,"context_line":"    }"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def from_dict(msg, connection\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAQn%2F%2F%2Fr4%3D","line":27,"updated":"2013-07-17 20:36:35.000000000","message":"... Looks duplicated.","commit_id":"635c648a9461ee638bfcfb5836a1cbaf4919e684"}],"marconiclient/openstack/common/http.py":[{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"26b968bc8bc96433951fbacc200bb20618d6a591","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 Rackspace, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F5s0%3D","line":1,"updated":"2013-07-19 15:09:12.000000000","message":"Could you move this file under marconiclient/common? \n\nmarconiclient/openstack/common should be reserved for modules coming from Oslo.","commit_id":"4dd28041d54c6541209c4159beb69063bd1fec14"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"5c6f99ddfe22fe32eedb25422fbc97070dc3f452","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 Rackspace, Inc."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F5E4%3D","line":1,"in_reply_to":"AAAAQn%2F%2F5s0%3D","updated":"2013-07-19 17:34:50.000000000","message":"Done","commit_id":"4dd28041d54c6541209c4159beb69063bd1fec14"}],"marconiclient/testing/mock/connection.py":[{"author":{"_account_id":6943,"name":"Zhihao Yuan","email":"zhihao.yuan@rackspace.com","username":"zyuan"},"change_message_id":"60e357b6514a32ccfeaa716758fc81a1ad96780d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"        self._body \u003d body"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    @property"},{"line_number":10,"context_line":"    def status_code(self):"},{"line_number":11,"context_line":"        return self._code"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Fm1o%3D","line":10,"updated":"2013-07-15 22:05:50.000000000","message":"FYI, `requests` uses `status`.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"42721f41906fa23dde347aadcd99fbbfd3008392","unresolved":false,"context_lines":[{"line_number":7,"context_line":"        self._body \u003d body"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"    @property"},{"line_number":10,"context_line":"    def status_code(self):"},{"line_number":11,"context_line":"        return self._code"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FkJg%3D","line":10,"in_reply_to":"AAAAP3%2F%2Fm1o%3D","updated":"2013-07-16 14:31:16.000000000","message":"Not anymore. As of requests 1.2.3, x.status is undefined. x.status_code still exists.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"}],"marconiclient/testing/mock/message.py":[{"author":{"_account_id":6943,"name":"Zhihao Yuan","email":"zhihao.yuan@rackspace.com","username":"zyuan"},"change_message_id":"60e357b6514a32ccfeaa716758fc81a1ad96780d","unresolved":false,"context_lines":[{"line_number":2,"context_line":""},{"line_number":3,"context_line":""},{"line_number":4,"context_line":"def message(href\u003d\u0027https://mock.com\u0027, ttl\u003d0, age\u003d0, body\u003dNone):"},{"line_number":5,"context_line":"    body \u003d body or {}"},{"line_number":6,"context_line":"    return {"},{"line_number":7,"context_line":"        \u0027href\u0027: href,"},{"line_number":8,"context_line":"        \u0027ttl\u0027: ttl,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Fm1M%3D","line":5,"updated":"2013-07-15 22:05:50.000000000","message":"I prefer to check for `None` explicitly.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"}],"marconiclient/tests/mock/connection.py":[{"author":{"_account_id":6971,"name":"Malini Kamalambal","inactive":true},"change_message_id":"f4a1b16dc3d4dbd80ee04c9d071e4caa469ee4d6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":5,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F8hw%3D","line":2,"updated":"2013-07-18 17:38:47.000000000","message":"these should be Rackspace copyrights, rt?","commit_id":"2aae976bb8d20c18ea7bfc18a0c516a61519a1f7"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"0e5720fe8d78faa70d2a77363a23d2a7f24c6025","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation."},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\");"},{"line_number":4,"context_line":"# you may not use this file except in compliance with the License."},{"line_number":5,"context_line":"# You may obtain a copy of the License at"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F8Zw%3D","line":2,"in_reply_to":"AAAAQn%2F%2F8hw%3D","updated":"2013-07-18 18:09:50.000000000","message":"I\u0027m.... not sure. I\u0027ll check with Kurt on this one.","commit_id":"2aae976bb8d20c18ea7bfc18a0c516a61519a1f7"},{"author":{"_account_id":8092,"name":"Sriram Madapusi Vasudevan","email":"sriram1991mv@gmail.com","username":"thesriram"},"change_message_id":"9200612b6399ac17f49d2012a09212b44e3f1e1b","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"class Response(object):"},{"line_number":19,"context_line":"    def __init__(self, code\u003d200, body\u003dNone):"},{"line_number":20,"context_line":"        self._code \u003d 200"},{"line_number":21,"context_line":"        self._body \u003d body"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F484%3D","line":20,"updated":"2013-07-19 18:28:32.000000000","message":"self._code \u003d code right?","commit_id":"4dd28041d54c6541209c4159beb69063bd1fec14"}],"marconiclient/tests/mock/message.py":[{"author":{"_account_id":6971,"name":"Malini Kamalambal","inactive":true},"change_message_id":"f4a1b16dc3d4dbd80ee04c9d071e4caa469ee4d6","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Easy creation of mock Marconi message replies.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def message(href\u003d\u0027https://mock.com\u0027, ttl\u003d0, age\u003d0, body\u003dNone):"},{"line_number":19,"context_line":"    body \u003d body or {}"},{"line_number":20,"context_line":"    return {"},{"line_number":21,"context_line":"        \u0027href\u0027: href,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F8kY%3D","line":18,"updated":"2013-07-18 17:38:47.000000000","message":"href is treated as a relative url, in other parts of marconi.\nWill be good to keep that consistent","commit_id":"2aae976bb8d20c18ea7bfc18a0c516a61519a1f7"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"0e5720fe8d78faa70d2a77363a23d2a7f24c6025","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Easy creation of mock Marconi message replies.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def message(href\u003d\u0027https://mock.com\u0027, ttl\u003d0, age\u003d0, body\u003dNone):"},{"line_number":19,"context_line":"    body \u003d body or {}"},{"line_number":20,"context_line":"    return {"},{"line_number":21,"context_line":"        \u0027href\u0027: href,"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F8aU%3D","line":18,"in_reply_to":"AAAAQn%2F%2F8kY%3D","updated":"2013-07-18 18:09:50.000000000","message":"Good catch! I have an error in my implementation, then.","commit_id":"2aae976bb8d20c18ea7bfc18a0c516a61519a1f7"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"444cef90a9a35d5e2b5c896da29de101a800cda7","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Easy creation of mock Marconi message replies.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def message(href\u003d\u0027https://mock.com\u0027, ttl\u003d0, age\u003d0, body\u003dNone):"},{"line_number":19,"context_line":"    body \u003d body or {}"},{"line_number":20,"context_line":"    return {"},{"line_number":21,"context_line":"        \u0027href\u0027: href,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2Fxhw%3D","line":18,"updated":"2013-07-23 16:08:09.000000000","message":"Do you need to keep the href with absolute url?","commit_id":"1b9987689a74dc83f21f7455f63443708f13bbdb"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"c79d3f73bc526edfd28816572589e7a2fc8637ec","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Easy creation of mock Marconi message replies.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def message(href\u003d\u0027https://mock.com\u0027, ttl\u003d0, age\u003d0, body\u003dNone):"},{"line_number":19,"context_line":"    body \u003d body or {}"},{"line_number":20,"context_line":"    return {"},{"line_number":21,"context_line":"        \u0027href\u0027: href,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FxA4%3D","line":18,"in_reply_to":"AAAAQn%2F%2Fxhw%3D","updated":"2013-07-23 16:36:33.000000000","message":"No. This is an error in the mock. Thanks for catching this.","commit_id":"1b9987689a74dc83f21f7455f63443708f13bbdb"},{"author":{"_account_id":6943,"name":"Zhihao Yuan","email":"zhihao.yuan@rackspace.com","username":"zyuan"},"change_message_id":"251aadb9b1aee21d3ef2718f1a0e01e1fde8ff5d","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\"Easy creation of mock Marconi message replies.\"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"def message(href\u003d\u0027/v1/queues/dgq/messages/w78sdwsqdsib\u0027,"},{"line_number":19,"context_line":"            ttl\u003d0, age\u003d0, body\u003dNone):"},{"line_number":20,"context_line":"    body \u003d body or {}"},{"line_number":21,"context_line":"    return {"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAASn%2F%2FyY0%3D","line":18,"updated":"2013-08-29 16:00:04.000000000","message":"-_-|||","commit_id":"356ef91a55a19b5c44b2ba059165a06f080e1a9a"}],"marconiclient/transport/http/message.py":[{"author":{"_account_id":6971,"name":"Malini Kamalambal","inactive":true},"change_message_id":"f4a1b16dc3d4dbd80ee04c9d071e4caa469ee4d6","unresolved":false,"context_lines":[{"line_number":41,"context_line":"class Message(object):"},{"line_number":42,"context_line":"    \"\"\"A handler for Marconi server Message resources. Lazily exposes"},{"line_number":43,"context_line":"    attributes, e.g., msg.href does not result in a query to the server."},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    # note(cpp-cabrera): limit slots to reduce memory footprint"},{"line_number":46,"context_line":"    __slots__ \u003d [\u0027_connection\u0027, \u0027href\u0027, \u0027ttl\u0027, \u0027age\u0027, \u0027body\u0027]"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F8hI%3D","line":44,"updated":"2013-07-18 17:38:47.000000000","message":"what about msg.age? will that always query the server, since the value is dynamic?","commit_id":"2aae976bb8d20c18ea7bfc18a0c516a61519a1f7"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"0e5720fe8d78faa70d2a77363a23d2a7f24c6025","unresolved":false,"context_lines":[{"line_number":41,"context_line":"class Message(object):"},{"line_number":42,"context_line":"    \"\"\"A handler for Marconi server Message resources. Lazily exposes"},{"line_number":43,"context_line":"    attributes, e.g., msg.href does not result in a query to the server."},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    # note(cpp-cabrera): limit slots to reduce memory footprint"},{"line_number":46,"context_line":"    __slots__ \u003d [\u0027_connection\u0027, \u0027href\u0027, \u0027ttl\u0027, \u0027age\u0027, \u0027body\u0027]"},{"line_number":47,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F8Z0%3D","line":44,"in_reply_to":"AAAAQn%2F%2F8hI%3D","updated":"2013-07-18 18:09:50.000000000","message":"No. It only represents the value as of the time that the message was received from the API.","commit_id":"2aae976bb8d20c18ea7bfc18a0c516a61519a1f7"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"26b968bc8bc96433951fbacc200bb20618d6a591","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    __slots__ \u003d [\u0027_connection\u0027, \u0027href\u0027, \u0027ttl\u0027, \u0027age\u0027, \u0027body\u0027]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, connection\u003dNone, **kwargs):"},{"line_number":49,"context_line":"        self._connection \u003d connection"},{"line_number":50,"context_line":"        for k, v in six.iteritems(kwargs):"},{"line_number":51,"context_line":"            setattr(self, k, v)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F5rY%3D","line":49,"updated":"2013-07-19 15:09:12.000000000","message":"What will this _connection attribute contain? We\u0027ll use python-requests, right? I\u0027d suggest having a session instance here. http://docs.python-requests.org/en/latest/api/?highlight\u003dsession#requests.Session","commit_id":"4dd28041d54c6541209c4159beb69063bd1fec14"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"5c6f99ddfe22fe32eedb25422fbc97070dc3f452","unresolved":false,"context_lines":[{"line_number":46,"context_line":"    __slots__ \u003d [\u0027_connection\u0027, \u0027href\u0027, \u0027ttl\u0027, \u0027age\u0027, \u0027body\u0027]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, connection\u003dNone, **kwargs):"},{"line_number":49,"context_line":"        self._connection \u003d connection"},{"line_number":50,"context_line":"        for k, v in six.iteritems(kwargs):"},{"line_number":51,"context_line":"            setattr(self, k, v)"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F5Ts%3D","line":49,"in_reply_to":"AAAAQn%2F%2F5rY%3D","updated":"2013-07-19 17:34:50.000000000","message":"Yes, that\u0027s the plan. I\u0027m holding off on attaching any requests specific logic. That should be held at the BaseClient, which is included in the openstack/common/client level at the moment.","commit_id":"4dd28041d54c6541209c4159beb69063bd1fec14"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"26b968bc8bc96433951fbacc200bb20618d6a591","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        for k, v in six.iteritems(kwargs):"},{"line_number":51,"context_line":"            setattr(self, k, v)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def reload(self):"},{"line_number":54,"context_line":"        \"\"\"Queries the server and updates all local attributes"},{"line_number":55,"context_line":"        with new values."},{"line_number":56,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F5rE%3D","line":53,"updated":"2013-07-19 15:09:12.000000000","message":"Would a BaseController help with no replicating some code? (I\u0027m assuming other controllers will have similar methods)","commit_id":"4dd28041d54c6541209c4159beb69063bd1fec14"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"5c6f99ddfe22fe32eedb25422fbc97070dc3f452","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        for k, v in six.iteritems(kwargs):"},{"line_number":51,"context_line":"            setattr(self, k, v)"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def reload(self):"},{"line_number":54,"context_line":"        \"\"\"Queries the server and updates all local attributes"},{"line_number":55,"context_line":"        with new values."},{"line_number":56,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAQn%2F%2F5FA%3D","line":53,"in_reply_to":"AAAAQn%2F%2F5rE%3D","updated":"2013-07-19 17:34:50.000000000","message":"Good suggestion. I\u0027ve actually seen the client expose some notion of BaseManager that\u0027s supposed to fit this role. I\u0027ll take a closer look and see how I can re-purpose that. Thanks!","commit_id":"4dd28041d54c6541209c4159beb69063bd1fec14"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"444cef90a9a35d5e2b5c896da29de101a800cda7","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def from_dict(msg, connection\u003dNone):"},{"line_number":29,"context_line":"    \"\"\"from_dict :: dict -\u003e connection -\u003e Message."},{"line_number":30,"context_line":"    :param msg: A dictionary created by decoding a Marconi message JSON reply"},{"line_number":31,"context_line":"    :param connection: A connection to a Marconi server."},{"line_number":32,"context_line":"    :raises: KeyError If msg is missing fields"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FxHA%3D","line":29,"updated":"2013-07-23 16:08:09.000000000","message":"Can you make this docs more explicit?\n\u0027dict -\u003e connection -\u003e Message.\u0027 doesn\u0027t make much sense","commit_id":"1b9987689a74dc83f21f7455f63443708f13bbdb"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"c79d3f73bc526edfd28816572589e7a2fc8637ec","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"def from_dict(msg, connection\u003dNone):"},{"line_number":29,"context_line":"    \"\"\"from_dict :: dict -\u003e connection -\u003e Message."},{"line_number":30,"context_line":"    :param msg: A dictionary created by decoding a Marconi message JSON reply"},{"line_number":31,"context_line":"    :param connection: A connection to a Marconi server."},{"line_number":32,"context_line":"    :raises: KeyError If msg is missing fields"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FxAo%3D","line":29,"in_reply_to":"AAAAQn%2F%2FxHA%3D","updated":"2013-07-23 16:36:33.000000000","message":"Sure thing. It\u0027s a Haskell-style type-signature, which is kind of silly to use in a Python code base. :P\n\nIt means its a function that takes a dict, then takes a connection, and outputs a Message object.","commit_id":"1b9987689a74dc83f21f7455f63443708f13bbdb"},{"author":{"_account_id":6427,"name":"Kurt Griffiths","email":"kurt.griffiths@rackspace.com","username":"kgriffs"},"change_message_id":"3de86b9f8b563548ebd1b3922b7d754663f6cd2f","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        for k, v in six.iteritems(args):"},{"line_number":61,"context_line":"            setattr(self, k, v)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def delete(self):"},{"line_number":64,"context_line":"        \"\"\"Deletes this resource from the server, but leaves the local"},{"line_number":65,"context_line":"        object intact."},{"line_number":66,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAQn%2F%2Fgu8%3D","line":63,"updated":"2013-07-30 01:04:31.000000000","message":"What do you think about setting a \"deleted\" flag so that if someone subsequently calls \"reload\" on accident, you can raise a helpful error?","commit_id":"9bd481dee5c90f6d7ac7ee784c754c81d57a212c"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"d9efafdcc911117c290999247c3f91bb08e6f9b8","unresolved":false,"context_lines":[{"line_number":60,"context_line":"        for k, v in six.iteritems(args):"},{"line_number":61,"context_line":"            setattr(self, k, v)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def delete(self):"},{"line_number":64,"context_line":"        \"\"\"Deletes this resource from the server, but leaves the local"},{"line_number":65,"context_line":"        object intact."},{"line_number":66,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAQn%2F%2FfFQ%3D","line":63,"in_reply_to":"AAAAQn%2F%2Fgu8%3D","updated":"2013-07-30 13:04:08.000000000","message":"I\u0027ve been tempted to include such a flag. It definitely makes this friendly to use.\n\nI\u0027ll go ahead and do it, since understanding the cause of an HTTP 404 from a debugging point of view is more difficult than dealing with an AlreadyDeletedError.","commit_id":"9bd481dee5c90f6d7ac7ee784c754c81d57a212c"},{"author":{"_account_id":7680,"name":"Alex Gaynor","email":"alex.gaynor@gmail.com","username":"alex_gaynor"},"change_message_id":"589813b7b53cf44cd4f8d36e28ee358b2182d044","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    Attributes are only downloaded once - at creation time."},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    # note(cpp-cabrera): limit slots to reduce memory footprint"},{"line_number":46,"context_line":"    __slots__ \u003d [\u0027_connection\u0027, \u0027href\u0027, \u0027ttl\u0027, \u0027age\u0027, \u0027body\u0027, \u0027deleted\u0027]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, connection\u003dNone, **kwargs):"},{"line_number":49,"context_line":"        self._connection \u003d connection"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAARH%2F%2F8RI%3D","line":46,"updated":"2013-08-14 21:07:04.000000000","message":"Can I suggest not doing this? My experience is that it makes stuff harder to debug (you sit and pdb and want to message.__dict__ to see all the  attributes, and it doesn\u0027t work). Also on PyPy this doesn\u0027t help, all objects are automatically smaller :P. Unless there\u0027s a specific problem reported, __slots__ is a premature optimization with annoying side effects.","commit_id":"6efa7feec0c389416c5dc1edef5439e704363422"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"a75168718d9d456cfdc7dbc02f75946a717b89be","unresolved":false,"context_lines":[{"line_number":43,"context_line":"    Attributes are only downloaded once - at creation time."},{"line_number":44,"context_line":"    \"\"\""},{"line_number":45,"context_line":"    # note(cpp-cabrera): limit slots to reduce memory footprint"},{"line_number":46,"context_line":"    __slots__ \u003d [\u0027_connection\u0027, \u0027href\u0027, \u0027ttl\u0027, \u0027age\u0027, \u0027body\u0027, \u0027deleted\u0027]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, connection\u003dNone, **kwargs):"},{"line_number":49,"context_line":"        self._connection \u003d connection"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAARn%2F%2F9fA%3D","line":46,"in_reply_to":"AAAARH%2F%2F8RI%3D","updated":"2013-08-19 17:27:16.000000000","message":"Thanks for the thoughts, Alex. I haven\u0027t used __slots__ extensively before, so it\u0027s one of those \"seems like a cool idea\" to me features. The pypy rationale seals the deal for me to remove this, since that\u0027s what I\u0027m expecting performance-concerned users will be running.","commit_id":"6efa7feec0c389416c5dc1edef5439e704363422"},{"author":{"_account_id":7680,"name":"Alex Gaynor","email":"alex.gaynor@gmail.com","username":"alex_gaynor"},"change_message_id":"589813b7b53cf44cd4f8d36e28ee358b2182d044","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    # note(cpp-cabrera): limit slots to reduce memory footprint"},{"line_number":46,"context_line":"    __slots__ \u003d [\u0027_connection\u0027, \u0027href\u0027, \u0027ttl\u0027, \u0027age\u0027, \u0027body\u0027, \u0027deleted\u0027]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, connection\u003dNone, **kwargs):"},{"line_number":49,"context_line":"        self._connection \u003d connection"},{"line_number":50,"context_line":"        for k, v in six.iteritems(kwargs):"},{"line_number":51,"context_line":"            setattr(self, k, v)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAARH%2F%2F8Q8%3D","line":48,"updated":"2013-08-14 21:07:04.000000000","message":"__init__ should take a specific set of parameters, not everything and just store it on self.","commit_id":"6efa7feec0c389416c5dc1edef5439e704363422"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"a75168718d9d456cfdc7dbc02f75946a717b89be","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    # note(cpp-cabrera): limit slots to reduce memory footprint"},{"line_number":46,"context_line":"    __slots__ \u003d [\u0027_connection\u0027, \u0027href\u0027, \u0027ttl\u0027, \u0027age\u0027, \u0027body\u0027, \u0027deleted\u0027]"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def __init__(self, connection\u003dNone, **kwargs):"},{"line_number":49,"context_line":"        self._connection \u003d connection"},{"line_number":50,"context_line":"        for k, v in six.iteritems(kwargs):"},{"line_number":51,"context_line":"            setattr(self, k, v)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAARn%2F%2F9eo%3D","line":48,"in_reply_to":"AAAARH%2F%2F8Q8%3D","updated":"2013-08-19 17:27:16.000000000","message":"It\u0027s a bit of a hack I picked up on in past client dev. I agree that it\u0027s better to be explicit, all the more so since the format of a message has been determined at this point.","commit_id":"6efa7feec0c389416c5dc1edef5439e704363422"},{"author":{"_account_id":7680,"name":"Alex Gaynor","email":"alex.gaynor@gmail.com","username":"alex_gaynor"},"change_message_id":"5758c8db95f9c65c37ae113da0a1819124f61905","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @property"},{"line_number":79,"context_line":"    def deleted(self):"},{"line_number":80,"context_line":"        return self._deleted"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def reload(self):"},{"line_number":83,"context_line":"        \"\"\"Queries the server and updates all local attributes"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAARn%2F%2F7yg%3D","line":80,"updated":"2013-08-20 01:21:09.000000000","message":"Is there a lot of value in exposing these properties instead of just the raw attributes?","commit_id":"81ce9b63e659558f9c7d7f9624f68c06172171fc"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"daa7e5bdd0e8267a022f0a94025428f3e89b63da","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @property"},{"line_number":79,"context_line":"    def deleted(self):"},{"line_number":80,"context_line":"        return self._deleted"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def reload(self):"},{"line_number":83,"context_line":"        \"\"\"Queries the server and updates all local attributes"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAARn%2F%2F7yQ%3D","line":80,"in_reply_to":"AAAARn%2F%2F7yg%3D","updated":"2013-08-20 01:27:02.000000000","message":"Hmm... the value lies in enforcing read-only access, which isn\u0027t that big of a deal here, since this a read-only interface to begin with. (no server modifying operations)\n\nCons: It does lead to a lot more code to do this, though. If I removed these, properties and exposed the attributes directly, that\u0027s -15 LOC. Maintenance win?\n\nI\u0027ll remove them on the next patch set.","commit_id":"81ce9b63e659558f9c7d7f9624f68c06172171fc"},{"author":{"_account_id":7680,"name":"Alex Gaynor","email":"alex.gaynor@gmail.com","username":"alex_gaynor"},"change_message_id":"5758c8db95f9c65c37ae113da0a1819124f61905","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        resp \u003d self._connection.get(self.href)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        for k, v in six.iteritems(_args_from_dict(resp.json())):"},{"line_number":90,"context_line":"            setattr(self, \u0027_\u0027 + k, v)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def delete(self):"},{"line_number":93,"context_line":"        \"\"\"Deletes this resource from the server, but leaves the local"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAARn%2F%2F7yc%3D","line":90,"updated":"2013-08-20 01:21:09.000000000","message":"This makes me a bit sad, I think it\u0027d be easier to read if it just explicitly pulled out the attribute it wanted to refresh.","commit_id":"81ce9b63e659558f9c7d7f9624f68c06172171fc"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"daa7e5bdd0e8267a022f0a94025428f3e89b63da","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        resp \u003d self._connection.get(self.href)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        for k, v in six.iteritems(_args_from_dict(resp.json())):"},{"line_number":90,"context_line":"            setattr(self, \u0027_\u0027 + k, v)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def delete(self):"},{"line_number":93,"context_line":"        \"\"\"Deletes this resource from the server, but leaves the local"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAARn%2F%2F7yI%3D","line":90,"in_reply_to":"AAAARn%2F%2F7yc%3D","updated":"2013-08-20 01:27:02.000000000","message":"Works for me. Reload syncs the local content, so we\u0027re trading an iteration for four assignments.\n\nComing up next!","commit_id":"81ce9b63e659558f9c7d7f9624f68c06172171fc"},{"author":{"_account_id":6943,"name":"Zhihao Yuan","email":"zhihao.yuan@rackspace.com","username":"zyuan"},"change_message_id":"fcd8ef3aabd4f5ad2637f6c4ce659215c37a734d","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        self.age \u003d age"},{"line_number":49,"context_line":"        self.body \u003d body"},{"line_number":50,"context_line":"        self._connection \u003d connection"},{"line_number":51,"context_line":"        self._deleted \u003d False"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def __repr__(self):"},{"line_number":54,"context_line":"        return \u0027\u003cMessage ttl:%s\u003e\u0027 % (self.ttl,)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2FyjQ%3D","line":51,"updated":"2013-08-29 15:29:26.000000000","message":"I don\u0027t think we should have an local state.","commit_id":"8f14a0783d2d4612992c7533f3520cad844d9282"},{"author":{"_account_id":6943,"name":"Zhihao Yuan","email":"zhihao.yuan@rackspace.com","username":"zyuan"},"change_message_id":"fcd8ef3aabd4f5ad2637f6c4ce659215c37a734d","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        \"\"\"Deletes this resource from the server, but leaves the local"},{"line_number":74,"context_line":"        object intact."},{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        self._raise_if_deleted()"},{"line_number":77,"context_line":"        self._connection.delete(self.href)"},{"line_number":78,"context_line":"        self._deleted \u003d True"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2Fyi8%3D","line":76,"updated":"2013-08-29 15:29:26.000000000","message":"And this looks wrong.  If another client deletes the message, nothing happens.","commit_id":"8f14a0783d2d4612992c7533f3520cad844d9282"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"056a71c960bb3baa06869f9628bab93f9e2d9bce","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        \"\"\"Deletes this resource from the server, but leaves the local"},{"line_number":74,"context_line":"        object intact."},{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        self._raise_if_deleted()"},{"line_number":77,"context_line":"        self._connection.delete(self.href)"},{"line_number":78,"context_line":"        self._deleted \u003d True"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2FyeU%3D","line":76,"in_reply_to":"AAAASn%2F%2Fye0%3D","updated":"2013-08-29 15:42:35.000000000","message":"Good point. I like this idea. Assertions are there to protect invariants, which is what I\u0027m trying to do here. I\u0027ll update the patch.","commit_id":"8f14a0783d2d4612992c7533f3520cad844d9282"},{"author":{"_account_id":6943,"name":"Zhihao Yuan","email":"zhihao.yuan@rackspace.com","username":"zyuan"},"change_message_id":"c6c413e7bd0f6b8ed5795e1a4fa986656274c8b3","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        \"\"\"Deletes this resource from the server, but leaves the local"},{"line_number":74,"context_line":"        object intact."},{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        self._raise_if_deleted()"},{"line_number":77,"context_line":"        self._connection.delete(self.href)"},{"line_number":78,"context_line":"        self._deleted \u003d True"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2Fye0%3D","line":76,"in_reply_to":"AAAASn%2F%2Fygs%3D","updated":"2013-08-29 15:40:20.000000000","message":"I prefer to use assertions then.  An exception thrown outside an module is a part of the interface of the module.","commit_id":"8f14a0783d2d4612992c7533f3520cad844d9282"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"c1921f447ae1e1a3b2b90ef829e10ec77b0a4a90","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        \"\"\"Deletes this resource from the server, but leaves the local"},{"line_number":74,"context_line":"        object intact."},{"line_number":75,"context_line":"        \"\"\""},{"line_number":76,"context_line":"        self._raise_if_deleted()"},{"line_number":77,"context_line":"        self._connection.delete(self.href)"},{"line_number":78,"context_line":"        self._deleted \u003d True"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAASn%2F%2Fygs%3D","line":76,"in_reply_to":"AAAASn%2F%2Fyi8%3D","updated":"2013-08-29 15:35:38.000000000","message":"Zhihao, the purpose of self._deleted is not to catch race conditions. It\u0027s to highlight an error when interacting with the API using the client - e.g., it\u0027s beginner friendly.\n\nFor example, if a new user comes around and picks up a Message, and deletes it, forgets that they deleted it, and then wants to reload the state - they will see the AlreadyDeleted error.\n\nIt may also help track down silly bugs in a code base that uses python-marconiclient to implement message handling. :)","commit_id":"8f14a0783d2d4612992c7533f3520cad844d9282"}],"tests/unit/common/test_http.py":[{"author":{"_account_id":6943,"name":"Zhihao Yuan","email":"zhihao.yuan@rackspace.com","username":"zyuan"},"change_message_id":"60e357b6514a32ccfeaa716758fc81a1ad96780d","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"class TestHttpEnumeration(unittest.TestCase):"},{"line_number":7,"context_line":"    def test_lookup_succeeds_for_all_valid_methods(self):"},{"line_number":8,"context_line":"        methods \u003d \u0027head get put post delete patch options\u0027.split()"},{"line_number":9,"context_line":"        for method, expect in zip(http.Http, methods):"},{"line_number":10,"context_line":"            self.assertEqual(http.lookup(method), expect)"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2Fm1A%3D","line":8,"updated":"2013-07-15 22:05:50.000000000","message":"I love this.  Actually I should say... I love Perl...","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"42721f41906fa23dde347aadcd99fbbfd3008392","unresolved":false,"context_lines":[{"line_number":5,"context_line":""},{"line_number":6,"context_line":"class TestHttpEnumeration(unittest.TestCase):"},{"line_number":7,"context_line":"    def test_lookup_succeeds_for_all_valid_methods(self):"},{"line_number":8,"context_line":"        methods \u003d \u0027head get put post delete patch options\u0027.split()"},{"line_number":9,"context_line":"        for method, expect in zip(http.Http, methods):"},{"line_number":10,"context_line":"            self.assertEqual(http.lookup(method), expect)"},{"line_number":11,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAP3%2F%2FkJE%3D","line":8,"in_reply_to":"AAAAP3%2F%2Fm1A%3D","updated":"2013-07-16 14:31:16.000000000","message":"It is pretty awesome. Readable and simple.","commit_id":"402687a6ecdf10ebf17d53065f1fc38e65abb1c9"}],"tests/unit/openstack/common/test_http.py":[{"author":{"_account_id":6943,"name":"Zhihao Yuan","email":"zhihao.yuan@rackspace.com","username":"zyuan"},"change_message_id":"dfa7c292762bcd594c37c0facd40a1983a329b52","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"class TestHttpEnumeration(unittest.TestCase):"},{"line_number":21,"context_line":"    def test_lookup_succeeds_for_all_valid_methods(self):"},{"line_number":22,"context_line":"        methods \u003d \u0027head get put post delete patch options\u0027.split()"},{"line_number":23,"context_line":"        for method, expect in zip(http.Http, methods):"},{"line_number":24,"context_line":"            self.assertEqual(http.lookup(method), expect)"},{"line_number":25,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAQn%2F%2F%2Fos%3D","line":22,"updated":"2013-07-17 20:36:35.000000000","message":"Let\u0027s hack the Python interpreter to add a `qw` keyword :)","commit_id":"635c648a9461ee638bfcfb5836a1cbaf4919e684"}],"tests/unit/transport/http/test_message.py":[{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"444cef90a9a35d5e2b5c896da29de101a800cda7","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import marconiclient.transport.http.message as message"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"HREF \u003d \u0027/v1/queue/my_msg_is_chocolate\u0027"},{"line_number":24,"context_line":"AGE \u003d 100"},{"line_number":25,"context_line":"TTL \u003d 120"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FxGU%3D","line":23,"updated":"2013-07-23 16:08:09.000000000","message":"the href for messages should be /v1/queues/qname/messages/my_msg_is_chocolate","commit_id":"1b9987689a74dc83f21f7455f63443708f13bbdb"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"c79d3f73bc526edfd28816572589e7a2fc8637ec","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import marconiclient.transport.http.message as message"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"HREF \u003d \u0027/v1/queue/my_msg_is_chocolate\u0027"},{"line_number":24,"context_line":"AGE \u003d 100"},{"line_number":25,"context_line":"TTL \u003d 120"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FxAk%3D","line":23,"in_reply_to":"AAAAQn%2F%2FxGU%3D","updated":"2013-07-23 16:36:33.000000000","message":"Good point. I\u0027ll fix this up.","commit_id":"1b9987689a74dc83f21f7455f63443708f13bbdb"},{"author":{"_account_id":7498,"name":"Malini Kamalambal","email":"malini.kamalambal@rackspace.com","username":"malini-pk"},"change_message_id":"444cef90a9a35d5e2b5c896da29de101a800cda7","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def test_reload_works(self):"},{"line_number":57,"context_line":"        msg \u003d mock_message.message("},{"line_number":58,"context_line":"            href\u003dHREF, ttl\u003dTTL - 1, age\u003dAGE + 1,"},{"line_number":59,"context_line":"            body\u003d{\u0027name\u0027: \u0027vanilla\u0027})"},{"line_number":60,"context_line":"        self.conn.get.return_value \u003d mock.MagicMock()"},{"line_number":61,"context_line":"        self.conn.get.return_value.json.return_value \u003d msg"},{"line_number":62,"context_line":"        self.msg.reload()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FxFY%3D","line":59,"updated":"2013-07-23 16:08:09.000000000","message":"Are you trying to update the message here?\nMarconi does not support update message","commit_id":"1b9987689a74dc83f21f7455f63443708f13bbdb"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"c79d3f73bc526edfd28816572589e7a2fc8637ec","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    def test_reload_works(self):"},{"line_number":57,"context_line":"        msg \u003d mock_message.message("},{"line_number":58,"context_line":"            href\u003dHREF, ttl\u003dTTL - 1, age\u003dAGE + 1,"},{"line_number":59,"context_line":"            body\u003d{\u0027name\u0027: \u0027vanilla\u0027})"},{"line_number":60,"context_line":"        self.conn.get.return_value \u003d mock.MagicMock()"},{"line_number":61,"context_line":"        self.conn.get.return_value.json.return_value \u003d msg"},{"line_number":62,"context_line":"        self.msg.reload()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAQn%2F%2FxAU%3D","line":59,"in_reply_to":"AAAAQn%2F%2FxFY%3D","updated":"2013-07-23 16:36:33.000000000","message":"Thanks for checking on this. I\u0027m actually just preparing a mock API response for the sake of unit tests. So this message body is what I would expect the API to return given that a message with those attributes was previously created.\n\nIt\u0027s all passed to a MagicMock later, which replaces the \"connection\".\n\nCheck out: http://www.voidspace.org.uk/python/mock/getting-started.html#using-mock","commit_id":"1b9987689a74dc83f21f7455f63443708f13bbdb"},{"author":{"_account_id":6427,"name":"Kurt Griffiths","email":"kurt.griffiths@rackspace.com","username":"kgriffs"},"change_message_id":"3de86b9f8b563548ebd1b3922b7d754663f6cd2f","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def test_delete_works(self):"},{"line_number":54,"context_line":"        self.msg.delete()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_reload_works(self):"},{"line_number":57,"context_line":"        msg \u003d mock_message.message("},{"line_number":58,"context_line":"            href\u003dHREF, ttl\u003dTTL - 1, age\u003dAGE + 1,"},{"line_number":59,"context_line":"            body\u003d{\u0027name\u0027: \u0027vanilla\u0027})"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAQn%2F%2Fgu4%3D","line":56,"updated":"2013-07-30 01:04:31.000000000","message":"What happens if you delete, then call reload?","commit_id":"9bd481dee5c90f6d7ac7ee784c754c81d57a212c"},{"author":{"_account_id":6944,"name":"Allele Dev","email":"cpp.cabrera@gmail.com","username":"cpp-cabrera"},"change_message_id":"d9efafdcc911117c290999247c3f91bb08e6f9b8","unresolved":false,"context_lines":[{"line_number":53,"context_line":"    def test_delete_works(self):"},{"line_number":54,"context_line":"        self.msg.delete()"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_reload_works(self):"},{"line_number":57,"context_line":"        msg \u003d mock_message.message("},{"line_number":58,"context_line":"            href\u003dHREF, ttl\u003dTTL - 1, age\u003dAGE + 1,"},{"line_number":59,"context_line":"            body\u003d{\u0027name\u0027: \u0027vanilla\u0027})"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAQn%2F%2FfE4%3D","line":56,"in_reply_to":"AAAAQn%2F%2Fgu4%3D","updated":"2013-07-30 13:04:08.000000000","message":"That\u0027s a good test to include. As per the previous comment, I\u0027d like to see it raise some sort of AlreadyDeletedError.\n\nI\u0027ll add this in the next patch set.","commit_id":"9bd481dee5c90f6d7ac7ee784c754c81d57a212c"},{"author":{"_account_id":7680,"name":"Alex Gaynor","email":"alex.gaynor@gmail.com","username":"alex_gaynor"},"change_message_id":"aa8fd921476c62b5a6ee15b70e5f44306dd77555","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"import marconiclient.tests.mock.message as mock_message"},{"line_number":20,"context_line":"from marconiclient.transport import exceptions"},{"line_number":21,"context_line":"import marconiclient.transport.http.message as message"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"HREF \u003d \u0027/v1/queue/dgq/messages/my_msg_is_chocolate\u0027"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAARn%2F%2F7xc%3D","line":21,"updated":"2013-08-20 01:32:07.000000000","message":"Whoops, missed this before, these can be rewritten as\n\n`from marconiclient.tests.mock import message as mock_message`","commit_id":"9717d165e9158aaba60f68df64608a6525522dbc"}]}
