)]}'
{"contrib/barbican/barbican/client.py":[{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"625006658177881cac95511d59aa20d5de6b709f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"except ImportError:"},{"line_number":22,"context_line":"    barbican_client \u003d None"},{"line_number":23,"context_line":"    auth \u003d None"},{"line_number":24,"context_line":"    logger.warn(\"barbican plugin loaded, but \""},{"line_number":25,"context_line":"                \"python-barbicanclient requirement not satisfied.\")"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FaP4%3D","line":24,"updated":"2014-03-18 03:00:27.000000000","message":"Should support i18n.","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"0d635fa4f250aa87c8c03c557e31a65f630a024f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"except ImportError:"},{"line_number":22,"context_line":"    barbican_client \u003d None"},{"line_number":23,"context_line":"    auth \u003d None"},{"line_number":24,"context_line":"    logger.warn(\"barbican plugin loaded, but \""},{"line_number":25,"context_line":"                \"python-barbicanclient requirement not satisfied.\")"},{"line_number":26,"context_line":""},{"line_number":27,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FRfk%3D","line":24,"in_reply_to":"AAAAWH%2F%2FaP4%3D","updated":"2014-03-19 01:10:09.000000000","message":"Done","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"8fc47f8caf7367a2719fc89469f4ef991ff189fb","unresolved":false,"context_lines":[{"line_number":26,"context_line":"                  \"python-barbicanclient requirement not satisfied.\"))"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"class Client(object):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, context):"},{"line_number":32,"context_line":"        self._client \u003d None"}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_0c5dea48","line":29,"updated":"2014-05-21 12:03:21.000000000","message":"I suggest to use same definition of client class like for other resources in contrib [1]\n\n[1] https://github.com/openstack/heat/blob/master/contrib/marconi/marconi/clients.py","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"8fc47f8caf7367a2719fc89469f4ef991ff189fb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"class Client(object):"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def __init__(self, context):"},{"line_number":32,"context_line":"        self._client \u003d None"},{"line_number":33,"context_line":"        self.heat_clients \u003d heat_clients.Clients(context)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def barbican(self):"}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_0c0b2a2c","line":32,"updated":"2014-05-21 12:03:21.000000000","message":"According to comment above all self_client should be replaced on self._barbican.","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"}],"contrib/barbican/barbican/clients.py":[{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"a39ca0f050f55c3c648cbde8a31d080dea7d33be","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from heat.openstack.common import log as logging"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"logger \u003d logging.getLogger(__name__)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"try:"},{"line_number":21,"context_line":"    from barbicanclient import client as barbican_client"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_a3a05c44","line":18,"updated":"2014-05-28 16:16:10.000000000","message":"Use LOG.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"}],"contrib/barbican/barbican/resources/iso_8601.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1f11d940ba1887ed189ad23a5fcd710a1440f8c7","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import iso8601"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ISO8601Constraint(object):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    def validate(self, value, context):"},{"line_number":20,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_db8d6f33","line":17,"updated":"2014-04-30 21:44:52.000000000","message":"This could be proposed for the main heat tree","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"1de0790ec534a734f73742f8b5a451521fc43d72","unresolved":false,"context_lines":[{"line_number":14,"context_line":"import iso8601"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class ISO8601Constraint(object):"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    def validate(self, value, context):"},{"line_number":20,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_d3109903","line":17,"in_reply_to":"9ad9bd40_db8d6f33","updated":"2014-05-05 17:22:23.000000000","message":"I split this patch and resubmitted this here:\n\nhttps://review.openstack.org/#/c/92134/","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"}],"contrib/barbican/barbican/resources/secret.py":[{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"ac7ba6a55612e435b0cfbf076a7a09d9753aac3c","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            constraints\u003d["},{"line_number":47,"context_line":"                constraints.AllowedValues(["},{"line_number":48,"context_line":"                    \u0027text/plain\u0027,"},{"line_number":49,"context_line":"                    \u0027application/octet-stream\u0027,"},{"line_number":50,"context_line":"                ]),"},{"line_number":51,"context_line":"            ],"},{"line_number":52,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FBQ4%3D","line":49,"updated":"2014-03-10 17:21:50.000000000","message":"Is \u0027application/octet-stream\u0027 something we can realistically support?","commit_id":"402f1030da955e24a533862f2a5d92a74a1793e8"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"8d10aaa88ac160c197ee082f1b66d2af83746ad0","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        if self.resource_id is None:"},{"line_number":100,"context_line":"            return"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        self.client.barbican().secrets.delete(self.resource_id)"},{"line_number":103,"context_line":"        self.resource_id_set(None)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _resolve_attribute(self, name):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2B6Fc%3D","line":102,"updated":"2014-03-11 12:32:16.000000000","message":"what happens if the resource_id was not found? should we handle \u0027NotFound\u0027 exception here (like most of the resources)?","commit_id":"c3f8ae6372fca754060f6f0d37303569388d992b"},{"author":{"_account_id":7230,"name":"Vijendar Komalla","email":"vijendar.komalla@rackspace.com","username":"vijendar"},"change_message_id":"8d10aaa88ac160c197ee082f1b66d2af83746ad0","unresolved":false,"context_lines":[{"line_number":126,"context_line":"def available_resource_mapping():"},{"line_number":127,"context_line":"    if client.barbican_client is None:"},{"line_number":128,"context_line":"        logger.warn(_(\"Barbican plug-in loaded, but\""},{"line_number":129,"context_line":"                      \"python-barbicanclient lib not installed.\"))"},{"line_number":130,"context_line":"        return {}"},{"line_number":131,"context_line":"    else:"},{"line_number":132,"context_line":"        return resource_mapping()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAVn%2F%2B6Ho%3D","line":129,"updated":"2014-03-11 12:32:16.000000000","message":"This message is little confusing. how about \"Barbican plug-in is installed, but python-barbicanclient is needed to enable it\" or may be you can use similar message that is used in \"https://review.openstack.org/#/c/79355/2/contrib/barbican/barbican/resources/secret.py\"","commit_id":"c3f8ae6372fca754060f6f0d37303569388d992b"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"fc86489110eba26431de6f0e90e230ad6a594d92","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            (getattr(self, prop.upper()), self.properties.get(prop))"},{"line_number":101,"context_line":"            for prop in self.PROPERTIES"},{"line_number":102,"context_line":"        )"},{"line_number":103,"context_line":"        secret_ref \u003d self.client.barbican().secrets.store(**info)"},{"line_number":104,"context_line":"        self.resource_id_set(secret_ref)"},{"line_number":105,"context_line":"        return secret_ref"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2B4Dc%3D","line":103,"updated":"2014-03-11 15:45:11.000000000","message":"I am not really familiar with Barbican, but am suspicious that only single property payload_content_type is required / has default value. Can barbicanclient create a secret with all the other parameters being None and not produce any error?","commit_id":"07b99a7be1a648ec008ac2daaee47a98f99b38b2"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"1c318fc4dab76c5540967ad88618da34f607732a","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            (getattr(self, prop.upper()), self.properties.get(prop))"},{"line_number":101,"context_line":"            for prop in self.PROPERTIES"},{"line_number":102,"context_line":"        )"},{"line_number":103,"context_line":"        secret_ref \u003d self.client.barbican().secrets.store(**info)"},{"line_number":104,"context_line":"        self.resource_id_set(secret_ref)"},{"line_number":105,"context_line":"        return secret_ref"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2B3uw%3D","line":103,"in_reply_to":"AAAAVn%2F%2B394%3D","updated":"2014-03-11 16:10:35.000000000","message":"Richard, thanks for clarification. Having read the API ref I now suggest that you add a constraint \u003e0 to bit_length (line 75), a constraint for payload_content_encoding to be in [\u0027base64\u0027], and maybe an AllowedPattern constraint for ISO-8601 date in expiration.","commit_id":"07b99a7be1a648ec008ac2daaee47a98f99b38b2"},{"author":{"_account_id":9062,"name":"Richard Lee","email":"rblee88@gmail.com","username":"arbylee"},"change_message_id":"a1efebd568aef0322ea6dfff1a6abaa6607f077c","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            (getattr(self, prop.upper()), self.properties.get(prop))"},{"line_number":101,"context_line":"            for prop in self.PROPERTIES"},{"line_number":102,"context_line":"        )"},{"line_number":103,"context_line":"        secret_ref \u003d self.client.barbican().secrets.store(**info)"},{"line_number":104,"context_line":"        self.resource_id_set(secret_ref)"},{"line_number":105,"context_line":"        return secret_ref"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2B3Vg%3D","line":103,"in_reply_to":"AAAAVn%2F%2B3uw%3D","updated":"2014-03-11 16:53:57.000000000","message":"I\u0027m on board for the bit_length and payload_content_encoding constraints.  I agree with checking the expiration date format, but dropping in a regex with AllowedPattern feels odd.  I\u0027m not sure of an alternative though","commit_id":"07b99a7be1a648ec008ac2daaee47a98f99b38b2"},{"author":{"_account_id":9062,"name":"Richard Lee","email":"rblee88@gmail.com","username":"arbylee"},"change_message_id":"5e860a7033b23a2ab25547364bdefbd81df9e717","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            (getattr(self, prop.upper()), self.properties.get(prop))"},{"line_number":101,"context_line":"            for prop in self.PROPERTIES"},{"line_number":102,"context_line":"        )"},{"line_number":103,"context_line":"        secret_ref \u003d self.client.barbican().secrets.store(**info)"},{"line_number":104,"context_line":"        self.resource_id_set(secret_ref)"},{"line_number":105,"context_line":"        return secret_ref"},{"line_number":106,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAVn%2F%2B394%3D","line":103,"in_reply_to":"AAAAVn%2F%2B4Dc%3D","updated":"2014-03-11 15:51:05.000000000","message":"AFAIK everything with a secret creation is optional, including the payload.  The idea being that you can create a secret and later issue a PUT to update the secret.  Most of the fields are actually just metadata for the client.  More of these fields are required if you create an \"order\" that will generate a secret.\n\nYou can see the API calls here: https://github.com/cloudkeep/barbican/wiki/Application-Programming-Interface","commit_id":"07b99a7be1a648ec008ac2daaee47a98f99b38b2"},{"author":{"_account_id":4715,"name":"Angus Salkeld","email":"asalkeld@redhat.com","username":"asalkeld"},"change_message_id":"efc97b893d73655cb75bb7dad6c9f2ae7c71a12c","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        except HTTPClientError as exc:"},{"line_number":124,"context_line":"            logger.warn(_(\u0027Tried to delete Barbican secret %(res_id)s\u0027"},{"line_number":125,"context_line":"                          \u0027but it failed with %(error_msg)s\u0027) %"},{"line_number":126,"context_line":"                        {\u0027res_id\u0027: self.resource_id, \u0027error_msg\u0027: str(exc)})"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        self.resource_id_set(None)"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2Fj1w%3D","line":126,"updated":"2014-03-17 01:52:30.000000000","message":"I think you need to separate out different errors. and do you really want to ignore all errors?","commit_id":"f57a64c23b0be50b996497735bf6459f4cbad856"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"16ab642e2f138582c11c6b08ba6f0a51a09c8b8f","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        except HTTPClientError as exc:"},{"line_number":124,"context_line":"            logger.warn(_(\u0027Tried to delete Barbican secret %(res_id)s\u0027"},{"line_number":125,"context_line":"                          \u0027but it failed with %(error_msg)s\u0027) %"},{"line_number":126,"context_line":"                        {\u0027res_id\u0027: self.resource_id, \u0027error_msg\u0027: str(exc)})"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        self.resource_id_set(None)"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAWH%2F%2FdCQ%3D","line":126,"in_reply_to":"AAAAWH%2F%2Fj1w%3D","updated":"2014-03-17 19:59:28.000000000","message":"Agreed. You should at least ignore any NotFound sort of exceptions here.","commit_id":"f57a64c23b0be50b996497735bf6459f4cbad856"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"9e4c9fa9b427ca3cb3bd33ec82a23246e82febf3","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from heat.engine import constraints"},{"line_number":14,"context_line":"from heat.engine import properties"},{"line_number":15,"context_line":"from heat.engine import resource"},{"line_number":16,"context_line":"from heat.openstack.common import log as logging"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from .. import client  # noqa"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FXHQ%3D","line":16,"updated":"2014-03-18 12:03:39.000000000","message":"Unused import according comment below.","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"0d635fa4f250aa87c8c03c557e31a65f630a024f","unresolved":false,"context_lines":[{"line_number":13,"context_line":"from heat.engine import constraints"},{"line_number":14,"context_line":"from heat.engine import properties"},{"line_number":15,"context_line":"from heat.engine import resource"},{"line_number":16,"context_line":"from heat.openstack.common import log as logging"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from .. import client  # noqa"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FRfc%3D","line":16,"in_reply_to":"AAAAWH%2F%2FXHQ%3D","updated":"2014-03-19 01:10:09.000000000","message":"Done","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"9e4c9fa9b427ca3cb3bd33ec82a23246e82febf3","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from .. import client  # noqa"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"logger \u003d logging.getLogger(__name__)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Secret(resource.Resource):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FXHE%3D","line":20,"updated":"2014-03-18 12:03:39.000000000","message":"This logger is not used in the file, so should be deleted.","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"0d635fa4f250aa87c8c03c557e31a65f630a024f","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from .. import client  # noqa"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"logger \u003d logging.getLogger(__name__)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class Secret(resource.Resource):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FRfg%3D","line":20,"in_reply_to":"AAAAWH%2F%2FXHE%3D","updated":"2014-03-19 01:10:09.000000000","message":"Done","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"9e4c9fa9b427ca3cb3bd33ec82a23246e82febf3","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    }"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    attributes_schema \u003d {"},{"line_number":87,"context_line":"        \u0027name\u0027: _(\u0027The name of the secret.\u0027),"},{"line_number":88,"context_line":"        \u0027status\u0027: _(\u0027The status of the secret\u0027),"},{"line_number":89,"context_line":"        \u0027secret_ref\u0027: _(\u0027The URI to the secret\u0027),"},{"line_number":90,"context_line":"        \u0027expiration\u0027: _(\u0027The expiration date for the secret.\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FXF8%3D","line":87,"updated":"2014-03-18 12:03:39.000000000","message":"If this name is the same with name in properties, it should be deleted.","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"0d635fa4f250aa87c8c03c557e31a65f630a024f","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    }"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    attributes_schema \u003d {"},{"line_number":87,"context_line":"        \u0027name\u0027: _(\u0027The name of the secret.\u0027),"},{"line_number":88,"context_line":"        \u0027status\u0027: _(\u0027The status of the secret\u0027),"},{"line_number":89,"context_line":"        \u0027secret_ref\u0027: _(\u0027The URI to the secret\u0027),"},{"line_number":90,"context_line":"        \u0027expiration\u0027: _(\u0027The expiration date for the secret.\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FRZ8%3D","line":87,"in_reply_to":"AAAAWH%2F%2FXF8%3D","updated":"2014-03-19 01:10:09.000000000","message":"Done","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"9e4c9fa9b427ca3cb3bd33ec82a23246e82febf3","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        \u0027name\u0027: _(\u0027The name of the secret.\u0027),"},{"line_number":88,"context_line":"        \u0027status\u0027: _(\u0027The status of the secret\u0027),"},{"line_number":89,"context_line":"        \u0027secret_ref\u0027: _(\u0027The URI to the secret\u0027),"},{"line_number":90,"context_line":"        \u0027expiration\u0027: _(\u0027The expiration date for the secret.\u0027),"},{"line_number":91,"context_line":"        \u0027decrypted_payload\u0027: _(\u0027The decrypted secret payload.\u0027),"},{"line_number":92,"context_line":"    }"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FXFo%3D","line":90,"updated":"2014-03-18 12:03:39.000000000","message":"Same comment as for name attribute.","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"0d635fa4f250aa87c8c03c557e31a65f630a024f","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        \u0027name\u0027: _(\u0027The name of the secret.\u0027),"},{"line_number":88,"context_line":"        \u0027status\u0027: _(\u0027The status of the secret\u0027),"},{"line_number":89,"context_line":"        \u0027secret_ref\u0027: _(\u0027The URI to the secret\u0027),"},{"line_number":90,"context_line":"        \u0027expiration\u0027: _(\u0027The expiration date for the secret.\u0027),"},{"line_number":91,"context_line":"        \u0027decrypted_payload\u0027: _(\u0027The decrypted secret payload.\u0027),"},{"line_number":92,"context_line":"    }"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FRaA%3D","line":90,"in_reply_to":"AAAAWH%2F%2FXFo%3D","updated":"2014-03-19 01:10:09.000000000","message":"Done","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"9e4c9fa9b427ca3cb3bd33ec82a23246e82febf3","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def handle_create(self):"},{"line_number":99,"context_line":"        info \u003d dict("},{"line_number":100,"context_line":"            (getattr(self, prop.upper()), self.properties.get(prop))"},{"line_number":101,"context_line":"            for prop in self.PROPERTIES"},{"line_number":102,"context_line":"        )"},{"line_number":103,"context_line":"        secret_ref \u003d self.client.barbican().secrets.store(**info)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FW%2Bo%3D","line":100,"updated":"2014-03-18 12:03:39.000000000","message":"How about using just \n(prop, self.properties.get(prop)  ?\n\nOr getattr(self, prop.upper()) have some special function?","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"0d635fa4f250aa87c8c03c557e31a65f630a024f","unresolved":false,"context_lines":[{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def handle_create(self):"},{"line_number":99,"context_line":"        info \u003d dict("},{"line_number":100,"context_line":"            (getattr(self, prop.upper()), self.properties.get(prop))"},{"line_number":101,"context_line":"            for prop in self.PROPERTIES"},{"line_number":102,"context_line":"        )"},{"line_number":103,"context_line":"        secret_ref \u003d self.client.barbican().secrets.store(**info)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FRdI%3D","line":100,"in_reply_to":"AAAAWH%2F%2FW%2Bo%3D","updated":"2014-03-19 01:10:09.000000000","message":"Done","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"67768f558fbb200a9ef1925721faf580b9c0cd7e","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            (prop, self.properties.get(prop))"},{"line_number":96,"context_line":"            for prop in self.PROPERTIES"},{"line_number":97,"context_line":"        )"},{"line_number":98,"context_line":"        secret_ref \u003d self.client.barbican().secrets.store(**info)"},{"line_number":99,"context_line":"        self.resource_id_set(secret_ref)"},{"line_number":100,"context_line":"        return secret_ref"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FBng%3D","line":98,"updated":"2014-03-20 20:44:33.000000000","message":"According to current property schema you have not any required and default options. So I guess, if you create resource without setting any properties in template, info will be empty dictionary. Could you check this situation and explain what will happen with barbican client in this case?","commit_id":"bb828b26dfe18d7bb75b79f0160981f3a33e74e5"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"09467c42f153a70e16bb81e4ed2c5375c8319a5c","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            (prop, self.properties.get(prop))"},{"line_number":96,"context_line":"            for prop in self.PROPERTIES"},{"line_number":97,"context_line":"        )"},{"line_number":98,"context_line":"        secret_ref \u003d self.client.barbican().secrets.store(**info)"},{"line_number":99,"context_line":"        self.resource_id_set(secret_ref)"},{"line_number":100,"context_line":"        return secret_ref"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FBHw%3D","line":98,"in_reply_to":"AAAAWH%2F%2FBR8%3D","updated":"2014-03-20 22:05:54.000000000","message":"ok, thanks for clarification :)","commit_id":"bb828b26dfe18d7bb75b79f0160981f3a33e74e5"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"d53b24be3bf2393eaf50354ccb98e79f5c7a8614","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            (prop, self.properties.get(prop))"},{"line_number":96,"context_line":"            for prop in self.PROPERTIES"},{"line_number":97,"context_line":"        )"},{"line_number":98,"context_line":"        secret_ref \u003d self.client.barbican().secrets.store(**info)"},{"line_number":99,"context_line":"        self.resource_id_set(secret_ref)"},{"line_number":100,"context_line":"        return secret_ref"},{"line_number":101,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FBR8%3D","line":98,"in_reply_to":"AAAAWH%2F%2FBng%3D","updated":"2014-03-20 21:34:00.000000000","message":"According to the barbican documentation, this is a valid scenario: https://github.com/cloudkeep/barbican/wiki/Application-Programming-Interface#post\n\nAll fields are optional and you can issue PUT requests to the server later to add secrets/content_types in the future. It\u0027s then up to the template to define whether this will be the case.","commit_id":"bb828b26dfe18d7bb75b79f0160981f3a33e74e5"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"68fb0ad4c69e7b12d7fb94004e76851df4494354","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        ),"},{"line_number":59,"context_line":"        EXPIRATION: properties.Schema("},{"line_number":60,"context_line":"            properties.Schema.STRING,"},{"line_number":61,"context_line":"            _(\u0027The expiration date for the secret in ISO-8601 format.\u0027),"},{"line_number":62,"context_line":"        ),"},{"line_number":63,"context_line":"        ALGORITHM: properties.Schema("},{"line_number":64,"context_line":"            properties.Schema.STRING,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAWH%2F%2Bf90%3D","line":61,"updated":"2014-03-26 11:38:38.000000000","message":"please move the iso date constrain from the child patch (with the Order resource) to this patch and use it here too","commit_id":"544a99f07329ab198bb7c11d95e86f07fc44cfcc"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"970f553b899fc2733de7c2235d217a27d52b4b40","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            properties.Schema.STRING,"},{"line_number":34,"context_line":"            _(\u0027Human readable name for the secret.\u0027),"},{"line_number":35,"context_line":"        ),"},{"line_number":36,"context_line":"        PAYLOAD: properties.Schema("},{"line_number":37,"context_line":"            properties.Schema.STRING,"},{"line_number":38,"context_line":"            _(\u0027The unencrypted plain text of the secret.\u0027),"},{"line_number":39,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXX%2F%2FuO8%3D","line":36,"updated":"2014-04-28 13:42:04.000000000","message":"According to specification \"If provided, this field\u0027s value must be non-empty, and you must also provide the payload_content_type.\" I think you should check it in validate method.","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"3ae161ffe6b967fa04bb543ec4187a6222434f82","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            properties.Schema.STRING,"},{"line_number":34,"context_line":"            _(\u0027Human readable name for the secret.\u0027),"},{"line_number":35,"context_line":"        ),"},{"line_number":36,"context_line":"        PAYLOAD: properties.Schema("},{"line_number":37,"context_line":"            properties.Schema.STRING,"},{"line_number":38,"context_line":"            _(\u0027The unencrypted plain text of the secret.\u0027),"},{"line_number":39,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":13,"id":"bad4c104_5a309556","line":36,"in_reply_to":"3a1371a2_64a5ea03","updated":"2014-04-29 08:17:30.000000000","message":"Hm. I did not understand you fully. You said, that you don\u0027t have optional attributes...\n- if you mean barbican resource (not heat), It\u0027s not correct according to this documentation [1] (may be you need to update it).\n- if you mean heat-barbican resource, you have two properties PAYLOAD and PAYLOAD_CONTENT_TYPE, which are not required and could be provided separately. (And it\u0027s not correct again according to [1])\n\nPlease explain me where I am wrong.\n\n[1] https://github.com/cloudkeep/barbican/wiki/Application-Programming-Interface#secrets-resource","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"a8eb49a18089e8c69205e342017b8857c02c29fb","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            properties.Schema.STRING,"},{"line_number":34,"context_line":"            _(\u0027Human readable name for the secret.\u0027),"},{"line_number":35,"context_line":"        ),"},{"line_number":36,"context_line":"        PAYLOAD: properties.Schema("},{"line_number":37,"context_line":"            properties.Schema.STRING,"},{"line_number":38,"context_line":"            _(\u0027The unencrypted plain text of the secret.\u0027),"},{"line_number":39,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":13,"id":"7adec928_39646d48","line":36,"in_reply_to":"9ad9bd40_f3f75df3","updated":"2014-05-12 13:19:12.000000000","message":"Anderson, you are right, that Heat have not supporting for optional attributes. But you could write handle validate for supporting case described in documentation. f.e. look [1], I suppose, that it\u0027s similar on your situation.\n\n[1] https://github.com/openstack/heat/blob/master/heat/engine/resources/neutron/loadbalancer.py#L316-L322","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"e78fa2d730cca2449662ec41ddccbc8942ad9822","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            properties.Schema.STRING,"},{"line_number":34,"context_line":"            _(\u0027Human readable name for the secret.\u0027),"},{"line_number":35,"context_line":"        ),"},{"line_number":36,"context_line":"        PAYLOAD: properties.Schema("},{"line_number":37,"context_line":"            properties.Schema.STRING,"},{"line_number":38,"context_line":"            _(\u0027The unencrypted plain text of the secret.\u0027),"},{"line_number":39,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a1371a2_64a5ea03","line":36,"in_reply_to":"AAAAXX%2F%2FuO8%3D","updated":"2014-04-28 18:38:05.000000000","message":"So far we don\u0027t have optional attributes, so both of them will always be provided.","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"1de0790ec534a734f73742f8b5a451521fc43d72","unresolved":false,"context_lines":[{"line_number":33,"context_line":"            properties.Schema.STRING,"},{"line_number":34,"context_line":"            _(\u0027Human readable name for the secret.\u0027),"},{"line_number":35,"context_line":"        ),"},{"line_number":36,"context_line":"        PAYLOAD: properties.Schema("},{"line_number":37,"context_line":"            properties.Schema.STRING,"},{"line_number":38,"context_line":"            _(\u0027The unencrypted plain text of the secret.\u0027),"},{"line_number":39,"context_line":"        ),"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_f3f75df3","line":36,"in_reply_to":"bad4c104_5a309556","updated":"2014-05-05 17:22:23.000000000","message":"What I meant was that _heat_ doesn\u0027t support optional attributes in the template.  Since they need to be provided at some point and heat has no optional template attributes, they would always have to be provided.\n\nBut I guess I could write a validator for that in case this becomes a feature in the future.","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1f11d940ba1887ed189ad23a5fcd710a1440f8c7","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    attributes_schema \u003d {"},{"line_number":87,"context_line":"        \u0027status\u0027: _(\u0027The status of the secret\u0027),"},{"line_number":88,"context_line":"        \u0027secret_ref\u0027: _(\u0027The URI to the secret\u0027),"},{"line_number":89,"context_line":"        \u0027decrypted_payload\u0027: _(\u0027The decrypted secret payload.\u0027),"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_fb35d346","line":88,"updated":"2014-04-30 21:44:52.000000000","message":"This isn\u0027t needed, since secret_ref is the resource_id. Template authors should use {get_resource: my_secret}","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"1de0790ec534a734f73742f8b5a451521fc43d72","unresolved":false,"context_lines":[{"line_number":85,"context_line":""},{"line_number":86,"context_line":"    attributes_schema \u003d {"},{"line_number":87,"context_line":"        \u0027status\u0027: _(\u0027The status of the secret\u0027),"},{"line_number":88,"context_line":"        \u0027secret_ref\u0027: _(\u0027The URI to the secret\u0027),"},{"line_number":89,"context_line":"        \u0027decrypted_payload\u0027: _(\u0027The decrypted secret payload.\u0027),"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_18f93e80","line":88,"in_reply_to":"9ad9bd40_fb35d346","updated":"2014-05-05 17:22:23.000000000","message":"Done","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"970f553b899fc2733de7c2235d217a27d52b4b40","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.client \u003d client.Client(self.context)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def handle_create(self):"},{"line_number":97,"context_line":"        info \u003d dict("},{"line_number":98,"context_line":"            (prop, self.properties.get(prop))"},{"line_number":99,"context_line":"            for prop in self.PROPERTIES"},{"line_number":100,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXX%2F%2FuQU%3D","line":97,"updated":"2014-04-28 13:42:04.000000000","message":"could you try to use:\ninfo \u003d dict(self.properties)\n\nI hope it will be work too.","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"1de0790ec534a734f73742f8b5a451521fc43d72","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.client \u003d client.Client(self.context)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def handle_create(self):"},{"line_number":97,"context_line":"        info \u003d dict("},{"line_number":98,"context_line":"            (prop, self.properties.get(prop))"},{"line_number":99,"context_line":"            for prop in self.PROPERTIES"},{"line_number":100,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_b893f24d","line":97,"in_reply_to":"9ad9bd40_7bc46340","updated":"2014-05-05 17:22:23.000000000","message":"Done","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"3ae161ffe6b967fa04bb543ec4187a6222434f82","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.client \u003d client.Client(self.context)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def handle_create(self):"},{"line_number":97,"context_line":"        info \u003d dict("},{"line_number":98,"context_line":"            (prop, self.properties.get(prop))"},{"line_number":99,"context_line":"            for prop in self.PROPERTIES"},{"line_number":100,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":13,"id":"bad4c104_fa80898d","line":97,"in_reply_to":"AAAAXX%2F%2FsUk%3D","updated":"2014-04-29 08:17:30.000000000","message":"When you say - Unsafe, you mean, that it\u0027s dangerous to use __iter__ method of Property class? \n\nCurrently you use self.PROPERTIES, which may have differences with property_schema. In other side Property class get all data from property_schema and  it looks more safely, IMO","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"e78fa2d730cca2449662ec41ddccbc8942ad9822","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.client \u003d client.Client(self.context)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def handle_create(self):"},{"line_number":97,"context_line":"        info \u003d dict("},{"line_number":98,"context_line":"            (prop, self.properties.get(prop))"},{"line_number":99,"context_line":"            for prop in self.PROPERTIES"},{"line_number":100,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXX%2F%2FsUk%3D","line":97,"in_reply_to":"AAAAXX%2F%2FuQU%3D","updated":"2014-04-28 18:38:05.000000000","message":"IMO, that would be unsafe.  The way the code is written now whitelists the properties so that only expected arguments get passed onto store().","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1f11d940ba1887ed189ad23a5fcd710a1440f8c7","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.client \u003d client.Client(self.context)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def handle_create(self):"},{"line_number":97,"context_line":"        info \u003d dict("},{"line_number":98,"context_line":"            (prop, self.properties.get(prop))"},{"line_number":99,"context_line":"            for prop in self.PROPERTIES"},{"line_number":100,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_7bc46340","line":97,"in_reply_to":"bad4c104_fa80898d","updated":"2014-04-30 21:44:52.000000000","message":"Sergey\u0027s suggestion should be safe, self.properties is enforced by schema so it will always contain only expected keys.","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1f11d940ba1887ed189ad23a5fcd710a1440f8c7","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            self.resource_id_set(None)"},{"line_number":112,"context_line":"        except client.barbican_client.HTTPClientError as exc:"},{"line_number":113,"context_line":"            # This is the only exception the client raises"},{"line_number":114,"context_line":"            # Inspecting the message to see if it\u0027s a \u0027Not Found\u0027"},{"line_number":115,"context_line":"            if \u0027Not Found\u0027 in str(exc):"},{"line_number":116,"context_line":"                self.resource_id_set(None)"},{"line_number":117,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_5bf5df81","line":114,"updated":"2014-04-30 21:44:52.000000000","message":"barbican_client needs to do better than this for exception handling. Does HTTPClientError at least have a status code that you can check for 404?","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"1de0790ec534a734f73742f8b5a451521fc43d72","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            self.resource_id_set(None)"},{"line_number":112,"context_line":"        except client.barbican_client.HTTPClientError as exc:"},{"line_number":113,"context_line":"            # This is the only exception the client raises"},{"line_number":114,"context_line":"            # Inspecting the message to see if it\u0027s a \u0027Not Found\u0027"},{"line_number":115,"context_line":"            if \u0027Not Found\u0027 in str(exc):"},{"line_number":116,"context_line":"                self.resource_id_set(None)"},{"line_number":117,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_188a1ebf","line":114,"in_reply_to":"9ad9bd40_5bf5df81","updated":"2014-05-05 17:22:23.000000000","message":"You\u0027d think it would, but unfortunately, no! :(\n\nhttps://github.com/stackforge/python-barbicanclient/blob/master/barbicanclient/client.py#L41","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1f11d940ba1887ed189ad23a5fcd710a1440f8c7","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        secret \u003d self.client.barbican().secrets.get(self.resource_id)"},{"line_number":125,"context_line":"        if name \u003d\u003d \u0027status\u0027:"},{"line_number":126,"context_line":"            return secret.status"},{"line_number":127,"context_line":"        if name \u003d\u003d \u0027secret_ref\u0027:"},{"line_number":128,"context_line":"            return secret.secret_ref"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_dbf3af71","line":126,"updated":"2014-04-30 21:44:52.000000000","message":"Its not clear to me why a secret has a status, unless the create operation isn\u0027t atomic and this resource needs to poll in an IN_PROGRESS statue until the secret becomes stored.","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"1de0790ec534a734f73742f8b5a451521fc43d72","unresolved":false,"context_lines":[{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        secret \u003d self.client.barbican().secrets.get(self.resource_id)"},{"line_number":125,"context_line":"        if name \u003d\u003d \u0027status\u0027:"},{"line_number":126,"context_line":"            return secret.status"},{"line_number":127,"context_line":"        if name \u003d\u003d \u0027secret_ref\u0027:"},{"line_number":128,"context_line":"            return secret.secret_ref"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_935ff1e4","line":126,"in_reply_to":"9ad9bd40_dbf3af71","updated":"2014-05-05 17:22:23.000000000","message":"AFAIK, storing secrets is an atomic operation, even if you update the secret afterwards.\n\nI think status exists because you could technically create the secret container first and submit the payload only afterwards.  Regardless of the reason, the attribute is available in the secret output, so I thought it should be made available here as well.\n\nhttps://github.com/cloudkeep/barbican/wiki/Application-Programming-Interface#get---individual-secret---metadata-only","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":4715,"name":"Angus Salkeld","email":"asalkeld@redhat.com","username":"asalkeld"},"change_message_id":"a56ab45b602f77aa39c8a724ad8102d7357d80c6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        ),"},{"line_number":67,"context_line":"        ALGORITHM: properties.Schema("},{"line_number":68,"context_line":"            properties.Schema.STRING,"},{"line_number":69,"context_line":"            _(\u0027The algorithm type used to generate the secret.\u0027),"},{"line_number":70,"context_line":"        ),"},{"line_number":71,"context_line":"        BIT_LENGTH: properties.Schema("},{"line_number":72,"context_line":"            properties.Schema.NUMBER,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9ad9bd40_b9a10696","line":69,"updated":"2014-05-06 23:57:12.000000000","message":"are these known? i.e. can this be an enum/AllowedValue, so we get some validation.\nHow is the user to know what the possible types are?\nsame goes for mode","commit_id":"675b11424a1ffe32848b83f7c77c19e60b5e2072"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"39e1c692b7becf05f05030664943d44dd622a4d6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        ),"},{"line_number":67,"context_line":"        ALGORITHM: properties.Schema("},{"line_number":68,"context_line":"            properties.Schema.STRING,"},{"line_number":69,"context_line":"            _(\u0027The algorithm type used to generate the secret.\u0027),"},{"line_number":70,"context_line":"        ),"},{"line_number":71,"context_line":"        BIT_LENGTH: properties.Schema("},{"line_number":72,"context_line":"            properties.Schema.NUMBER,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_6edf623a","line":69,"in_reply_to":"7adec928_64f7f38b","updated":"2014-05-20 16:01:48.000000000","message":"See my comment on the use of these options.\nIMO we should not have defaults here as they are application/client specific and unlikely to have a default that will cover most cases.","commit_id":"675b11424a1ffe32848b83f7c77c19e60b5e2072"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"1d6dd6bf543b8a68d09ea37c58882ca0772a4e95","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        ),"},{"line_number":67,"context_line":"        ALGORITHM: properties.Schema("},{"line_number":68,"context_line":"            properties.Schema.STRING,"},{"line_number":69,"context_line":"            _(\u0027The algorithm type used to generate the secret.\u0027),"},{"line_number":70,"context_line":"        ),"},{"line_number":71,"context_line":"        BIT_LENGTH: properties.Schema("},{"line_number":72,"context_line":"            properties.Schema.NUMBER,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_64f7f38b","line":69,"in_reply_to":"9ad9bd40_b9a10696","updated":"2014-05-15 18:01:13.000000000","message":"Like Angus said above, but I think a default would also be useful here.","commit_id":"675b11424a1ffe32848b83f7c77c19e60b5e2072"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"39e1c692b7becf05f05030664943d44dd622a4d6","unresolved":false,"context_lines":[{"line_number":66,"context_line":"        ),"},{"line_number":67,"context_line":"        ALGORITHM: properties.Schema("},{"line_number":68,"context_line":"            properties.Schema.STRING,"},{"line_number":69,"context_line":"            _(\u0027The algorithm type used to generate the secret.\u0027),"},{"line_number":70,"context_line":"        ),"},{"line_number":71,"context_line":"        BIT_LENGTH: properties.Schema("},{"line_number":72,"context_line":"            properties.Schema.NUMBER,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_2e0b9ad6","line":69,"in_reply_to":"9ad9bd40_b9a10696","updated":"2014-05-20 16:01:48.000000000","message":"Since all Secret() does is store a previously created secret, barbican does not validate neither algorithm nor mode, as they\u0027re just reference strings.\n\nYou can read more at https://github.com/cloudkeep/barbican/wiki/Application-Programming-Interface#post","commit_id":"675b11424a1ffe32848b83f7c77c19e60b5e2072"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"25391767b0b0c9b5ce1716b8c760807f5bfd38b7","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        super(Secret, self).__init__(name, json_snippet, stack)"},{"line_number":94,"context_line":"        self.client \u003d client.Client(self.context)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def validate(self):"},{"line_number":97,"context_line":"        super(Secret, self).validate()"},{"line_number":98,"context_line":"        self._validate_payload()"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_d92f09a0","line":96,"updated":"2014-05-12 13:39:54.000000000","message":"It\u0027s definitely what I meant in comment for previous patch set. Such validation is enough for resolving problem in dependencies of optional arguments. ;)","commit_id":"675b11424a1ffe32848b83f7c77c19e60b5e2072"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"39e1c692b7becf05f05030664943d44dd622a4d6","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        super(Secret, self).__init__(name, json_snippet, stack)"},{"line_number":94,"context_line":"        self.client \u003d client.Client(self.context)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def validate(self):"},{"line_number":97,"context_line":"        super(Secret, self).validate()"},{"line_number":98,"context_line":"        self._validate_payload()"},{"line_number":99,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_4ef2a606","line":96,"in_reply_to":"7adec928_d92f09a0","updated":"2014-05-20 16:01:48.000000000","message":"Done","commit_id":"675b11424a1ffe32848b83f7c77c19e60b5e2072"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"8fc9499418f2d767371b791bffa6efb487a20802","unresolved":false,"context_lines":[{"line_number":85,"context_line":"    }"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    attributes_schema \u003d {"},{"line_number":88,"context_line":"        \u0027status\u0027: _(\u0027The status of the secret\u0027),"},{"line_number":89,"context_line":"        \u0027decrypted_payload\u0027: _(\u0027The decrypted secret payload.\u0027),"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7adec928_603678b6","line":88,"updated":"2014-05-21 07:18:24.000000000","message":"1. missing terminator.\n2. there is a patch about making attributes definition similar on properties:\n   https://review.openstack.org/#/c/89332/\n   \n   so, do you mind to modify the definition of attributes?\n\nThanks.","commit_id":"336d84fe700bad73d16dbcc11087e01800ba1af1"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"8fc9499418f2d767371b791bffa6efb487a20802","unresolved":false,"context_lines":[{"line_number":89,"context_line":"        \u0027decrypted_payload\u0027: _(\u0027The decrypted secret payload.\u0027),"},{"line_number":90,"context_line":"    }"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def __init__(self, name, json_snippet, stack):"},{"line_number":93,"context_line":"        super(Secret, self).__init__(name, json_snippet, stack)"},{"line_number":94,"context_line":"        self.client \u003d client.Client(self.context)"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7adec928_8062a4ab","line":92,"updated":"2014-05-21 07:18:24.000000000","message":"no need this function.","commit_id":"336d84fe700bad73d16dbcc11087e01800ba1af1"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"057ad24b744eb2df5a11b168127ad51c09a386b1","unresolved":false,"context_lines":[{"line_number":132,"context_line":"        if name \u003d\u003d \u0027decrypted_payload\u0027:"},{"line_number":133,"context_line":"            return self.client.barbican().secrets.decrypt(self.resource_id)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        secret \u003d self.client.barbican().secrets.get(self.resource_id)"},{"line_number":136,"context_line":"        if name \u003d\u003d \u0027status\u0027:"},{"line_number":137,"context_line":"            return secret.status"},{"line_number":138,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"7adec928_6094b8e8","line":135,"updated":"2014-05-21 07:23:37.000000000","message":"should catch the \u0027not Found\u0027 exception and return \u0027\u0027. otherwise if the secret not found, the stack-show will not work because the _resolve_attribute() raise exception.","commit_id":"336d84fe700bad73d16dbcc11087e01800ba1af1"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0eef8bdb929266cfe5fc9e8f0bf24e18e21ef56c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"            constraints\u003d["},{"line_number":59,"context_line":"                constraints.AllowedValues(["},{"line_number":60,"context_line":"                    \u0027base64\u0027,"},{"line_number":61,"context_line":"                ]),"},{"line_number":62,"context_line":"            ],"},{"line_number":63,"context_line":"        ),"},{"line_number":64,"context_line":"        EXPIRATION: properties.Schema("}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_30a666c2","line":61,"updated":"2014-05-21 23:05:10.000000000","message":"If there is only 1 allowed value, can we make it the default?","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0eef8bdb929266cfe5fc9e8f0bf24e18e21ef56c","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        ),"},{"line_number":71,"context_line":"        ALGORITHM: properties.Schema("},{"line_number":72,"context_line":"            properties.Schema.STRING,"},{"line_number":73,"context_line":"            _(\u0027The algorithm type used to generate the secret.\u0027),"},{"line_number":74,"context_line":"        ),"},{"line_number":75,"context_line":"        BIT_LENGTH: properties.Schema("},{"line_number":76,"context_line":"            properties.Schema.NUMBER,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_d0f0e2cb","line":73,"updated":"2014-05-21 23:05:10.000000000","message":"In another Barbican change in flight (81906) a default is set for Algorithm.","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0eef8bdb929266cfe5fc9e8f0bf24e18e21ef56c","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        ),"},{"line_number":75,"context_line":"        BIT_LENGTH: properties.Schema("},{"line_number":76,"context_line":"            properties.Schema.NUMBER,"},{"line_number":77,"context_line":"            _(\u0027The bit-length of the secret.\u0027),"},{"line_number":78,"context_line":"            constraints\u003d["},{"line_number":79,"context_line":"                constraints.Range("},{"line_number":80,"context_line":"                    min\u003d0,"}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_f0c4fe60","line":77,"updated":"2014-05-21 23:05:10.000000000","message":"In another Barbican change in flight (81906) a BIT_LENGTH as a set of allowed values.","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0eef8bdb929266cfe5fc9e8f0bf24e18e21ef56c","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        MODE: properties.Schema("},{"line_number":85,"context_line":"            properties.Schema.STRING,"},{"line_number":86,"context_line":"            _(\u0027The type/mode of the algorithm associated with the secret \u0027"},{"line_number":87,"context_line":"              \u0027information.\u0027),"},{"line_number":88,"context_line":"        ),"},{"line_number":89,"context_line":"    }"},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_70b9cee8","line":87,"updated":"2014-05-21 23:05:10.000000000","message":"In another Barbican change in flight (81906) a default is set for Mode.","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"c627356775de351216c3e107e38d1de0c67cf842","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    }"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    attributes_schema \u003d {"},{"line_number":92,"context_line":"        \u0027status\u0027: _(\u0027The status of the secret\u0027),"},{"line_number":93,"context_line":"        \u0027decrypted_payload\u0027: _(\u0027The decrypted secret payload.\u0027),"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_2d58c4f9","line":92,"updated":"2014-05-22 09:14:16.000000000","message":"Please use new schema for definition attributes.\nDetails here [1], [2].\n\n[1] https://review.openstack.org/#/c/89332/\n\n[2] https://review.openstack.org/#/c/89331/","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"8fc47f8caf7367a2719fc89469f4ef991ff189fb","unresolved":false,"context_lines":[{"line_number":89,"context_line":"    }"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"    attributes_schema \u003d {"},{"line_number":92,"context_line":"        \u0027status\u0027: _(\u0027The status of the secret\u0027),"},{"line_number":93,"context_line":"        \u0027decrypted_payload\u0027: _(\u0027The decrypted secret payload.\u0027),"},{"line_number":94,"context_line":"    }"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_cc594290","line":92,"updated":"2014-05-21 12:03:21.000000000","message":"missed dot in description","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"8fc47f8caf7367a2719fc89469f4ef991ff189fb","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def __init__(self, name, json_snippet, stack):"},{"line_number":97,"context_line":"        super(Secret, self).__init__(name, json_snippet, stack)"},{"line_number":98,"context_line":"        self.client \u003d client.Client(self.context)"},{"line_number":99,"context_line":""},{"line_number":100,"context_line":"    def validate(self):"},{"line_number":101,"context_line":"        super(Secret, self).validate()"}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_0c888ac5","line":98,"updated":"2014-05-21 12:03:21.000000000","message":"I was disagree with huangtianhua that it\u0027s not necessary.\nHowever I have other comment:\nIf you look on other resources in contrib, you could see, that all clients have other definition. So look comments for client module.","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"8fc47f8caf7367a2719fc89469f4ef991ff189fb","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        payload \u003d self.properties.get(self.PAYLOAD)"},{"line_number":108,"context_line":"        content_type \u003d self.properties.get(self.PAYLOAD_CONTENT_TYPE)"},{"line_number":109,"context_line":"        if bool(payload) !\u003d bool(content_type):"},{"line_number":110,"context_line":"            msg \u003d _(\u0027payload and payload_content_type must both be provided \u0027"},{"line_number":111,"context_line":"                    \u0027or ommited.\u0027)"},{"line_number":112,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_ec719ee1","line":110,"updated":"2014-05-21 12:03:21.000000000","message":"Possibly should be used uppercase here. (s/payload/Payload)","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"a39ca0f050f55c3c648cbde8a31d080dea7d33be","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from .. import clients  # noqa"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"logger \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class Secret(resource.Resource):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_0373d0e7","line":24,"updated":"2014-05-28 16:16:10.000000000","message":"Use LOG.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"d250c070f7e8f4c0da10e6ec406eb6425a172ecc","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from .. import clients  # noqa"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"logger \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class Secret(resource.Resource):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_346d5d99","line":24,"in_reply_to":"3ae8d1ca_0373d0e7","updated":"2014-05-28 18:46:48.000000000","message":"I\u0027ll gladly change this to the correct name once everybody agrees on what should be used on the ML.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"96501996a36f30b02abc989c4dcf23afd4a24dbf","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from .. import clients  # noqa"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"logger \u003d logging.getLogger(__name__)"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"class Secret(resource.Resource):"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_607d5fb1","line":24,"in_reply_to":"3ae8d1ca_346d5d99","updated":"2014-05-28 20:48:55.000000000","message":"This change is already being propagated throughout the code in other resources, so its probably safe to go ahead and change it to LOG.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"28356dacdbf6b7172dee3f536534d554afcaa432","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        ),"},{"line_number":79,"context_line":"        ALGORITHM: properties.Schema("},{"line_number":80,"context_line":"            properties.Schema.STRING,"},{"line_number":81,"context_line":"            _(\u0027The algorithm type used to generate the secret.\u0027),"},{"line_number":82,"context_line":"        ),"},{"line_number":83,"context_line":"        BIT_LENGTH: properties.Schema("},{"line_number":84,"context_line":"            properties.Schema.NUMBER,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_0c26b8b7","line":81,"updated":"2014-05-28 05:02:16.000000000","message":"Change 81906 (Add OS:Barbican:Order resource) had algorithm defaulted to aes. \n\nI think all Barbican resources should be consistent. Other wise I feel sorry for the future users of these resources.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"d250c070f7e8f4c0da10e6ec406eb6425a172ecc","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        ),"},{"line_number":79,"context_line":"        ALGORITHM: properties.Schema("},{"line_number":80,"context_line":"            properties.Schema.STRING,"},{"line_number":81,"context_line":"            _(\u0027The algorithm type used to generate the secret.\u0027),"},{"line_number":82,"context_line":"        ),"},{"line_number":83,"context_line":"        BIT_LENGTH: properties.Schema("},{"line_number":84,"context_line":"            properties.Schema.NUMBER,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_545109d7","line":81,"in_reply_to":"3ae8d1ca_0c26b8b7","updated":"2014-05-28 18:46:48.000000000","message":"See my comments here: https://review.openstack.org/#/c/81906/12/contrib/barbican/barbican/resources/order.py","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"96501996a36f30b02abc989c4dcf23afd4a24dbf","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        ),"},{"line_number":79,"context_line":"        ALGORITHM: properties.Schema("},{"line_number":80,"context_line":"            properties.Schema.STRING,"},{"line_number":81,"context_line":"            _(\u0027The algorithm type used to generate the secret.\u0027),"},{"line_number":82,"context_line":"        ),"},{"line_number":83,"context_line":"        BIT_LENGTH: properties.Schema("},{"line_number":84,"context_line":"            properties.Schema.NUMBER,"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_e63428e0","line":81,"in_reply_to":"3ae8d1ca_545109d7","updated":"2014-05-28 20:48:55.000000000","message":"Well, IMO, if there are inconsistencies in the upstream API, those issues should be addressed there. IMO, Heat resources should reflect the services that they use. If the user can specify several different values that cannot be determined until runtime, then this property is specified correctly.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"28356dacdbf6b7172dee3f536534d554afcaa432","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        MODE: properties.Schema("},{"line_number":93,"context_line":"            properties.Schema.STRING,"},{"line_number":94,"context_line":"            _(\u0027The type/mode of the algorithm associated with the secret \u0027"},{"line_number":95,"context_line":"              \u0027information.\u0027),"},{"line_number":96,"context_line":"        ),"},{"line_number":97,"context_line":"    }"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_ac4dc474","line":95,"updated":"2014-05-28 05:02:16.000000000","message":"Like my previous comment, change 81906 (Add OS:Barbican:Order resource) had mode defaulted to cbc.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"d250c070f7e8f4c0da10e6ec406eb6425a172ecc","unresolved":false,"context_lines":[{"line_number":92,"context_line":"        MODE: properties.Schema("},{"line_number":93,"context_line":"            properties.Schema.STRING,"},{"line_number":94,"context_line":"            _(\u0027The type/mode of the algorithm associated with the secret \u0027"},{"line_number":95,"context_line":"              \u0027information.\u0027),"},{"line_number":96,"context_line":"        ),"},{"line_number":97,"context_line":"    }"},{"line_number":98,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_9462b1ab","line":95,"in_reply_to":"3ae8d1ca_ac4dc474","updated":"2014-05-28 18:46:48.000000000","message":"See my comments here: https://review.openstack.org/#/c/81906/12/contrib/barbican/barbican/resources/order.py","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"a39ca0f050f55c3c648cbde8a31d080dea7d33be","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def handle_create(self):"},{"line_number":127,"context_line":"        info \u003d dict(self.properties)"},{"line_number":128,"context_line":"        secret_ref \u003d self.clients.barbican().secrets.store(**info)"},{"line_number":129,"context_line":"        self.resource_id_set(secret_ref)"},{"line_number":130,"context_line":"        return secret_ref"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_ae6f63c4","line":127,"updated":"2014-05-28 16:16:10.000000000","message":"miss create complete check.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"d250c070f7e8f4c0da10e6ec406eb6425a172ecc","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            raise exception.StackValidationFailed(message\u003dmsg)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def handle_create(self):"},{"line_number":127,"context_line":"        info \u003d dict(self.properties)"},{"line_number":128,"context_line":"        secret_ref \u003d self.clients.barbican().secrets.store(**info)"},{"line_number":129,"context_line":"        self.resource_id_set(secret_ref)"},{"line_number":130,"context_line":"        return secret_ref"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_d4cef9b3","line":127,"in_reply_to":"3ae8d1ca_ae6f63c4","updated":"2014-05-28 18:46:48.000000000","message":"The creation of a secret resource is atomic and does not require check_create_complete.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"a39ca0f050f55c3c648cbde8a31d080dea7d33be","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def _resolve_attribute(self, name):"},{"line_number":148,"context_line":"        try:"},{"line_number":149,"context_line":"            if name \u003d\u003d \u0027decrypted_payload\u0027:"},{"line_number":150,"context_line":"                return self.clients.barbican().secrets.decrypt("},{"line_number":151,"context_line":"                    self.resource_id)"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_6e271bb7","line":149,"updated":"2014-05-28 16:16:10.000000000","message":"Use the attribute define, not hard code here.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"d250c070f7e8f4c0da10e6ec406eb6425a172ecc","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def _resolve_attribute(self, name):"},{"line_number":148,"context_line":"        try:"},{"line_number":149,"context_line":"            if name \u003d\u003d \u0027decrypted_payload\u0027:"},{"line_number":150,"context_line":"                return self.clients.barbican().secrets.decrypt("},{"line_number":151,"context_line":"                    self.resource_id)"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_34bf1dfd","line":149,"in_reply_to":"3ae8d1ca_6e271bb7","updated":"2014-05-28 18:46:48.000000000","message":"Done","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"a39ca0f050f55c3c648cbde8a31d080dea7d33be","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                    self.resource_id)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"            secret \u003d self.clients.barbican().secrets.get(self.resource_id)"},{"line_number":154,"context_line":"            if name \u003d\u003d \u0027status\u0027:"},{"line_number":155,"context_line":"                return secret.status"},{"line_number":156,"context_line":"        except clients.barbican_client.HTTPClientError as e:"},{"line_number":157,"context_line":"            msg \u003d _(\"Failed to resolve \u0027%(name)s\u0027 for %(res)s \u0027%(id)s\u0027: %(e)s\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_8e2aa77c","line":154,"updated":"2014-05-28 16:16:10.000000000","message":"ditto.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"d250c070f7e8f4c0da10e6ec406eb6425a172ecc","unresolved":false,"context_lines":[{"line_number":151,"context_line":"                    self.resource_id)"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"            secret \u003d self.clients.barbican().secrets.get(self.resource_id)"},{"line_number":154,"context_line":"            if name \u003d\u003d \u0027status\u0027:"},{"line_number":155,"context_line":"                return secret.status"},{"line_number":156,"context_line":"        except clients.barbican_client.HTTPClientError as e:"},{"line_number":157,"context_line":"            msg \u003d _(\"Failed to resolve \u0027%(name)s\u0027 for %(res)s \u0027%(id)s\u0027: %(e)s\")"}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_f4c4d593","line":154,"in_reply_to":"3ae8d1ca_8e2aa77c","updated":"2014-05-28 18:46:48.000000000","message":"Done","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":7789,"name":"John Wood","email":"john.wood@rackspace.com","username":"woodster"},"change_message_id":"63d9d2b190b114c0378500985decf7acf2d44004","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        \u0027status\u0027, \u0027decrypted_payload\u0027,"},{"line_number":41,"context_line":"    )"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    properties_schema \u003d {"},{"line_number":44,"context_line":"        NAME: properties.Schema("},{"line_number":45,"context_line":"            properties.Schema.STRING,"},{"line_number":46,"context_line":"            _(\u0027Human readable name for the secret.\u0027),"}],"source_content_type":"text/x-python","patch_set":18,"id":"1ae5cdf2_d5a20e4a","line":43,"updated":"2014-06-04 16:08:36.000000000","message":"Just curious how required vs optional properties are specified. The secret API behavior is complicated a bit depending on if you are performing a one-step vs two-step secret upload process (see https://github.com/cloudkeep/barbican/wiki/Application-Programming-Interface#one-step-utf-8ascii-secret-createretrieve).","commit_id":"9777be8f376316b513b2abb2a8b60a095b3d1621"}],"contrib/barbican/barbican/tests/test_client.py":[{"author":{"_account_id":7256,"name":"Randall Burt","email":"randall.burt@rackspace.com","username":"randall-burt"},"change_message_id":"ac7ba6a55612e435b0cfbf076a7a09d9753aac3c","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TestClient(HeatTestCase):"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def test_foobar(self):"},{"line_number":35,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FBP4%3D","line":34,"updated":"2014-03-10 17:21:50.000000000","message":"Not testing much here. Might want to mark this a WiP?","commit_id":"402f1030da955e24a533862f2a5d92a74a1793e8"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"25391767b0b0c9b5ce1716b8c760807f5bfd38b7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_59a05943","line":1,"updated":"2014-05-12 13:39:54.000000000","message":"cosmetic note:\nplease make this headline consistent with  https://review.openstack.org/#/c/79355/14/contrib/barbican/barbican/resources/secret.py","commit_id":"675b11424a1ffe32848b83f7c77c19e60b5e2072"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"39e1c692b7becf05f05030664943d44dd622a4d6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"#    a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_be77d93a","line":1,"in_reply_to":"7adec928_59a05943","updated":"2014-05-20 16:01:48.000000000","message":"Done","commit_id":"675b11424a1ffe32848b83f7c77c19e60b5e2072"}],"contrib/barbican/barbican/tests/test_clients.py":[{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"a39ca0f050f55c3c648cbde8a31d080dea7d33be","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import mock"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from heat.tests import utils"},{"line_number":17,"context_line":"from heat.tests.common import HeatTestCase"},{"line_number":18,"context_line":"from .. import clients  # noqa"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_2eba7323","line":16,"updated":"2014-05-28 16:16:10.000000000","message":"wrong order.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"d250c070f7e8f4c0da10e6ec406eb6425a172ecc","unresolved":false,"context_lines":[{"line_number":13,"context_line":""},{"line_number":14,"context_line":"import mock"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from heat.tests import utils"},{"line_number":17,"context_line":"from heat.tests.common import HeatTestCase"},{"line_number":18,"context_line":"from .. import clients  # noqa"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_54682987","line":16,"in_reply_to":"3ae8d1ca_2eba7323","updated":"2014-05-28 18:46:48.000000000","message":"Done","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"}],"contrib/barbican/barbican/tests/test_secret.py":[{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"9e4c9fa9b427ca3cb3bd33ec82a23246e82febf3","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ..resources import secret  # noqa"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"stack_template \u003d \u0027\u0027\u0027"},{"line_number":26,"context_line":"{"},{"line_number":27,"context_line":"    \"heat_template_version\": \"2013-05-23\","},{"line_number":28,"context_line":"    \"Description\": \"Test template\","}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FW8s%3D","line":25,"updated":"2014-03-18 12:03:39.000000000","message":"Could you fix indent. It\u0027s template (not dictionary) and should have 2 white spaces.\nF.e. look https://github.com/openstack/heat/blob/master/heat/tests/test_server.py#L44","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"0d635fa4f250aa87c8c03c557e31a65f630a024f","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from ..resources import secret  # noqa"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"stack_template \u003d \u0027\u0027\u0027"},{"line_number":26,"context_line":"{"},{"line_number":27,"context_line":"    \"heat_template_version\": \"2013-05-23\","},{"line_number":28,"context_line":"    \"Description\": \"Test template\","}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FRXs%3D","line":25,"in_reply_to":"AAAAWH%2F%2FW8s%3D","updated":"2014-03-19 01:10:09.000000000","message":"Done","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"9e4c9fa9b427ca3cb3bd33ec82a23246e82febf3","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        resource \u003d secret.Secret(\u0027secret\u0027, self.res_template, self.stack)"},{"line_number":65,"context_line":"        scheduler.TaskRunner(resource.create)()"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        expected_state \u003d (resource.CREATE, resource.COMPLETE)"},{"line_number":68,"context_line":"        self.assertEqual(expected_state, resource.state)"},{"line_number":69,"context_line":"        args \u003d barbican.secrets.store.call_args[1]"},{"line_number":70,"context_line":"        self.assertEqual(\u0027foobar\u0027, args[\u0027payload\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FW7I%3D","line":67,"updated":"2014-03-18 12:03:39.000000000","message":"You may not create temporary value for asserting. \nself.assertEqual((resource.CREATE, resource.COMPLETE), resource.state)","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"9e4c9fa9b427ca3cb3bd33ec82a23246e82febf3","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        exc \u003d secret.client.barbican_client.HTTPClientError(\u0027Boom.\u0027)"},{"line_number":173,"context_line":"        barbican.secrets.delete.side_effect \u003d exc"},{"line_number":174,"context_line":"        self.assertRaises(exception.ResourceFailure,"},{"line_number":175,"context_line":"                          scheduler.TaskRunner(resource.delete))"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAWH%2F%2FW5Y%3D","line":175,"updated":"2014-03-18 12:03:39.000000000","message":"Could you add a checking for message of raised Error.","commit_id":"79e10b9340b791e135646614d63bd96d31b04c1e"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"67768f558fbb200a9ef1925721faf580b9c0cd7e","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"stack_template \u003d \u0027\u0027\u0027"},{"line_number":27,"context_line":"heat_template_version: 2013-05-23"},{"line_number":28,"context_line":"Description: Test template"},{"line_number":29,"context_line":"Resources:"},{"line_number":30,"context_line":"  Secret:"},{"line_number":31,"context_line":"    Type: OS::Barbican::Secret"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FBrw%3D","line":28,"updated":"2014-03-20 20:44:33.000000000","message":"I think, that current template should be reorganized according to hot (2013-05-23) version specification. I mean that names of template sections should be in lowercase.","commit_id":"bb828b26dfe18d7bb75b79f0160981f3a33e74e5"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"d53b24be3bf2393eaf50354ccb98e79f5c7a8614","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"stack_template \u003d \u0027\u0027\u0027"},{"line_number":27,"context_line":"heat_template_version: 2013-05-23"},{"line_number":28,"context_line":"Description: Test template"},{"line_number":29,"context_line":"Resources:"},{"line_number":30,"context_line":"  Secret:"},{"line_number":31,"context_line":"    Type: OS::Barbican::Secret"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FBTo%3D","line":28,"in_reply_to":"AAAAWH%2F%2FBrw%3D","updated":"2014-03-20 21:34:00.000000000","message":"Done","commit_id":"bb828b26dfe18d7bb75b79f0160981f3a33e74e5"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"970f553b899fc2733de7c2235d217a27d52b4b40","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.props \u003d {"},{"line_number":46,"context_line":"            \u0027name\u0027: \u0027foobar-secret\u0027,"},{"line_number":47,"context_line":"            \u0027payload\u0027: \u0027foobar\u0027,"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"        self.res_template \u003d self.template[\u0027resources\u0027][\u0027secret\u0027]"},{"line_number":50,"context_line":"        self.res_template[\u0027Properties\u0027] \u003d self.props"},{"line_number":51,"context_line":"        self._register_resources()"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXX%2F%2Ft%2BM%3D","line":48,"updated":"2014-04-28 13:42:04.000000000","message":"Do you have any reason, why properties defined here instead of template ?","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"3ae161ffe6b967fa04bb543ec4187a6222434f82","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.props \u003d {"},{"line_number":46,"context_line":"            \u0027name\u0027: \u0027foobar-secret\u0027,"},{"line_number":47,"context_line":"            \u0027payload\u0027: \u0027foobar\u0027,"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"        self.res_template \u003d self.template[\u0027resources\u0027][\u0027secret\u0027]"},{"line_number":50,"context_line":"        self.res_template[\u0027Properties\u0027] \u003d self.props"},{"line_number":51,"context_line":"        self._register_resources()"}],"source_content_type":"text/x-python","patch_set":13,"id":"bad4c104_fa0249b3","line":48,"in_reply_to":"3a1371a2_646e8acb","updated":"2014-04-29 08:17:30.000000000","message":"Ok, see.","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"e78fa2d730cca2449662ec41ddccbc8942ad9822","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.props \u003d {"},{"line_number":46,"context_line":"            \u0027name\u0027: \u0027foobar-secret\u0027,"},{"line_number":47,"context_line":"            \u0027payload\u0027: \u0027foobar\u0027,"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"        self.res_template \u003d self.template[\u0027resources\u0027][\u0027secret\u0027]"},{"line_number":50,"context_line":"        self.res_template[\u0027Properties\u0027] \u003d self.props"},{"line_number":51,"context_line":"        self._register_resources()"}],"source_content_type":"text/x-python","patch_set":13,"id":"3a1371a2_646e8acb","line":48,"in_reply_to":"AAAAXX%2F%2Ft%2BM%3D","updated":"2014-04-28 18:38:05.000000000","message":"Yes, to make it easier to change these values without having to take up multiple lines.","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"3ae161ffe6b967fa04bb543ec4187a6222434f82","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            \u0027name\u0027: \u0027foobar-secret\u0027,"},{"line_number":47,"context_line":"            \u0027payload\u0027: \u0027foobar\u0027,"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"        self.res_template \u003d self.template[\u0027resources\u0027][\u0027secret\u0027]"},{"line_number":50,"context_line":"        self.res_template[\u0027Properties\u0027] \u003d self.props"},{"line_number":51,"context_line":"        self._register_resources()"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"bad4c104_ba1fe108","line":49,"updated":"2014-04-29 08:17:30.000000000","message":"About using self.template. This attribute is used only in setUp, so will be better to do:\n\nself.res_template \u003d self.stack.t[\u0027resources\u0027][\u0027secret\u0027]","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"1de0790ec534a734f73742f8b5a451521fc43d72","unresolved":false,"context_lines":[{"line_number":46,"context_line":"            \u0027name\u0027: \u0027foobar-secret\u0027,"},{"line_number":47,"context_line":"            \u0027payload\u0027: \u0027foobar\u0027,"},{"line_number":48,"context_line":"        }"},{"line_number":49,"context_line":"        self.res_template \u003d self.template[\u0027resources\u0027][\u0027secret\u0027]"},{"line_number":50,"context_line":"        self.res_template[\u0027Properties\u0027] \u003d self.props"},{"line_number":51,"context_line":"        self._register_resources()"},{"line_number":52,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9ad9bd40_3d8514ad","line":49,"in_reply_to":"bad4c104_ba1fe108","updated":"2014-05-05 17:22:23.000000000","message":"Done","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"25391767b0b0c9b5ce1716b8c760807f5bfd38b7","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    type: OS::Barbican::Secret"},{"line_number":32,"context_line":"    properties:"},{"line_number":33,"context_line":"      name: foobar-secret"},{"line_number":34,"context_line":"      payload: foobar"},{"line_number":35,"context_line":"\u0027\u0027\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_39670d27","line":34,"updated":"2014-05-12 13:39:54.000000000","message":"hm.. possibly it\u0027s not correct template because according to validation function in [1] payload should be provided with payload_content_type\n\n[1] https://review.openstack.org/#/c/79355/14/contrib/barbican/barbican/resources/secret.py\n\nIn test you add payload_content_type. It\u0027s fine for me. But in setUp it looks like missed. (You successfully create resource using defined template without any changes).\nCould you explain it? May be I am wrong.","commit_id":"675b11424a1ffe32848b83f7c77c19e60b5e2072"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"39e1c692b7becf05f05030664943d44dd622a4d6","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    type: OS::Barbican::Secret"},{"line_number":32,"context_line":"    properties:"},{"line_number":33,"context_line":"      name: foobar-secret"},{"line_number":34,"context_line":"      payload: foobar"},{"line_number":35,"context_line":"\u0027\u0027\u0027"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7adec928_5eaa5586","line":34,"in_reply_to":"7adec928_39670d27","updated":"2014-05-20 16:01:48.000000000","message":"As it turns out, the resource.validate() method is only called when validating a stack. \u003d(\n\nThough it feels weird to me having to do this in the tests so that we get expected behavior, I\u0027ll add the stack.validate() call here as well.","commit_id":"675b11424a1ffe32848b83f7c77c19e60b5e2072"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"8fc47f8caf7367a2719fc89469f4ef991ff189fb","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.res_template[\u0027Properties\u0027] \u003d {}"},{"line_number":122,"context_line":"        self.res_template[\u0027Properties\u0027][\u0027payload_content_type\u0027] \u003d \u0027text/plain\u0027"},{"line_number":123,"context_line":"        res \u003d self._create_resource(\u0027nopayload\u0027, self.res_template, self.stack)"},{"line_number":124,"context_line":"        self.assertRaises(exception.StackValidationFailed, res.validate)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        self.res_template[\u0027Properties\u0027] \u003d {}"},{"line_number":127,"context_line":"        self.res_template[\u0027Properties\u0027][\u0027payload\u0027] \u003d \u0027foo\u0027"}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_4ca9b223","line":124,"updated":"2014-05-21 12:03:21.000000000","message":"Please add check for error message here","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"},{"author":{"_account_id":6577,"name":"Sergey Kraynev","email":"sergejyit@gmail.com","username":"skraynev"},"change_message_id":"8fc47f8caf7367a2719fc89469f4ef991ff189fb","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        self.res_template[\u0027Properties\u0027] \u003d {}"},{"line_number":127,"context_line":"        self.res_template[\u0027Properties\u0027][\u0027payload\u0027] \u003d \u0027foo\u0027"},{"line_number":128,"context_line":"        res \u003d self._create_resource(\u0027notype\u0027, self.res_template, self.stack)"},{"line_number":129,"context_line":"        self.assertRaises(exception.StackValidationFailed, res.validate)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    def test_delete_secret(self):"},{"line_number":132,"context_line":"        self.assertEqual(\u0027foo_id\u0027, self.res.resource_id)"}],"source_content_type":"text/x-python","patch_set":16,"id":"7adec928_2cac6635","line":129,"updated":"2014-05-21 12:03:21.000000000","message":"Please add check for error message here","commit_id":"ca1e2ef67f3422b24c81d3608e0a924d4cbed56c"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"a39ca0f050f55c3c648cbde8a31d080dea7d33be","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from heat.engine import resource"},{"line_number":19,"context_line":"from heat.engine import scheduler"},{"line_number":20,"context_line":"from heat.tests import utils"},{"line_number":21,"context_line":"from heat.tests.common import HeatTestCase"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from ..resources import secret  # noqa"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_ce802f49","line":21,"updated":"2014-05-28 16:16:10.000000000","message":"Wrong order.","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"d250c070f7e8f4c0da10e6ec406eb6425a172ecc","unresolved":false,"context_lines":[{"line_number":18,"context_line":"from heat.engine import resource"},{"line_number":19,"context_line":"from heat.engine import scheduler"},{"line_number":20,"context_line":"from heat.tests import utils"},{"line_number":21,"context_line":"from heat.tests.common import HeatTestCase"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from ..resources import secret  # noqa"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3ae8d1ca_740605d0","line":21,"in_reply_to":"3ae8d1ca_ce802f49","updated":"2014-05-28 18:46:48.000000000","message":"Done","commit_id":"bd61f08f686be950c5f4f243ce1bb809abe3f0ce"}],"contrib/barbican/requirements.txt":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"1f11d940ba1887ed189ad23a5fcd710a1440f8c7","unresolved":false,"context_lines":[{"line_number":1,"context_line":"python-barbicanclient\u003d2.0.0"}],"source_content_type":"text/plain","patch_set":13,"id":"9ad9bd40_dbc1efe5","line":1,"updated":"2014-04-30 21:44:52.000000000","message":"This should probably be \u003e\u003d2.0.0","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"},{"author":{"_account_id":9189,"name":"Anderson Mesquita","email":"andersonvom@gmail.com","username":"andersonvom"},"change_message_id":"1de0790ec534a734f73742f8b5a451521fc43d72","unresolved":false,"context_lines":[{"line_number":1,"context_line":"python-barbicanclient\u003d2.0.0"}],"source_content_type":"text/plain","patch_set":13,"id":"9ad9bd40_dde98881","line":1,"in_reply_to":"9ad9bd40_dbc1efe5","updated":"2014-05-05 17:22:23.000000000","message":"Done","commit_id":"01bebac6c42b2f422dbc0180b429411273697156"}]}
