)]}'
{"smaug/protection/protectable/__init__.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"163a7a9e1db651befeb7a54ed230f4d3245b9656","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"dae33548_c4209afa","side":"PARENT","line":1,"updated":"2016-02-15 08:24:16.000000000","message":"Please remove","commit_id":"66de08b4c7fdef0e54ae61ec78aabcc96f386a59"}],"smaug/protection/protectable/protectable_plugin.py":[{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"a6f6ab552c0ab31911c42981b5a1327bf8fb9b4e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    _resource_type \u003d None"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    # The possible parent resource types."},{"line_number":27,"context_line":"    _parent_resource_types \u003d []"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def __init__(self, context):"},{"line_number":30,"context_line":"        self._context \u003d context"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_17cdb4b6","line":27,"range":{"start_line":27,"start_character":4,"end_line":27,"end_character":26},"updated":"2016-01-31 14:29:39.000000000","message":"This makes the list shared between all inherited classes.\nJust make the property abstract.\n\nIn any case this needs to be a set and not a list since it\u0027s immutable.","commit_id":"50995466766295a958fa7f35f0bbde464fa3e94e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"a6f6ab552c0ab31911c42981b5a1327bf8fb9b4e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self._context \u003d context"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @property"},{"line_number":33,"context_line":"    def resource_type(self):"},{"line_number":34,"context_line":"        \"\"\"Return the resource type that this plugin supports."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_17f614f9","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":21},"updated":"2016-01-31 14:29:39.000000000","message":"Make abstract property since this is a must implement property.","commit_id":"50995466766295a958fa7f35f0bbde464fa3e94e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"18c0dbebdeb18edbfc6dc71ef331fb815b320dd5","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self._context \u003d context"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"    @property"},{"line_number":33,"context_line":"    def resource_type(self):"},{"line_number":34,"context_line":"        \"\"\"Return the resource type that this plugin supports."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_849ba265","line":33,"range":{"start_line":33,"start_character":8,"end_line":33,"end_character":21},"in_reply_to":"7a5de9d1_17f614f9","updated":"2016-02-01 08:38:26.000000000","message":"Done","commit_id":"50995466766295a958fa7f35f0bbde464fa3e94e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"a6f6ab552c0ab31911c42981b5a1327bf8fb9b4e","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        return self._resource_type"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @property"},{"line_number":40,"context_line":"    def parent_resource_types(self):"},{"line_number":41,"context_line":"        \"\"\"Return the possible parent resource types."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_97e2042e","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":29},"updated":"2016-01-31 14:29:39.000000000","message":"ditto","commit_id":"50995466766295a958fa7f35f0bbde464fa3e94e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"18c0dbebdeb18edbfc6dc71ef331fb815b320dd5","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        return self._resource_type"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @property"},{"line_number":40,"context_line":"    def parent_resource_types(self):"},{"line_number":41,"context_line":"        \"\"\"Return the possible parent resource types."},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_24a74eab","line":40,"range":{"start_line":40,"start_character":8,"end_line":40,"end_character":29},"in_reply_to":"7a5de9d1_97e2042e","updated":"2016-02-01 08:38:26.000000000","message":"Done","commit_id":"50995466766295a958fa7f35f0bbde464fa3e94e"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ba5a4813c59553f329eeec68d0e799659fcdd8e1","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        pass"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    @abc.abstractmethod"},{"line_number":35,"context_line":"    def parent_resource_types(cls):"},{"line_number":36,"context_line":"        \"\"\"Return the possible parent resource types."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        Inherited classes should implement as a classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_89105d5b","line":35,"range":{"start_line":35,"start_character":0,"end_line":35,"end_character":35},"updated":"2016-02-02 09:38:11.000000000","message":"either make it get_resource_types(cls) or make it an abstract property[1]\n\n[1] https://docs.python.org/2/library/abc.html#abc.abstractproperty","commit_id":"1c2c1fa2a2baacce8d2db029d8b5cf0dea64607d"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ba5a4813c59553f329eeec68d0e799659fcdd8e1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def parent_resource_types(cls):"},{"line_number":36,"context_line":"        \"\"\"Return the possible parent resource types."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        Inherited classes should implement as a classmethod"},{"line_number":39,"context_line":"        \"\"\""},{"line_number":40,"context_line":"        pass"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_8c6cebd1","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":25},"updated":"2016-02-02 09:38:11.000000000","message":"Subclasses","commit_id":"1c2c1fa2a2baacce8d2db029d8b5cf0dea64607d"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"ba5a4813c59553f329eeec68d0e799659fcdd8e1","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    def parent_resource_types(cls):"},{"line_number":36,"context_line":"        \"\"\"Return the possible parent resource types."},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"        Inherited classes should implement as a classmethod"},{"line_number":39,"context_line":"        \"\"\""},{"line_number":40,"context_line":"        pass"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_4c67d3ea","line":38,"range":{"start_line":38,"start_character":26,"end_line":38,"end_character":32},"updated":"2016-02-02 09:38:11.000000000","message":"can","commit_id":"1c2c1fa2a2baacce8d2db029d8b5cf0dea64607d"}],"smaug/protection/protectable/protectable_registry.py":[{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9dc3ab4906491e494d4db3404764805da25d7454","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"class ProtectableRegistry(object):"},{"line_number":15,"context_line":"    _protectable_map \u003d {}"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_29d7e9ee","line":14,"range":{"start_line":14,"start_character":6,"end_line":14,"end_character":25},"updated":"2016-02-02 09:31:11.000000000","message":"I think that we are missing the \nregister(resource_type: ResourceType, protectable: Protectable)\nmethod","commit_id":"1c2c1fa2a2baacce8d2db029d8b5cf0dea64607d"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"8d0d26554d842b441f037b11baa7393a816b9d40","unresolved":false,"context_lines":[{"line_number":11,"context_line":"#    under the License."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"class ProtectableRegistry(object):"},{"line_number":15,"context_line":"    _protectable_map \u003d {}"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_c096db4b","line":14,"range":{"start_line":14,"start_character":6,"end_line":14,"end_character":25},"in_reply_to":"7a5de9d1_29d7e9ee","updated":"2016-02-04 08:15:05.000000000","message":"What I thought was that load_plugins\u0027ll handle this, loading all plugins and then registering them.","commit_id":"1c2c1fa2a2baacce8d2db029d8b5cf0dea64607d"}],"smaug/resource.py":[{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"a6f6ab552c0ab31911c42981b5a1327bf8fb9b4e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    TYPES \u003d ("},{"line_number":16,"context_line":"        PROJECT, SERVER, VOLUME, NETWORK, IMAGE"},{"line_number":17,"context_line":"    ) \u003d ("},{"line_number":18,"context_line":"        \"Project\", \"Server\", \"Volume\", \"Network\", \"Image\""},{"line_number":19,"context_line":"    )"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_f73ed889","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":57},"updated":"2016-01-31 14:29:39.000000000","message":"Use Heat style types\n\nKeystone::Project, Nova::Server, etc","commit_id":"50995466766295a958fa7f35f0bbde464fa3e94e"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"18c0dbebdeb18edbfc6dc71ef331fb815b320dd5","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    TYPES \u003d ("},{"line_number":16,"context_line":"        PROJECT, SERVER, VOLUME, NETWORK, IMAGE"},{"line_number":17,"context_line":"    ) \u003d ("},{"line_number":18,"context_line":"        \"Project\", \"Server\", \"Volume\", \"Network\", \"Image\""},{"line_number":19,"context_line":"    )"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7a5de9d1_c4951a33","line":18,"range":{"start_line":18,"start_character":0,"end_line":18,"end_character":57},"in_reply_to":"7a5de9d1_f73ed889","updated":"2016-02-01 08:38:26.000000000","message":"Done","commit_id":"50995466766295a958fa7f35f0bbde464fa3e94e"},{"author":{"_account_id":13070,"name":"Eran Gampel","email":"eran@gampel.net","username":"Gampel"},"change_message_id":"9dc3ab4906491e494d4db3404764805da25d7454","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    TYPES \u003d ("},{"line_number":16,"context_line":"        PROJECT, SERVER, VOLUME, NETWORK, IMAGE"},{"line_number":17,"context_line":"    ) \u003d ("},{"line_number":18,"context_line":"        \"OS::Keystone::Project\", \"OS::Nova::Server\", \"OS::Cinder::Volume\","},{"line_number":19,"context_line":"        \"OS::Neutron::Network\", \"OS::Glance::Image\""},{"line_number":20,"context_line":"    )"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Resource(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a5de9d1_c95e5579","line":20,"range":{"start_line":18,"start_character":8,"end_line":20,"end_character":5},"updated":"2016-02-02 09:31:11.000000000","message":"This list should be dynamic according to the resources plugin registered in the protactable  registry","commit_id":"1c2c1fa2a2baacce8d2db029d8b5cf0dea64607d"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"8d0d26554d842b441f037b11baa7393a816b9d40","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    TYPES \u003d ("},{"line_number":16,"context_line":"        PROJECT, SERVER, VOLUME, NETWORK, IMAGE"},{"line_number":17,"context_line":"    ) \u003d ("},{"line_number":18,"context_line":"        \"OS::Keystone::Project\", \"OS::Nova::Server\", \"OS::Cinder::Volume\","},{"line_number":19,"context_line":"        \"OS::Neutron::Network\", \"OS::Glance::Image\""},{"line_number":20,"context_line":"    )"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Resource(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a5ae5dd_20ba4f6f","line":20,"range":{"start_line":18,"start_character":8,"end_line":20,"end_character":5},"in_reply_to":"7a5de9d1_c95e5579","updated":"2016-02-04 08:15:05.000000000","message":"My point is that we should define all resource types uniformly, so that protectable and protection plugins can use the uniform types. Otherwise, there might be various resource type definitions, if allow plugin to define their own.","commit_id":"1c2c1fa2a2baacce8d2db029d8b5cf0dea64607d"}]}
