)]}'
{"karbor/services/protection/bank_plugin.py":[{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"51b71779d87b8e8f96bb90f0b6399a104aa30f6e","unresolved":false,"context_lines":[{"line_number":66,"context_line":""},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"class Bank(object):"},{"line_number":69,"context_line":"    KEY_VALIDATION \u003d re.compile(\u0027^[A-Za-z0-9/_.\\-@]+(?\u003c!/)$\u0027)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"    def __init__(self, plugin):"},{"line_number":72,"context_line":"        self._plugin \u003d plugin"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_5452cb67","line":69,"range":{"start_line":69,"start_character":4,"end_line":69,"end_character":18},"updated":"2017-02-01 09:50:14.000000000","message":"_KEY_VALIDATION","commit_id":"ad126a748327848a0f260f29fa37452285c78b7f"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"51b71779d87b8e8f96bb90f0b6399a104aa30f6e","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        This means that all paths are relative to \u0027/\u0027 and that"},{"line_number":81,"context_line":"        \u0027/path//dir\u0027 \u003d\u003d \u0027/path/dir\u0027"},{"line_number":82,"context_line":"        \"\"\""},{"line_number":83,"context_line":"        if not key:"},{"line_number":84,"context_line":"            key \u003d \"\""},{"line_number":85,"context_line":"        key \u003d os.path.normpath(key)"},{"line_number":86,"context_line":"        if not key.startswith(\"/\"):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_146f63fc","line":83,"range":{"start_line":83,"start_character":8,"end_line":83,"end_character":18},"updated":"2017-02-01 09:50:14.000000000","message":"if key is None:","commit_id":"ad126a748327848a0f260f29fa37452285c78b7f"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"51b71779d87b8e8f96bb90f0b6399a104aa30f6e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                      \u0027and slashes are allowed. Key: \"%s\"\u0027) % key"},{"line_number":102,"context_line":"            )"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        if key.find(\u0027..\u0027) !\u003d -1:"},{"line_number":105,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":106,"context_line":"                err\u003d_(\u0027Invalid parameter: must not contain \"..\"\u0027)"},{"line_number":107,"context_line":"            )"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_d4c15be5","line":104,"range":{"start_line":104,"start_character":11,"end_line":104,"end_character":25},"updated":"2017-02-01 09:50:14.000000000","message":"Check in part not in general","commit_id":"ad126a748327848a0f260f29fa37452285c78b7f"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"51b71779d87b8e8f96bb90f0b6399a104aa30f6e","unresolved":false,"context_lines":[{"line_number":124,"context_line":"            prefix \u003d \"/\""},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        norm_prefix \u003d self._normalize_key(prefix)"},{"line_number":127,"context_line":"        if prefix.endswith(\"/\"):"},{"line_number":128,"context_line":"            norm_prefix +\u003d \"/\""},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"        return self._plugin.list_objects("},{"line_number":131,"context_line":"            prefix\u003dnorm_prefix,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_d41ddb73","line":128,"range":{"start_line":127,"start_character":0,"end_line":128,"end_character":30},"updated":"2017-02-01 09:50:14.000000000","message":"Push to normalize_key","commit_id":"ad126a748327848a0f260f29fa37452285c78b7f"},{"author":{"_account_id":2023,"name":"Saggi Mizrahi","email":"ficoos+osreview@gmail.com","username":"ficoos"},"change_message_id":"51b71779d87b8e8f96bb90f0b6399a104aa30f6e","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            raise exception.InvalidParameterValue("},{"line_number":203,"context_line":"                err\u003d_(\u0027Key must be a string\u0027)"},{"line_number":204,"context_line":"            )"},{"line_number":205,"context_line":"        full_key \u003d \"%s%s\" % (self._prefix, key)"},{"line_number":206,"context_line":"        res \u003d os.path.normpath(full_key)"},{"line_number":207,"context_line":"        if full_key.endswith(\u0027/\u0027):"},{"line_number":208,"context_line":"            res +\u003d \u0027/\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a461143_e7a30bfe","line":205,"range":{"start_line":205,"start_character":19,"end_line":205,"end_character":47},"updated":"2017-02-01 09:50:14.000000000","message":"self._prefix + key","commit_id":"ad126a748327848a0f260f29fa37452285c78b7f"}]}
