The following issues were found

letstest/letstest/multitester.py
43 issues
Unable to import 'boto3'
Error

Line: 42 Column: 1

              import urllib.error as urllib_error
import urllib.request as urllib_request

import boto3
from botocore.exceptions import ClientError
import yaml

from fabric import Config
from fabric import Connection

            

Reported by Pylint.

Unable to import 'botocore.exceptions'
Error

Line: 43 Column: 1

              import urllib.request as urllib_request

import boto3
from botocore.exceptions import ClientError
import yaml

from fabric import Config
from fabric import Connection


            

Reported by Pylint.

Unable to import 'fabric'
Error

Line: 46 Column: 1

              from botocore.exceptions import ClientError
import yaml

from fabric import Config
from fabric import Connection

# Command line parser
#-------------------------------------------------------------------------------
parser = argparse.ArgumentParser(description='Builds EC2 cluster for testing.')

            

Reported by Pylint.

Unable to import 'fabric'
Error

Line: 47 Column: 1

              import yaml

from fabric import Config
from fabric import Connection

# Command line parser
#-------------------------------------------------------------------------------
parser = argparse.ArgumentParser(description='Builds EC2 cluster for testing.')
parser.add_argument('config_file',

            

Reported by Pylint.

Unused urllib.error imported as urllib_error
Error

Line: 39 Column: 1

              import tempfile
import time
import traceback
import urllib.error as urllib_error
import urllib.request as urllib_request

import boto3
from botocore.exceptions import ClientError
import yaml

            

Reported by Pylint.

Unused urllib.request imported as urllib_request
Error

Line: 40 Column: 1

              import time
import traceback
import urllib.error as urllib_error
import urllib.request as urllib_request

import boto3
from botocore.exceptions import ClientError
import yaml


            

Reported by Pylint.

Unused ClientError imported from botocore.exceptions
Error

Line: 43 Column: 1

              import urllib.request as urllib_request

import boto3
from botocore.exceptions import ClientError
import yaml

from fabric import Config
from fabric import Connection


            

Reported by Pylint.

Unused variable 'err'
Error

Line: 189 Column: 9

                          sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            sock.connect((ipstring, 22))
            reached = True
        except socket.error as err:
            time.sleep(wait_time)
            t_elapsed += wait_time
    sock.close()

def block_until_instance_ready(booting_instance, extra_wait_time=20):

            

Reported by Pylint.

No exception type(s) specified
Error

Line: 326 Column: 13

                              install_and_launch_certbot(cxn, instance, target, log_dir)
                outqueue.put((ii, target, Status.PASS))
                print("%s - %s SUCCESS"%(target['ami'], target['name']))
            except:
                outqueue.put((ii, target, Status.FAIL))
                print("%s - %s FAIL"%(target['ami'], target['name']))
                traceback.print_exc(file=sys.stdout)
                pass


            

Reported by Pylint.

Unnecessary pass statement
Error

Line: 330 Column: 17

                              outqueue.put((ii, target, Status.FAIL))
                print("%s - %s FAIL"%(target['ami'], target['name']))
                traceback.print_exc(file=sys.stdout)
                pass

            # append server certbot.log to each per-machine output log
            print("\n\ncertbot.log\n" + "-"*80 + "\n")
            try:
                grab_certbot_log(cxn)

            

Reported by Pylint.

certbot-nginx/tests/parser_test.py
42 issues
Unable to import 'certbot'
Error

Line: 8 Column: 1

              import unittest
from typing import List

from certbot import errors
from certbot.compat import os
from certbot_nginx._internal import nginxparser
from certbot_nginx._internal import obj
from certbot_nginx._internal import parser
import test_util as util

            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 9 Column: 1

              from typing import List

from certbot import errors
from certbot.compat import os
from certbot_nginx._internal import nginxparser
from certbot_nginx._internal import obj
from certbot_nginx._internal import parser
import test_util as util


            

Reported by Pylint.

Unable to import 'certbot_nginx._internal'
Error

Line: 10 Column: 1

              
from certbot import errors
from certbot.compat import os
from certbot_nginx._internal import nginxparser
from certbot_nginx._internal import obj
from certbot_nginx._internal import parser
import test_util as util



            

Reported by Pylint.

Unable to import 'certbot_nginx._internal'
Error

Line: 11 Column: 1

              from certbot import errors
from certbot.compat import os
from certbot_nginx._internal import nginxparser
from certbot_nginx._internal import obj
from certbot_nginx._internal import parser
import test_util as util


class NginxParserTest(util.NginxTest):

            

Reported by Pylint.

Unable to import 'certbot_nginx._internal'
Error

Line: 12 Column: 1

              from certbot.compat import os
from certbot_nginx._internal import nginxparser
from certbot_nginx._internal import obj
from certbot_nginx._internal import parser
import test_util as util


class NginxParserTest(util.NginxTest):
    """Nginx Parser Test."""

            

Reported by Pylint.

Unable to import 'certbot_nginx._internal.parser'
Error

Line: 256 Column: 9

                                                    [['foo', 'bar'], ['ssl_certificate',
                                                        '/etc/ssl/cert2.pem']])
        nparser.add_server_directives(mock_vhost, [['foo', 'bar']])
        from certbot_nginx._internal.parser import COMMENT
        self.assertEqual(nparser.parsed[example_com],
            [[['server'], [['listen', '69.50.225.155:9000'],
                           ['listen', '127.0.0.1'],
                           ['server_name', '.example.com'],
                           ['server_name', 'example.*'],

            

Reported by Pylint.

Unable to import 'certbot_nginx._internal.parser'
Error

Line: 291 Column: 9

                      nparser.add_server_directives(mock_vhost,
                                      [['\n  ', 'include', ' ',
                                      nparser.abs_path('comment_in_file.conf')]])
        from certbot_nginx._internal.parser import COMMENT
        self.assertEqual(nparser.parsed[example_com],
            [[['server'], [['listen', '69.50.225.155:9000'],
                           ['listen', '127.0.0.1'],
                           ['server_name', '.example.com'],
                           ['server_name', 'example.*'],

            

Reported by Pylint.

Unable to import 'certbot_nginx._internal.parser'
Error

Line: 311 Column: 9

                      mock_vhost = obj.VirtualHost(filep, None, None, None, target, None, [0])
        nparser.update_or_add_server_directives(
            mock_vhost, [['server_name', 'foobar.com']])
        from certbot_nginx._internal.parser import COMMENT
        self.assertEqual(
            nparser.parsed[filep],
            [[['server'], [['listen', '69.50.225.155:9000'],
                           ['listen', '127.0.0.1'],
                           ['server_name', 'foobar.com'], ['#', COMMENT],

            

Reported by Pylint.

Unable to import 'certbot_nginx._internal.parser'
Error

Line: 374 Column: 9

                          ["\n", "a", " ", "b", "\n"],
            ["c", " ", "d"],
            ["\n", "e", " ", "f"]])
        from certbot_nginx._internal.parser import comment_directive, COMMENT_BLOCK
        comment_directive(block, 1)
        comment_directive(block, 0)
        self.assertEqual(block.spaced, [
            ["\n", "a", " ", "b", "\n"],
            COMMENT_BLOCK,

            

Reported by Pylint.

Unable to import 'certbot_nginx._internal.parser'
Error

Line: 398 Column: 9

                              ssl_prefer_server_ciphers on;
            }""")
        block = server_block[0][1]
        from certbot_nginx._internal.parser import _comment_out_directive
        _comment_out_directive(block, 4, "blah1")
        _comment_out_directive(block, 5, "blah2")
        _comment_out_directive(block, 6, "blah3")
        self.assertEqual(block.spaced, [
            ['\n                ', 'listen', ' ', '80'],

            

Reported by Pylint.

certbot-nginx/tests/nginxparser_test.py
42 issues
Unable to import 'certbot_nginx._internal.nginxparser'
Error

Line: 9 Column: 1

              
from pyparsing import ParseException

from certbot_nginx._internal.nginxparser import dump
from certbot_nginx._internal.nginxparser import dumps
from certbot_nginx._internal.nginxparser import load
from certbot_nginx._internal.nginxparser import loads
from certbot_nginx._internal.nginxparser import RawNginxParser
from certbot_nginx._internal.nginxparser import UnspacedList

            

Reported by Pylint.

Unable to import 'certbot_nginx._internal.nginxparser'
Error

Line: 10 Column: 1

              from pyparsing import ParseException

from certbot_nginx._internal.nginxparser import dump
from certbot_nginx._internal.nginxparser import dumps
from certbot_nginx._internal.nginxparser import load
from certbot_nginx._internal.nginxparser import loads
from certbot_nginx._internal.nginxparser import RawNginxParser
from certbot_nginx._internal.nginxparser import UnspacedList
import test_util as util

            

Reported by Pylint.

Unable to import 'certbot_nginx._internal.nginxparser'
Error

Line: 11 Column: 1

              
from certbot_nginx._internal.nginxparser import dump
from certbot_nginx._internal.nginxparser import dumps
from certbot_nginx._internal.nginxparser import load
from certbot_nginx._internal.nginxparser import loads
from certbot_nginx._internal.nginxparser import RawNginxParser
from certbot_nginx._internal.nginxparser import UnspacedList
import test_util as util


            

Reported by Pylint.

Unable to import 'certbot_nginx._internal.nginxparser'
Error

Line: 12 Column: 1

              from certbot_nginx._internal.nginxparser import dump
from certbot_nginx._internal.nginxparser import dumps
from certbot_nginx._internal.nginxparser import load
from certbot_nginx._internal.nginxparser import loads
from certbot_nginx._internal.nginxparser import RawNginxParser
from certbot_nginx._internal.nginxparser import UnspacedList
import test_util as util

FIRST = operator.itemgetter(0)

            

Reported by Pylint.

Unable to import 'certbot_nginx._internal.nginxparser'
Error

Line: 13 Column: 1

              from certbot_nginx._internal.nginxparser import dumps
from certbot_nginx._internal.nginxparser import load
from certbot_nginx._internal.nginxparser import loads
from certbot_nginx._internal.nginxparser import RawNginxParser
from certbot_nginx._internal.nginxparser import UnspacedList
import test_util as util

FIRST = operator.itemgetter(0)


            

Reported by Pylint.

Unable to import 'certbot_nginx._internal.nginxparser'
Error

Line: 14 Column: 1

              from certbot_nginx._internal.nginxparser import load
from certbot_nginx._internal.nginxparser import loads
from certbot_nginx._internal.nginxparser import RawNginxParser
from certbot_nginx._internal.nginxparser import UnspacedList
import test_util as util

FIRST = operator.itemgetter(0)



            

Reported by Pylint.

Missing function or method docstring
Error

Line: 23 Column: 5

              class TestRawNginxParser(unittest.TestCase):
    """Test the raw low-level Nginx config parser."""

    def test_assignments(self):
        parsed = RawNginxParser.assignment.parseString('root /test;').asList()
        self.assertEqual(parsed, ['root', ' ', '/test'])
        parsed = RawNginxParser.assignment.parseString('root /test;foo bar;').asList()
        self.assertEqual(parsed, ['root', ' ', '/test'], ['foo', ' ', 'bar'])


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 29 Column: 5

                      parsed = RawNginxParser.assignment.parseString('root /test;foo bar;').asList()
        self.assertEqual(parsed, ['root', ' ', '/test'], ['foo', ' ', 'bar'])

    def test_blocks(self):
        parsed = RawNginxParser.block.parseString('foo {}').asList()
        self.assertEqual(parsed, [['foo', ' '], []])
        parsed = RawNginxParser.block.parseString('location /foo{}').asList()
        self.assertEqual(parsed, [['location', ' ', '/foo'], []])
        parsed = RawNginxParser.block.parseString('foo { bar foo ; }').asList()

            

Reported by Pylint.

Missing function or method docstring
Error

Line: 37 Column: 5

                      parsed = RawNginxParser.block.parseString('foo { bar foo ; }').asList()
        self.assertEqual(parsed, [['foo', ' '], [[' ', 'bar', ' ', 'foo', ' '], ' ']])

    def test_nested_blocks(self):
        parsed = RawNginxParser.block.parseString('foo { bar {} }').asList()
        block, content = parsed
        self.assertEqual(FIRST(content), [[' ', 'bar', ' '], []])
        self.assertEqual(FIRST(block), 'foo')


            

Reported by Pylint.

Missing function or method docstring
Error

Line: 43 Column: 5

                      self.assertEqual(FIRST(content), [[' ', 'bar', ' '], []])
        self.assertEqual(FIRST(block), 'foo')

    def test_dump_as_string(self):
        dumped = dumps(UnspacedList([
            ['user', ' ', 'www-data'],
            [['\n', 'server', ' '], [
                ['\n    ', 'listen', ' ', '80'],
                ['\n    ', 'server_name', ' ', 'foo.com'],

            

Reported by Pylint.

acme/tests/crypto_util_test.py
42 issues
Unable to import 'josepy'
Error

Line: 10 Column: 1

              import unittest
from typing import List

import josepy as jose
import OpenSSL

from acme import errors
import test_util


            

Reported by Pylint.

Unable to import 'acme'
Error

Line: 13 Column: 1

              import josepy as jose
import OpenSSL

from acme import errors
import test_util


class SSLSocketAndProbeSNITest(unittest.TestCase):
    """Tests for acme.crypto_util.SSLSocket/probe_sni."""

            

Reported by Pylint.

Unable to import 'acme.crypto_util'
Error

Line: 26 Column: 9

                      # pylint: disable=protected-access
        certs = {b'foo': (key, self.cert.wrapped)}

        from acme.crypto_util import SSLSocket

        class _TestServer(socketserver.TCPServer):

            def server_bind(self):  # pylint: disable=missing-docstring
                self.socket = SSLSocket(socket.socket(),

            

Reported by Pylint.

Unable to import 'acme.crypto_util'
Error

Line: 46 Column: 9

                          self.server_thread.join()  # pragma: no cover

    def _probe(self, name):
        from acme.crypto_util import probe_sni
        return jose.ComparableX509(probe_sni(
            name, host='127.0.0.1', port=self.port))

    def _start_server(self):
        self.server_thread.start()

            

Reported by Pylint.

Unable to import 'acme.crypto_util'
Error

Line: 76 Column: 9

                  """Tests for acme.crypto_util.SSLSocket."""

    def test_ssl_socket_invalid_arguments(self):
        from acme.crypto_util import SSLSocket
        with self.assertRaises(ValueError):
            _ = SSLSocket(None, {'sni': ('key', 'cert')},
                    cert_selection=lambda _: None)
        with self.assertRaises(ValueError):
            _ = SSLSocket(None)

            

Reported by Pylint.

Unable to import 'acme.crypto_util'
Error

Line: 90 Column: 9

                  @classmethod
    def _call(cls, loader, name):
        # pylint: disable=protected-access
        from acme.crypto_util import _pyopenssl_cert_or_req_all_names
        return _pyopenssl_cert_or_req_all_names(loader(name))

    def _call_cert(self, name):
        return self._call(test_util.load_cert, name)


            

Reported by Pylint.

Unable to import 'acme.crypto_util'
Error

Line: 115 Column: 9

                  @classmethod
    def _call(cls, loader, name):
        # pylint: disable=protected-access
        from acme.crypto_util import _pyopenssl_cert_or_req_san
        return _pyopenssl_cert_or_req_san(loader(name))

    @classmethod
    def _get_idn_names(cls):
        """Returns expected names from '{cert,csr}-idnsans.pem'."""

            

Reported by Pylint.

Unable to import 'acme.crypto_util'
Error

Line: 189 Column: 9

                      self.key.generate_key(OpenSSL.crypto.TYPE_RSA, 2048)

    def test_sn_collisions(self):
        from acme.crypto_util import gen_ss_cert

        for _ in range(self.cert_count):
            cert = gen_ss_cert(self.key, ['dummy'], force_san=True)
            self.serial_num.append(cert.get_serial_number())
        self.assertGreater(len(set(self.serial_num)), 1)

            

Reported by Pylint.

Unable to import 'acme.crypto_util'
Error

Line: 204 Column: 9

                      privkey = OpenSSL.crypto.PKey()
        privkey.generate_key(OpenSSL.crypto.TYPE_RSA, 2048)
        privkey_pem = OpenSSL.crypto.dump_privatekey(OpenSSL.crypto.FILETYPE_PEM, privkey)
        from acme.crypto_util import make_csr
        return make_csr(privkey_pem, *args, **kwargs)

    def test_make_csr(self):
        csr_pem = self._call_with_key(["a.example", "b.example"])
        self.assertIn(b'--BEGIN CERTIFICATE REQUEST--', csr_pem)

            

Reported by Pylint.

Unable to import 'acme.crypto_util'
Error

Line: 251 Column: 9

                  @classmethod
    def _call(cls, loaded):
        # pylint: disable=protected-access
        from acme.crypto_util import dump_pyopenssl_chain
        return dump_pyopenssl_chain(loaded)

    def test_dump_pyopenssl_chain(self):
        names = ['cert.pem', 'cert-san.pem', 'cert-idnsans.pem']
        loaded = [test_util.load_cert(name) for name in names]

            

Reported by Pylint.

certbot/tests/plugins/webroot_test.py
41 issues
Unable to import 'josepy'
Error

Line: 12 Column: 1

              import tempfile
import unittest

import josepy as jose
try:
    import mock
except ImportError: # pragma: no cover
    from unittest import mock


            

Reported by Pylint.

Unable to import 'acme'
Error

Line: 18 Column: 1

              except ImportError: # pragma: no cover
    from unittest import mock

from acme import challenges
from certbot import achallenges
from certbot import errors
from certbot.compat import filesystem
from certbot.compat import os
from certbot.display import util as display_util

            

Reported by Pylint.

Unable to import 'certbot'
Error

Line: 19 Column: 1

                  from unittest import mock

from acme import challenges
from certbot import achallenges
from certbot import errors
from certbot.compat import filesystem
from certbot.compat import os
from certbot.display import util as display_util
from certbot.tests import acme_util

            

Reported by Pylint.

Unable to import 'certbot'
Error

Line: 20 Column: 1

              
from acme import challenges
from certbot import achallenges
from certbot import errors
from certbot.compat import filesystem
from certbot.compat import os
from certbot.display import util as display_util
from certbot.tests import acme_util
from certbot.tests import util as test_util

            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 21 Column: 1

              from acme import challenges
from certbot import achallenges
from certbot import errors
from certbot.compat import filesystem
from certbot.compat import os
from certbot.display import util as display_util
from certbot.tests import acme_util
from certbot.tests import util as test_util


            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 22 Column: 1

              from certbot import achallenges
from certbot import errors
from certbot.compat import filesystem
from certbot.compat import os
from certbot.display import util as display_util
from certbot.tests import acme_util
from certbot.tests import util as test_util

KEY = jose.JWKRSA.load(test_util.load_vector("rsa512_key.pem"))

            

Reported by Pylint.

Unable to import 'certbot.display'
Error

Line: 23 Column: 1

              from certbot import errors
from certbot.compat import filesystem
from certbot.compat import os
from certbot.display import util as display_util
from certbot.tests import acme_util
from certbot.tests import util as test_util

KEY = jose.JWKRSA.load(test_util.load_vector("rsa512_key.pem"))


            

Reported by Pylint.

Unable to import 'certbot.tests'
Error

Line: 24 Column: 1

              from certbot.compat import filesystem
from certbot.compat import os
from certbot.display import util as display_util
from certbot.tests import acme_util
from certbot.tests import util as test_util

KEY = jose.JWKRSA.load(test_util.load_vector("rsa512_key.pem"))



            

Reported by Pylint.

Unable to import 'certbot.tests'
Error

Line: 25 Column: 1

              from certbot.compat import os
from certbot.display import util as display_util
from certbot.tests import acme_util
from certbot.tests import util as test_util

KEY = jose.JWKRSA.load(test_util.load_vector("rsa512_key.pem"))


class AuthenticatorTest(unittest.TestCase):

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins.webroot'
Error

Line: 37 Column: 9

                      challb=acme_util.HTTP01_P, domain="thing.com", account_key=KEY)

    def setUp(self):
        from certbot._internal.plugins.webroot import Authenticator
        # On Linux directories created by tempfile.mkdtemp inherit their permissions from their
        # parent directory. So the actual permissions are inconsistent over various tests env.
        # To circumvent this, a dedicated sub-workspace is created under the workspace, using
        # filesystem.mkdir to get consistent permissions.
        self.workspace = tempfile.mkdtemp()

            

Reported by Pylint.

certbot/certbot/_internal/storage.py
41 issues
Unable to import 'parsedatetime'
Error

Line: 14 Column: 1

              from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey
from cryptography.hazmat.primitives.serialization import load_pem_private_key
import parsedatetime
import pytz

import certbot
from certbot import configuration
from certbot import crypto_util

            

Reported by Pylint.

Unable to import 'pytz'
Error

Line: 15 Column: 1

              from cryptography.hazmat.primitives.asymmetric.rsa import RSAPrivateKey
from cryptography.hazmat.primitives.serialization import load_pem_private_key
import parsedatetime
import pytz

import certbot
from certbot import configuration
from certbot import crypto_util
from certbot import errors

            

Reported by Pylint.

TODO: add human-readable comments explaining other available
Error

Line: 143 Column: 3

                      default_interval = constants.RENEWER_DEFAULTS["renew_before_expiry"]
        config.initial_comment = ["renew_before_expiry = " + default_interval]

    # TODO: add human-readable comments explaining other available
    #       parameters
    logger.debug("Writing new config %s.", n_filename)

    # Ensure that the file exists
    with open(n_filename, 'a'):

            

Reported by Pylint.

Consider explicitly re-raising using the 'from' keyword
Error

Line: 175 Column: 9

                  try:
        filesystem.replace(prev_filename, new_filename)
    except OSError:
        raise errors.ConfigurationError("Please specify a valid filename "
            "for the new certificate name.")


def update_configuration(lineagename, archive_dir, target, cli_config):
    """Modifies lineagename's config to contain the specified values.

            

Reported by Pylint.

Consider explicitly re-raising using the 'from' keyword
Error

Line: 221 Column: 9

                  try:
        target = filesystem.readlink(link)
    except OSError:
        raise errors.CertStorageError(
            "Expected {0} to be a symlink".format(link))

    if not os.path.isabs(target):
        target = os.path.join(os.path.dirname(link), target)
    return os.path.abspath(target)

            

Reported by Pylint.

Consider explicitly re-raising using the 'from' keyword
Error

Line: 339 Column: 9

                      logger.error("Could not parse %s. You may wish to manually "
            "delete the contents of %s and %s.", renewal_filename,
            full_default_live_dir, full_default_archive_dir)
        raise errors.CertStorageError(
            "error parsing {0}".format(renewal_filename))
    finally:
        # we couldn't read it, but let's at least delete it
        # if this was going to fail, it already would have.
        os.remove(renewal_filename)

            

Reported by Pylint.

Consider explicitly re-raising using the 'from' keyword
Error

Line: 446 Column: 13

                          self.configfile = configobj.ConfigObj(
                config_filename, encoding='utf-8', default_encoding='utf-8')
        except configobj.ConfigObjError:
            raise errors.CertStorageError(
                "error parsing {0}".format(config_filename))
        # TODO: Do we actually use anything from defaults and do we want to
        #       read further defaults from the systemwide renewal configuration
        #       file at this stage?
        self.configuration = config_with_defaults(self.configfile)

            

Reported by Pylint.

TODO: Do we actually use anything from defaults and do we want to
Error

Line: 448 Column: 3

                      except configobj.ConfigObjError:
            raise errors.CertStorageError(
                "error parsing {0}".format(config_filename))
        # TODO: Do we actually use anything from defaults and do we want to
        #       read further defaults from the systemwide renewal configuration
        #       file at this stage?
        self.configuration = config_with_defaults(self.configfile)

        if not all(x in self.configuration for x in ALL_FOUR):

            

Reported by Pylint.

XXX: Additional possible consistency checks (e.g.
Error

Line: 620 Column: 3

                          # file (it may itself be a symlink). But we should probably
            # do a recursive check that ultimately the target does
            # exist?
        # XXX: Additional possible consistency checks (e.g.
        #      cryptographic validation of the chain being a chain,
        #      the chain matching the cert, and the cert matching
        #      the subject key)
        # XXX: All four of the targets are in the same directory
        #      (This check is redundant with the check that they

            

Reported by Pylint.

XXX: All four of the targets are in the same directory
Error

Line: 624 Column: 3

                      #      cryptographic validation of the chain being a chain,
        #      the chain matching the cert, and the cert matching
        #      the subject key)
        # XXX: All four of the targets are in the same directory
        #      (This check is redundant with the check that they
        #      are all in the desired directory!)
        #      len(set(os.path.basename(self.current_target(x)
        #      for x in ALL_FOUR))) == 1
        return True

            

Reported by Pylint.

certbot/tests/plugins/dns_common_test.py
39 issues
Unable to import 'certbot'
Error

Line: 12 Column: 1

              except ImportError: # pragma: no cover
    from unittest import mock

from certbot import errors
from certbot import util
from certbot.compat import os
from certbot.display import util as display_util
from certbot.plugins import dns_common
from certbot.plugins import dns_test_common

            

Reported by Pylint.

Unable to import 'certbot'
Error

Line: 13 Column: 1

                  from unittest import mock

from certbot import errors
from certbot import util
from certbot.compat import os
from certbot.display import util as display_util
from certbot.plugins import dns_common
from certbot.plugins import dns_test_common
from certbot.tests import util as test_util

            

Reported by Pylint.

Unable to import 'certbot.compat'
Error

Line: 14 Column: 1

              
from certbot import errors
from certbot import util
from certbot.compat import os
from certbot.display import util as display_util
from certbot.plugins import dns_common
from certbot.plugins import dns_test_common
from certbot.tests import util as test_util


            

Reported by Pylint.

Unable to import 'certbot.display'
Error

Line: 15 Column: 1

              from certbot import errors
from certbot import util
from certbot.compat import os
from certbot.display import util as display_util
from certbot.plugins import dns_common
from certbot.plugins import dns_test_common
from certbot.tests import util as test_util



            

Reported by Pylint.

Unable to import 'certbot.plugins'
Error

Line: 16 Column: 1

              from certbot import util
from certbot.compat import os
from certbot.display import util as display_util
from certbot.plugins import dns_common
from certbot.plugins import dns_test_common
from certbot.tests import util as test_util


class DNSAuthenticatorTest(test_util.TempDirTestCase, dns_test_common.BaseAuthenticatorTest):

            

Reported by Pylint.

Unable to import 'certbot.plugins'
Error

Line: 17 Column: 1

              from certbot.compat import os
from certbot.display import util as display_util
from certbot.plugins import dns_common
from certbot.plugins import dns_test_common
from certbot.tests import util as test_util


class DNSAuthenticatorTest(test_util.TempDirTestCase, dns_test_common.BaseAuthenticatorTest):
    # pylint: disable=protected-access

            

Reported by Pylint.

Unable to import 'certbot.tests'
Error

Line: 18 Column: 1

              from certbot.display import util as display_util
from certbot.plugins import dns_common
from certbot.plugins import dns_test_common
from certbot.tests import util as test_util


class DNSAuthenticatorTest(test_util.TempDirTestCase, dns_test_common.BaseAuthenticatorTest):
    # pylint: disable=protected-access


            

Reported by Pylint.

Attribute '_attempt_cleanup' defined outside __init__
Error

Line: 52 Column: 9

                      self.auth._perform.assert_called_once_with(dns_test_common.DOMAIN, mock.ANY, mock.ANY)

    def test_cleanup(self):
        self.auth._attempt_cleanup = True

        self.auth.cleanup([self.achall])

        self.auth._cleanup.assert_called_once_with(dns_test_common.DOMAIN, mock.ANY, mock.ANY)


            

Reported by Pylint.

Missing class docstring
Error

Line: 21 Column: 1

              from certbot.tests import util as test_util


class DNSAuthenticatorTest(test_util.TempDirTestCase, dns_test_common.BaseAuthenticatorTest):
    # pylint: disable=protected-access

    class _FakeDNSAuthenticator(dns_common.DNSAuthenticator):
        _setup_credentials = mock.MagicMock()
        _perform = mock.MagicMock()

            

Reported by Pylint.

Too few public methods (1/2)
Error

Line: 24 Column: 5

              class DNSAuthenticatorTest(test_util.TempDirTestCase, dns_test_common.BaseAuthenticatorTest):
    # pylint: disable=protected-access

    class _FakeDNSAuthenticator(dns_common.DNSAuthenticator):
        _setup_credentials = mock.MagicMock()
        _perform = mock.MagicMock()
        _cleanup = mock.MagicMock()

        def more_info(self):  # pylint: disable=missing-docstring,no-self-use

            

Reported by Pylint.

certbot/certbot/_internal/main.py
38 issues
Unable to import 'josepy'
Error

Line: 17 Column: 1

              from typing import Union

import configobj
import josepy as jose
import zope.component
import zope.interface

from acme import errors as acme_errors
import certbot

            

Reported by Pylint.

No name 'component' in module 'zope'
Error

Line: 18 Column: 1

              
import configobj
import josepy as jose
import zope.component
import zope.interface

from acme import errors as acme_errors
import certbot
from certbot import configuration

            

Reported by Pylint.

Unable to import 'zope.component'
Error

Line: 18 Column: 1

              
import configobj
import josepy as jose
import zope.component
import zope.interface

from acme import errors as acme_errors
import certbot
from certbot import configuration

            

Reported by Pylint.

Unable to import 'acme'
Error

Line: 21 Column: 1

              import zope.component
import zope.interface

from acme import errors as acme_errors
import certbot
from certbot import configuration
from certbot import crypto_util
from certbot import errors
from certbot import interfaces

            

Reported by Pylint.

Bad option value 'consider-using-with'
Error

Line: 1497 Column: 1

              
    if config.quiet:
        config.noninteractive_mode = True
        devnull = open(os.devnull, "w")  # pylint: disable=consider-using-with
        displayer = display_util.NoninteractiveDisplay(devnull)
    elif config.noninteractive_mode:
        displayer = display_util.NoninteractiveDisplay(sys.stdout)
    else:
        displayer = display_util.FileDisplay(

            

Reported by Pylint.

Module 'zope' has no 'component' member
Error

Line: 1546 Column: 5

              
    # This call is done only for retro-compatibility purposes.
    # TODO: Remove this call once zope dependencies are removed from Certbot.
    zope.component.provideUtility(config, interfaces.IConfig)

    # On windows, shell without administrative right cannot create symlinks required by certbot.
    # So we check the rights before continuing.
    misc.raise_for_non_administrative_windows_rights()


            

Reported by Pylint.

Module 'zope' has no 'component' member
Error

Line: 1563 Column: 5

                  # These calls are done only for retro-compatibility purposes.
    # TODO: Remove these calls once zope dependencies are removed from Certbot.
    report = reporter.Reporter(config)
    zope.component.provideUtility(report, interfaces.IReporter)
    util.atexit_register(report.print_messages)

    with make_displayer(config) as displayer:
        display_obj.set_display(displayer)


            

Reported by Pylint.

TODO: Add notification related to command-line options for
Error

Line: 253 Column: 3

                  response = display_util.menu(question, choices,
                                    default=0, force_interactive=True)
    if response[0] == display_util.CANCEL:
        # TODO: Add notification related to command-line options for
        #       skipping the menu for this case.
        raise errors.Error(
            "Operation canceled. You may re-run the client.")
    if response[1] == 0:
        return "reinstall", lineage

            

Reported by Pylint.

TODO: Also address superset case
Error

Line: 290 Column: 3

                  # kind of certificate to be obtained with renewal = False.)
    if config.duplicate:
        return "newcert", None
    # TODO: Also address superset case
    ident_names_cert, subset_names_cert = cert_manager.find_duplicative_certs(config, domains)
    # XXX ^ schoen is not sure whether that correctly reads the systemwide
    # configuration file.
    if ident_names_cert is None and subset_names_cert is None:
        return "newcert", None

            

Reported by Pylint.

XXX ^ schoen is not sure whether that correctly reads the systemwide
Error

Line: 292 Column: 3

                      return "newcert", None
    # TODO: Also address superset case
    ident_names_cert, subset_names_cert = cert_manager.find_duplicative_certs(config, domains)
    # XXX ^ schoen is not sure whether that correctly reads the systemwide
    # configuration file.
    if ident_names_cert is None and subset_names_cert is None:
        return "newcert", None

    if ident_names_cert is not None:

            

Reported by Pylint.

certbot-apache/tests/dualnode_test.py
38 issues
Unable to import 'certbot_apache._internal'
Error

Line: 9 Column: 1

              except ImportError: # pragma: no cover
    from unittest import mock # type: ignore

from certbot_apache._internal import assertions
from certbot_apache._internal import augeasparser
from certbot_apache._internal import dualparser


class DualParserNodeTest(unittest.TestCase):  # pylint: disable=too-many-public-methods

            

Reported by Pylint.

Unable to import 'certbot_apache._internal'
Error

Line: 10 Column: 1

                  from unittest import mock # type: ignore

from certbot_apache._internal import assertions
from certbot_apache._internal import augeasparser
from certbot_apache._internal import dualparser


class DualParserNodeTest(unittest.TestCase):  # pylint: disable=too-many-public-methods
    """DualParserNode tests"""

            

Reported by Pylint.

Unable to import 'certbot_apache._internal'
Error

Line: 11 Column: 1

              
from certbot_apache._internal import assertions
from certbot_apache._internal import augeasparser
from certbot_apache._internal import dualparser


class DualParserNodeTest(unittest.TestCase):  # pylint: disable=too-many-public-methods
    """DualParserNode tests"""


            

Reported by Pylint.

Probable insecure usage of temp file/directory.
Security

Line: 24
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b108_hardcoded_tmp_directory.html

                      self.metadata = {"augeasparser": parser_mock, "augeaspath": "/invalid", "ac_ast": None}
        self.block = dualparser.DualBlockNode(name="block",
                                              ancestor=None,
                                              filepath="/tmp/something",
                                              metadata=self.metadata)
        self.block_two = dualparser.DualBlockNode(name="block",
                                                  ancestor=self.block,
                                                  filepath="/tmp/something",
                                                  metadata=self.metadata)

            

Reported by Bandit.

Probable insecure usage of temp file/directory.
Security

Line: 28
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b108_hardcoded_tmp_directory.html

                                                            metadata=self.metadata)
        self.block_two = dualparser.DualBlockNode(name="block",
                                                  ancestor=self.block,
                                                  filepath="/tmp/something",
                                                  metadata=self.metadata)
        self.directive = dualparser.DualDirectiveNode(name="directive",
                                                      ancestor=self.block,
                                                      filepath="/tmp/something",
                                                      metadata=self.metadata)

            

Reported by Bandit.

Probable insecure usage of temp file/directory.
Security

Line: 32
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b108_hardcoded_tmp_directory.html

                                                                metadata=self.metadata)
        self.directive = dualparser.DualDirectiveNode(name="directive",
                                                      ancestor=self.block,
                                                      filepath="/tmp/something",
                                                      metadata=self.metadata)
        self.comment = dualparser.DualCommentNode(comment="comment",
                                                  ancestor=self.block,
                                                  filepath="/tmp/something",
                                                  metadata=self.metadata)

            

Reported by Bandit.

Probable insecure usage of temp file/directory.
Security

Line: 36
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b108_hardcoded_tmp_directory.html

                                                                    metadata=self.metadata)
        self.comment = dualparser.DualCommentNode(comment="comment",
                                                  ancestor=self.block,
                                                  filepath="/tmp/something",
                                                  metadata=self.metadata)

    def test_create_with_precreated(self):
        cnode = dualparser.DualCommentNode(comment="comment",
                                           ancestor=self.block,

            

Reported by Bandit.

Probable insecure usage of temp file/directory.
Security

Line: 42
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b108_hardcoded_tmp_directory.html

                  def test_create_with_precreated(self):
        cnode = dualparser.DualCommentNode(comment="comment",
                                           ancestor=self.block,
                                           filepath="/tmp/something",
                                           primary=self.comment.secondary,
                                           secondary=self.comment.primary)
        dnode = dualparser.DualDirectiveNode(name="directive",
                                             ancestor=self.block,
                                             filepath="/tmp/something",

            

Reported by Bandit.

Probable insecure usage of temp file/directory.
Security

Line: 47
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b108_hardcoded_tmp_directory.html

                                                         secondary=self.comment.primary)
        dnode = dualparser.DualDirectiveNode(name="directive",
                                             ancestor=self.block,
                                             filepath="/tmp/something",
                                             primary=self.directive.secondary,
                                             secondary=self.directive.primary)
        bnode = dualparser.DualBlockNode(name="block",
                                         ancestor=self.block,
                                         filepath="/tmp/something",

            

Reported by Bandit.

Probable insecure usage of temp file/directory.
Security

Line: 52
Suggestion: https://bandit.readthedocs.io/en/latest/plugins/b108_hardcoded_tmp_directory.html

                                                           secondary=self.directive.primary)
        bnode = dualparser.DualBlockNode(name="block",
                                         ancestor=self.block,
                                         filepath="/tmp/something",
                                         primary=self.block.secondary,
                                         secondary=self.block.primary)
        # Switched around
        self.assertTrue(cnode.primary is self.comment.secondary)
        self.assertTrue(cnode.secondary is self.comment.primary)

            

Reported by Bandit.

certbot/tests/plugins/selection_test.py
37 issues
Unable to import 'certbot'
Error

Line: 7 Column: 1

              import unittest


from certbot import errors
from certbot import interfaces
from certbot._internal.display import obj as display_obj
from certbot._internal.plugins.disco import PluginsRegistry
from certbot.display import util as display_util
from certbot.tests import util as test_util

            

Reported by Pylint.

Unable to import 'certbot'
Error

Line: 8 Column: 1

              

from certbot import errors
from certbot import interfaces
from certbot._internal.display import obj as display_obj
from certbot._internal.plugins.disco import PluginsRegistry
from certbot.display import util as display_util
from certbot.tests import util as test_util


            

Reported by Pylint.

Unable to import 'certbot._internal.display'
Error

Line: 9 Column: 1

              
from certbot import errors
from certbot import interfaces
from certbot._internal.display import obj as display_obj
from certbot._internal.plugins.disco import PluginsRegistry
from certbot.display import util as display_util
from certbot.tests import util as test_util

try:

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins.disco'
Error

Line: 10 Column: 1

              from certbot import errors
from certbot import interfaces
from certbot._internal.display import obj as display_obj
from certbot._internal.plugins.disco import PluginsRegistry
from certbot.display import util as display_util
from certbot.tests import util as test_util

try:
    import mock

            

Reported by Pylint.

Unable to import 'certbot.display'
Error

Line: 11 Column: 1

              from certbot import interfaces
from certbot._internal.display import obj as display_obj
from certbot._internal.plugins.disco import PluginsRegistry
from certbot.display import util as display_util
from certbot.tests import util as test_util

try:
    import mock
except ImportError:  # pragma: no cover

            

Reported by Pylint.

Unable to import 'certbot.tests'
Error

Line: 12 Column: 1

              from certbot._internal.display import obj as display_obj
from certbot._internal.plugins.disco import PluginsRegistry
from certbot.display import util as display_util
from certbot.tests import util as test_util

try:
    import mock
except ImportError:  # pragma: no cover
    from unittest import mock

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins.selection'
Error

Line: 35 Column: 9

                          config, default, plugins, "Question?", ifaces)

    def test_authenticator(self):
        from certbot._internal.plugins.selection import pick_authenticator
        self._test(pick_authenticator, (interfaces.Authenticator,))

    def test_installer(self):
        from certbot._internal.plugins.selection import pick_installer
        self._test(pick_installer, (interfaces.Installer,))

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins.selection'
Error

Line: 39 Column: 9

                      self._test(pick_authenticator, (interfaces.Authenticator,))

    def test_installer(self):
        from certbot._internal.plugins.selection import pick_installer
        self._test(pick_installer, (interfaces.Installer,))

    def test_configurator(self):
        from certbot._internal.plugins.selection import pick_configurator
        self._test(pick_configurator,

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins.selection'
Error

Line: 43 Column: 9

                      self._test(pick_installer, (interfaces.Installer,))

    def test_configurator(self):
        from certbot._internal.plugins.selection import pick_configurator
        self._test(pick_configurator,
            (interfaces.Authenticator, interfaces.Installer))


class PickPluginTest(unittest.TestCase):

            

Reported by Pylint.

Unable to import 'certbot._internal.plugins.selection'
Error

Line: 59 Column: 9

                      self.ifaces: List[interfaces.Plugin] = []

    def _call(self):
        from certbot._internal.plugins.selection import pick_plugin
        return pick_plugin(self.config, self.default, self.reg,
                           self.question, self.ifaces)

    def test_default_provided(self):
        self.default = "foo"

            

Reported by Pylint.