)]}'
{"trove/common/pagination.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c95bb8b1acfbd1dd77dc4f0e7f9be92fb4c10249","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    Keyword arguments:"},{"line_number":35,"context_line":"    li -- The list to be paginated"},{"line_number":36,"context_line":"    limit -- Maximum number of items to be returned"},{"line_number":37,"context_line":"    marker -- Key of the first item to appear on the sublist"},{"line_number":38,"context_line":"    include_marker -- Include the marker value itself in the returned sublist"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    li.sort()"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_22465c7b","line":37,"updated":"2015-06-24 11:21:33.000000000","message":"Need to use Sphinx syntax for docs?\n\nIn this case: :param list li: list to be paginated ... :return: paginated list :rtype: list","commit_id":"71e5e6f28e7bd395ae91bd305a31eefe3a59f9a7"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"2ed853e875c97a01b5abf6c51774197d8160a6e6","unresolved":false,"context_lines":[{"line_number":34,"context_line":"    Keyword arguments:"},{"line_number":35,"context_line":"    li -- The list to be paginated"},{"line_number":36,"context_line":"    limit -- Maximum number of items to be returned"},{"line_number":37,"context_line":"    marker -- Key of the first item to appear on the sublist"},{"line_number":38,"context_line":"    include_marker -- Include the marker value itself in the returned sublist"},{"line_number":39,"context_line":"    \"\"\""},{"line_number":40,"context_line":"    li.sort()"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_2b2717b7","line":37,"in_reply_to":"fa32b979_22465c7b","updated":"2015-06-24 12:13:02.000000000","message":"+1","commit_id":"71e5e6f28e7bd395ae91bd305a31eefe3a59f9a7"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"cabd295a7e8092cc450a9061b4b8b834100ea7d3","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    return urllib.quote(str(s))"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"def paginate_list(li, limit\u003dNone, marker\u003dNone, include_marker\u003dFalse):"},{"line_number":32,"context_line":"    \"\"\"Sort the given list and return a sublist containing a page of items."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    :param list li:             The list to be paginated."}],"source_content_type":"text/x-python","patch_set":9,"id":"ba3cc151_8cbb21e5","line":31,"updated":"2015-07-01 04:43:38.000000000","message":"Since you added this new pagination method for a list i\u0027d like to see a test that tests the fields marker and limit you can pass in to the list_users call. Something that validates the marker is validate and can be used to call something like the list_users method again with it.","commit_id":"d949e5922acde311851566b448dbca83e029850b"}],"trove/guestagent/datastore/experimental/mongodb/service.py":[{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"3a40101e8bd2c001c74c0bfd1f06cf512dde903c","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        client[user.database.name].add_user("},{"line_number":453,"context_line":"            user.username, password\u003duser.password, roles\u003duser.roles"},{"line_number":454,"context_line":"        )"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def create_user(self, user, client\u003dNone):"},{"line_number":457,"context_line":"        \"\"\"Creates a user on their database.\"\"\""},{"line_number":458,"context_line":"        LOG.debug(\u0027Creating user %s on database %s with roles %s.\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_d33581f7","line":455,"updated":"2015-06-22 06:26:29.000000000","message":"I think it might be a good idea to raise an exception when a user is unable to create user","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"b6b64ed0e2bdee501ab1b5e60525ca12eef5244a","unresolved":false,"context_lines":[{"line_number":452,"context_line":"        client[user.database.name].add_user("},{"line_number":453,"context_line":"            user.username, password\u003duser.password, roles\u003duser.roles"},{"line_number":454,"context_line":"        )"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def create_user(self, user, client\u003dNone):"},{"line_number":457,"context_line":"        \"\"\"Creates a user on their database.\"\"\""},{"line_number":458,"context_line":"        LOG.debug(\u0027Creating user %s on database %s with roles %s.\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_2f98e01a","line":455,"in_reply_to":"fa32b979_d33581f7","updated":"2015-06-22 17:43:58.000000000","message":"There is no specific case to capture here though. Whatever special exception PyMongo throws will be the most valuable output imo.","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"3a40101e8bd2c001c74c0bfd1f06cf512dde903c","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        db_name \u003d user.database.name"},{"line_number":482,"context_line":"        LOG.debug(\u0027Deleting user %s from database %s.\u0027 % (username, db_name))"},{"line_number":483,"context_line":"        with MongoDBClient(self._admin_user()) as admin_client:"},{"line_number":484,"context_line":"            admin_client[db_name].remove_user(username)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    def _get_user_record(self, client, user):"},{"line_number":487,"context_line":"        \"\"\"Get the user\u0027s record.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_f32e85a4","line":484,"updated":"2015-06-22 06:26:29.000000000","message":"same thought here about raising an exception when an error occurs while deleting a user","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"b6b64ed0e2bdee501ab1b5e60525ca12eef5244a","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        db_name \u003d user.database.name"},{"line_number":482,"context_line":"        LOG.debug(\u0027Deleting user %s from database %s.\u0027 % (username, db_name))"},{"line_number":483,"context_line":"        with MongoDBClient(self._admin_user()) as admin_client:"},{"line_number":484,"context_line":"            admin_client[db_name].remove_user(username)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"    def _get_user_record(self, client, user):"},{"line_number":487,"context_line":"        \"\"\"Get the user\u0027s record.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_cf9e1407","line":484,"in_reply_to":"fa32b979_f32e85a4","updated":"2015-06-22 17:43:58.000000000","message":"Same as above.","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"437596b30458807f5b28a2f42cfd7f05ac46d0b2","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                    continue"},{"line_number":509,"context_line":"                users.append(user.serialize())"},{"line_number":510,"context_line":"        LOG.debug(\u0027users \u003d \u0027 + str(users))"},{"line_number":511,"context_line":"        return users, None"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def list_database_names(self):"},{"line_number":514,"context_line":"        \"\"\"Get the list of database names.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_8a511ddb","line":511,"updated":"2015-06-19 16:35:07.000000000","message":"This is missing pagination.","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"5a66bd319a1cf143cdc192f64faaa6701c187fd5","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                    continue"},{"line_number":509,"context_line":"                users.append(user.serialize())"},{"line_number":510,"context_line":"        LOG.debug(\u0027users \u003d \u0027 + str(users))"},{"line_number":511,"context_line":"        return users, None"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def list_database_names(self):"},{"line_number":514,"context_line":"        \"\"\"Get the list of database names.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_f3e445ad","line":511,"in_reply_to":"fa32b979_8a511ddb","updated":"2015-06-22 06:18:52.000000000","message":"+1, we need to add the pagination stuff, marker and limit","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"b6b64ed0e2bdee501ab1b5e60525ca12eef5244a","unresolved":false,"context_lines":[{"line_number":508,"context_line":"                    continue"},{"line_number":509,"context_line":"                users.append(user.serialize())"},{"line_number":510,"context_line":"        LOG.debug(\u0027users \u003d \u0027 + str(users))"},{"line_number":511,"context_line":"        return users, None"},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"    def list_database_names(self):"},{"line_number":514,"context_line":"        \"\"\"Get the list of database names.\"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_efa19847","line":511,"in_reply_to":"fa32b979_f3e445ad","updated":"2015-06-22 17:43:58.000000000","message":"Will do.","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"}],"trove/guestagent/db/models.py":[{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"3a40101e8bd2c001c74c0bfd1f06cf512dde903c","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        schema \u003d cls(deserializing\u003dTrue)"},{"line_number":53,"context_line":"        schema.deserialize(value)"},{"line_number":54,"context_line":"        return schema"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @property"},{"line_number":57,"context_line":"    def name(self):"},{"line_number":58,"context_line":"        return self._name"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_5393b1a3","line":55,"updated":"2015-06-22 06:26:29.000000000","message":"deserialize_schema in DatastoreSchema and deserialize_user in DatastoreUser does the same thing. The only difference is the name of the method. Why not define this as one method and make it part of the Base class instead.","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"b6b64ed0e2bdee501ab1b5e60525ca12eef5244a","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        schema \u003d cls(deserializing\u003dTrue)"},{"line_number":53,"context_line":"        schema.deserialize(value)"},{"line_number":54,"context_line":"        return schema"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    @property"},{"line_number":57,"context_line":"    def name(self):"},{"line_number":58,"context_line":"        return self._name"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_2ee549a7","line":55,"in_reply_to":"fa32b979_5393b1a3","updated":"2015-06-22 17:43:58.000000000","message":"The issue here is that there is a deserialize method in the base class. Its implementation is not useful here though. The base method overrides all values in the given class instance. This means that deserializing using the base method requires two steps: create instance (inputs don\u0027t matter as they will be overwrote), then call \u003cinstance\u003e.deserialize(\u003cdict\u003e).\n\nDeserialize should be a class method that returns a loaded instance, which is what is implemented here. I would like to change the base method but I think that is out of scope here. I will make a note for it in the future.","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"437596b30458807f5b28a2f42cfd7f05ac46d0b2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        return self._character_set"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @classmethod"},{"line_number":74,"context_line":"    def _validate_dict(cls, value):"},{"line_number":75,"context_line":"        reqs \u003d cls._dict_requirements()"},{"line_number":76,"context_line":"        return (isinstance(value, dict) and"},{"line_number":77,"context_line":"                all(key in value for key in reqs))"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_6ac37939","line":74,"updated":"2015-06-19 16:35:07.000000000","message":"This could potentially go to the Base so that it can be reused by the User class.\nIt may even raise an Error right away rather than returning a bool so that we don\u0027t need to construct that error message in each class.","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"b6b64ed0e2bdee501ab1b5e60525ca12eef5244a","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        return self._character_set"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @classmethod"},{"line_number":74,"context_line":"    def _validate_dict(cls, value):"},{"line_number":75,"context_line":"        reqs \u003d cls._dict_requirements()"},{"line_number":76,"context_line":"        return (isinstance(value, dict) and"},{"line_number":77,"context_line":"                all(key in value for key in reqs))"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_6e77d1d4","line":74,"in_reply_to":"fa32b979_33414d3a","updated":"2015-06-22 17:43:58.000000000","message":"Done in the base branch.","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"3a40101e8bd2c001c74c0bfd1f06cf512dde903c","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        return self._character_set"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @classmethod"},{"line_number":74,"context_line":"    def _validate_dict(cls, value):"},{"line_number":75,"context_line":"        reqs \u003d cls._dict_requirements()"},{"line_number":76,"context_line":"        return (isinstance(value, dict) and"},{"line_number":77,"context_line":"                all(key in value for key in reqs))"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_33414d3a","line":74,"in_reply_to":"fa32b979_6ac37939","updated":"2015-06-22 06:26:29.000000000","message":"Agree with Petr. This same method is being defined and used in MySQLBase as well.","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"437596b30458807f5b28a2f42cfd7f05ac46d0b2","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    def _is_valid_schema_name(self, value):"},{"line_number":142,"context_line":"        # check against the invalid character set from"},{"line_number":143,"context_line":"        # http://docs.mongodb.org/manual/reference/limits"},{"line_number":144,"context_line":"        if 1 in [x in value for x in \u0027/\\. \"$\u0027]:"},{"line_number":145,"context_line":"            return False"},{"line_number":146,"context_line":"        return True"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_ca22c501","line":144,"updated":"2015-06-19 16:35:07.000000000","message":"Why not just: \"return not (1 in [x in value for x in \u0027/\\. \"$\u0027])\"\n\nor something like\n\nreturn not any(c in value for c in \u0027/\\. \"$\u0027):","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"b6b64ed0e2bdee501ab1b5e60525ca12eef5244a","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    def _is_valid_schema_name(self, value):"},{"line_number":142,"context_line":"        # check against the invalid character set from"},{"line_number":143,"context_line":"        # http://docs.mongodb.org/manual/reference/limits"},{"line_number":144,"context_line":"        if 1 in [x in value for x in \u0027/\\. \"$\u0027]:"},{"line_number":145,"context_line":"            return False"},{"line_number":146,"context_line":"        return True"},{"line_number":147,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_0fbcfc6a","line":144,"in_reply_to":"fa32b979_ca22c501","updated":"2015-06-22 17:43:58.000000000","message":"#2 done","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"3a40101e8bd2c001c74c0bfd1f06cf512dde903c","unresolved":false,"context_lines":[{"line_number":651,"context_line":"    def _update_name(self, name\u003dNone, username\u003dNone, database\u003dNone):"},{"line_number":652,"context_line":"        \"\"\"Keep the name, username, and database values in sync.\"\"\""},{"line_number":653,"context_line":"        if name:"},{"line_number":654,"context_line":"            (database, username) \u003d self._parse_name(name)"},{"line_number":655,"context_line":"        else:"},{"line_number":656,"context_line":"            if username:"},{"line_number":657,"context_line":"                if not self.database:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_730ef5e6","line":654,"updated":"2015-06-22 06:26:29.000000000","message":"Is it possible that the database or username returned here can be None. In either case, should we raise a ValueError like in the else case below.","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"},{"author":{"_account_id":15321,"name":"Matthew Van Dijk","email":"mvandijk@tesora.com","username":"mvandijk"},"change_message_id":"b6b64ed0e2bdee501ab1b5e60525ca12eef5244a","unresolved":false,"context_lines":[{"line_number":651,"context_line":"    def _update_name(self, name\u003dNone, username\u003dNone, database\u003dNone):"},{"line_number":652,"context_line":"        \"\"\"Keep the name, username, and database values in sync.\"\"\""},{"line_number":653,"context_line":"        if name:"},{"line_number":654,"context_line":"            (database, username) \u003d self._parse_name(name)"},{"line_number":655,"context_line":"        else:"},{"line_number":656,"context_line":"            if username:"},{"line_number":657,"context_line":"                if not self.database:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa32b979_f7f09468","line":654,"in_reply_to":"fa32b979_730ef5e6","updated":"2015-06-22 17:43:58.000000000","message":"Done.","commit_id":"2f4f8719e344fc782c69bcc6c351d003ff3d0095"}],"trove/tests/unittests/common/test_pagination.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"199b00ef4563c28530b3465cc763d251e1a9ebd1","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        # continue list, do not include marker in result"},{"line_number":53,"context_line":"        li_2, marker_2 \u003d self._do_paginate_list(limit\u003d2, marker\u003dmarker_1)"},{"line_number":54,"context_line":"        self.assertEqual([\u0027d\u0027, \u0027e\u0027], li_2)"},{"line_number":55,"context_line":"        self.assertEqual(None, marker_2)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        # alternate continue list, include marker in result"},{"line_number":58,"context_line":"        li_3, marker_3 \u003d self._do_paginate_list(limit\u003d2, marker\u003dmarker_1,"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_71f8574a","line":55,"updated":"2015-07-05 06:23:16.000000000","message":"assertIsNone","commit_id":"394b732f2ec905b49a9a5937902a1ce6e3bebfd6"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"199b00ef4563c28530b3465cc763d251e1a9ebd1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        # bad marker"},{"line_number":64,"context_line":"        li_4, marker_4 \u003d self._do_paginate_list(marker\u003d\u0027f\u0027)"},{"line_number":65,"context_line":"        self.assertEqual([], li_4)"},{"line_number":66,"context_line":"        self.assertEqual(None, marker_4)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_11946be6","line":66,"updated":"2015-07-05 06:23:16.000000000","message":"assertIsNone","commit_id":"394b732f2ec905b49a9a5937902a1ce6e3bebfd6"}],"trove/tests/unittests/guestagent/test_mongodb_manager.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"c95bb8b1acfbd1dd77dc4f0e7f9be92fb4c10249","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        mocked_restore.assert_called_with(self.context, backup_info,"},{"line_number":116,"context_line":"                                          \u0027/var/lib/mongodb\u0027)"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    @mock.patch.object(service, \u0027MongoDBClient\u0027)"},{"line_number":119,"context_line":"    @mock.patch.object(service.MongoDBAdmin, \u0027_admin_user\u0027)"},{"line_number":120,"context_line":"    def test_create_user(self, mocked_admin_user, mocked_client):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_0506c21b","line":117,"updated":"2015-06-24 11:21:33.000000000","message":"Need of more tests for other coded methods","commit_id":"71e5e6f28e7bd395ae91bd305a31eefe3a59f9a7"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"ca63eb049328b690da501292d2cdc7a5f0a268d4","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    @mock.patch.object(service, \u0027MongoDBClient\u0027)"},{"line_number":119,"context_line":"    @mock.patch.object(service.MongoDBAdmin, \u0027_admin_user\u0027)"},{"line_number":120,"context_line":"    def test_create_user(self, mocked_admin_user, mocked_client):"},{"line_number":121,"context_line":"        users \u003d [{\u0027_name\u0027: \u0027testdb.testuser\u0027, \u0027_password\u0027: \u0027testpassword\u0027,"},{"line_number":122,"context_line":"                  \u0027_roles\u0027: [\u0027testrole\u0027]}]"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        client \u003d mocked_client().__enter__()[\u0027testdb\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_50c24aea","line":121,"updated":"2015-06-24 12:06:59.000000000","message":"would be good to add tests for delete and list as well","commit_id":"71e5e6f28e7bd395ae91bd305a31eefe3a59f9a7"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"2ed853e875c97a01b5abf6c51774197d8160a6e6","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    @mock.patch.object(service, \u0027MongoDBClient\u0027)"},{"line_number":119,"context_line":"    @mock.patch.object(service.MongoDBAdmin, \u0027_admin_user\u0027)"},{"line_number":120,"context_line":"    def test_create_user(self, mocked_admin_user, mocked_client):"},{"line_number":121,"context_line":"        users \u003d [{\u0027_name\u0027: \u0027testdb.testuser\u0027, \u0027_password\u0027: \u0027testpassword\u0027,"},{"line_number":122,"context_line":"                  \u0027_roles\u0027: [\u0027testrole\u0027]}]"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        client \u003d mocked_client().__enter__()[\u0027testdb\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_ab148743","line":121,"in_reply_to":"fa32b979_50c24aea","updated":"2015-06-24 12:13:02.000000000","message":"+1","commit_id":"71e5e6f28e7bd395ae91bd305a31eefe3a59f9a7"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"b02106b56bddc0d119aa735d7dc01d08af1c341f","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        users, next_marker \u003d self.manager.list_users(self.context)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        self.assertEqual(None, next_marker)"},{"line_number":202,"context_line":"        self.assertEqual(sorted([user1, user2]), users)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa32b979_abc2ae51","line":201,"updated":"2015-06-28 06:52:52.000000000","message":"self.assertIsNone(next_marker)","commit_id":"d949e5922acde311851566b448dbca83e029850b"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"199b00ef4563c28530b3465cc763d251e1a9ebd1","unresolved":false,"context_lines":[{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        users, next_marker \u003d self.manager.list_users(self.context)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        self.assertEqual(None, next_marker)"},{"line_number":202,"context_line":"        self.assertEqual(sorted([user1, user2]), users)"}],"source_content_type":"text/x-python","patch_set":10,"id":"ba3cc151_31996f20","line":201,"updated":"2015-07-05 06:23:16.000000000","message":"assertIsNone","commit_id":"394b732f2ec905b49a9a5937902a1ce6e3bebfd6"}]}
