<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def generate(cls, country_code, bank_code, account_code):
 """Generate an IBAN from it's components. If the bank-code and/or account-number have less digits than required by their country specific representation, the respective component is padded with zeros. Examples: To generate an IBAN do the following:: 'DE89 3704 0044 0532 0130 00' Args: country_code (str):
 The ISO 3166 alpha-2 country code. bank_code (str):
 The country specific bank-code. account_code (str):
 The customer specific account-code. """

        spec = _get_iban_spec(country_code)
        bank_code_length = code_length(spec, 'bank_code')
        branch_code_length = code_length(spec, 'branch_code')
        bank_and_branch_code_length = bank_code_length + branch_code_length
        account_code_length = code_length(spec, 'account_code')

        if len(bank_code) > bank_and_branch_code_length:
            raise ValueError(
                "Bank code exceeds maximum size {}".format(bank_and_branch_code_length))

        if len(account_code) > account_code_length:
            raise ValueError(
                "Account code exceeds maximum size {}".format(account_code_length))

        bank_code = bank_code.rjust(bank_and_branch_code_length, '0')
        account_code = account_code.rjust(account_code_length, '0')
        iban = country_code + '??' + bank_code + account_code
        return cls(iban)