)]}'
{"openstack/message/v2/_proxy.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"2935bd4380d22b17f99ab426d177a6c1686128a3","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                parameter to make an initial limited request and use the ID of"},{"line_number":99,"context_line":"                the last-seen queue from the response as the marker parameter"},{"line_number":100,"context_line":"                value in a subsequent limited request."},{"line_number":101,"context_line":"            * echo: Indicate if the messages can be echoed back to the client"},{"line_number":102,"context_line":"                that posted them."},{"line_number":103,"context_line":"            * include_claimed: Indicate if the messages list should include"},{"line_number":104,"context_line":"                the claimed messages."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        :returns: A generator of message instances."},{"line_number":107,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_bce50039","line":104,"range":{"start_line":101,"start_character":0,"end_line":104,"end_character":37},"updated":"2016-08-01 10:03:51.000000000","message":"so ... the API does define a collection of query strings, you will need to add them to the _query_mapping class property of the Message class.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b3dcc970c0134ea775c1ee783994dcf22ef8fd56","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                parameter to make an initial limited request and use the ID of"},{"line_number":99,"context_line":"                the last-seen queue from the response as the marker parameter"},{"line_number":100,"context_line":"                value in a subsequent limited request."},{"line_number":101,"context_line":"            * echo: Indicate if the messages can be echoed back to the client"},{"line_number":102,"context_line":"                that posted them."},{"line_number":103,"context_line":"            * include_claimed: Indicate if the messages list should include"},{"line_number":104,"context_line":"                the claimed messages."},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"        :returns: A generator of message instances."},{"line_number":107,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_1c01ac6a","line":104,"range":{"start_line":101,"start_character":0,"end_line":104,"end_character":37},"in_reply_to":"bacf61ea_bce50039","updated":"2016-08-01 10:21:41.000000000","message":"Sorry didn\u0027t notice that before. Will make a change.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"2935bd4380d22b17f99ab426d177a6c1686128a3","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        :returns: A generator of message instances."},{"line_number":107,"context_line":"        \"\"\""},{"line_number":108,"context_line":"        query[\"queue_name\"] \u003d queue_name"},{"line_number":109,"context_line":"        return self._list(_message.Message, paginated\u003dTrue, **query)"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def get_message(self, queue_name, message):"},{"line_number":112,"context_line":"        \"\"\"Get a message"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_fc0658cc","line":109,"range":{"start_line":109,"start_character":44,"end_line":109,"end_character":58},"updated":"2016-08-01 10:03:51.000000000","message":"right, this is True, so the \u0027_list\u0027 method in the class can always assume it.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"2935bd4380d22b17f99ab426d177a6c1686128a3","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        :returns: One :class:`~openstack.message.v2.message.Message`"},{"line_number":119,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound` when no"},{"line_number":120,"context_line":"            queue matching the name could be found."},{"line_number":121,"context_line":"        \"\"\""},{"line_number":122,"context_line":"        message \u003d self._get_resource(_message.Message, message,"},{"line_number":123,"context_line":"                                     queue_name\u003dqueue_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_bcefc0e7","line":120,"range":{"start_line":120,"start_character":31,"end_line":120,"end_character":35},"updated":"2016-08-01 10:03:51.000000000","message":"criteria?","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"2935bd4380d22b17f99ab426d177a6c1686128a3","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        :returns: One :class:`~openstack.message.v2.message.Message`"},{"line_number":119,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound` when no"},{"line_number":120,"context_line":"            queue matching the name could be found."},{"line_number":121,"context_line":"        \"\"\""},{"line_number":122,"context_line":"        message \u003d self._get_resource(_message.Message, message,"},{"line_number":123,"context_line":"                                     queue_name\u003dqueue_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_dc0b94d4","line":120,"range":{"start_line":120,"start_character":12,"end_line":120,"end_character":17},"updated":"2016-08-01 10:03:51.000000000","message":"message?","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b3dcc970c0134ea775c1ee783994dcf22ef8fd56","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        :returns: One :class:`~openstack.message.v2.message.Message`"},{"line_number":119,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound` when no"},{"line_number":120,"context_line":"            queue matching the name could be found."},{"line_number":121,"context_line":"        \"\"\""},{"line_number":122,"context_line":"        message \u003d self._get_resource(_message.Message, message,"},{"line_number":123,"context_line":"                                     queue_name\u003dqueue_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_9ced9cb9","line":120,"range":{"start_line":120,"start_character":31,"end_line":120,"end_character":35},"in_reply_to":"bacf61ea_bcefc0e7","updated":"2016-08-01 10:21:41.000000000","message":"Done","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b3dcc970c0134ea775c1ee783994dcf22ef8fd56","unresolved":false,"context_lines":[{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        :returns: One :class:`~openstack.message.v2.message.Message`"},{"line_number":119,"context_line":"        :raises: :class:`~openstack.exceptions.ResourceNotFound` when no"},{"line_number":120,"context_line":"            queue matching the name could be found."},{"line_number":121,"context_line":"        \"\"\""},{"line_number":122,"context_line":"        message \u003d self._get_resource(_message.Message, message,"},{"line_number":123,"context_line":"                                     queue_name\u003dqueue_name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_fc2c9803","line":120,"range":{"start_line":120,"start_character":12,"end_line":120,"end_character":17},"in_reply_to":"bacf61ea_dc0b94d4","updated":"2016-08-01 10:21:41.000000000","message":"Done","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"}],"openstack/message/v2/message.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"2935bd4380d22b17f99ab426d177a6c1686128a3","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    allow_delete \u003d True"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # Properties"},{"line_number":31,"context_line":"    body \u003d resource2.Body(\"body\")"},{"line_number":32,"context_line":"    age \u003d resource2.Body(\"age\")"},{"line_number":33,"context_line":"    href \u003d resource2.Body(\"href\")"},{"line_number":34,"context_line":"    ttl \u003d resource2.Body(\"ttl\")"},{"line_number":35,"context_line":"    queue_name \u003d resource2.URI(\"queue_name\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def post(self, session, messages):"},{"line_number":38,"context_line":"        request \u003d self._prepare_request(requires_id\u003dFalse, prepend_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_81b1b749","line":35,"range":{"start_line":31,"start_character":4,"end_line":35,"end_character":44},"updated":"2016-08-01 10:03:51.000000000","message":"please add comments to these properties","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b3dcc970c0134ea775c1ee783994dcf22ef8fd56","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    allow_delete \u003d True"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # Properties"},{"line_number":31,"context_line":"    body \u003d resource2.Body(\"body\")"},{"line_number":32,"context_line":"    age \u003d resource2.Body(\"age\")"},{"line_number":33,"context_line":"    href \u003d resource2.Body(\"href\")"},{"line_number":34,"context_line":"    ttl \u003d resource2.Body(\"ttl\")"},{"line_number":35,"context_line":"    queue_name \u003d resource2.URI(\"queue_name\")"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def post(self, session, messages):"},{"line_number":38,"context_line":"        request \u003d self._prepare_request(requires_id\u003dFalse, prepend_key\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_1c388c3c","line":35,"range":{"start_line":31,"start_character":4,"end_line":35,"end_character":44},"in_reply_to":"bacf61ea_81b1b749","updated":"2016-08-01 10:21:41.000000000","message":"Yes, will add it.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"2935bd4380d22b17f99ab426d177a6c1686128a3","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def post(self, session, messages):"},{"line_number":38,"context_line":"        request \u003d self._prepare_request(requires_id\u003dFalse, prepend_key\u003dTrue)"},{"line_number":39,"context_line":"        headers \u003d {"},{"line_number":40,"context_line":"            \u0027Client-ID\u0027: uuid.uuid4(),"},{"line_number":41,"context_line":"            \u0027X-PROJECT-ID\u0027: session.get_project_id()"},{"line_number":42,"context_line":"        }"},{"line_number":43,"context_line":"        request.headers.update(headers)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_217f2b67","line":40,"range":{"start_line":40,"start_character":25,"end_line":40,"end_character":37},"updated":"2016-08-01 10:03:51.000000000","message":"1. this should be \u0027str(uuid.uuid4())\u0027\n\n2. I\u0027m a little bit concerned with this logic. We are in effect generating a \"client ID\" each and every time we post something. Is that behavior expected?\n\n3. Looks like we should expose this to end users (please check with zaqar team) as an optional parameter?\n\n4. Maybe we can wrap this into something like:\n\n  client_id \u003d Header(\u0027Client-ID\u0027)","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b3dcc970c0134ea775c1ee783994dcf22ef8fd56","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def post(self, session, messages):"},{"line_number":38,"context_line":"        request \u003d self._prepare_request(requires_id\u003dFalse, prepend_key\u003dTrue)"},{"line_number":39,"context_line":"        headers \u003d {"},{"line_number":40,"context_line":"            \u0027Client-ID\u0027: uuid.uuid4(),"},{"line_number":41,"context_line":"            \u0027X-PROJECT-ID\u0027: session.get_project_id()"},{"line_number":42,"context_line":"        }"},{"line_number":43,"context_line":"        request.headers.update(headers)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_5c016437","line":40,"range":{"start_line":40,"start_character":25,"end_line":40,"end_character":37},"in_reply_to":"bacf61ea_217f2b67","updated":"2016-08-01 10:21:41.000000000","message":"Yes, agree that exposing this parameter to end user is a better solution. Since there is no place to store this client_id in sdk side, end user can take the responsibility to maintain this \u0027client_id\u0027 if they will. Will double confirm with Zaqar team about this issue.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"714737b284f27de8971c7361e3e2b8c54cc48338","unresolved":false,"context_lines":[{"line_number":37,"context_line":"    def post(self, session, messages):"},{"line_number":38,"context_line":"        request \u003d self._prepare_request(requires_id\u003dFalse, prepend_key\u003dTrue)"},{"line_number":39,"context_line":"        headers \u003d {"},{"line_number":40,"context_line":"            \u0027Client-ID\u0027: uuid.uuid4(),"},{"line_number":41,"context_line":"            \u0027X-PROJECT-ID\u0027: session.get_project_id()"},{"line_number":42,"context_line":"        }"},{"line_number":43,"context_line":"        request.headers.update(headers)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_57f2af06","line":40,"range":{"start_line":40,"start_character":25,"end_line":40,"end_character":37},"in_reply_to":"bacf61ea_5c016437","updated":"2016-08-02 04:01:53.000000000","message":"Hi, Qiming, I think I may made a mistake before. Actually Zaqar does not enforce user to provide \"project_id\" all the time. If keystone based auth is enabled, \"project_id\" in header can be omitted. However, Zaqar doesn\u0027t enforce to enable keystonemiddleware. Authentication can be done through other way per users\u0027 demand, e.g. the agent/client be responsible for authentication before sending request to Zaqar API. So in that case, Zaqar allows(enforeces) users to customize the \u0027project_id\u0027 header to support multi-tenants. But for client_id, it is always required and looks like this is not an attribute supported natively in OpenStack. So as you said, exposing these two parameters should be better choice. Will make a change on it. Thanks.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"2935bd4380d22b17f99ab426d177a6c1686128a3","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        request \u003d self._prepare_request(requires_id\u003dFalse, prepend_key\u003dTrue)"},{"line_number":39,"context_line":"        headers \u003d {"},{"line_number":40,"context_line":"            \u0027Client-ID\u0027: uuid.uuid4(),"},{"line_number":41,"context_line":"            \u0027X-PROJECT-ID\u0027: session.get_project_id()"},{"line_number":42,"context_line":"        }"},{"line_number":43,"context_line":"        request.headers.update(headers)"},{"line_number":44,"context_line":"        request.body \u003d {\u0027messages\u0027: messages}"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_61d003f7","line":41,"range":{"start_line":41,"start_character":13,"end_line":41,"end_character":25},"updated":"2016-08-01 10:03:51.000000000","message":"same goes here, should we make project_id a property?\n\n  project_id \u003d Header(\u0027X-PROJECT-ID\u0027)\n\nI\u0027m not very familiar with zaqar design philosophy, but I\u0027m curious whether they were making this a header so that messages could be sent across different projects (tenants)?\n\nIf that is true, we should expose this to the user as a property of the message and we get a default project ID if not explicitly set? e.g.\n\n   project_id \u003d project_id or session.get_project_id()","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b3dcc970c0134ea775c1ee783994dcf22ef8fd56","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        request \u003d self._prepare_request(requires_id\u003dFalse, prepend_key\u003dTrue)"},{"line_number":39,"context_line":"        headers \u003d {"},{"line_number":40,"context_line":"            \u0027Client-ID\u0027: uuid.uuid4(),"},{"line_number":41,"context_line":"            \u0027X-PROJECT-ID\u0027: session.get_project_id()"},{"line_number":42,"context_line":"        }"},{"line_number":43,"context_line":"        request.headers.update(headers)"},{"line_number":44,"context_line":"        request.body \u003d {\u0027messages\u0027: messages}"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_fc4bf884","line":41,"range":{"start_line":41,"start_character":13,"end_line":41,"end_character":25},"in_reply_to":"bacf61ea_61d003f7","updated":"2016-08-01 10:21:41.000000000","message":"Yes, will double check this property with Zaqar team as well.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"2935bd4380d22b17f99ab426d177a6c1686128a3","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        return response.json()[\u0027resources\u0027]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def list(cls, session, paginated\u003dFalse, **params):"},{"line_number":52,"context_line":"        \"\"\"This method is a generator which yields message objects."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        This is almost the copy of list method of resource2.Resource class."}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_21156b48","line":51,"range":{"start_line":51,"start_character":27,"end_line":51,"end_character":42},"updated":"2016-08-01 10:03:51.000000000","message":"in the base class resource2.Resource, we don\u0027t know whether a specific resource type supports paginated list or not, that is the reason we have this parameter with default value.\n\nFor this particular Message class, my guess is that it should support pagination (maybe not, though). So this parameter doesn\u0027t make a lot senses in this subclass.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b3dcc970c0134ea775c1ee783994dcf22ef8fd56","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        return response.json()[\u0027resources\u0027]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    @classmethod"},{"line_number":51,"context_line":"    def list(cls, session, paginated\u003dFalse, **params):"},{"line_number":52,"context_line":"        \"\"\"This method is a generator which yields message objects."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        This is almost the copy of list method of resource2.Resource class."}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_b7499962","line":51,"range":{"start_line":51,"start_character":27,"end_line":51,"end_character":42},"in_reply_to":"bacf61ea_21156b48","updated":"2016-08-01 10:21:41.000000000","message":"I think message API supports paginate. Will check it again and reply later.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"2935bd4380d22b17f99ab426d177a6c1686128a3","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        and `X-PROJECT-ID` fields which are required by Zaqar v2 API."},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        more_data \u003d True"},{"line_number":59,"context_line":"        query_params \u003d cls._query_mapping._transpose(params)"},{"line_number":60,"context_line":"        uri \u003d cls.base_path % params"},{"line_number":61,"context_line":"        headers \u003d {"},{"line_number":62,"context_line":"            \u0027Client-ID\u0027: uuid.uuid4(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_fc4e586d","line":59,"range":{"start_line":59,"start_character":53,"end_line":59,"end_character":59},"updated":"2016-08-01 10:03:51.000000000","message":"for this to work, you will have to define \u0027_query_mapping\u0027 property for this class. You will need to check zaqar API to find out the set of valid query strings. Or else, this _transpose() method will filter out all query strings you specify...","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b3dcc970c0134ea775c1ee783994dcf22ef8fd56","unresolved":false,"context_lines":[{"line_number":56,"context_line":"        and `X-PROJECT-ID` fields which are required by Zaqar v2 API."},{"line_number":57,"context_line":"        \"\"\""},{"line_number":58,"context_line":"        more_data \u003d True"},{"line_number":59,"context_line":"        query_params \u003d cls._query_mapping._transpose(params)"},{"line_number":60,"context_line":"        uri \u003d cls.base_path % params"},{"line_number":61,"context_line":"        headers \u003d {"},{"line_number":62,"context_line":"            \u0027Client-ID\u0027: uuid.uuid4(),"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_f72791b3","line":59,"range":{"start_line":59,"start_character":53,"end_line":59,"end_character":59},"in_reply_to":"bacf61ea_fc4e586d","updated":"2016-08-01 10:21:41.000000000","message":"I see. Will rework this part.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"2935bd4380d22b17f99ab426d177a6c1686128a3","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            resp \u003d session.get(uri, endpoint_filter\u003dcls.service,"},{"line_number":68,"context_line":"                               headers\u003dheaders, params\u003dquery_params)"},{"line_number":69,"context_line":"            resp \u003d resp.json()"},{"line_number":70,"context_line":"            if cls.resources_key:"},{"line_number":71,"context_line":"                resp \u003d resp[cls.resources_key]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"            if not resp:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_7c6a68b4","line":70,"range":{"start_line":70,"start_character":12,"end_line":70,"end_character":32},"updated":"2016-08-01 10:03:51.000000000","message":"seems this class never have a resource_key? i.e. zaqar doesn\u0027t conform to the list guideline from API WG?","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b3dcc970c0134ea775c1ee783994dcf22ef8fd56","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            resp \u003d session.get(uri, endpoint_filter\u003dcls.service,"},{"line_number":68,"context_line":"                               headers\u003dheaders, params\u003dquery_params)"},{"line_number":69,"context_line":"            resp \u003d resp.json()"},{"line_number":70,"context_line":"            if cls.resources_key:"},{"line_number":71,"context_line":"                resp \u003d resp[cls.resources_key]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"            if not resp:"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_77744167","line":70,"range":{"start_line":70,"start_character":12,"end_line":70,"end_character":32},"in_reply_to":"bacf61ea_7c6a68b4","updated":"2016-08-01 10:21:41.000000000","message":"You mean resources_key field in resp body? For list method, resources_key is actually included in resp body, like this:\n\n\"messages\": [\n        {\n            \"body\": {\n                \"current_bytes\": \"0\",\n                \"event\": \"BackupProgress\",\n                \"total_bytes\": \"99614720\"\n            },\n            \"age\": 482,\n            \"href\": \"/v2/queues/beijing/messages/578edfe6508f153f256f717b\",\n            \"id\": \"578edfe6508f153f256f717b\",\n            \"ttl\": 3600\n        },\n        ...\n]","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"2935bd4380d22b17f99ab426d177a6c1686128a3","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def get(self, session):"},{"line_number":92,"context_line":"        request \u003d self._prepare_request()"},{"line_number":93,"context_line":"        headers \u003d {"},{"line_number":94,"context_line":"            \u0027Client-ID\u0027: uuid.uuid4(),"},{"line_number":95,"context_line":"            \u0027X-PROJECT-ID\u0027: session.get_project_id()"},{"line_number":96,"context_line":"        }"},{"line_number":97,"context_line":"        request.headers.update(headers)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_210c4b3a","line":94,"range":{"start_line":94,"start_character":25,"end_line":94,"end_character":37},"updated":"2016-08-01 10:03:51.000000000","message":"this should be \u0027str(uuid.uuid4())\u0027 because uuid.uuid4() returns a uuid.UUID object.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b3dcc970c0134ea775c1ee783994dcf22ef8fd56","unresolved":false,"context_lines":[{"line_number":91,"context_line":"    def get(self, session):"},{"line_number":92,"context_line":"        request \u003d self._prepare_request()"},{"line_number":93,"context_line":"        headers \u003d {"},{"line_number":94,"context_line":"            \u0027Client-ID\u0027: uuid.uuid4(),"},{"line_number":95,"context_line":"            \u0027X-PROJECT-ID\u0027: session.get_project_id()"},{"line_number":96,"context_line":"        }"},{"line_number":97,"context_line":"        request.headers.update(headers)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bacf61ea_57f81dc3","line":94,"range":{"start_line":94,"start_character":25,"end_line":94,"end_character":37},"in_reply_to":"bacf61ea_210c4b3a","updated":"2016-08-01 10:21:41.000000000","message":"my fault, will change.","commit_id":"85c1eeb831efe9250a6dcaefc1c89f2bedeeb24a"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"cf8ee0a9208a8c78ec51a05c655dcbc1bcae28df","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    body \u003d resource2.Body(\"body\")"},{"line_number":39,"context_line":"    #: An uri string describe the location of the message resource."},{"line_number":40,"context_line":"    href \u003d resource2.Body(\"href\")"},{"line_number":41,"context_line":"    #: The value in second to specifie how long the server waits before"},{"line_number":42,"context_line":"    #: marking the message as expired and removing it from the queue."},{"line_number":43,"context_line":"    ttl \u003d resource2.Body(\"ttl\")"},{"line_number":44,"context_line":"    #: The name of target queue message is post to or got from."}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_22aa36d5","line":41,"range":{"start_line":41,"start_character":20,"end_line":41,"end_character":26},"updated":"2016-08-08 14:23:01.000000000","message":"seconds","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"cf8ee0a9208a8c78ec51a05c655dcbc1bcae28df","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    body \u003d resource2.Body(\"body\")"},{"line_number":39,"context_line":"    #: An uri string describe the location of the message resource."},{"line_number":40,"context_line":"    href \u003d resource2.Body(\"href\")"},{"line_number":41,"context_line":"    #: The value in second to specifie how long the server waits before"},{"line_number":42,"context_line":"    #: marking the message as expired and removing it from the queue."},{"line_number":43,"context_line":"    ttl \u003d resource2.Body(\"ttl\")"},{"line_number":44,"context_line":"    #: The name of target queue message is post to or got from."}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_c2b99a30","line":41,"range":{"start_line":41,"start_character":30,"end_line":41,"end_character":38},"updated":"2016-08-08 14:23:01.000000000","message":"specify","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b203af0f9d1ebb0456a22460b9134eae91eb97ad","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    body \u003d resource2.Body(\"body\")"},{"line_number":39,"context_line":"    #: An uri string describe the location of the message resource."},{"line_number":40,"context_line":"    href \u003d resource2.Body(\"href\")"},{"line_number":41,"context_line":"    #: The value in second to specifie how long the server waits before"},{"line_number":42,"context_line":"    #: marking the message as expired and removing it from the queue."},{"line_number":43,"context_line":"    ttl \u003d resource2.Body(\"ttl\")"},{"line_number":44,"context_line":"    #: The name of target queue message is post to or got from."}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_d174abfe","line":41,"range":{"start_line":41,"start_character":20,"end_line":41,"end_character":26},"in_reply_to":"9ad45d7e_22aa36d5","updated":"2016-08-09 02:50:33.000000000","message":"Done","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b203af0f9d1ebb0456a22460b9134eae91eb97ad","unresolved":false,"context_lines":[{"line_number":38,"context_line":"    body \u003d resource2.Body(\"body\")"},{"line_number":39,"context_line":"    #: An uri string describe the location of the message resource."},{"line_number":40,"context_line":"    href \u003d resource2.Body(\"href\")"},{"line_number":41,"context_line":"    #: The value in second to specifie how long the server waits before"},{"line_number":42,"context_line":"    #: marking the message as expired and removing it from the queue."},{"line_number":43,"context_line":"    ttl \u003d resource2.Body(\"ttl\")"},{"line_number":44,"context_line":"    #: The name of target queue message is post to or got from."}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_1165a344","line":41,"range":{"start_line":41,"start_character":30,"end_line":41,"end_character":38},"in_reply_to":"9ad45d7e_c2b99a30","updated":"2016-08-09 02:50:33.000000000","message":"Done","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"cf8ee0a9208a8c78ec51a05c655dcbc1bcae28df","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        response \u003d session.post(request.uri, endpoint_filter\u003dself.service,"},{"line_number":62,"context_line":"                                json\u003drequest.body, headers\u003drequest.headers)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        return response.json()[\u0027resources\u0027]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @classmethod"},{"line_number":67,"context_line":"    def list(cls, session, paginated\u003dTrue, **params):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_a269068e","line":64,"range":{"start_line":64,"start_character":23,"end_line":64,"end_character":43},"updated":"2016-08-08 14:23:01.000000000","message":"is there a possibility the .json() call fails or the json doesn\u0027t contain \u0027resources\u0027 key?","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b203af0f9d1ebb0456a22460b9134eae91eb97ad","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        response \u003d session.post(request.uri, endpoint_filter\u003dself.service,"},{"line_number":62,"context_line":"                                json\u003drequest.body, headers\u003drequest.headers)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        return response.json()[\u0027resources\u0027]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    @classmethod"},{"line_number":67,"context_line":"    def list(cls, session, paginated\u003dTrue, **params):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_d1a78b4d","line":64,"range":{"start_line":64,"start_character":23,"end_line":64,"end_character":43},"in_reply_to":"9ad45d7e_a269068e","updated":"2016-08-09 02:50:33.000000000","message":"Hi, Qiming, just made some test and found the response will always have body which can be converted using .json method if no exception happened during the request progress. And the \"resources\" id will be included all the time as well although it is marked as \"optional\" in API reference. The following is related code in Zaqar. Thanks.\n\nhttp://git.openstack.org/cgit/openstack/zaqar/tree/zaqar/transport/wsgi/v2_0/messages.py#n238","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"cf8ee0a9208a8c78ec51a05c655dcbc1bcae28df","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            resp \u003d session.get(uri, endpoint_filter\u003dcls.service,"},{"line_number":85,"context_line":"                               headers\u003dheaders, params\u003dquery_params)"},{"line_number":86,"context_line":"            resp \u003d resp.json()"},{"line_number":87,"context_line":"            if cls.resources_key:"},{"line_number":88,"context_line":"                resp \u003d resp[cls.resources_key]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"            if not resp:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_c2f19acf","line":87,"range":{"start_line":87,"start_character":12,"end_line":87,"end_character":32},"updated":"2016-08-08 14:23:01.000000000","message":"this is always true","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b203af0f9d1ebb0456a22460b9134eae91eb97ad","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            resp \u003d session.get(uri, endpoint_filter\u003dcls.service,"},{"line_number":85,"context_line":"                               headers\u003dheaders, params\u003dquery_params)"},{"line_number":86,"context_line":"            resp \u003d resp.json()"},{"line_number":87,"context_line":"            if cls.resources_key:"},{"line_number":88,"context_line":"                resp \u003d resp[cls.resources_key]"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"            if not resp:"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_788ddf30","line":87,"range":{"start_line":87,"start_character":12,"end_line":87,"end_character":32},"in_reply_to":"9ad45d7e_c2f19acf","updated":"2016-08-09 02:50:33.000000000","message":"Yes, will change.","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"}],"openstack/tests/unit/message/v2/test_message.py":[{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"cf8ee0a9208a8c78ec51a05c655dcbc1bcae28df","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        self.assertEqual(resources, res)"},{"line_number":107,"context_line":"        sess.post.reset_mock()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        # Using existing client_id and project_id."},{"line_number":110,"context_line":"        sot \u003d message.Message(**FAKE2)"},{"line_number":111,"context_line":"        res \u003d sot.post(sess, messages)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        headers \u003d {\u0027Client-ID\u0027: \u0027OLD_CLIENT_ID\u0027,"},{"line_number":114,"context_line":"                   \u0027X-PROJECT-ID\u0027: \u0027OLD_PROJECT_ID\u0027}"},{"line_number":115,"context_line":"        sess.post.assert_called_once_with(url, endpoint_filter\u003dsot.service,"},{"line_number":116,"context_line":"                                          headers\u003dheaders,"},{"line_number":117,"context_line":"                                          json\u003d{\u0027messages\u0027: messages})"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @mock.patch.object(uuid, \u0027uuid4\u0027)"},{"line_number":120,"context_line":"    def test_get(self, mock_uuid):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_a2c5865c","line":117,"range":{"start_line":109,"start_character":0,"end_line":117,"end_character":70},"updated":"2016-08-08 14:23:01.000000000","message":"better split this into a separate test case","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b203af0f9d1ebb0456a22460b9134eae91eb97ad","unresolved":false,"context_lines":[{"line_number":106,"context_line":"        self.assertEqual(resources, res)"},{"line_number":107,"context_line":"        sess.post.reset_mock()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"        # Using existing client_id and project_id."},{"line_number":110,"context_line":"        sot \u003d message.Message(**FAKE2)"},{"line_number":111,"context_line":"        res \u003d sot.post(sess, messages)"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"        headers \u003d {\u0027Client-ID\u0027: \u0027OLD_CLIENT_ID\u0027,"},{"line_number":114,"context_line":"                   \u0027X-PROJECT-ID\u0027: \u0027OLD_PROJECT_ID\u0027}"},{"line_number":115,"context_line":"        sess.post.assert_called_once_with(url, endpoint_filter\u003dsot.service,"},{"line_number":116,"context_line":"                                          headers\u003dheaders,"},{"line_number":117,"context_line":"                                          json\u003d{\u0027messages\u0027: messages})"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    @mock.patch.object(uuid, \u0027uuid4\u0027)"},{"line_number":120,"context_line":"    def test_get(self, mock_uuid):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_38740734","line":117,"range":{"start_line":109,"start_character":0,"end_line":117,"end_character":70},"in_reply_to":"9ad45d7e_a2c5865c","updated":"2016-08-09 02:50:33.000000000","message":"Done","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"cf8ee0a9208a8c78ec51a05c655dcbc1bcae28df","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        self.assertEqual(sot, res)"},{"line_number":140,"context_line":"        sess.get.reset_mock()"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # Using existing client_id and project_id."},{"line_number":143,"context_line":"        sot \u003d message.Message(**FAKE2)"},{"line_number":144,"context_line":"        sot._translate_response \u003d mock.Mock()"},{"line_number":145,"context_line":"        res \u003d sot.get(sess)"},{"line_number":146,"context_line":"        headers \u003d {\u0027Client-ID\u0027: \u0027OLD_CLIENT_ID\u0027,"},{"line_number":147,"context_line":"                   \u0027X-PROJECT-ID\u0027: \u0027OLD_PROJECT_ID\u0027}"},{"line_number":148,"context_line":"        sess.get.assert_called_with(url, endpoint_filter\u003dsot.service,"},{"line_number":149,"context_line":"                                    headers\u003dheaders)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @mock.patch.object(uuid, \u0027uuid4\u0027)"},{"line_number":152,"context_line":"    def test_delete(self, mock_uuid):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_22b076f4","line":149,"range":{"start_line":142,"start_character":0,"end_line":149,"end_character":52},"updated":"2016-08-08 14:23:01.000000000","message":"and this.","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b203af0f9d1ebb0456a22460b9134eae91eb97ad","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        self.assertEqual(sot, res)"},{"line_number":140,"context_line":"        sess.get.reset_mock()"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        # Using existing client_id and project_id."},{"line_number":143,"context_line":"        sot \u003d message.Message(**FAKE2)"},{"line_number":144,"context_line":"        sot._translate_response \u003d mock.Mock()"},{"line_number":145,"context_line":"        res \u003d sot.get(sess)"},{"line_number":146,"context_line":"        headers \u003d {\u0027Client-ID\u0027: \u0027OLD_CLIENT_ID\u0027,"},{"line_number":147,"context_line":"                   \u0027X-PROJECT-ID\u0027: \u0027OLD_PROJECT_ID\u0027}"},{"line_number":148,"context_line":"        sess.get.assert_called_with(url, endpoint_filter\u003dsot.service,"},{"line_number":149,"context_line":"                                    headers\u003dheaders)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    @mock.patch.object(uuid, \u0027uuid4\u0027)"},{"line_number":152,"context_line":"    def test_delete(self, mock_uuid):"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_7894bf36","line":149,"range":{"start_line":142,"start_character":0,"end_line":149,"end_character":52},"in_reply_to":"9ad45d7e_22b076f4","updated":"2016-08-09 02:50:33.000000000","message":"Done","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":8246,"name":"Qiming Teng","email":"tengqm@outlook.com","username":"tengqm"},"change_message_id":"cf8ee0a9208a8c78ec51a05c655dcbc1bcae28df","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        sot._translate_response.assert_called_once_with(resp, has_body\u003dFalse)"},{"line_number":171,"context_line":"        sess.delete.reset_mock()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # Using existing client_id and project_id."},{"line_number":174,"context_line":"        sot \u003d message.Message(**FAKE2)"},{"line_number":175,"context_line":"        sot._translate_response \u003d mock.Mock()"},{"line_number":176,"context_line":"        sot.delete(sess)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        headers \u003d {\u0027Client-ID\u0027: \u0027OLD_CLIENT_ID\u0027,"},{"line_number":179,"context_line":"                   \u0027X-PROJECT-ID\u0027: \u0027OLD_PROJECT_ID\u0027}"},{"line_number":180,"context_line":"        sess.delete.assert_called_with(url, endpoint_filter\u003dsot.service,"},{"line_number":181,"context_line":"                                       headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_c29fda5d","line":181,"range":{"start_line":173,"start_character":1,"end_line":181,"end_character":55},"updated":"2016-08-08 14:23:01.000000000","message":"and this","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"},{"author":{"_account_id":11034,"name":"Yanyan Hu","email":"huyanyan84@gmail.com","username":"yanyanhu"},"change_message_id":"b203af0f9d1ebb0456a22460b9134eae91eb97ad","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        sot._translate_response.assert_called_once_with(resp, has_body\u003dFalse)"},{"line_number":171,"context_line":"        sess.delete.reset_mock()"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"        # Using existing client_id and project_id."},{"line_number":174,"context_line":"        sot \u003d message.Message(**FAKE2)"},{"line_number":175,"context_line":"        sot._translate_response \u003d mock.Mock()"},{"line_number":176,"context_line":"        sot.delete(sess)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        headers \u003d {\u0027Client-ID\u0027: \u0027OLD_CLIENT_ID\u0027,"},{"line_number":179,"context_line":"                   \u0027X-PROJECT-ID\u0027: \u0027OLD_PROJECT_ID\u0027}"},{"line_number":180,"context_line":"        sess.delete.assert_called_with(url, endpoint_filter\u003dsot.service,"},{"line_number":181,"context_line":"                                       headers\u003dheaders)"}],"source_content_type":"text/x-python","patch_set":4,"id":"9ad45d7e_d8996b70","line":181,"range":{"start_line":173,"start_character":1,"end_line":181,"end_character":55},"in_reply_to":"9ad45d7e_c29fda5d","updated":"2016-08-09 02:50:33.000000000","message":"Done","commit_id":"974121a9cac83f4e199bb5a6ed67c4dba58c582b"}]}
