def approveproposal(self, proposal_ids, account=None, approver=None, **kwargs):
from .proposal import Proposal<EOL>if not account:<EOL><INDENT>if "<STR_LIT>" in self.config:<EOL><INDENT>account = self.config["<STR_LIT>"]<EOL><DEDENT><DEDENT>if not account:<EOL><INDENT>raise ValueError("<STR_LIT>")<EOL><DEDENT>account = Account(account, blockchain_instance=self)<EOL>is_key = approver and approver[:<NUM_LIT:3>] == self.prefix<EOL>if not approver and not is_key:<EOL><INDENT>approver = account<EOL><DEDENT>elif approver and not is_key:<EOL><INDENT>approver = Account(approver, blockchain_instance=self)<EOL><DEDENT>else:<EOL><INDENT>approver = PublicKey(approver)<EOL><DEDENT>if not isinstance(proposal_ids, (list, set, tuple)):<EOL><INDENT>proposal_ids = {proposal_ids}<EOL><DEDENT>op = []<EOL>for proposal_id in proposal_ids:<EOL><INDENT>proposal = Proposal(proposal_id, blockchain_instance=self)<EOL>update_dict = {<EOL>"<STR_LIT>": {"<STR_LIT>": <NUM_LIT:0>, "<STR_LIT>": "<STR_LIT>"},<EOL>"<STR_LIT>": account["<STR_LIT:id>"],<EOL>"<STR_LIT>": proposal["<STR_LIT:id>"],<EOL>"<STR_LIT>": [approver["<STR_LIT:id>"]],<EOL>"<STR_LIT>": self.prefix,<EOL>}<EOL>if is_key:<EOL><INDENT>update_dict.update({"<STR_LIT>": [str(approver)]})<EOL><DEDENT>else:<EOL><INDENT>update_dict.update({"<STR_LIT>": [approver["<STR_LIT:id>"]]})<EOL><DEDENT>op.append(operations.Proposal_update(**update_dict))<EOL><DEDENT>if is_key:<EOL><INDENT>self.txbuffer.appendSigner(account["<STR_LIT:name>"], "<STR_LIT>")<EOL><DEDENT>return self.finalizeOp(op, approver["<STR_LIT:name>"], "<STR_LIT>", **kwargs)<EOL>
Approve Proposal

            :param list proposal_id: Ids of the proposals
            :param str account: (optional) the account to allow access
                to (defaults to ``default_account``)