)]}'
{"cinder/objects/__init__.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2013 IBM Corp."},{"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":18,"id":"da86d52c_4470f271","line":1,"updated":"2015-02-05 18:45:03.000000000","message":"2015.  Also I assume you want to change company name?","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2013 IBM Corp."},{"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":18,"id":"da86d52c_dbe040cf","line":1,"in_reply_to":"da86d52c_4470f271","updated":"2015-02-05 19:10:19.000000000","message":"I will.  I was not sure if I should, since I did not modify much of it from the original.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"}],"cinder/objects/base.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"2871a4ec262555e01db88973a4b418a219b9f7ac","unresolved":false,"context_lines":[{"line_number":238,"context_line":"    #            \u0027bar\u0027: fields.StringField(),"},{"line_number":239,"context_line":"    #          }"},{"line_number":240,"context_line":"    fields \u003d {}"},{"line_number":241,"context_line":"    obj_extra_fields \u003d []"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    # Table of sub-object versioning information"},{"line_number":244,"context_line":"    #"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_790d0c35","line":241,"updated":"2015-01-05 03:23:37.000000000","message":"What is an obj_extra_fields?","commit_id":"de1c07a9b9ac3c22080ede8e73339cb814343862"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"b6a4f31d7460952d6c6bb3a09b41e1fa78330215","unresolved":false,"context_lines":[{"line_number":238,"context_line":"    #            \u0027bar\u0027: fields.StringField(),"},{"line_number":239,"context_line":"    #          }"},{"line_number":240,"context_line":"    fields \u003d {}"},{"line_number":241,"context_line":"    obj_extra_fields \u003d []"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    # Table of sub-object versioning information"},{"line_number":244,"context_line":"    #"}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_45a05090","line":241,"in_reply_to":"3a961159_790d0c35","updated":"2015-01-05 20:19:29.000000000","message":"They are usually object attributes that are defined outside the SQLAlchemy model, e.g. instance\u0027s \"name\" attribute - https://github.com/openstack/nova/blob/master/nova/objects/instance.py#L249.","commit_id":"de1c07a9b9ac3c22080ede8e73339cb814343862"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"2871a4ec262555e01db88973a4b418a219b9f7ac","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":498,"context_line":"        \"\"\"Load an additional attribute from the real object."},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"        This should use self._conductor, and cache any data that might"},{"line_number":501,"context_line":"        be useful for future load operations."},{"line_number":502,"context_line":"        \"\"\""},{"line_number":503,"context_line":"        raise NotImplementedError("}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_bef67a5b","line":500,"updated":"2015-01-05 03:23:37.000000000","message":"What conductor?","commit_id":"de1c07a9b9ac3c22080ede8e73339cb814343862"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"b6a4f31d7460952d6c6bb3a09b41e1fa78330215","unresolved":false,"context_lines":[{"line_number":497,"context_line":"    def obj_load_attr(self, attrname):"},{"line_number":498,"context_line":"        \"\"\"Load an additional attribute from the real object."},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"        This should use self._conductor, and cache any data that might"},{"line_number":501,"context_line":"        be useful for future load operations."},{"line_number":502,"context_line":"        \"\"\""},{"line_number":503,"context_line":"        raise NotImplementedError("}],"source_content_type":"text/x-python","patch_set":10,"id":"3a961159_e5e3fcd5","line":500,"in_reply_to":"3a961159_bef67a5b","updated":"2015-01-05 20:19:29.000000000","message":"Cinder would not have a conductor.  I just took this base code from nova/objects.  I assume that Dan would make it more generic when oslo.versionedobjects is ready.","commit_id":"de1c07a9b9ac3c22080ede8e73339cb814343862"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2013 IBM Corp."},{"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":18,"id":"da86d52c_a42fee3d","line":1,"updated":"2015-02-05 18:45:03.000000000","message":"2015. Company name?","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2013 IBM Corp."},{"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":18,"id":"da86d52c_fbe344d6","line":1,"in_reply_to":"da86d52c_a42fee3d","updated":"2015-02-05 19:10:19.000000000","message":"Done","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    @classmethod"},{"line_number":288,"context_line":"    def obj_name(cls):"},{"line_number":289,"context_line":"        \"\"\"Return a canonical name for this object which will be used over"},{"line_number":290,"context_line":"        the wire for remote hydration."},{"line_number":291,"context_line":"        \"\"\""},{"line_number":292,"context_line":"        return cls.__name__"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_984deec6","line":289,"updated":"2015-02-05 18:45:03.000000000","message":"Should have a period at the end of the first line, followed by an empty line if it is a multi-line docstring.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    @classmethod"},{"line_number":288,"context_line":"    def obj_name(cls):"},{"line_number":289,"context_line":"        \"\"\"Return a canonical name for this object which will be used over"},{"line_number":290,"context_line":"        the wire for remote hydration."},{"line_number":291,"context_line":"        \"\"\""},{"line_number":292,"context_line":"        return cls.__name__"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_1bb6588a","line":289,"in_reply_to":"da86d52c_984deec6","updated":"2015-02-05 19:10:19.000000000","message":"Done","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":502,"context_line":"        raise NotImplementedError("},{"line_number":503,"context_line":"            _(\"Cannot load \u0027%s\u0027 in the base class\") % attrname)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def save(self, context):"},{"line_number":506,"context_line":"        \"\"\"Save the changed fields back to the store."},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        This is optional for subclasses, but is presented here in the base"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_9805ee15","line":505,"updated":"2015-02-05 18:45:03.000000000","message":"In the spec, you mentioned there will be additional arguments (expected_volume_state and expected_task_state) in the object save method. It would \"check against the in-database copy of the object before updates are made and it will fail gracefully or appropriately sync up the data\".  I don\u0027t see these arguments in the save method.  Am I missing anything?","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":502,"context_line":"        raise NotImplementedError("},{"line_number":503,"context_line":"            _(\"Cannot load \u0027%s\u0027 in the base class\") % attrname)"},{"line_number":504,"context_line":""},{"line_number":505,"context_line":"    def save(self, context):"},{"line_number":506,"context_line":"        \"\"\"Save the changed fields back to the store."},{"line_number":507,"context_line":""},{"line_number":508,"context_line":"        This is optional for subclasses, but is presented here in the base"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_dbbf605f","line":505,"in_reply_to":"da86d52c_9805ee15","updated":"2015-02-05 19:10:19.000000000","message":"This should be done in the volume/snapshot class, which inherits this class.  They are put in as keyword arguments in the save method e.g. https://github.com/openstack/nova/blob/master/nova/objects/instance.py#L721.\n\nI did not put it in the snapshot class because I am not sure if there is an \"expected state\" when a snapshot is created or deleted.  I believe it is more relevant in the volume class, which will be completed later on.  There is only a skeleton volume class right now.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"fe633ab59a928ec8e2356295993b6494ea2fa668","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    \"\"\"Metaclass that allows tracking of object classes.\"\"\""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    # NOTE(danms): This is what controls whether object operations are"},{"line_number":101,"context_line":"    # remoted. If this is not None, use it to remote things over RPC."},{"line_number":102,"context_line":"    indirection_api \u003d None"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def __init__(cls, names, bases, dict_):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_871fbe08","line":101,"updated":"2015-02-17 07:03:29.000000000","message":"There are many places where the word \u0027remote\u0027 is used as a verb, the meaning for which is not specified any where. Can a short description of it be provided somewhere? It would help me reviewing the code..","commit_id":"058e846a3815da143fd2fe0515be3efa1849d864"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"854d104b55871928c6346cd96f95a5079f09b945","unresolved":false,"context_lines":[{"line_number":98,"context_line":"    \"\"\"Metaclass that allows tracking of object classes.\"\"\""},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    # NOTE(danms): This is what controls whether object operations are"},{"line_number":101,"context_line":"    # remoted. If this is not None, use it to remote things over RPC."},{"line_number":102,"context_line":"    indirection_api \u003d None"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def __init__(cls, names, bases, dict_):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_a213afff","line":101,"in_reply_to":"da86d52c_871fbe08","updated":"2015-02-17 22:05:14.000000000","message":"See L142.  I think that is about as close to documentation as possible :(\n\nThese are decorators that mark an object\u0027s method as remotable. If the metaclass is configured to forward object methods to an indirection service, these will result in making an RPC call instead of directly calling the implementation in the object. Instead, the object implementation on the remote end will perform the requested action and the result will be returned here.","commit_id":"058e846a3815da143fd2fe0515be3efa1849d864"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"33cc0ae63e9480ef6a80b4dd0c18c3f451b466f4","unresolved":false,"context_lines":[{"line_number":629,"context_line":""},{"line_number":630,"context_line":"class CinderPersistentObject(object):"},{"line_number":631,"context_line":"    \"\"\"Mixin class for Persistent objects."},{"line_number":632,"context_line":"    This adds the fields that we use in common for all persistent objects."},{"line_number":633,"context_line":"    \"\"\""},{"line_number":634,"context_line":"    fields \u003d {"},{"line_number":635,"context_line":"        \u0027created_at\u0027: fields.DateTimeField(nullable\u003dTrue),"}],"source_content_type":"text/x-python","patch_set":24,"id":"ba7be1f8_8b23b1bd","line":632,"updated":"2015-02-26 21:38:14.000000000","message":"Minor nit for if there is another update, I think there should be an empty line after the first for these class descriptions.","commit_id":"7ba281208efa820cfda400857edb14199308526f"}],"cinder/objects/fields.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2013 Red Hat, Inc."},{"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":18,"id":"da86d52c_44a1d292","line":1,"updated":"2015-02-05 18:45:03.000000000","message":"Update copyright.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2013 Red Hat, Inc."},{"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":18,"id":"da86d52c_5bb37097","line":1,"in_reply_to":"da86d52c_44a1d292","updated":"2015-02-05 19:10:19.000000000","message":"Done","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    @staticmethod"},{"line_number":256,"context_line":"    def coerce(obj, attr, value):"},{"line_number":257,"context_line":"        # FIXME(danms): We should actually verify the UUIDness here"},{"line_number":258,"context_line":"        return str(value)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class Integer(FieldType):"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_64da5618","line":258,"updated":"2015-02-05 18:45:03.000000000","message":"Should use six.text_type() instead of str().","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":255,"context_line":"    @staticmethod"},{"line_number":256,"context_line":"    def coerce(obj, attr, value):"},{"line_number":257,"context_line":"        # FIXME(danms): We should actually verify the UUIDness here"},{"line_number":258,"context_line":"        return str(value)"},{"line_number":259,"context_line":""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"class Integer(FieldType):"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_bba46c4b","line":258,"in_reply_to":"da86d52c_64da5618","updated":"2015-02-05 19:10:19.000000000","message":"I took this from nova.  But I can change it.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    @staticmethod"},{"line_number":319,"context_line":"    def to_primitive(obj, attr, value):"},{"line_number":320,"context_line":"        return str(value)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"class IPV4Address(IPAddress):"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_c431425b","line":320,"updated":"2015-02-05 18:45:03.000000000","message":"Use six.text_type() instead of str().","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":317,"context_line":""},{"line_number":318,"context_line":"    @staticmethod"},{"line_number":319,"context_line":"    def to_primitive(obj, attr, value):"},{"line_number":320,"context_line":"        return str(value)"},{"line_number":321,"context_line":""},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"class IPV4Address(IPAddress):"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_1b449872","line":320,"in_reply_to":"da86d52c_c431425b","updated":"2015-02-05 19:10:19.000000000","message":"Done","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":435,"context_line":""},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"class DictProxyField(object):"},{"line_number":438,"context_line":"    \"\"\"Descriptor allowing us to assign pinning data as a dict of key_types"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    This allows us to have an object field that will be a dict of key_type"},{"line_number":441,"context_line":"    keys, allowing that will convert back to string-keyed dict."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_641fb6b7","line":438,"updated":"2015-02-05 18:45:03.000000000","message":"Add period at the end.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":435,"context_line":""},{"line_number":436,"context_line":""},{"line_number":437,"context_line":"class DictProxyField(object):"},{"line_number":438,"context_line":"    \"\"\"Descriptor allowing us to assign pinning data as a dict of key_types"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"    This allows us to have an object field that will be a dict of key_type"},{"line_number":441,"context_line":"    keys, allowing that will convert back to string-keyed dict."}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_7b5cb44b","line":438,"in_reply_to":"da86d52c_641fb6b7","updated":"2015-02-05 19:10:19.000000000","message":"Done","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"fe633ab59a928ec8e2356295993b6494ea2fa668","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import iso8601"},{"line_number":19,"context_line":"import netaddr"},{"line_number":20,"context_line":"from oslo_utils import timeutils"},{"line_number":21,"context_line":"import six"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_e7a79aa5","line":20,"updated":"2015-02-17 07:03:29.000000000","message":"oslo_utils import to be written separately from this group?","commit_id":"058e846a3815da143fd2fe0515be3efa1849d864"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"854d104b55871928c6346cd96f95a5079f09b945","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"import iso8601"},{"line_number":19,"context_line":"import netaddr"},{"line_number":20,"context_line":"from oslo_utils import timeutils"},{"line_number":21,"context_line":"import six"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder.i18n import _"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_22b6dff9","line":20,"in_reply_to":"da86d52c_e7a79aa5","updated":"2015-02-17 22:05:14.000000000","message":"I am not sure I understand what you mean here.  oslo_utils is an oslo library that we import and use throughout cinder.","commit_id":"058e846a3815da143fd2fe0515be3efa1849d864"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"278767445c592dd5cc180abe0bc4ed46d9e8cd5f","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    @staticmethod"},{"line_number":250,"context_line":"    def stringify(value):"},{"line_number":251,"context_line":"        return \u0027\\\u0027%s\\\u0027\u0027 % value"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"class UUID(FieldType):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_9e7b7fbd","line":251,"updated":"2015-02-17 13:36:21.000000000","message":"Personally I\u0027d find \"\u0027%s\u0027\" more readable, but it is a personal preference...","commit_id":"058e846a3815da143fd2fe0515be3efa1849d864"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"854d104b55871928c6346cd96f95a5079f09b945","unresolved":false,"context_lines":[{"line_number":248,"context_line":""},{"line_number":249,"context_line":"    @staticmethod"},{"line_number":250,"context_line":"    def stringify(value):"},{"line_number":251,"context_line":"        return \u0027\\\u0027%s\\\u0027\u0027 % value"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"class UUID(FieldType):"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_427cb320","line":251,"in_reply_to":"da86d52c_9e7b7fbd","updated":"2015-02-17 22:05:14.000000000","message":"I can update it.  Just took it from nova/objects as-is.","commit_id":"058e846a3815da143fd2fe0515be3efa1849d864"}],"cinder/tests/objects/test_fields.py":[{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"b75ff7475b9b3493cecfca66f17d2e9f8a20df6e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"fa81d914_ba021209","updated":"2015-01-29 16:49:30.000000000","message":"Are all these field types needed in Cinder?","commit_id":"3041e371e72739737632479acc5facfd5e9e87c6"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"fa2de790349791b91e2009f3f37391d7a0bae9ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"fa81d914_25aa7ed4","in_reply_to":"fa81d914_ba021209","updated":"2015-01-29 17:57:11.000000000","message":"Probably not.  I took this from nova object.  The only ones that I see as not necessary are the IP network fields (3 fields).  But the intention is to use oslo.versionedobjects when it is available.  Most of the code in this patch will go away when oslo.versionedobjects is available.","commit_id":"3041e371e72739737632479acc5facfd5e9e87c6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2013 Red Hat, Inc."},{"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":18,"id":"da86d52c_c4506234","line":1,"updated":"2015-02-05 18:45:03.000000000","message":"Update copyright.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2013 Red Hat, Inc."},{"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":18,"id":"da86d52c_fb37c4fc","line":1,"in_reply_to":"da86d52c_c4506234","updated":"2015-02-05 19:10:19.000000000","message":"Done","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"}],"cinder/tests/objects/test_objects.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2013 IBM Corp."},{"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":18,"id":"da86d52c_f82c2a9b","line":1,"updated":"2015-02-05 18:45:03.000000000","message":"Update copyright.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Copyright 2013 IBM Corp."},{"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":18,"id":"da86d52c_3b3ebcda","line":1,"in_reply_to":"da86d52c_f82c2a9b","updated":"2015-02-05 19:10:19.000000000","message":"Done","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":334,"context_line":""},{"line_number":335,"context_line":"@contextlib.contextmanager"},{"line_number":336,"context_line":"def things_temporarily_local():"},{"line_number":337,"context_line":"    # Temporarily go non-remote so the conductor handles"},{"line_number":338,"context_line":"    # this request directly"},{"line_number":339,"context_line":"    _api \u003d base.CinderObject.indirection_api"},{"line_number":340,"context_line":"    base.CinderObject.indirection_api \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_18fe5e6b","line":337,"updated":"2015-02-05 18:45:03.000000000","message":"I don\u0027t think we have a \u0027conductor\u0027 in Cinder. \u0027conductor\u0027 is a Nova service.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":334,"context_line":""},{"line_number":335,"context_line":"@contextlib.contextmanager"},{"line_number":336,"context_line":"def things_temporarily_local():"},{"line_number":337,"context_line":"    # Temporarily go non-remote so the conductor handles"},{"line_number":338,"context_line":"    # this request directly"},{"line_number":339,"context_line":"    _api \u003d base.CinderObject.indirection_api"},{"line_number":340,"context_line":"    base.CinderObject.indirection_api \u003d None"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_db1be07e","line":337,"in_reply_to":"da86d52c_18fe5e6b","updated":"2015-02-05 19:10:19.000000000","message":"Correct.  I removed most of the code related to the conductor in the objects code base.  I will update the comment here.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":606,"context_line":"    def test_get(self):"},{"line_number":607,"context_line":"        obj \u003d MyObj(foo\u003d1)"},{"line_number":608,"context_line":"        # Foo has value, should not get the default"},{"line_number":609,"context_line":"        self.assertEqual(obj.get(\u0027foo\u0027, 2), 1)"},{"line_number":610,"context_line":"        # Foo has value, should return the value without error"},{"line_number":611,"context_line":"        self.assertEqual(obj.get(\u0027foo\u0027), 1)"},{"line_number":612,"context_line":"        # Bar is not loaded, so we should get the default"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_58445649","line":609,"updated":"2015-02-05 18:45:03.000000000","message":"The order of parameters seems to be reversed here.  Should be expected, actual.  Same with the other assertEqual calls in this function.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":606,"context_line":"    def test_get(self):"},{"line_number":607,"context_line":"        obj \u003d MyObj(foo\u003d1)"},{"line_number":608,"context_line":"        # Foo has value, should not get the default"},{"line_number":609,"context_line":"        self.assertEqual(obj.get(\u0027foo\u0027, 2), 1)"},{"line_number":610,"context_line":"        # Foo has value, should return the value without error"},{"line_number":611,"context_line":"        self.assertEqual(obj.get(\u0027foo\u0027), 1)"},{"line_number":612,"context_line":"        # Bar is not loaded, so we should get the default"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_7b0af426","line":609,"in_reply_to":"da86d52c_58445649","updated":"2015-02-05 19:10:19.000000000","message":"Done","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"}],"cinder/utils.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":820,"context_line":"    version_numbers \u003d []"},{"line_number":821,"context_line":"    factor \u003d 1000"},{"line_number":822,"context_line":"    while version_int !\u003d 0:"},{"line_number":823,"context_line":"        version_number \u003d version_int - (version_int // factor * factor)"},{"line_number":824,"context_line":"        version_numbers.insert(0, str(version_number))"},{"line_number":825,"context_line":"        version_int \u003d version_int / factor"},{"line_number":826,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_c4f4e25c","line":823,"updated":"2015-02-05 18:45:03.000000000","message":"Why is there two \u0027/\u0027?","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":820,"context_line":"    version_numbers \u003d []"},{"line_number":821,"context_line":"    factor \u003d 1000"},{"line_number":822,"context_line":"    while version_int !\u003d 0:"},{"line_number":823,"context_line":"        version_number \u003d version_int - (version_int // factor * factor)"},{"line_number":824,"context_line":"        version_numbers.insert(0, str(version_number))"},{"line_number":825,"context_line":"        version_int \u003d version_int / factor"},{"line_number":826,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_4e6bacb6","line":823,"in_reply_to":"da86d52c_c4f4e25c","updated":"2015-02-05 19:10:19.000000000","message":"// operator does integer division (i.e. quotient without remainder).  It came from https://github.com/openstack/nova/blob/master/nova/utils.py#L988.","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"9340076a0d2f78dd6df1e61c46a18b612f29f0c5","unresolved":false,"context_lines":[{"line_number":821,"context_line":"    factor \u003d 1000"},{"line_number":822,"context_line":"    while version_int !\u003d 0:"},{"line_number":823,"context_line":"        version_number \u003d version_int - (version_int // factor * factor)"},{"line_number":824,"context_line":"        version_numbers.insert(0, str(version_number))"},{"line_number":825,"context_line":"        version_int \u003d version_int / factor"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"    return reduce(lambda x, y: \"%s.%s\" % (x, y), version_numbers)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_64fb3647","line":824,"updated":"2015-02-05 18:45:03.000000000","message":"six.text_type()","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"278aef53669d35efd2c53b2dd17096e9ae750b44","unresolved":false,"context_lines":[{"line_number":821,"context_line":"    factor \u003d 1000"},{"line_number":822,"context_line":"    while version_int !\u003d 0:"},{"line_number":823,"context_line":"        version_number \u003d version_int - (version_int // factor * factor)"},{"line_number":824,"context_line":"        version_numbers.insert(0, str(version_number))"},{"line_number":825,"context_line":"        version_int \u003d version_int / factor"},{"line_number":826,"context_line":""},{"line_number":827,"context_line":"    return reduce(lambda x, y: \"%s.%s\" % (x, y), version_numbers)"}],"source_content_type":"text/x-python","patch_set":18,"id":"da86d52c_6e66b0ee","line":824,"in_reply_to":"da86d52c_64fb3647","updated":"2015-02-05 19:10:19.000000000","message":"Done","commit_id":"2c64579ac90f0e89afe1f120266838cb474e0f07"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"fe633ab59a928ec8e2356295993b6494ea2fa668","unresolved":false,"context_lines":[{"line_number":783,"context_line":"    return _decorator"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"def convert_version_to_int(version):"},{"line_number":787,"context_line":"    try:"},{"line_number":788,"context_line":"        if isinstance(version, six.string_types):"},{"line_number":789,"context_line":"            version \u003d convert_version_to_tuple(version)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_8776ded6","line":786,"updated":"2015-02-17 07:03:29.000000000","message":"No tests for these three functions. Am I missing something?","commit_id":"058e846a3815da143fd2fe0515be3efa1849d864"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"854d104b55871928c6346cd96f95a5079f09b945","unresolved":false,"context_lines":[{"line_number":783,"context_line":"    return _decorator"},{"line_number":784,"context_line":""},{"line_number":785,"context_line":""},{"line_number":786,"context_line":"def convert_version_to_int(version):"},{"line_number":787,"context_line":"    try:"},{"line_number":788,"context_line":"        if isinstance(version, six.string_types):"},{"line_number":789,"context_line":"            version \u003d convert_version_to_tuple(version)"}],"source_content_type":"text/x-python","patch_set":21,"id":"da86d52c_a26f2f5f","line":786,"in_reply_to":"da86d52c_8776ded6","updated":"2015-02-17 22:05:14.000000000","message":"I will add a test for these two functions.","commit_id":"058e846a3815da143fd2fe0515be3efa1849d864"}],"tools/lintstack.py":[{"author":{"_account_id":14250,"name":"Grzegorz Grasza","email":"xek@redhat.com","username":"xek"},"change_message_id":"b75ff7475b9b3493cecfca66f17d2e9f8a20df6e","unresolved":false,"context_lines":[{"line_number":46,"context_line":"# checked elsewhere. We also ignore cinder.tests for now due to high false"},{"line_number":47,"context_line":"# positive rate."},{"line_number":48,"context_line":"ignore_modules \u003d [\"cinder/openstack/common/\", \"cinder/tests/\","},{"line_number":49,"context_line":"                  \"cinder/objects/\"]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"KNOWN_PYLINT_EXCEPTIONS_FILE \u003d \"tools/pylint_exceptions\""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa81d914_ba3052e9","line":49,"updated":"2015-01-29 16:49:30.000000000","message":"I don\u0027t think these should be ignored.","commit_id":"3041e371e72739737632479acc5facfd5e9e87c6"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"fa2de790349791b91e2009f3f37391d7a0bae9ce","unresolved":false,"context_lines":[{"line_number":46,"context_line":"# checked elsewhere. We also ignore cinder.tests for now due to high false"},{"line_number":47,"context_line":"# positive rate."},{"line_number":48,"context_line":"ignore_modules \u003d [\"cinder/openstack/common/\", \"cinder/tests/\","},{"line_number":49,"context_line":"                  \"cinder/objects/\"]"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"KNOWN_PYLINT_EXCEPTIONS_FILE \u003d \"tools/pylint_exceptions\""},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"fa81d914_0543ba14","line":49,"in_reply_to":"fa81d914_ba3052e9","updated":"2015-01-29 17:57:11.000000000","message":"They should because pylint is throwing erroneous errors like:\n\n[E1101, CinderObject.obj_class_from_name] Class \u0027CinderObject\u0027 has no \u0027_obj_classes\u0027 member\n[E1101, ObjectListBase.__getitem__] Instance of \u0027ObjectListBase\u0027 has no \u0027obj_reset_changes\u0027 member\n\nIt should be fine to ignore these for now, since the whole objects base will be replaced by oslo.versionedobjects.","commit_id":"3041e371e72739737632479acc5facfd5e9e87c6"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e01ad0a1f119e4fe6672eeee0c94b76a97212a06","unresolved":false,"context_lines":[{"line_number":30,"context_line":"# of an object. It should be ignored because the object member is created"},{"line_number":31,"context_line":"# dynamically."},{"line_number":32,"context_line":"# Note(maoy): E1103 is error code related to partial type inference"},{"line_number":33,"context_line":"ignore_codes \u003d [\"E1101\", \"E1103\"]"},{"line_number":34,"context_line":"# Note(maoy): the error message is the pattern of E0202. It should be ignored"},{"line_number":35,"context_line":"# for cinder.tests modules"},{"line_number":36,"context_line":"# Note(fengqian): the second error message is the pattern of [E0611]."}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_4447121d","line":33,"updated":"2015-02-19 14:27:07.000000000","message":"This change is overwritten in snapshots patch. You should probably remove it.\n\nAnd frankly I would be happy to have snapshots patch change in cinder/hacking/checks.py in this base patch.","commit_id":"7c07258124c449daf09b417125b0102862297622"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"422e1c0218cba3477bf7297031f1cf1bdcba77f9","unresolved":false,"context_lines":[{"line_number":30,"context_line":"# of an object. It should be ignored because the object member is created"},{"line_number":31,"context_line":"# dynamically."},{"line_number":32,"context_line":"# Note(maoy): E1103 is error code related to partial type inference"},{"line_number":33,"context_line":"ignore_codes \u003d [\"E1101\", \"E1103\"]"},{"line_number":34,"context_line":"# Note(maoy): the error message is the pattern of E0202. It should be ignored"},{"line_number":35,"context_line":"# for cinder.tests modules"},{"line_number":36,"context_line":"# Note(fengqian): the second error message is the pattern of [E0611]."}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_ec09c8dd","line":33,"in_reply_to":"da86d52c_0c07fc18","updated":"2015-02-19 16:08:20.000000000","message":"You actually need to ignore E1101 because you end up with these errors without it -\n\ncinder/objects/base.py:702: [E1101, ObjectListBase.__getitem__] Instance of \u0027ObjectListBase\u0027 has no \u0027obj_reset_changes\u0027 member\n\ncinder/objects/base.py:579: [E1101, CinderObjectDictCompat.iteritems] Instance of \u0027CinderObjectDictCompat\u0027 has no \u0027obj_extra_fields\u0027 member\n\n\nSo you would need to move some of the linstack.py from snapshot patch to here.","commit_id":"7c07258124c449daf09b417125b0102862297622"},{"author":{"_account_id":8247,"name":"Thang Pham","email":"thang.g.pham@gmail.com","username":"thang.pham"},"change_message_id":"b8032d456e8fb18685ecd87e6e16b83cab077b61","unresolved":false,"context_lines":[{"line_number":30,"context_line":"# of an object. It should be ignored because the object member is created"},{"line_number":31,"context_line":"# dynamically."},{"line_number":32,"context_line":"# Note(maoy): E1103 is error code related to partial type inference"},{"line_number":33,"context_line":"ignore_codes \u003d [\"E1101\", \"E1103\"]"},{"line_number":34,"context_line":"# Note(maoy): the error message is the pattern of E0202. It should be ignored"},{"line_number":35,"context_line":"# for cinder.tests modules"},{"line_number":36,"context_line":"# Note(fengqian): the second error message is the pattern of [E0611]."}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_d161013a","line":33,"in_reply_to":"da86d52c_4447121d","updated":"2015-02-19 15:54:43.000000000","message":"I can move some of the linstack.py from snapshot over to here, but not all of it, since some of it is specific to snapshots.","commit_id":"7c07258124c449daf09b417125b0102862297622"},{"author":{"_account_id":11600,"name":"Michał Dulko","email":"michal.dulko@gmail.com","username":"dulek"},"change_message_id":"e83c67b1cb922a4abeda41c167b1094d0acc4782","unresolved":false,"context_lines":[{"line_number":30,"context_line":"# of an object. It should be ignored because the object member is created"},{"line_number":31,"context_line":"# dynamically."},{"line_number":32,"context_line":"# Note(maoy): E1103 is error code related to partial type inference"},{"line_number":33,"context_line":"ignore_codes \u003d [\"E1101\", \"E1103\"]"},{"line_number":34,"context_line":"# Note(maoy): the error message is the pattern of E0202. It should be ignored"},{"line_number":35,"context_line":"# for cinder.tests modules"},{"line_number":36,"context_line":"# Note(fengqian): the second error message is the pattern of [E0611]."}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_0c07fc18","line":33,"in_reply_to":"da86d52c_d161013a","updated":"2015-02-19 16:04:03.000000000","message":"This is not what I meant. I mean that you add E1101 in this patch and then in snapshot one you remove it. So this change is unnecessary.\n\nAnd I meant moving cinder/hacking/checks.py changes into this base patch as they\u0027re generic for objects.","commit_id":"7c07258124c449daf09b417125b0102862297622"}]}
