)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"08061fa6583554479fd3b1cf9e2fe7737a3faead","unresolved":false,"context_lines":[{"line_number":11,"context_line":"commit(0fade695c53af99464a40694b8e4229b27ccbef9) @"},{"line_number":12,"context_line":"https://review.openstack.org/#/c/218481/"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements bp stable-driver-interfaces"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I0078f6dc32932beb6db534ecf22b160097c5a090"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"da20952f_6ecdd385","line":14,"updated":"2015-09-01 16:01:38.000000000","message":"This should probably be \u0027partially implements bp stable-driver-interfaces\u0027 since we didn\u0027t look at the interfaces for redesign.","commit_id":"de548418cd31b8b85eb28695495ce018450e3fbb"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"e6920f9ef1a25c75720879ff2a70997f690a5a02","unresolved":false,"context_lines":[{"line_number":11,"context_line":"commit(0fade695c53af99464a40694b8e4229b27ccbef9) @"},{"line_number":12,"context_line":"https://review.openstack.org/#/c/218481/"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Implements bp stable-driver-interfaces"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I0078f6dc32932beb6db534ecf22b160097c5a090"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"da20952f_6a2e15a7","line":14,"in_reply_to":"da20952f_6ecdd385","updated":"2015-09-01 19:12:06.000000000","message":"Done","commit_id":"de548418cd31b8b85eb28695495ce018450e3fbb"}],"doc/source/architecture.rst":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d515852df0b7f432e190969cc28b1e5b75bb501e","unresolved":false,"context_lines":[{"line_number":162,"context_line":"introduced. For eg. ``DriverV12`` for Liberty release. The drivers for the"},{"line_number":163,"context_line":"services in Liberty release are:"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"* :mod:`keystone.assignment.core.DriverV12`"},{"line_number":166,"context_line":"* :mod:`keystone.assignment.core.RoleDriverV12`"},{"line_number":167,"context_line":"* :mod:`keystone.catalog.core.DriverV12`"},{"line_number":168,"context_line":"* :mod:`keystone.identity.core.DriverV12`"}],"source_content_type":"text/x-rst","patch_set":17,"id":"da20952f_b66ed894","line":165,"updated":"2015-09-01 20:19:10.000000000","message":"I think all of these names are incorrect now.","commit_id":"8390e776876d7fefdc22683efca0d8633e365a42"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"1c896182e49c120b27aa3aae063b70de229686e4","unresolved":false,"context_lines":[{"line_number":162,"context_line":"introduced. For eg. ``DriverV12`` for Liberty release. The drivers for the"},{"line_number":163,"context_line":"services in Liberty release are:"},{"line_number":164,"context_line":""},{"line_number":165,"context_line":"* :mod:`keystone.assignment.core.DriverV12`"},{"line_number":166,"context_line":"* :mod:`keystone.assignment.core.RoleDriverV12`"},{"line_number":167,"context_line":"* :mod:`keystone.catalog.core.DriverV12`"},{"line_number":168,"context_line":"* :mod:`keystone.identity.core.DriverV12`"}],"source_content_type":"text/x-rst","patch_set":17,"id":"da20952f_c19f044f","line":165,"in_reply_to":"da20952f_b66ed894","updated":"2015-09-01 20:46:55.000000000","message":"Fixed them. Thank you!","commit_id":"8390e776876d7fefdc22683efca0d8633e365a42"}],"keystone/assignment/backends/ldap.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d84d60e621f983787cda2c4bf9a01c18529ac986","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class Assignment(assignment.Driver):"},{"line_number":36,"context_line":"    DRIVER_VERSION \u003d 12"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @versionutils.deprecated("},{"line_number":39,"context_line":"        versionutils.deprecated.KILO,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_5b631fb1","line":36,"updated":"2015-08-13 07:01:06.000000000","message":"Why start with version 12? Was that because this is the \u0027L\u0027 release, the 12th letter in the alphabet? btw, pluggable driver support starts with Keystone Light (KSL), which was first introduced in Folsom if I am not mistaken.","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"51b73398f0f5a6fdb218eed5f0e7ccb1514311ac","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class Assignment(assignment.Driver):"},{"line_number":36,"context_line":"    DRIVER_VERSION \u003d 12"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @versionutils.deprecated("},{"line_number":39,"context_line":"        versionutils.deprecated.KILO,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_7ce1d529","line":36,"in_reply_to":"1a4dcd0f_5b631fb1","updated":"2015-08-14 19:23:49.000000000","message":"Yes, your\u0027re right. It is because this is \u0027L\u0027 release. I\u0027m open to any alternative versioning scheme. Suggestions welcome!","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"846ce0c86fe01f620dbf0359415e2aeb0094bc71","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class Assignment(assignment.Driver):"},{"line_number":35,"context_line":"    driver_version \u003d 12"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @versionutils.deprecated("},{"line_number":38,"context_line":"        versionutils.deprecated.KILO,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_a635fddb","line":35,"updated":"2015-08-24 22:15:48.000000000","message":"May want to use the global LIBERTY defined in keystone.common instead of hardcoding it to 12 everywhere\n\ns/12/LIBERTY/g","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"45b5178d3498761aa08cb3e066e399e8d5205325","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class Assignment(assignment.Driver):"},{"line_number":35,"context_line":"    driver_version \u003d 12"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    @versionutils.deprecated("},{"line_number":38,"context_line":"        versionutils.deprecated.KILO,"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_d505fd10","line":35,"in_reply_to":"fa1b9901_a635fddb","updated":"2015-08-25 22:29:36.000000000","message":"Done","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"}],"keystone/assignment/core.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d84d60e621f983787cda2c4bf9a01c18529ac986","unresolved":false,"context_lines":[{"line_number":685,"context_line":"        return self.resource_api.list_projects_in_subtree(project_id, user_id)"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"class Compatibilizer(object):"},{"line_number":689,"context_line":"    # class containing compatibility code"},{"line_number":690,"context_line":"    # (to be provided by the developer that is proposing the change)"},{"line_number":691,"context_line":"    # to ensure that keystone will work with drivers implementing"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_7b74db34","line":688,"updated":"2015-08-13 07:01:06.000000000","message":"We seem to define this class in all the core.py files. Why need define it once and make use of it everywhere?","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"da65f0455b9c735bfbb9829c263b7f0c1acbd00c","unresolved":false,"context_lines":[{"line_number":685,"context_line":"        return self.resource_api.list_projects_in_subtree(project_id, user_id)"},{"line_number":686,"context_line":""},{"line_number":687,"context_line":""},{"line_number":688,"context_line":"class Compatibilizer(object):"},{"line_number":689,"context_line":"    # class containing compatibility code"},{"line_number":690,"context_line":"    # (to be provided by the developer that is proposing the change)"},{"line_number":691,"context_line":"    # to ensure that keystone will work with drivers implementing"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_19c6a316","line":688,"in_reply_to":"1a4dcd0f_7b74db34","updated":"2015-08-14 19:19:02.000000000","message":"Compatibilizer classes contain compatibility methods specific to the respective drivers. Hence, corresponding to every driver in each core.py file, we need to define a compatibilizer in tandem. Compatibilizer class doesn\u0027t hold any code common to all drivers and that explains why we can\u0027t define it once and use it everywhere.","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"983c30cd91bae5572bde31d70a324baa693ab44d","unresolved":false,"context_lines":[{"line_number":1016,"context_line":""},{"line_number":1017,"context_line":""},{"line_number":1018,"context_line":"class RoleCompatibilizer(object):"},{"line_number":1019,"context_line":"    # class containing compatibility code"},{"line_number":1020,"context_line":"    # (to be provided by the developer that is proposing the change)"},{"line_number":1021,"context_line":"    # to ensure that keystone will work with drivers implementing"},{"line_number":1022,"context_line":"    # either the current version of the interface or the previous one"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_9e0823db","line":1019,"updated":"2015-08-11 11:58:30.000000000","message":"Instead of comment, you can make this docstring alternatively.","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"bcf76cee7bcff0b4eca5ea4757726d9181b845ad","unresolved":false,"context_lines":[{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"class Compatibilizer(object):"},{"line_number":1039,"context_line":"    # class containing compatibility code"},{"line_number":1040,"context_line":"    # (to be provided by the developer that is proposing the change)"},{"line_number":1041,"context_line":"    # to ensure that keystone will work with drivers implementing"},{"line_number":1042,"context_line":"    # either the current version of the interface or the previous one"},{"line_number":1043,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_6bb5702f","line":1040,"range":{"start_line":1040,"start_character":6,"end_line":1040,"end_character":68},"updated":"2015-08-18 23:56:11.000000000","message":"Is this not you?","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"b052ea0cca5458372e2997577d38edacc4f01e4c","unresolved":false,"context_lines":[{"line_number":1037,"context_line":""},{"line_number":1038,"context_line":"class Compatibilizer(object):"},{"line_number":1039,"context_line":"    # class containing compatibility code"},{"line_number":1040,"context_line":"    # (to be provided by the developer that is proposing the change)"},{"line_number":1041,"context_line":"    # to ensure that keystone will work with drivers implementing"},{"line_number":1042,"context_line":"    # either the current version of the interface or the previous one"},{"line_number":1043,"context_line":"    pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_3e72237c","line":1040,"in_reply_to":"fa1b9901_6bb5702f","updated":"2015-08-19 20:48:51.000000000","message":"No:-)...the developer who proposes a change to the interface, in future","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"}],"keystone/catalog/core.py":[{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"983c30cd91bae5572bde31d70a324baa693ab44d","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"class Compatibilizer(object):"},{"line_number":281,"context_line":"    # class containing compatibility code"},{"line_number":282,"context_line":"    # (to be provided by the developer that is proposing the change)"},{"line_number":283,"context_line":"    # to ensure that keystone will work with drivers implementing"},{"line_number":284,"context_line":"    # either the current version of the interface or the previous one"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_7e2c374a","line":281,"updated":"2015-08-11 11:58:30.000000000","message":"Same here.","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"}],"keystone/common/manager.py":[{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"983c30cd91bae5572bde31d70a324baa693ab44d","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"class CompatibilizerMeta(abc.ABCMeta):"},{"line_number":113,"context_line":"    def __new__(mcl, name, bases, attrs):"},{"line_number":114,"context_line":"        INTERFACE_VERSION \u003d None"},{"line_number":115,"context_line":"        for cls in bases:"},{"line_number":116,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_1e9f3351","line":113,"updated":"2015-08-11 11:58:30.000000000","message":"\u0027mcl\u0027 is not a well-known short form, at least not in OpenStack as far as I know. You can just call it \u0027cls\u0027 and in a docstring write that \u0027cls\u0027 here is metaclass. Another alternative I can see is call it \u0027metaclass\u0027 :)","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"da65f0455b9c735bfbb9829c263b7f0c1acbd00c","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"class CompatibilizerMeta(abc.ABCMeta):"},{"line_number":113,"context_line":"    def __new__(mcl, name, bases, attrs):"},{"line_number":114,"context_line":"        INTERFACE_VERSION \u003d None"},{"line_number":115,"context_line":"        for cls in bases:"},{"line_number":116,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_19ed438e","line":113,"in_reply_to":"1a4dcd0f_1e9f3351","updated":"2015-08-14 19:19:02.000000000","message":"Done","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"983c30cd91bae5572bde31d70a324baa693ab44d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                break"},{"line_number":120,"context_line":"            except AttributeError:"},{"line_number":121,"context_line":"                # not a driver interface"},{"line_number":122,"context_line":"                pass"},{"line_number":123,"context_line":"        if INTERFACE_VERSION is not None:"},{"line_number":124,"context_line":"            # code pertaining to driver implementations alone"},{"line_number":125,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_3ee78fe5","line":122,"updated":"2015-08-11 11:58:30.000000000","message":"an empty line here would make better readability IMO","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"da65f0455b9c735bfbb9829c263b7f0c1acbd00c","unresolved":false,"context_lines":[{"line_number":119,"context_line":"                break"},{"line_number":120,"context_line":"            except AttributeError:"},{"line_number":121,"context_line":"                # not a driver interface"},{"line_number":122,"context_line":"                pass"},{"line_number":123,"context_line":"        if INTERFACE_VERSION is not None:"},{"line_number":124,"context_line":"            # code pertaining to driver implementations alone"},{"line_number":125,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_d9e6fbaf","line":122,"in_reply_to":"1a4dcd0f_3ee78fe5","updated":"2015-08-14 19:19:02.000000000","message":"Done","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"d84d60e621f983787cda2c4bf9a01c18529ac986","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        if INTERFACE_VERSION is not None:"},{"line_number":124,"context_line":"            # code pertaining to driver implementations alone"},{"line_number":125,"context_line":"            try:"},{"line_number":126,"context_line":"                DRIVER_VERSION \u003d int(attrs.get(\"DRIVER_VERSION\"))"},{"line_number":127,"context_line":"            except TypeError:"},{"line_number":128,"context_line":"                raise exception.IncompatibleDriver()"},{"line_number":129,"context_line":"            if INTERFACE_VERSION \u003d\u003d DRIVER_VERSION:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_3b065386","line":126,"updated":"2015-08-13 07:01:06.000000000","message":"With this change, the existing out-of-tree drivers will break if they don\u0027t have INTERFACE_VERSION defined right?","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"da65f0455b9c735bfbb9829c263b7f0c1acbd00c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        if INTERFACE_VERSION is not None:"},{"line_number":124,"context_line":"            # code pertaining to driver implementations alone"},{"line_number":125,"context_line":"            try:"},{"line_number":126,"context_line":"                DRIVER_VERSION \u003d int(attrs.get(\"DRIVER_VERSION\"))"},{"line_number":127,"context_line":"            except TypeError:"},{"line_number":128,"context_line":"                raise exception.IncompatibleDriver()"},{"line_number":129,"context_line":"            if INTERFACE_VERSION \u003d\u003d DRIVER_VERSION:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_d9427b68","line":126,"in_reply_to":"1a4dcd0f_3b065386","updated":"2015-08-14 19:19:02.000000000","message":"Yes you\u0027re right. I\u0027ve addressed this issue in patch set 4. Please review that. With that, existing out-of-tree drivers would work with the next release i.e. version 12, as well.","commit_id":"b307bb77ec8cf3a0f10f842bd5fe61fa5893c731"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"class CompatibilizerMeta(abc.ABCMeta):"},{"line_number":113,"context_line":"    def __new__(metaclass, name, bases, attrs):"},{"line_number":114,"context_line":"        INTERFACE_VERSION \u003d None"},{"line_number":115,"context_line":"        for cls in bases:"},{"line_number":116,"context_line":"            try:"},{"line_number":117,"context_line":"                INTERFACE_VERSION \u003d int(cls.INTERFACE_VERSION)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_7019df78","line":114,"updated":"2015-08-18 23:47:07.000000000","message":"may want to change INTERFACE_VERSION to interface_version. All caps usually means constant.","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"class CompatibilizerMeta(abc.ABCMeta):"},{"line_number":113,"context_line":"    def __new__(metaclass, name, bases, attrs):"},{"line_number":114,"context_line":"        INTERFACE_VERSION \u003d None"},{"line_number":115,"context_line":"        for cls in bases:"},{"line_number":116,"context_line":"            try:"},{"line_number":117,"context_line":"                INTERFACE_VERSION \u003d int(cls.INTERFACE_VERSION)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_9bb821ca","line":114,"in_reply_to":"fa1b9901_7019df78","updated":"2015-08-19 20:44:52.000000000","message":"Done","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":112,"context_line":"class CompatibilizerMeta(abc.ABCMeta):"},{"line_number":113,"context_line":"    def __new__(metaclass, name, bases, attrs):"},{"line_number":114,"context_line":"        INTERFACE_VERSION \u003d None"},{"line_number":115,"context_line":"        for cls in bases:"},{"line_number":116,"context_line":"            try:"},{"line_number":117,"context_line":"                INTERFACE_VERSION \u003d int(cls.INTERFACE_VERSION)"},{"line_number":118,"context_line":"                driverABC \u003d cls"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_93e36805","line":115,"updated":"2015-08-18 23:47:07.000000000","message":"say we have a class hierarchy like this, where A is the base\n\nA \u003c- B \u003c- C\n\nboth A and C define INTERFACE_VERSION. How is this code behave?","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":112,"context_line":"class CompatibilizerMeta(abc.ABCMeta):"},{"line_number":113,"context_line":"    def __new__(metaclass, name, bases, attrs):"},{"line_number":114,"context_line":"        INTERFACE_VERSION \u003d None"},{"line_number":115,"context_line":"        for cls in bases:"},{"line_number":116,"context_line":"            try:"},{"line_number":117,"context_line":"                INTERFACE_VERSION \u003d int(cls.INTERFACE_VERSION)"},{"line_number":118,"context_line":"                driverABC \u003d cls"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_1e163f4c","line":115,"in_reply_to":"fa1b9901_93e36805","updated":"2015-08-19 20:44:52.000000000","message":"Depending upon which of A or C is defined as base class of the driver, the interface_version specified in the corresponding base class will be considered. \nFor eg. if Driver D\u0027s base class is C, then the interface_version of C will be considered; else if Driver D\u0027s base class is A, then the interface_version of A will be considered.","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        INTERFACE_VERSION \u003d None"},{"line_number":115,"context_line":"        for cls in bases:"},{"line_number":116,"context_line":"            try:"},{"line_number":117,"context_line":"                INTERFACE_VERSION \u003d int(cls.INTERFACE_VERSION)"},{"line_number":118,"context_line":"                driverABC \u003d cls"},{"line_number":119,"context_line":"                break"},{"line_number":120,"context_line":"            except AttributeError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_708c7f7f","line":117,"updated":"2015-08-18 23:47:07.000000000","message":"why int()? Isn\u0027t INTERFACE_VERSION already an integer? Otherwise, you may want to also catch ValueException.","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        INTERFACE_VERSION \u003d None"},{"line_number":115,"context_line":"        for cls in bases:"},{"line_number":116,"context_line":"            try:"},{"line_number":117,"context_line":"                INTERFACE_VERSION \u003d int(cls.INTERFACE_VERSION)"},{"line_number":118,"context_line":"                driverABC \u003d cls"},{"line_number":119,"context_line":"                break"},{"line_number":120,"context_line":"            except AttributeError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_7beaedad","line":117,"in_reply_to":"fa1b9901_708c7f7f","updated":"2015-08-19 20:44:52.000000000","message":"Removed the int(). Yes, interface_version is already an integer.","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        for cls in bases:"},{"line_number":116,"context_line":"            try:"},{"line_number":117,"context_line":"                INTERFACE_VERSION \u003d int(cls.INTERFACE_VERSION)"},{"line_number":118,"context_line":"                driverABC \u003d cls"},{"line_number":119,"context_line":"                break"},{"line_number":120,"context_line":"            except AttributeError:"},{"line_number":121,"context_line":"                # not a driver interface"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_f0f64ff8","line":118,"updated":"2015-08-18 23:47:07.000000000","message":"s/driverABC/driver/","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        for cls in bases:"},{"line_number":116,"context_line":"            try:"},{"line_number":117,"context_line":"                INTERFACE_VERSION \u003d int(cls.INTERFACE_VERSION)"},{"line_number":118,"context_line":"                driverABC \u003d cls"},{"line_number":119,"context_line":"                break"},{"line_number":120,"context_line":"            except AttributeError:"},{"line_number":121,"context_line":"                # not a driver interface"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_1b42d1ae","line":118,"in_reply_to":"fa1b9901_f0f64ff8","updated":"2015-08-19 20:44:52.000000000","message":"driverABC \u003d\u003e driver abstract base class.\nI\u0027ve used the name \u0027driverABC\u0027 because its not the driver itself but the driver\u0027s abstract base class.","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                driverABC \u003d cls"},{"line_number":119,"context_line":"                break"},{"line_number":120,"context_line":"            except AttributeError:"},{"line_number":121,"context_line":"                # not a driver interface"},{"line_number":122,"context_line":"                pass"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        if INTERFACE_VERSION is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_306287ae","line":121,"updated":"2015-08-18 23:47:07.000000000","message":"why eat this exception? If CompatibilizerMeta is used, interface must define INTERFACE_VERSION.","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                driverABC \u003d cls"},{"line_number":119,"context_line":"                break"},{"line_number":120,"context_line":"            except AttributeError:"},{"line_number":121,"context_line":"                # not a driver interface"},{"line_number":122,"context_line":"                pass"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        if INTERFACE_VERSION is not None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_db7539fa","line":121,"in_reply_to":"fa1b9901_306287ae","updated":"2015-08-19 20:44:52.000000000","message":"Fixed in patch set 6. IncompatibileInterfaceException will be raised.","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                # not a driver interface"},{"line_number":122,"context_line":"                pass"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        if INTERFACE_VERSION is not None:"},{"line_number":125,"context_line":"            # code pertaining to driver implementations alone."},{"line_number":126,"context_line":"            # the following six lines of code are temporarily added"},{"line_number":127,"context_line":"            # to ensure that existing drivers will work with next"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_d3ea40ac","line":124,"updated":"2015-08-18 23:47:07.000000000","message":"if INTERFACE_VERSION:","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                # not a driver interface"},{"line_number":122,"context_line":"                pass"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        if INTERFACE_VERSION is not None:"},{"line_number":125,"context_line":"            # code pertaining to driver implementations alone."},{"line_number":126,"context_line":"            # the following six lines of code are temporarily added"},{"line_number":127,"context_line":"            # to ensure that existing drivers will work with next"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_9b62613d","line":124,"in_reply_to":"fa1b9901_d3ea40ac","updated":"2015-08-19 20:44:52.000000000","message":"Done","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                pass"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        if INTERFACE_VERSION is not None:"},{"line_number":125,"context_line":"            # code pertaining to driver implementations alone."},{"line_number":126,"context_line":"            # the following six lines of code are temporarily added"},{"line_number":127,"context_line":"            # to ensure that existing drivers will work with next"},{"line_number":128,"context_line":"            # release(VERSION\u003d12); so these should be removed thereafter."}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_b0f537cc","line":125,"updated":"2015-08-18 23:47:07.000000000","message":"# TODO","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                pass"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        if INTERFACE_VERSION is not None:"},{"line_number":125,"context_line":"            # code pertaining to driver implementations alone."},{"line_number":126,"context_line":"            # the following six lines of code are temporarily added"},{"line_number":127,"context_line":"            # to ensure that existing drivers will work with next"},{"line_number":128,"context_line":"            # release(VERSION\u003d12); so these should be removed thereafter."}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_7b5d0d78","line":125,"in_reply_to":"fa1b9901_b0f537cc","updated":"2015-08-19 20:44:52.000000000","message":"Done","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            # the following six lines of code are temporarily added"},{"line_number":127,"context_line":"            # to ensure that existing drivers will work with next"},{"line_number":128,"context_line":"            # release(VERSION\u003d12); so these should be removed thereafter."},{"line_number":129,"context_line":"            DRIVER_VERSION \u003d attrs.get(\"DRIVER_VERSION\")"},{"line_number":130,"context_line":"            if DRIVER_VERSION is None and INTERFACE_VERSION \u003d\u003d 12:"},{"line_number":131,"context_line":"                DRIVER_VERSION \u003d 12"},{"line_number":132,"context_line":"                LOG.debug(\u0027Warning: Version not specified in driver.\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_9096f34a","line":129,"updated":"2015-08-18 23:47:07.000000000","message":"may consider using driver_version instead of DRIVER_VERSION","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":126,"context_line":"            # the following six lines of code are temporarily added"},{"line_number":127,"context_line":"            # to ensure that existing drivers will work with next"},{"line_number":128,"context_line":"            # release(VERSION\u003d12); so these should be removed thereafter."},{"line_number":129,"context_line":"            DRIVER_VERSION \u003d attrs.get(\"DRIVER_VERSION\")"},{"line_number":130,"context_line":"            if DRIVER_VERSION is None and INTERFACE_VERSION \u003d\u003d 12:"},{"line_number":131,"context_line":"                DRIVER_VERSION \u003d 12"},{"line_number":132,"context_line":"                LOG.debug(\u0027Warning: Version not specified in driver.\u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_1b573159","line":129,"in_reply_to":"fa1b9901_9096f34a","updated":"2015-08-19 20:44:52.000000000","message":"Done","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            # to ensure that existing drivers will work with next"},{"line_number":128,"context_line":"            # release(VERSION\u003d12); so these should be removed thereafter."},{"line_number":129,"context_line":"            DRIVER_VERSION \u003d attrs.get(\"DRIVER_VERSION\")"},{"line_number":130,"context_line":"            if DRIVER_VERSION is None and INTERFACE_VERSION \u003d\u003d 12:"},{"line_number":131,"context_line":"                DRIVER_VERSION \u003d 12"},{"line_number":132,"context_line":"                LOG.debug(\u0027Warning: Version not specified in driver.\u0027"},{"line_number":133,"context_line":"                          \u0027Such drivers would be supported only in this \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_50ae1b86","line":130,"updated":"2015-08-18 23:47:07.000000000","message":"may want to have a global constant for \"12\"","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            # to ensure that existing drivers will work with next"},{"line_number":128,"context_line":"            # release(VERSION\u003d12); so these should be removed thereafter."},{"line_number":129,"context_line":"            DRIVER_VERSION \u003d attrs.get(\"DRIVER_VERSION\")"},{"line_number":130,"context_line":"            if DRIVER_VERSION is None and INTERFACE_VERSION \u003d\u003d 12:"},{"line_number":131,"context_line":"                DRIVER_VERSION \u003d 12"},{"line_number":132,"context_line":"                LOG.debug(\u0027Warning: Version not specified in driver.\u0027"},{"line_number":133,"context_line":"                          \u0027Such drivers would be supported only in this \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_3b547551","line":130,"in_reply_to":"fa1b9901_50ae1b86","updated":"2015-08-19 20:44:52.000000000","message":"Done","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                DRIVER_VERSION \u003d 12"},{"line_number":132,"context_line":"                LOG.debug(\u0027Warning: Version not specified in driver.\u0027"},{"line_number":133,"context_line":"                          \u0027Such drivers would be supported only in this \u0027"},{"line_number":134,"context_line":"                          \u0027release(version\u003d12)\u0027)"},{"line_number":135,"context_line":"            try:"},{"line_number":136,"context_line":"                DRIVER_VERSION \u003d int(DRIVER_VERSION)"},{"line_number":137,"context_line":"            except TypeError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_d099cb6f","line":134,"updated":"2015-08-18 23:47:07.000000000","message":"is there a better way to say drivers without DRIVER_VERSION defined will be deprecated?","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                DRIVER_VERSION \u003d 12"},{"line_number":132,"context_line":"                LOG.debug(\u0027Warning: Version not specified in driver.\u0027"},{"line_number":133,"context_line":"                          \u0027Such drivers would be supported only in this \u0027"},{"line_number":134,"context_line":"                          \u0027release(version\u003d12)\u0027)"},{"line_number":135,"context_line":"            try:"},{"line_number":136,"context_line":"                DRIVER_VERSION \u003d int(DRIVER_VERSION)"},{"line_number":137,"context_line":"            except TypeError:"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_9bc90129","line":134,"in_reply_to":"fa1b9901_d099cb6f","updated":"2015-08-19 20:44:52.000000000","message":"Done","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                          \u0027release(version\u003d12)\u0027)"},{"line_number":135,"context_line":"            try:"},{"line_number":136,"context_line":"                DRIVER_VERSION \u003d int(DRIVER_VERSION)"},{"line_number":137,"context_line":"            except TypeError:"},{"line_number":138,"context_line":"                raise exception.IncompatibleDriver()"},{"line_number":139,"context_line":"            if INTERFACE_VERSION \u003d\u003d DRIVER_VERSION:"},{"line_number":140,"context_line":"                # no compatibility issues"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_f0eacfab","line":137,"updated":"2015-08-18 23:47:07.000000000","message":"need to catch TypeError and ValueError","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                          \u0027release(version\u003d12)\u0027)"},{"line_number":135,"context_line":"            try:"},{"line_number":136,"context_line":"                DRIVER_VERSION \u003d int(DRIVER_VERSION)"},{"line_number":137,"context_line":"            except TypeError:"},{"line_number":138,"context_line":"                raise exception.IncompatibleDriver()"},{"line_number":139,"context_line":"            if INTERFACE_VERSION \u003d\u003d DRIVER_VERSION:"},{"line_number":140,"context_line":"                # no compatibility issues"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_bbce452c","line":137,"in_reply_to":"fa1b9901_f0eacfab","updated":"2015-08-19 20:44:52.000000000","message":"Done","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            try:"},{"line_number":136,"context_line":"                DRIVER_VERSION \u003d int(DRIVER_VERSION)"},{"line_number":137,"context_line":"            except TypeError:"},{"line_number":138,"context_line":"                raise exception.IncompatibleDriver()"},{"line_number":139,"context_line":"            if INTERFACE_VERSION \u003d\u003d DRIVER_VERSION:"},{"line_number":140,"context_line":"                # no compatibility issues"},{"line_number":141,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_f05def79","line":138,"updated":"2015-08-18 23:47:07.000000000","message":"should IncompatibleDriver be accepting driver class/name as a param?","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            try:"},{"line_number":136,"context_line":"                DRIVER_VERSION \u003d int(DRIVER_VERSION)"},{"line_number":137,"context_line":"            except TypeError:"},{"line_number":138,"context_line":"                raise exception.IncompatibleDriver()"},{"line_number":139,"context_line":"            if INTERFACE_VERSION \u003d\u003d DRIVER_VERSION:"},{"line_number":140,"context_line":"                # no compatibility issues"},{"line_number":141,"context_line":"                pass"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_7bd42dbc","line":138,"in_reply_to":"fa1b9901_f05def79","updated":"2015-08-19 20:44:52.000000000","message":"Done","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                              predicate\u003dinspect.ismethod):"},{"line_number":147,"context_line":"                    attrs[tup[0]] \u003d tup[1]"},{"line_number":148,"context_line":"                for key in driverABC.__abstractmethods__:"},{"line_number":149,"context_line":"                    if key not in attrs:"},{"line_number":150,"context_line":"                        # developer missed to write compatibility code"},{"line_number":151,"context_line":"                        # for not-implemented abstract method of driver"},{"line_number":152,"context_line":"                        raise exception.IncompatibleInterface()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_b073f7e6","line":149,"updated":"2015-08-18 23:47:07.000000000","message":"instead of failing at the first missing method, may want to finish the inspection and report the missing ones all at once in IncompatibleInterface","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                              predicate\u003dinspect.ismethod):"},{"line_number":147,"context_line":"                    attrs[tup[0]] \u003d tup[1]"},{"line_number":148,"context_line":"                for key in driverABC.__abstractmethods__:"},{"line_number":149,"context_line":"                    if key not in attrs:"},{"line_number":150,"context_line":"                        # developer missed to write compatibility code"},{"line_number":151,"context_line":"                        # for not-implemented abstract method of driver"},{"line_number":152,"context_line":"                        raise exception.IncompatibleInterface()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_3bdb15ee","line":149,"in_reply_to":"fa1b9901_b073f7e6","updated":"2015-08-19 20:44:52.000000000","message":"Done","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                    if key not in attrs:"},{"line_number":150,"context_line":"                        # developer missed to write compatibility code"},{"line_number":151,"context_line":"                        # for not-implemented abstract method of driver"},{"line_number":152,"context_line":"                        raise exception.IncompatibleInterface()"},{"line_number":153,"context_line":"            else:"},{"line_number":154,"context_line":"                # older versions are not supported"},{"line_number":155,"context_line":"                raise exception.IncompatibleDriver()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_50593b59","line":152,"updated":"2015-08-18 23:47:07.000000000","message":"IncompatibleInterface should be more informative. Like reporting the interfaces which failed the inspection.","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                    if key not in attrs:"},{"line_number":150,"context_line":"                        # developer missed to write compatibility code"},{"line_number":151,"context_line":"                        # for not-implemented abstract method of driver"},{"line_number":152,"context_line":"                        raise exception.IncompatibleInterface()"},{"line_number":153,"context_line":"            else:"},{"line_number":154,"context_line":"                # older versions are not supported"},{"line_number":155,"context_line":"                raise exception.IncompatibleDriver()"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_dbe3f9a2","line":152,"in_reply_to":"fa1b9901_50593b59","updated":"2015-08-19 20:44:52.000000000","message":"Done","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"2d06475fa88d03da96587e874dd3fa9ef733c303","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                        raise exception.IncompatibleInterface()"},{"line_number":153,"context_line":"            else:"},{"line_number":154,"context_line":"                # older versions are not supported"},{"line_number":155,"context_line":"                raise exception.IncompatibleDriver()"},{"line_number":156,"context_line":"        return super(CompatibilizerMeta, metaclass).__new__(metaclass, name,"},{"line_number":157,"context_line":"                                                            bases, attrs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_b3b0ecde","line":155,"updated":"2015-08-18 23:47:07.000000000","message":"If an interface does not define INTERFACE_VERSION that would be an error.","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"a128c5081bbda89428b1e1e2df8dfa454e0040e0","unresolved":false,"context_lines":[{"line_number":152,"context_line":"                        raise exception.IncompatibleInterface()"},{"line_number":153,"context_line":"            else:"},{"line_number":154,"context_line":"                # older versions are not supported"},{"line_number":155,"context_line":"                raise exception.IncompatibleDriver()"},{"line_number":156,"context_line":"        return super(CompatibilizerMeta, metaclass).__new__(metaclass, name,"},{"line_number":157,"context_line":"                                                            bases, attrs)"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_9bf02169","line":155,"in_reply_to":"fa1b9901_b3b0ecde","updated":"2015-08-19 20:44:52.000000000","message":"Done","commit_id":"1be8e24ced6a2b37325c46c18c8e598a4e75556e"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import stevedore"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LIBERTY \u003d 12"},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_5c04a648","line":24,"updated":"2015-08-20 10:33:33.000000000","message":"Missing a newline here","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import stevedore"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from keystone import exception"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LIBERTY \u003d 12"},{"line_number":26,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_b9b938ce","line":24,"in_reply_to":"fa1b9901_5c04a648","updated":"2015-08-20 18:17:21.000000000","message":"Done","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"class CompatibilizerMeta(abc.ABCMeta):"},{"line_number":113,"context_line":"    \"\"\"Metaclass for all database drivers; it will ensure that"},{"line_number":114,"context_line":"    + the driver version either matches the current interface version or"},{"line_number":115,"context_line":"      the previous one"},{"line_number":116,"context_line":"    + if its the previous, it\u0027ll introduce the compatibility methods defined"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_1c7f0eac","line":113,"updated":"2015-08-20 10:33:33.000000000","message":"First line should be a 1 line summary: http://docs.openstack.org/developer/hacking/#docstrings","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":110,"context_line":""},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"class CompatibilizerMeta(abc.ABCMeta):"},{"line_number":113,"context_line":"    \"\"\"Metaclass for all database drivers; it will ensure that"},{"line_number":114,"context_line":"    + the driver version either matches the current interface version or"},{"line_number":115,"context_line":"      the previous one"},{"line_number":116,"context_line":"    + if its the previous, it\u0027ll introduce the compatibility methods defined"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_99b234e4","line":113,"in_reply_to":"fa1b9901_1c7f0eac","updated":"2015-08-20 18:17:21.000000000","message":"Done","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            if driver_version is None and interface_version \u003d\u003d LIBERTY:"},{"line_number":144,"context_line":"                driver_version \u003d LIBERTY"},{"line_number":145,"context_line":"                cls \u003d attrs.get(\"__module__\") + \".\" + name"},{"line_number":146,"context_line":"                LOG.warning(\u0027Version not specified in driver %(cls)s; \u0027"},{"line_number":147,"context_line":"                            \u0027Such drivers would be deprecated after liberty \u0027"},{"line_number":148,"context_line":"                            \u0027release(version\u003d12)\u0027, {\u0027cls\u0027: cls})"},{"line_number":149,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_573c7fc7","line":146,"updated":"2015-08-20 10:33:33.000000000","message":"Use the _LW i18n helper here.","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            if driver_version is None and interface_version \u003d\u003d LIBERTY:"},{"line_number":144,"context_line":"                driver_version \u003d LIBERTY"},{"line_number":145,"context_line":"                cls \u003d attrs.get(\"__module__\") + \".\" + name"},{"line_number":146,"context_line":"                LOG.warning(\u0027Version not specified in driver %(cls)s; \u0027"},{"line_number":147,"context_line":"                            \u0027Such drivers would be deprecated after liberty \u0027"},{"line_number":148,"context_line":"                            \u0027release(version\u003d12)\u0027, {\u0027cls\u0027: cls})"},{"line_number":149,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_39ce8863","line":146,"in_reply_to":"fa1b9901_573c7fc7","updated":"2015-08-20 18:17:21.000000000","message":"Done","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                    if key not in attrs:"},{"line_number":161,"context_line":"                        abs_methods.append(key)"},{"line_number":162,"context_line":"                if abs_methods:"},{"line_number":163,"context_line":"                    msg \u003d \"Compatibility methods missing for \" + \\"},{"line_number":164,"context_line":"                          \"not-implemented-abstract-methods \" + \\"},{"line_number":165,"context_line":"                          \"%s of driver implementation\" % \\"},{"line_number":166,"context_line":"                          str(abs_methods)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_37b46b33","line":163,"updated":"2015-08-20 10:33:33.000000000","message":"Use the _() i18n helper.","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                    if key not in attrs:"},{"line_number":161,"context_line":"                        abs_methods.append(key)"},{"line_number":162,"context_line":"                if abs_methods:"},{"line_number":163,"context_line":"                    msg \u003d \"Compatibility methods missing for \" + \\"},{"line_number":164,"context_line":"                          \"not-implemented-abstract-methods \" + \\"},{"line_number":165,"context_line":"                          \"%s of driver implementation\" % \\"},{"line_number":166,"context_line":"                          str(abs_methods)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_b9e058ce","line":163,"in_reply_to":"fa1b9901_37b46b33","updated":"2015-08-20 18:17:21.000000000","message":"Done","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                    msg \u003d \"Compatibility methods missing for \" + \\"},{"line_number":164,"context_line":"                          \"not-implemented-abstract-methods \" + \\"},{"line_number":165,"context_line":"                          \"%s of driver implementation\" % \\"},{"line_number":166,"context_line":"                          str(abs_methods)"},{"line_number":167,"context_line":"                    raise exception.IncompatibleInterface("},{"line_number":168,"context_line":"                        cls\u003dstr(driverABC), msg\u003dmsg)"},{"line_number":169,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_d783af54","line":166,"updated":"2015-08-20 10:33:33.000000000","message":"No need to str() this because the %s will already do that.","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":163,"context_line":"                    msg \u003d \"Compatibility methods missing for \" + \\"},{"line_number":164,"context_line":"                          \"not-implemented-abstract-methods \" + \\"},{"line_number":165,"context_line":"                          \"%s of driver implementation\" % \\"},{"line_number":166,"context_line":"                          str(abs_methods)"},{"line_number":167,"context_line":"                    raise exception.IncompatibleInterface("},{"line_number":168,"context_line":"                        cls\u003dstr(driverABC), msg\u003dmsg)"},{"line_number":169,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_d9e3ccd7","line":166,"in_reply_to":"fa1b9901_d783af54","updated":"2015-08-20 18:17:21.000000000","message":"Done","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                          \"%s of driver implementation\" % \\"},{"line_number":166,"context_line":"                          str(abs_methods)"},{"line_number":167,"context_line":"                    raise exception.IncompatibleInterface("},{"line_number":168,"context_line":"                        cls\u003dstr(driverABC), msg\u003dmsg)"},{"line_number":169,"context_line":"            else:"},{"line_number":170,"context_line":"                # older versions are not supported"},{"line_number":171,"context_line":"                cls \u003d attrs.get(\"__module__\") + \".\" + name"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_5798ffbf","line":168,"updated":"2015-08-20 10:33:33.000000000","message":"Same for str() here","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                          \"%s of driver implementation\" % \\"},{"line_number":166,"context_line":"                          str(abs_methods)"},{"line_number":167,"context_line":"                    raise exception.IncompatibleInterface("},{"line_number":168,"context_line":"                        cls\u003dstr(driverABC), msg\u003dmsg)"},{"line_number":169,"context_line":"            else:"},{"line_number":170,"context_line":"                # older versions are not supported"},{"line_number":171,"context_line":"                cls \u003d attrs.get(\"__module__\") + \".\" + name"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_79e640e9","line":168,"in_reply_to":"fa1b9901_5798ffbf","updated":"2015-08-20 18:17:21.000000000","message":"Done","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                    raise exception.IncompatibleInterface("},{"line_number":168,"context_line":"                        cls\u003dstr(driverABC), msg\u003dmsg)"},{"line_number":169,"context_line":"            else:"},{"line_number":170,"context_line":"                # older versions are not supported"},{"line_number":171,"context_line":"                cls \u003d attrs.get(\"__module__\") + \".\" + name"},{"line_number":172,"context_line":"                raise exception.IncompatibleDriver(cls\u003dcls)"},{"line_number":173,"context_line":"        return super(CompatibilizerMeta, metaclass).__new__(metaclass, name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_37feabae","line":170,"updated":"2015-08-20 10:33:33.000000000","message":"How can we support more that one version back? If history is any indicator there will be at least one case where we will need to do this.","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                    raise exception.IncompatibleInterface("},{"line_number":168,"context_line":"                        cls\u003dstr(driverABC), msg\u003dmsg)"},{"line_number":169,"context_line":"            else:"},{"line_number":170,"context_line":"                # older versions are not supported"},{"line_number":171,"context_line":"                cls \u003d attrs.get(\"__module__\") + \".\" + name"},{"line_number":172,"context_line":"                raise exception.IncompatibleDriver(cls\u003dcls)"},{"line_number":173,"context_line":"        return super(CompatibilizerMeta, metaclass).__new__(metaclass, name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_5901fc36","line":170,"in_reply_to":"fa1b9901_37feabae","updated":"2015-08-20 18:17:21.000000000","message":"We don\u0027t have to, as per my understanding of the spec.\nI\u0027ll improve upon my understanding with the help of your alternative @\nhttps://review.openstack.org/#/c/215202/","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0d48eb9d4ff5744230a204316bb6ccaacfe2c74d","unresolved":false,"context_lines":[{"line_number":167,"context_line":"                    raise exception.IncompatibleInterface("},{"line_number":168,"context_line":"                        cls\u003dstr(driverABC), msg\u003dmsg)"},{"line_number":169,"context_line":"            else:"},{"line_number":170,"context_line":"                # older versions are not supported"},{"line_number":171,"context_line":"                cls \u003d attrs.get(\"__module__\") + \".\" + name"},{"line_number":172,"context_line":"                raise exception.IncompatibleDriver(cls\u003dcls)"},{"line_number":173,"context_line":"        return super(CompatibilizerMeta, metaclass).__new__(metaclass, name,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_cd08e2dc","line":170,"in_reply_to":"fa1b9901_5901fc36","updated":"2015-08-20 19:30:28.000000000","message":"The spec says at least two versions. I would hope it doesn\u0027t happen but there could be a case with some major cloud provider\u0027s driver and we\u0027ll end up having to support something for 3 releases.\n\nIn my alternative I didn\u0027t provide a way to say that a particular version is no longer supported at all. I\u0027m not sure it if matters though.","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"846ce0c86fe01f620dbf0359415e2aeb0094bc71","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class CompatibilizerMeta(abc.ABCMeta):"},{"line_number":115,"context_line":"    \"\"\"Metaclass for all database drivers;"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    This will ensure that,"},{"line_number":118,"context_line":"    + the driver version either matches the current interface version or"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_f92ac5e6","line":115,"updated":"2015-08-24 22:15:48.000000000","message":"s/;/./","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"45b5178d3498761aa08cb3e066e399e8d5205325","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"class CompatibilizerMeta(abc.ABCMeta):"},{"line_number":115,"context_line":"    \"\"\"Metaclass for all database drivers;"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    This will ensure that,"},{"line_number":118,"context_line":"    + the driver version either matches the current interface version or"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_756bd1b9","line":115,"in_reply_to":"fa1b9901_f92ac5e6","updated":"2015-08-25 22:29:36.000000000","message":"Done","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"846ce0c86fe01f620dbf0359415e2aeb0094bc71","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    \"\"\"Metaclass for all database drivers;"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    This will ensure that,"},{"line_number":118,"context_line":"    + the driver version either matches the current interface version or"},{"line_number":119,"context_line":"    the previous one"},{"line_number":120,"context_line":"    + if its the previous, it\u0027ll introduce the compatibility methods defined"},{"line_number":121,"context_line":"    in the \u0027Compatibilizer\u0027 class into the driver"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_39491dd1","line":118,"updated":"2015-08-24 22:15:48.000000000","message":"please replace the \u0027+\u0027 with proper line format","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"45b5178d3498761aa08cb3e066e399e8d5205325","unresolved":false,"context_lines":[{"line_number":115,"context_line":"    \"\"\"Metaclass for all database drivers;"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    This will ensure that,"},{"line_number":118,"context_line":"    + the driver version either matches the current interface version or"},{"line_number":119,"context_line":"    the previous one"},{"line_number":120,"context_line":"    + if its the previous, it\u0027ll introduce the compatibility methods defined"},{"line_number":121,"context_line":"    in the \u0027Compatibilizer\u0027 class into the driver"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_356a39b4","line":118,"in_reply_to":"fa1b9901_39491dd1","updated":"2015-08-25 22:29:36.000000000","message":"Done","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"846ce0c86fe01f620dbf0359415e2aeb0094bc71","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    + the driver version either matches the current interface version or"},{"line_number":119,"context_line":"    the previous one"},{"line_number":120,"context_line":"    + if its the previous, it\u0027ll introduce the compatibility methods defined"},{"line_number":121,"context_line":"    in the \u0027Compatibilizer\u0027 class into the driver"},{"line_number":122,"context_line":"    + if the \u0027Compatibilizer\u0027 class doesn\u0027t have a corresponding method"},{"line_number":123,"context_line":"    implemented for any not-implemented-abstract-method of driver,"},{"line_number":124,"context_line":"    then exception will be raised"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_796d5531","line":121,"updated":"2015-08-24 22:15:48.000000000","message":"we don\u0027t use \u0027Compatibilizer\u0027 class, please update the description","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"45b5178d3498761aa08cb3e066e399e8d5205325","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    + the driver version either matches the current interface version or"},{"line_number":119,"context_line":"    the previous one"},{"line_number":120,"context_line":"    + if its the previous, it\u0027ll introduce the compatibility methods defined"},{"line_number":121,"context_line":"    in the \u0027Compatibilizer\u0027 class into the driver"},{"line_number":122,"context_line":"    + if the \u0027Compatibilizer\u0027 class doesn\u0027t have a corresponding method"},{"line_number":123,"context_line":"    implemented for any not-implemented-abstract-method of driver,"},{"line_number":124,"context_line":"    then exception will be raised"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_5567ade8","line":121,"in_reply_to":"fa1b9901_796d5531","updated":"2015-08-25 22:29:36.000000000","message":"Done","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"846ce0c86fe01f620dbf0359415e2aeb0094bc71","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        if interface_version:"},{"line_number":139,"context_line":"            # interface_version is defined in the base class;"},{"line_number":140,"context_line":"            # that implies that this is a driver implementation class."},{"line_number":141,"context_line":"            # So, proceed with the compatibility checks."},{"line_number":142,"context_line":"            # TODO(vivekdhayaal):"},{"line_number":143,"context_line":"            # the following six lines of code are temporarily added"},{"line_number":144,"context_line":"            # to ensure that existing drivers will work with next"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_daaa4c85","line":141,"updated":"2015-08-24 22:15:48.000000000","message":"add a line separation","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"45b5178d3498761aa08cb3e066e399e8d5205325","unresolved":false,"context_lines":[{"line_number":138,"context_line":"        if interface_version:"},{"line_number":139,"context_line":"            # interface_version is defined in the base class;"},{"line_number":140,"context_line":"            # that implies that this is a driver implementation class."},{"line_number":141,"context_line":"            # So, proceed with the compatibility checks."},{"line_number":142,"context_line":"            # TODO(vivekdhayaal):"},{"line_number":143,"context_line":"            # the following six lines of code are temporarily added"},{"line_number":144,"context_line":"            # to ensure that existing drivers will work with next"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_f55fe10c","line":141,"in_reply_to":"fa1b9901_daaa4c85","updated":"2015-08-25 22:29:36.000000000","message":"Done","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"846ce0c86fe01f620dbf0359415e2aeb0094bc71","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            driver_version \u003d attrs.get(\"driver_version\")"},{"line_number":147,"context_line":"            if driver_version is None and interface_version \u003d\u003d LIBERTY:"},{"line_number":148,"context_line":"                driver_version \u003d LIBERTY"},{"line_number":149,"context_line":"                cls \u003d attrs.get(\"__module__\") + \".\" + name"},{"line_number":150,"context_line":"                LOG.warning(_LW(\u0027Version not specified in driver %(cls)s;\u0027"},{"line_number":151,"context_line":"                                \u0027Such drivers would be deprecated after \u0027"},{"line_number":152,"context_line":"                                \u0027liberty release(version\u003d12)\u0027), {\u0027cls\u0027: cls})"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_9af934cb","line":149,"updated":"2015-08-24 22:15:48.000000000","message":"may want to use versionutils.deprecated(). See\n\nhttps://github.com/openstack/keystone/blob/master/keystone/token/providers/common.py#L461","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"45b5178d3498761aa08cb3e066e399e8d5205325","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            driver_version \u003d attrs.get(\"driver_version\")"},{"line_number":147,"context_line":"            if driver_version is None and interface_version \u003d\u003d LIBERTY:"},{"line_number":148,"context_line":"                driver_version \u003d LIBERTY"},{"line_number":149,"context_line":"                cls \u003d attrs.get(\"__module__\") + \".\" + name"},{"line_number":150,"context_line":"                LOG.warning(_LW(\u0027Version not specified in driver %(cls)s;\u0027"},{"line_number":151,"context_line":"                                \u0027Such drivers would be deprecated after \u0027"},{"line_number":152,"context_line":"                                \u0027liberty release(version\u003d12)\u0027), {\u0027cls\u0027: cls})"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_755511c0","line":149,"in_reply_to":"fa1b9901_9af934cb","updated":"2015-08-25 22:29:36.000000000","message":"not needed as per the below IRC discussion...\n\n\u003csnip\u003e\n\n...\n\ndstanek\tmorganfainberg: take a look at the initial review when you have a few. the author was thinking of only supporting 1 version back and providing code that would make the old version act like the new one.\t20:54\n\ndstanek\tmorganfainberg: i don\u0027t know that it\u0027s necessarily a good thing to do that\t20:54\n\nmorganfainberg\tyeah no we can\u0027t do that\t20:54\n\nmorganfainberg\tit has to be *all versions*\t20:54\n\nmorganfainberg\tuntil we deprecate the version explicitly\t20:54\n\nmorganfainberg\tbut yes code needs ot make the old version behave like the new\n\n...\n\n\u003c/snip\u003e\n\nhttp://eavesdrop.openstack.org/irclogs/%23openstack-keystone/%23openstack-keystone.2015-08-24.log.html#t2015-08-24T20:42:15","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"08061fa6583554479fd3b1cf9e2fe7737a3faead","unresolved":false,"context_lines":[{"line_number":109,"context_line":"def create_legacy_driver(driver_class):"},{"line_number":110,"context_line":"    module_name \u003d driver_class.__module__"},{"line_number":111,"context_line":"    class_name \u003d driver_class.__name__"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    class Driver(driver_class):"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        @versionutils.deprecated("}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_0e677726","line":112,"updated":"2015-09-01 16:01:38.000000000","message":"Unrelated change?","commit_id":"de548418cd31b8b85eb28695495ce018450e3fbb"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"e6920f9ef1a25c75720879ff2a70997f690a5a02","unresolved":false,"context_lines":[{"line_number":109,"context_line":"def create_legacy_driver(driver_class):"},{"line_number":110,"context_line":"    module_name \u003d driver_class.__module__"},{"line_number":111,"context_line":"    class_name \u003d driver_class.__name__"},{"line_number":112,"context_line":""},{"line_number":113,"context_line":"    class Driver(driver_class):"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        @versionutils.deprecated("}],"source_content_type":"text/x-python","patch_set":15,"id":"da20952f_ad120757","line":112,"in_reply_to":"da20952f_0e677726","updated":"2015-09-01 19:12:06.000000000","message":"This was done to fix the pep8 failure[1] in your patch to make Jenkins pass in my patch(which is on top your patch); Removed it from my latest patchset as you have fixed it in the your latest patchset.\n\n[1] - http://logs.openstack.org/81/218481/2/check/gate-keystone-pep8/03de869/console.html","commit_id":"de548418cd31b8b85eb28695495ce018450e3fbb"}],"keystone/exception.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"846ce0c86fe01f620dbf0359415e2aeb0094bc71","unresolved":false,"context_lines":[{"line_number":460,"context_line":""},{"line_number":461,"context_line":"class IncompatibleDriver(UnexpectedError):"},{"line_number":462,"context_line":"    message_format \u003d _(\u0027The driver %(cls)s is \u0027"},{"line_number":463,"context_line":"                       \u0027incompatible with this version of keystone\u0027)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"class MigrationNotProvided(Exception):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_77ed59b6","line":463,"updated":"2015-08-24 22:15:48.000000000","message":"How about this?\n\n\u0027The driver %(cls)s is incompatible with version %(version)s of Keystone driver interface\u0027\n\nWe don\u0027t want to confuse interface version with Keystone package/release version.","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"45b5178d3498761aa08cb3e066e399e8d5205325","unresolved":false,"context_lines":[{"line_number":460,"context_line":""},{"line_number":461,"context_line":"class IncompatibleDriver(UnexpectedError):"},{"line_number":462,"context_line":"    message_format \u003d _(\u0027The driver %(cls)s is \u0027"},{"line_number":463,"context_line":"                       \u0027incompatible with this version of keystone\u0027)"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"class MigrationNotProvided(Exception):"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_9511c506","line":463,"in_reply_to":"fa1b9901_77ed59b6","updated":"2015-08-25 22:29:36.000000000","message":"Done","commit_id":"3fe50a7f451b0fa31cba012cd71c9a402934a807"}],"keystone/resource/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"85a7feefb7de25ebb5ed6f5141177b7ff20b6b02","unresolved":false,"context_lines":[{"line_number":1364,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":1365,"context_line":""},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"DomainConfigDriver \u003d manager.create_legacy_driver(DomainConfigDriverV8)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_c0726b7c","line":1367,"updated":"2015-09-02 18:34:45.000000000","message":"Does this one need to be added to the architecture doc?","commit_id":"ba317dedd8fffb8ab7a4a6cdb17480aa9fc5acb6"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"a58e96c30f1800a5c3991741c2a79c940f12fe90","unresolved":false,"context_lines":[{"line_number":1364,"context_line":"        raise exception.NotImplemented()  # pragma: no cover"},{"line_number":1365,"context_line":""},{"line_number":1366,"context_line":""},{"line_number":1367,"context_line":"DomainConfigDriver \u003d manager.create_legacy_driver(DomainConfigDriverV8)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da20952f_43e98519","line":1367,"in_reply_to":"da20952f_c0726b7c","updated":"2015-09-02 18:57:05.000000000","message":"Probably. But we are not changing the existing behavior so I am fine with adding it in a follow-on patch.","commit_id":"ba317dedd8fffb8ab7a4a6cdb17480aa9fc5acb6"}],"keystone/tests/unit/common/test_stable_driver_interface.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_57c6bf9a","line":1,"updated":"2015-08-20 10:33:33.000000000","message":"Do you work for the foundation?","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"# not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_198e24d0","line":1,"in_reply_to":"fa1b9901_57c6bf9a","updated":"2015-08-20 18:17:21.000000000","message":"Oops; fixed it.","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import abc"},{"line_number":16,"context_line":"import six"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone.common import manager"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_f73d938f","line":15,"updated":"2015-08-20 10:33:33.000000000","message":"There should be a newline here since six is a third party library.","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":12,"context_line":"# License for the specific language governing permissions and limitations"},{"line_number":13,"context_line":"# under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"import abc"},{"line_number":16,"context_line":"import six"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from keystone.common import manager"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_d9c2ece8","line":15,"in_reply_to":"fa1b9901_f73d938f","updated":"2015-08-20 18:17:21.000000000","message":"Done","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":23,"context_line":"class TestStableDriverInterface(core.TestCase):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_driver_interface_with_compatibility(self):"},{"line_number":26,"context_line":"        \"\"\"Test that ensures that driver implementation of same version"},{"line_number":27,"context_line":"        as interface is compatible"},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        def load():"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_973e9789","line":26,"updated":"2015-08-20 10:33:33.000000000","message":"Summary line issue again: http://docs.openstack.org/developer/hacking/#docstrings","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":23,"context_line":"class TestStableDriverInterface(core.TestCase):"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_driver_interface_with_compatibility(self):"},{"line_number":26,"context_line":"        \"\"\"Test that ensures that driver implementation of same version"},{"line_number":27,"context_line":"        as interface is compatible"},{"line_number":28,"context_line":"        \"\"\""},{"line_number":29,"context_line":"        def load():"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_f9a9f024","line":26,"in_reply_to":"fa1b9901_973e9789","updated":"2015-08-20 18:17:21.000000000","message":"Done","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        load()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_driver_interface_without_compatibility(self):"},{"line_number":40,"context_line":"        \"\"\"Test that ensures that driver interface without necessary"},{"line_number":41,"context_line":"        compatibility methods is not backward compatible"},{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        def load():"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_574d5f3c","line":40,"updated":"2015-08-20 10:33:33.000000000","message":"Here too","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        load()"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def test_driver_interface_without_compatibility(self):"},{"line_number":40,"context_line":"        \"\"\"Test that ensures that driver interface without necessary"},{"line_number":41,"context_line":"        compatibility methods is not backward compatible"},{"line_number":42,"context_line":"        \"\"\""},{"line_number":43,"context_line":"        def load():"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_19a5c445","line":40,"in_reply_to":"fa1b9901_574d5f3c","updated":"2015-08-20 18:17:21.000000000","message":"Done","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                def method1():"},{"line_number":60,"context_line":"                    pass"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self.assertRaises(exception.IncompatibleInterface, load)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_driver_interface_with_outdated_implementation(self):"},{"line_number":65,"context_line":"        \"\"\"Test that ensures that driver interface is not backward compatible"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_d7896f27","line":62,"updated":"2015-08-20 10:33:33.000000000","message":"So this means that older driver will have to be changed to adhere to the new interface?","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0d48eb9d4ff5744230a204316bb6ccaacfe2c74d","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                def method1():"},{"line_number":60,"context_line":"                    pass"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self.assertRaises(exception.IncompatibleInterface, load)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_driver_interface_with_outdated_implementation(self):"},{"line_number":65,"context_line":"        \"\"\"Test that ensures that driver interface is not backward compatible"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_cdbd42d9","line":62,"in_reply_to":"fa1b9901_993d54df","updated":"2015-08-20 19:30:28.000000000","message":"Can you provide an example of how to do that?","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":59,"context_line":"                def method1():"},{"line_number":60,"context_line":"                    pass"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"        self.assertRaises(exception.IncompatibleInterface, load)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_driver_interface_with_outdated_implementation(self):"},{"line_number":65,"context_line":"        \"\"\"Test that ensures that driver interface is not backward compatible"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_993d54df","line":62,"in_reply_to":"fa1b9901_d7896f27","updated":"2015-08-20 18:17:21.000000000","message":"Not necessarily...if the new interface is developed with necessary compatibility.","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.assertRaises(exception.IncompatibleInterface, load)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_driver_interface_with_outdated_implementation(self):"},{"line_number":65,"context_line":"        \"\"\"Test that ensures that driver interface is not backward compatible"},{"line_number":66,"context_line":"        with versions of implementations older than the previous one"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        def load():"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_774ae327","line":65,"updated":"2015-08-20 10:33:33.000000000","message":"Here too","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        self.assertRaises(exception.IncompatibleInterface, load)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def test_driver_interface_with_outdated_implementation(self):"},{"line_number":65,"context_line":"        \"\"\"Test that ensures that driver interface is not backward compatible"},{"line_number":66,"context_line":"        with versions of implementations older than the previous one"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        def load():"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_59249cc3","line":65,"in_reply_to":"fa1b9901_774ae327","updated":"2015-08-20 18:17:21.000000000","message":"Done","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"47168d6da12f5dd1e52758dee130d0fed7db3988","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        with versions of implementations older than the previous one"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        def load():"},{"line_number":69,"context_line":"            # driver interfaces are not backward compatible with versions"},{"line_number":70,"context_line":"            # of driver implementations older than the previous one"},{"line_number":71,"context_line":"            @six.add_metaclass(manager.CompatibilizerMeta)"},{"line_number":72,"context_line":"            class DriverInterface(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_57a55f9f","line":69,"updated":"2015-08-20 10:33:33.000000000","message":"Why not? The interfaces in the examples look exactly the same and should work fine.","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"c82855f09503e8e4ca523a7792fb3ab8a100c0b0","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        with versions of implementations older than the previous one"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        def load():"},{"line_number":69,"context_line":"            # driver interfaces are not backward compatible with versions"},{"line_number":70,"context_line":"            # of driver implementations older than the previous one"},{"line_number":71,"context_line":"            @six.add_metaclass(manager.CompatibilizerMeta)"},{"line_number":72,"context_line":"            class DriverInterface(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_dc7ada87","line":69,"in_reply_to":"fa1b9901_57a55f9f","updated":"2015-08-20 18:17:21.000000000","message":"I meant to convey that driver implementations of version older than the previous version of the current interface version aren\u0027t supported","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"0d48eb9d4ff5744230a204316bb6ccaacfe2c74d","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        with versions of implementations older than the previous one"},{"line_number":67,"context_line":"        \"\"\""},{"line_number":68,"context_line":"        def load():"},{"line_number":69,"context_line":"            # driver interfaces are not backward compatible with versions"},{"line_number":70,"context_line":"            # of driver implementations older than the previous one"},{"line_number":71,"context_line":"            @six.add_metaclass(manager.CompatibilizerMeta)"},{"line_number":72,"context_line":"            class DriverInterface(object):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa1b9901_0d9fba5f","line":69,"in_reply_to":"fa1b9901_dc7ada87","updated":"2015-08-20 19:30:28.000000000","message":"What I mean is that in this example (and likely if we always up the version for each OpenStack release) there is no discernable difference in interface. If that\u0027s the case why not let it continue to work?","commit_id":"4b7d4834e2464082b61ad39aeda5745379ee4f1c"}],"keystone/trust/core.py":[{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"d515852df0b7f432e190969cc28b1e5b75bb501e","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":207,"context_line":"class DriverV12(object):"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    @abc.abstractmethod"},{"line_number":210,"context_line":"    def create_trust(self, trust_id, trust, roles):"}],"source_content_type":"text/x-python","patch_set":17,"id":"da20952f_3662c8ae","line":207,"updated":"2015-09-01 20:19:10.000000000","message":"TrustDriverV12?","commit_id":"8390e776876d7fefdc22683efca0d8633e365a42"},{"author":{"_account_id":11215,"name":"Vivek Dhayaal","email":"vivekdhayaal@gmail.com","username":"vivekdhayaal"},"change_message_id":"1c896182e49c120b27aa3aae063b70de229686e4","unresolved":false,"context_lines":[{"line_number":204,"context_line":""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":207,"context_line":"class DriverV12(object):"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"    @abc.abstractmethod"},{"line_number":210,"context_line":"    def create_trust(self, trust_id, trust, roles):"}],"source_content_type":"text/x-python","patch_set":17,"id":"da20952f_81a90c7e","line":207,"in_reply_to":"da20952f_3662c8ae","updated":"2015-09-01 20:46:55.000000000","message":"Fixed it. Thank you!","commit_id":"8390e776876d7fefdc22683efca0d8633e365a42"}]}
