)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d1b1cb37d9450bf4dd731c22d18cd9deda692403","unresolved":false,"context_lines":[{"line_number":12,"context_line":"No need to change version of Tag object because at"},{"line_number":13,"context_line":"this moment Tag object is used nowhere. It will be"},{"line_number":14,"context_line":"used after merging of tags microversion"},{"line_number":15,"context_line":"patch Ibc44228aeae94c17353af7fccfcfb2c11b2e9190"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implements: blueprint tag-instances"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9a0c5dc1_44731681","line":15,"updated":"2015-05-13 00:48:13.000000000","message":"It\u0027s a subobject of Instance, so I don\u0027t think you can cheat on this one, sorry :)","commit_id":"07388b8a0f2ca6dbcd1bb19f9dbf16a958231580"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"7a1303b298108fe14b1e987a65568e9ad8d0579d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"No need to change version of Tag object because at"},{"line_number":13,"context_line":"this moment Tag object is used nowhere. It will be"},{"line_number":14,"context_line":"used after merging of tags microversion"},{"line_number":15,"context_line":"patch Ibc44228aeae94c17353af7fccfcfb2c11b2e9190"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Implements: blueprint tag-instances"},{"line_number":18,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"7a016987_1ba59e03","line":15,"in_reply_to":"9a0c5dc1_44731681","updated":"2015-05-14 14:06:23.000000000","message":"Ok :) I\u0027ll change Tag version","commit_id":"07388b8a0f2ca6dbcd1bb19f9dbf16a958231580"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f346858fd90c5ec4f8e4a35d77f8045f597064fe","unresolved":false,"context_lines":[{"line_number":18,"context_line":" * FixedIPList"},{"line_number":19,"context_line":" * FloatingIp"},{"line_number":20,"context_line":" * FloatingIpList"},{"line_number":21,"context_line":" * TagList"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Implements: blueprint tag-instances"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"ba3cc151_0c0a838a","line":21,"updated":"2015-07-08 14:06:06.000000000","message":"The above list of changes to object versions is not necessary to put in the commit message :) It\u0027s what we call \"sausage-making\", and should be avoided if possible.","commit_id":"f7fc0ea5e8e8b92b5e6997fc75664037c2d2d76d"}],"nova/db/api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1cc2e3f92766df68b9b7789a4f2aa015a9c2b7e1","unresolved":false,"context_lines":[{"line_number":1950,"context_line":"    return IMPL.instance_tag_delete_all(context, instance_uuid)"},{"line_number":1951,"context_line":""},{"line_number":1952,"context_line":""},{"line_number":1953,"context_line":"def is_instance_tag_exist(context, instance_uuid, tag):"},{"line_number":1954,"context_line":"    \"\"\"Check if specified tag exist on the instance.\"\"\""},{"line_number":1955,"context_line":"    return IMPL.is_instance_tag_exist(context, instance_uuid, tag)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_20a46db7","line":1953,"updated":"2015-07-07 11:55:23.000000000","message":"i would go for does_instance_tag_exist or instance_tag_exists","commit_id":"063ab1bc5d9561123951d22f6a954fc472e4fe70"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"f85c6e6ac7d33fb4597ea4c9a8f9289ae86a41aa","unresolved":false,"context_lines":[{"line_number":1950,"context_line":"    return IMPL.instance_tag_delete_all(context, instance_uuid)"},{"line_number":1951,"context_line":""},{"line_number":1952,"context_line":""},{"line_number":1953,"context_line":"def is_instance_tag_exist(context, instance_uuid, tag):"},{"line_number":1954,"context_line":"    \"\"\"Check if specified tag exist on the instance.\"\"\""},{"line_number":1955,"context_line":"    return IMPL.is_instance_tag_exist(context, instance_uuid, tag)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_6850175f","line":1953,"in_reply_to":"ba3cc151_20a46db7","updated":"2015-07-07 15:28:26.000000000","message":"Your not first person who wants to rename it. So ok. I\u0027ll rename","commit_id":"063ab1bc5d9561123951d22f6a954fc472e4fe70"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f346858fd90c5ec4f8e4a35d77f8045f597064fe","unresolved":false,"context_lines":[{"line_number":1950,"context_line":"    return IMPL.instance_tag_delete_all(context, instance_uuid)"},{"line_number":1951,"context_line":""},{"line_number":1952,"context_line":""},{"line_number":1953,"context_line":"def does_instance_tag_exist(context, instance_uuid, tag):"},{"line_number":1954,"context_line":"    \"\"\"Check if specified tag exist on the instance.\"\"\""},{"line_number":1955,"context_line":"    return IMPL.does_instance_tag_exist(context, instance_uuid, tag)"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_2e417ea9","line":1953,"updated":"2015-07-08 14:06:06.000000000","message":"Hmm, so all of the DB API operations that deal with instance tags start with instance_tag_. How about just calling this method instance_tag_exists()?","commit_id":"f7fc0ea5e8e8b92b5e6997fc75664037c2d2d76d"}],"nova/db/sqlalchemy/api.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"cb82c582b4f550f83a50954a5cc71d01a240416d","unresolved":false,"context_lines":[{"line_number":6511,"context_line":""},{"line_number":6512,"context_line":"    with session.begin(subtransactions\u003dTrue):"},{"line_number":6513,"context_line":"        _check_instance_exists(context, session, instance_uuid)"},{"line_number":6514,"context_line":"        return session.query(models.Tag).filter_by("},{"line_number":6515,"context_line":"            resource_id\u003dinstance_uuid, tag\u003dtag).count() \u003e 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"7ad32947_2b91ff99","line":6514,"updated":"2015-04-28 14:55:40.000000000","message":"There is some mechanisme in SQL to verify is something exists in a table\n\n  SELECT 1 WHERE resource_id\u003dinstance_uuid AND tag\u003dtag FROM tags;\n\n\nAfter digging on the API of sqlalchmy I found something similar with the method \u0027exists\u0027\n http://docs.sqlalchemy.org/en/rel_1_0/orm/query.html#sqlalchemy.orm.query.Query.exists","commit_id":"ce76a82ff776b6b11ac9ac2e1ccb66c294a48a68"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c022677f91b45685803b297934e9f2a138a66d98","unresolved":false,"context_lines":[{"line_number":6557,"context_line":"        session.query(models.Tag).filter_by(resource_id\u003dinstance_uuid).delete()"},{"line_number":6558,"context_line":""},{"line_number":6559,"context_line":""},{"line_number":6560,"context_line":"def is_instance_tag_exist(context, instance_uuid, tag):"},{"line_number":6561,"context_line":"    session \u003d get_session()"},{"line_number":6562,"context_line":""},{"line_number":6563,"context_line":"    with session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_30f2869b","line":6560,"updated":"2015-07-07 08:04:32.000000000","message":"I prefer this is called as \"is_resource_tag_exist\". But it already called as instance...so it\u0027s fine for now","commit_id":"063ab1bc5d9561123951d22f6a954fc472e4fe70"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c022677f91b45685803b297934e9f2a138a66d98","unresolved":false,"context_lines":[{"line_number":6561,"context_line":"    session \u003d get_session()"},{"line_number":6562,"context_line":""},{"line_number":6563,"context_line":"    with session.begin(subtransactions\u003dTrue):"},{"line_number":6564,"context_line":"        _check_instance_exists(context, session, instance_uuid)"},{"line_number":6565,"context_line":"        q \u003d session.query(models.Tag).filter_by("},{"line_number":6566,"context_line":"            resource_id\u003dinstance_uuid, tag\u003dtag)"},{"line_number":6567,"context_line":"        return session.query(q.exists()).scalar()"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_b034564a","line":6564,"updated":"2015-07-07 08:04:32.000000000","message":"I prefer this check isn\u0027t done at here.","commit_id":"063ab1bc5d9561123951d22f6a954fc472e4fe70"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1cc2e3f92766df68b9b7789a4f2aa015a9c2b7e1","unresolved":false,"context_lines":[{"line_number":6561,"context_line":"    session \u003d get_session()"},{"line_number":6562,"context_line":""},{"line_number":6563,"context_line":"    with session.begin(subtransactions\u003dTrue):"},{"line_number":6564,"context_line":"        _check_instance_exists(context, session, instance_uuid)"},{"line_number":6565,"context_line":"        q \u003d session.query(models.Tag).filter_by("},{"line_number":6566,"context_line":"            resource_id\u003dinstance_uuid, tag\u003dtag)"},{"line_number":6567,"context_line":"        return session.query(q.exists()).scalar()"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_a0f39d9e","line":6564,"range":{"start_line":6564,"start_character":8,"end_line":6564,"end_character":30},"updated":"2015-07-07 11:55:23.000000000","message":"this raises an exception - should this method not return True/False?","commit_id":"063ab1bc5d9561123951d22f6a954fc472e4fe70"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"f85c6e6ac7d33fb4597ea4c9a8f9289ae86a41aa","unresolved":false,"context_lines":[{"line_number":6561,"context_line":"    session \u003d get_session()"},{"line_number":6562,"context_line":""},{"line_number":6563,"context_line":"    with session.begin(subtransactions\u003dTrue):"},{"line_number":6564,"context_line":"        _check_instance_exists(context, session, instance_uuid)"},{"line_number":6565,"context_line":"        q \u003d session.query(models.Tag).filter_by("},{"line_number":6566,"context_line":"            resource_id\u003dinstance_uuid, tag\u003dtag)"},{"line_number":6567,"context_line":"        return session.query(q.exists()).scalar()"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_7ecd2ab6","line":6564,"in_reply_to":"ba3cc151_a0f39d9e","updated":"2015-07-07 15:28:26.000000000","message":"Tag db model has no foreign key field. https://github.com/openstack/nova/blob/master/nova/db/sqlalchemy/models.py#L1406-L1422\n\nThe only thing connected tags table with instance table is a relationship.\nIt\u0027s needed to use tags table not only for instances but for any resource.\n\nImagine the situation:\nuser tries to check if \u0027instance1\u0027 has \u0027tag1\u0027\nWhat this method should return if there is no \u0027instance1\u0027 in DB?\nIf we remove this check, method return just \u0027False\u0027. It means \"There is no tag1 on instance1\". But t\u0027s not quite right. Method should say something like \"there is no instance named \u0027instance1\u0027 \". \n\nSo:\n\n1. We should check existence of the instance because db model has no foreign keys for tags model. That means that that we can do any actions with non existent instances.\n\n2. We should get different responses from API if there is no such instance or if there is no such tag on instance. For that we can raise exception \"InstanceNotFound\" on db layer and catch it on API layer.","commit_id":"063ab1bc5d9561123951d22f6a954fc472e4fe70"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1ceb7ba9e98b4bca7e8e8c80188b63f0a53025c3","unresolved":false,"context_lines":[{"line_number":6557,"context_line":"        session.query(models.Tag).filter_by(resource_id\u003dinstance_uuid).delete()"},{"line_number":6558,"context_line":""},{"line_number":6559,"context_line":""},{"line_number":6560,"context_line":"def does_instance_tag_exist(context, instance_uuid, tag):"},{"line_number":6561,"context_line":"    session \u003d get_session()"},{"line_number":6562,"context_line":""},{"line_number":6563,"context_line":"    with session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":13,"id":"ba3cc151_2f03ee43","line":6560,"updated":"2015-07-07 16:02:19.000000000","message":"thanks!","commit_id":"f7fc0ea5e8e8b92b5e6997fc75664037c2d2d76d"}],"nova/objects/instance.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"4c49b701b1a654e07441853d7908bb5770a5f201","unresolved":false,"context_lines":[{"line_number":264,"context_line":"        \u0027pci_devices\u0027: [(\u00271.6\u0027, \u00271.0\u0027), (\u00271.15\u0027, \u00271.1\u0027)],"},{"line_number":265,"context_line":"        \u0027numa_topology\u0027: [(\u00271.14\u0027, \u00271.0\u0027), (\u00271.16\u0027, \u00271.1\u0027)],"},{"line_number":266,"context_line":"        \u0027pci_requests\u0027: [(\u00271.16\u0027, \u00271.1\u0027)],"},{"line_number":267,"context_line":"        \u0027tags\u0027: [(\u00271.17\u0027, \u00271.0\u0027), (\u00271.21\u0027, \u00271.1\u0027)],"},{"line_number":268,"context_line":"        \u0027flavor\u0027: [(\u00271.18\u0027, \u00271.1\u0027)],"},{"line_number":269,"context_line":"        \u0027old_flavor\u0027: [(\u00271.18\u0027, \u00271.1\u0027)],"},{"line_number":270,"context_line":"        \u0027new_flavor\u0027: [(\u00271.18\u0027, \u00271.1\u0027)],"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a016987_3928e599","line":267,"updated":"2015-05-19 22:42:01.000000000","message":"So all of the update start from here.","commit_id":"6c270b9a2f70dab6bab4b747a7ef6703e8dc0da8"}],"nova/objects/tag.py":[{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ece6e2229f90ce41b497448255bfe417b5284c9c","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        db.instance_tag_delete(context, resource_id, name)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @base.remotable_classmethod"},{"line_number":46,"context_line":"    def is_exist(cls, context, resource_id, name):"},{"line_number":47,"context_line":"        return db.is_instance_tag_exist(context, resource_id, name)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_e577cbd2","line":46,"updated":"2015-04-29 07:26:10.000000000","message":"s/is_exist/exists","commit_id":"d3b67bc656027c14048d342dc6d216fbb6ed5352"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"5ebc894ebc30d164a1c95260baea03c4e04b8a77","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        db.instance_tag_delete(context, resource_id, name)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @base.remotable_classmethod"},{"line_number":46,"context_line":"    def is_exist(cls, context, resource_id, name):"},{"line_number":47,"context_line":"        return db.is_instance_tag_exist(context, resource_id, name)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5ad0253b_912f39a1","line":46,"in_reply_to":"5ad0253b_e577cbd2","updated":"2015-04-29 09:31:07.000000000","message":"OK)","commit_id":"d3b67bc656027c14048d342dc6d216fbb6ed5352"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"ff37aa945f5575ca0f42634cbc665926221e7d94","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        db.instance_tag_delete(context, resource_id, name)"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @base.remotable_classmethod"},{"line_number":46,"context_line":"    def exists(cls, context, resource_id, name):"},{"line_number":47,"context_line":"        return db.is_instance_tag_exist(context, resource_id, name)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5ad0253b_d10c9144","line":46,"updated":"2015-04-29 09:31:29.000000000","message":"Thanks !","commit_id":"380b9d7197985e73097ee8cc93fe1ce3e837095d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d1b1cb37d9450bf4dd731c22d18cd9deda692403","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @base.remotable_classmethod"},{"line_number":46,"context_line":"    def exists(cls, context, resource_id, name):"},{"line_number":47,"context_line":"        return db.is_instance_tag_exist(context, resource_id, name)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class TagList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a0c5dc1_04563ed2","line":47,"updated":"2015-05-13 00:48:13.000000000","message":"Will this return an integer? If so, I think we should wrap this in bool() so that we\u0027re not returning something Truthy, but actually True/False.","commit_id":"07388b8a0f2ca6dbcd1bb19f9dbf16a958231580"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"a56101c00b53d402fafbab7209e66355223b6c06","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @base.remotable_classmethod"},{"line_number":46,"context_line":"    def exists(cls, context, resource_id, name):"},{"line_number":47,"context_line":"        return db.is_instance_tag_exist(context, resource_id, name)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class TagList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a0c5dc1_947ed7e2","line":47,"in_reply_to":"9a0c5dc1_04563ed2","updated":"2015-05-13 06:43:01.000000000","message":"Actually one of my complaints was to use a subquery with EXISTS which normally  returns a boolean, if Sergey can confirm that should be great for sure.","commit_id":"07388b8a0f2ca6dbcd1bb19f9dbf16a958231580"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"7a1303b298108fe14b1e987a65568e9ad8d0579d","unresolved":false,"context_lines":[{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    @base.remotable_classmethod"},{"line_number":46,"context_line":"    def exists(cls, context, resource_id, name):"},{"line_number":47,"context_line":"        return db.is_instance_tag_exist(context, resource_id, name)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class TagList(base.ObjectListBase, base.NovaObject):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a016987_db3a66cd","line":47,"in_reply_to":"9a0c5dc1_947ed7e2","updated":"2015-05-14 14:06:23.000000000","message":"It returns a bool value. I\u0027ll change tests to make sure.","commit_id":"07388b8a0f2ca6dbcd1bb19f9dbf16a958231580"}],"nova/tests/unit/db/test_db_api.py":[{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1cc2e3f92766df68b9b7789a4f2aa015a9c2b7e1","unresolved":false,"context_lines":[{"line_number":8913,"context_line":""},{"line_number":8914,"context_line":"        db.instance_tag_add(self.context, uuid, tag1)"},{"line_number":8915,"context_line":""},{"line_number":8916,"context_line":"        # NOTE(snikitin): Make sure it\u0027s actually a bool"},{"line_number":8917,"context_line":"        self.assertEqual(True, db.is_instance_tag_exist(self.context, uuid,"},{"line_number":8918,"context_line":"                                                        tag1))"},{"line_number":8919,"context_line":"        self.assertEqual(False, db.is_instance_tag_exist(self.context, uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_c0afc17b","line":8916,"updated":"2015-07-07 11:55:23.000000000","message":"please use assertTrue","commit_id":"063ab1bc5d9561123951d22f6a954fc472e4fe70"},{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"f85c6e6ac7d33fb4597ea4c9a8f9289ae86a41aa","unresolved":false,"context_lines":[{"line_number":8913,"context_line":""},{"line_number":8914,"context_line":"        db.instance_tag_add(self.context, uuid, tag1)"},{"line_number":8915,"context_line":""},{"line_number":8916,"context_line":"        # NOTE(snikitin): Make sure it\u0027s actually a bool"},{"line_number":8917,"context_line":"        self.assertEqual(True, db.is_instance_tag_exist(self.context, uuid,"},{"line_number":8918,"context_line":"                                                        tag1))"},{"line_number":8919,"context_line":"        self.assertEqual(False, db.is_instance_tag_exist(self.context, uuid,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_fe2a9a8f","line":8916,"in_reply_to":"ba3cc151_c0afc17b","updated":"2015-07-07 15:28:26.000000000","message":"In the beginning it was assertTrue/False.\n\nBut here https://review.openstack.org/#/c/178103/5/nova/objects/tag.py Dan Smith wanted to ensure that method is_instance_tag_exist is actually returns bollean values.\n\nassertTrue/False(actual) doesn\u0027t guarantee that actual value is boolean. It guarantee that actual value, casted to bollean, is True or False.\n\nFor example:\n\nassertTrue(True)  - OK\nassertTrue(1) - OK\nassertEqual(True, 1) - FAIL MismatchError: True !\u003d 1\n\nassertFalse(False)  - OK\nassertFalse([]) - OK\nassertEqual(False, []) - FAIL MismatchError: False !\u003d []\n\nSo to ensure that method actually returns bollean values we have to use assertEqual(True, ...) rather than assertTrue(...)","commit_id":"063ab1bc5d9561123951d22f6a954fc472e4fe70"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"1cc2e3f92766df68b9b7789a4f2aa015a9c2b7e1","unresolved":false,"context_lines":[{"line_number":8916,"context_line":"        # NOTE(snikitin): Make sure it\u0027s actually a bool"},{"line_number":8917,"context_line":"        self.assertEqual(True, db.is_instance_tag_exist(self.context, uuid,"},{"line_number":8918,"context_line":"                                                        tag1))"},{"line_number":8919,"context_line":"        self.assertEqual(False, db.is_instance_tag_exist(self.context, uuid,"},{"line_number":8920,"context_line":"                                                         tag2))"},{"line_number":8921,"context_line":""},{"line_number":8922,"context_line":"    def test_instance_tag_add_to_non_existing_instance(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba3cc151_e0b205e5","line":8919,"updated":"2015-07-07 11:55:23.000000000","message":"assertFalse","commit_id":"063ab1bc5d9561123951d22f6a954fc472e4fe70"}]}
