)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":33431,"name":"Fábio Oliveira","email":"fabioaurelio1269@gmail.com","username":"fabiooliveira1"},"change_message_id":"bb4861b57cf4559b1ac6b4d7f951e3a3cbd5086b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"2a1f1349_f0f6c004","updated":"2022-02-10 18:42:53.000000000","message":"thank you for working on this!\n\njust some questions in line.","commit_id":"60e63c3acb3e07a0ccf8f42e794553a5c3d8e81c"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"b41250dc12aaa1c14c0bb6b8c965b6bdd866e372","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"3dadf76b_2169deb3","updated":"2022-04-11 12:22:04.000000000","message":"Removed the merge conflict.  Make sure you address Fábio\u0027s points from PS9.","commit_id":"630fe46fc7c1ed912d0d1c634c005773fc5a4e96"},{"author":{"_account_id":28271,"name":"Josephine Seifert","email":"josephine.seifert@cloudandheat.com","username":"josei"},"change_message_id":"95815faa74939ebe13775b8b97f20f351377a59f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"454540bb_221b571c","updated":"2022-07-25 08:51:34.000000000","message":"I addressed Erics comment.","commit_id":"4dd5056aabb42d9ee6ababbee739dbc162313276"},{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"6edc725f76ac527bea40e4846db2343015a81e4c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"d24246c2_309c338c","updated":"2023-12-05 14:55:28.000000000","message":"This patchset is now superseded by https://review.opendev.org/c/openstack/os-brick/+/902651","commit_id":"4dd5056aabb42d9ee6ababbee739dbc162313276"},{"author":{"_account_id":35075,"name":"Alexander Deiter","email":"adeiter@infinidat.com","username":"adeiter"},"change_message_id":"9fcb872c4451a83b79ba831373582889a13c6c5f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"b1f0d69a_431e935f","updated":"2023-03-30 11:29:36.000000000","message":"run-INFINIDAT","commit_id":"4dd5056aabb42d9ee6ababbee739dbc162313276"}],"os_brick/file_crypto/drivers/base.py":[{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"76537a2a5320bfaa2ddb694a977872dcee263baf","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2020 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"1fa4df85_f68f7820","line":1,"range":{"start_line":1,"start_character":21,"end_line":1,"end_character":41},"updated":"2020-03-02 15:36:04.000000000","message":"Copyright on this is not held by the OpenStack Foundation -- please just remove this line on these files.","commit_id":"59fc7e3e4c372fc48764ac88aaf830ada9892e6f"},{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"83413d8b4fa7f7871c57464cb1b5026d387c8223","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    under the License."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"class FileEncryptor(object):"},{"line_number":17,"context_line":"    \"\"\"Base class for file encryption implementations."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"    Defines the basic interface to encrypt and decrypt files."}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_9e820fff","line":16,"updated":"2020-06-28 15:51:23.000000000","message":"Given that this is simply defining the interface, I think it would be better as an abstract class.","commit_id":"59fc7e3e4c372fc48764ac88aaf830ada9892e6f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"import abc"},{"line_number":17,"context_line":"import six"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"@six.add_metaclass(abc.ABCMeta)"},{"line_number":20,"context_line":"class FileEncryptor(object):"},{"line_number":21,"context_line":"    \"\"\"Base class for file encryption implementations."},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_b5449274","line":19,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: E302 expected 2 blank lines, found 1","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @abc.abstractmethod"},{"line_number":30,"context_line":"    def encrypt(self, target_path, source_path, tempfile_path, encryption_key,"},{"line_number":31,"context_line":"            **kwargs):"},{"line_number":32,"context_line":"        \"\"\"Perform file encryption."},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        Encrypts image data into an encrypted image file using the given"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_155d7e47","line":31,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"ccaec554086931a44f7437d6a1c45076ceb1cf4f","unresolved":true,"context_lines":[{"line_number":41,"context_line":"        :type source_path: string"},{"line_number":42,"context_line":"        :param encryption_key: Cryptographic key for encrypting the file."},{"line_number":43,"context_line":"        :type encryption_key: string"},{"line_number":44,"context_line":"        :param run_as_root: Whether encryption process should run as the root"},{"line_number":45,"context_line":"                            user. Root access may be required for target or"},{"line_number":46,"context_line":"                            source path."},{"line_number":47,"context_line":"        :type run_as_root: boolean"}],"source_content_type":"text/x-python","patch_set":10,"id":"dc76efa8_21348e03","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":27},"updated":"2022-04-11 13:59:31.000000000","message":"It doesn\u0027t appear that run_as_root is used, should this be here?","commit_id":"630fe46fc7c1ed912d0d1c634c005773fc5a4e96"},{"author":{"_account_id":28271,"name":"Josephine Seifert","email":"josephine.seifert@cloudandheat.com","username":"josei"},"change_message_id":"95815faa74939ebe13775b8b97f20f351377a59f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        :type source_path: string"},{"line_number":42,"context_line":"        :param encryption_key: Cryptographic key for encrypting the file."},{"line_number":43,"context_line":"        :type encryption_key: string"},{"line_number":44,"context_line":"        :param run_as_root: Whether encryption process should run as the root"},{"line_number":45,"context_line":"                            user. Root access may be required for target or"},{"line_number":46,"context_line":"                            source path."},{"line_number":47,"context_line":"        :type run_as_root: boolean"}],"source_content_type":"text/x-python","patch_set":10,"id":"576d3440_cea5b5bd","line":44,"range":{"start_line":44,"start_character":8,"end_line":44,"end_character":27},"in_reply_to":"dc76efa8_21348e03","updated":"2022-07-25 08:51:34.000000000","message":"I found the reason for this and you are right, we don\u0027t nee this for the gpg-encryption. If there are other encryption drivers added somewhen in time, this might be needed again. But for now I removed it here and in the decrypt method.","commit_id":"630fe46fc7c1ed912d0d1c634c005773fc5a4e96"}],"os_brick/file_crypto/drivers/gpg.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"ccd1e2a07e431f7b8535aa091e06ca5c138c37e1","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        if not os.path.exists(source_path):"},{"line_number":62,"context_line":"            raise ValueError(\"No valid path given for \u0027source_path\u0027\")"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"        homedir \u003d os.path.expanduser(\u0027~\u0027)"},{"line_number":65,"context_line":"        gpg_dir \u003d tempfile.mkdtemp(suffix\u003d\u0027\u0027, prefix\u003d\u0027.gnupg\u0027, dir\u003dhomedir)"},{"line_number":66,"context_line":"        gpg \u003d gnupg.GPG(gnupghome\u003dgpg_dir, use_agent\u003dFalse, keyring\u003dNone)"},{"line_number":67,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_7eac5b9e","line":64,"updated":"2020-06-28 15:42:32.000000000","message":"I understand why you\u0027re doing this, we want to keep the tempfiles in a secure location relative to the requestor.  That works for the openstack-client use case, where the encryptor is being used to upload image data, but we also have services who will be using the library, and they may not have traditional homedirs defined.  So maybe the location for the tempfiles should be passed in by the caller?","commit_id":"59fc7e3e4c372fc48764ac88aaf830ada9892e6f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        return passphrase"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def encrypt(self, target_path, source_path, tempfile_path, encryption_key,"},{"line_number":57,"context_line":"            **kwargs):"},{"line_number":58,"context_line":"        if not isinstance(source_path, str):"},{"line_number":59,"context_line":"            raise TypeError(\"Not a valid input string for \u0027source_path\u0027\")"},{"line_number":60,"context_line":"        if not isinstance(target_path, str):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_d53f86dc","line":57,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: E128 continuation line under-indented for visual indent","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"4f48cf25867f228a8afe7468f194875fc7b38a6b","unresolved":true,"context_lines":[{"line_number":65,"context_line":"        if not os.path.exists(source_path):"},{"line_number":66,"context_line":"            raise ValueError(\"No valid path given for \u0027source_path\u0027\")"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        gpg_dir \u003d tempfile.mkdtemp(suffix\u003d\u0027\u0027, prefix\u003d\u0027.gnupg\u0027,"},{"line_number":69,"context_line":"                                   dir\u003dtempfile_path)"},{"line_number":70,"context_line":"        gpg \u003d gnupg.GPG(gnupghome\u003dgpg_dir, use_agent\u003dFalse, keyring\u003dNone)"},{"line_number":71,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":11,"id":"f08a1de0_5a87e04c","line":68,"range":{"start_line":68,"start_character":8,"end_line":68,"end_character":15},"updated":"2022-10-19 13:24:16.000000000","message":"This directory will be leaked if gnupg.GPG() initialization fails for some reason, I suspect this should also be in a try: block.","commit_id":"4dd5056aabb42d9ee6ababbee739dbc162313276"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"4f48cf25867f228a8afe7468f194875fc7b38a6b","unresolved":true,"context_lines":[{"line_number":105,"context_line":"        os.environ[\"LC_ALL\"] \u003d \"C\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        homedir \u003d os.path.expanduser(\u0027~\u0027)"},{"line_number":108,"context_line":"        gpg_dir \u003d tempfile.mkdtemp(suffix\u003d\u0027\u0027, prefix\u003d\u0027.gnupg\u0027, dir\u003dhomedir)"},{"line_number":109,"context_line":"        gpg \u003d gnupg.GPG(gnupghome\u003dgpg_dir, use_agent\u003dFalse, keyring\u003dNone)"},{"line_number":110,"context_line":"        try:"},{"line_number":111,"context_line":"            with open(source_path, \"rb\") as source_data:"}],"source_content_type":"text/x-python","patch_set":11,"id":"c4637c4b_ca1c9cbb","line":108,"range":{"start_line":108,"start_character":8,"end_line":108,"end_character":15},"updated":"2022-10-19 13:24:16.000000000","message":"Same as above.","commit_id":"4dd5056aabb42d9ee6ababbee739dbc162313276"}],"os_brick/file_crypto/file_crypto.py":[{"author":{"_account_id":5314,"name":"Brian Rosmaita","email":"rosmaita.fossdev@gmail.com","username":"brian-rosmaita"},"change_message_id":"ccd1e2a07e431f7b8535aa091e06ca5c138c37e1","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        else:"},{"line_number":64,"context_line":"            return image_properties[prop]"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"    crypto_type \u003d _get_property(\u0027encryption_type\u0027)"},{"line_number":67,"context_line":"    crypto_provider \u003d _get_property(\u0027encryption_provider\u0027)"},{"line_number":68,"context_line":"    crypto_cipher \u003d _get_property(\u0027encryption_cipher\u0027)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    return get_file_encryptor(crypto_type, crypto_provider, crypto_cipher)"}],"source_content_type":"text/x-python","patch_set":2,"id":"bf51134e_5ea357b2","line":68,"range":{"start_line":66,"start_character":0,"end_line":68,"end_character":54},"updated":"2020-06-28 15:42:32.000000000","message":"These don\u0027t match the image properties mentioned in the spec.","commit_id":"59fc7e3e4c372fc48764ac88aaf830ada9892e6f"},{"author":{"_account_id":33431,"name":"Fábio Oliveira","email":"fabioaurelio1269@gmail.com","username":"fabiooliveira1"},"change_message_id":"bb4861b57cf4559b1ac6b4d7f951e3a3cbd5086b","unresolved":true,"context_lines":[{"line_number":30,"context_line":"    :param crypto_cipher: Cipher algorithm name."},{"line_number":31,"context_line":"    :type crypto_cipher: string"},{"line_number":32,"context_line":"    \"\"\""},{"line_number":33,"context_line":"    if crypto_type \u003d\u003d \u0027symmetric\u0027:"},{"line_number":34,"context_line":"        if crypto_provider \u003d\u003d \u0027GPG\u0027:"},{"line_number":35,"context_line":"            if crypto_cipher \u003d\u003d \u0027AES256\u0027:"},{"line_number":36,"context_line":"                return GpgFileEncryptor(cipher_algo\u003d\u0027AES256\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"0d7e52b6_3111b4ba","line":33,"range":{"start_line":33,"start_character":4,"end_line":33,"end_character":34},"updated":"2022-02-10 18:42:53.000000000","message":"nit - you could use the negative if to make the reading easier:\n    if crypto_type !\u003d \u0027symmetric\u0027:\n        raise x\n    if crypto_provider !\u003d \u0027GPG\u0027:\n        raise y\n    if crypto_cipher !\u003d \u0027AES256\u0027:\n        raise z\n\n    return a","commit_id":"60e63c3acb3e07a0ccf8f42e794553a5c3d8e81c"}],"os_brick/file_crypto/key_management.py":[{"author":{"_account_id":33431,"name":"Fábio Oliveira","email":"fabioaurelio1269@gmail.com","username":"fabiooliveira1"},"change_message_id":"bb4861b57cf4559b1ac6b4d7f951e3a3cbd5086b","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"07a8882d_6ac81e31","updated":"2022-02-10 18:42:53.000000000","message":"is an unit test file useful for this case?","commit_id":"60e63c3acb3e07a0ccf8f42e794553a5c3d8e81c"},{"author":{"_account_id":33431,"name":"Fábio Oliveira","email":"fabioaurelio1269@gmail.com","username":"fabiooliveira1"},"change_message_id":"bb4861b57cf4559b1ac6b4d7f951e3a3cbd5086b","unresolved":true,"context_lines":[{"line_number":40,"context_line":"                         \"context was not provided for Barbican API.\")"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    key_api \u003d BarbicanKeyManager(cfg.CONF)"},{"line_number":43,"context_line":"    key \u003d key_api.get(context, barbican_key_id).get_encoded()"},{"line_number":44,"context_line":"    if isinstance(key, str):"},{"line_number":45,"context_line":"        key \u003d key.encode()"},{"line_number":46,"context_line":"    return key"}],"source_content_type":"text/x-python","patch_set":9,"id":"ce1be50c_c8efa942","line":43,"range":{"start_line":43,"start_character":47,"end_line":43,"end_character":61},"updated":"2022-02-10 18:42:53.000000000","message":"what are the possible results in here? I tried to find the method on docs for Barbician, but wasn\u0027t successful","commit_id":"60e63c3acb3e07a0ccf8f42e794553a5c3d8e81c"}],"os_brick/tests/file_crypto/drivers/test_gpg.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":17,"context_line":"from unittest import mock"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from os_brick.file_crypto import exceptions"},{"line_number":20,"context_line":"from os_brick.file_crypto.drivers.gpg import GpgFileEncryptor"},{"line_number":21,"context_line":"from os_brick.tests.file_crypto.utils import CryptoTest"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_5553763a","line":20,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: H306: imports not in alphabetical order (os_brick.file_crypto.exceptions, os_brick.file_crypto.drivers.gpg.gpgfileencryptor)","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@ddt.ddt"},{"line_number":25,"context_line":"class GPGCryptoTest(CryptoTest):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Test class for testing os-brick.file-crypto.drivers.gpg.GpgFileEncryptor"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_3550822c","line":26,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"@ddt.ddt"},{"line_number":25,"context_line":"class GPGCryptoTest(CryptoTest):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Test class for testing os-brick.file-crypto.drivers.gpg.GpgFileEncryptor"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_952eaea8","line":26,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"@ddt.ddt"},{"line_number":25,"context_line":"class GPGCryptoTest(CryptoTest):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Test class for testing os-brick.file-crypto.drivers.gpg.GpgFileEncryptor"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    class PythonGnupgResult(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_75331a14","line":27,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":24,"context_line":"@ddt.ddt"},{"line_number":25,"context_line":"class GPGCryptoTest(CryptoTest):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Test class for testing os-brick.file-crypto.drivers.gpg.GpgFileEncryptor"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    class PythonGnupgResult(object):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_d534a6fc","line":27,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class GPGCryptoTest(CryptoTest):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Test class for testing os-brick.file-crypto.drivers.gpg.GpgFileEncryptor"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    class PythonGnupgResult(object):"},{"line_number":31,"context_line":"        def __init__(self, ok, stderr\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_b53932f2","line":28,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: H404: multi line docstring should start without a leading new line","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":25,"context_line":"class GPGCryptoTest(CryptoTest):"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Test class for testing os-brick.file-crypto.drivers.gpg.GpgFileEncryptor"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    class PythonGnupgResult(object):"},{"line_number":31,"context_line":"        def __init__(self, ok, stderr\u003dNone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_15229eba","line":28,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: H405: multi line docstring summary not separated with an empty line","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        # check for encoding compatibility"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            sanitized_passphrase.encode(gnupg_enforced_encoding)"},{"line_number":246,"context_line":"        except:"},{"line_number":247,"context_line":"            raise AssertionError("},{"line_number":248,"context_line":"                \"Provided passphrase must be encodable as latin-1 per \""},{"line_number":249,"context_line":"                \"python-gnupg requirement\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_f51e0a72","line":246,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: E722 do not use bare \u0027except\u0027","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":243,"context_line":"        # check for encoding compatibility"},{"line_number":244,"context_line":"        try:"},{"line_number":245,"context_line":"            sanitized_passphrase.encode(gnupg_enforced_encoding)"},{"line_number":246,"context_line":"        except:"},{"line_number":247,"context_line":"            raise AssertionError("},{"line_number":248,"context_line":"                \"Provided passphrase must be encodable as latin-1 per \""},{"line_number":249,"context_line":"                \"python-gnupg requirement\""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_55289696","line":246,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: H201: no \u0027except:\u0027 at least use \u0027except Exception:\u0027","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        for invalid_character in gnupg_invalid_character:"},{"line_number":254,"context_line":"            self.assertNotIn(invalid_character, sanitized_passphrase)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"        self.assertEquals(expected_passphrase, sanitized_passphrase)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_352522c0","line":256,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: H234: assertEquals is deprecated, use assertEqual","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"}],"os_brick/tests/file_crypto/test_file_crypto.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9072038682cc32c861741ea061e33341dee82c0c","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from unittest import mock"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from os_brick.file_crypto import file_crypto"},{"line_number":19,"context_line":"from os_brick.file_crypto.drivers.base import FileEncryptor"},{"line_number":20,"context_line":"from os_brick.file_crypto.drivers.gpg import GpgFileEncryptor"},{"line_number":21,"context_line":"from os_brick.tests.file_crypto.utils import CryptoTest"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9f560f44_f559ea5a","line":19,"updated":"2020-10-09 15:56:19.000000000","message":"pep8: H306: imports not in alphabetical order (os_brick.file_crypto.file_crypto, os_brick.file_crypto.drivers.base.fileencryptor)","commit_id":"6a640bc1c974e24a6bed89468d7c260143e5fd57"}]}
