docs: def approvewitness(self, witnesses, account=None, **kwargs):
          """ Approve a witness
  
              :param list witnesses: list of Witness name or id
              :param str account: (optional) the account to allow access
                  to (defaults to ``default_account``)
          """
          if not account:
              if "default_account" in self.config:
                  account = self.config["default_account"]
          if not account:
              raise ValueError("You need to provide an account")
          account = Account(account, blockchain_instance=self)
          options = account["options"]
  
          if not isinstance(witnesses, (list, set, tuple)):
              witnesses = {witnesses}
  
          for witness in witnesses:
              witness = Witness(witness, blockchain_instance=self)
              options["votes"].append(witness["vote_id"])
  
          options["votes"] = list(set(options["votes"]))
          options["num_witness"] = len(
              list(filter(lambda x: float(x.split(":")[0]) == 1, options["votes"]))
          )
  
          op = operations.Account_update(
              **{
                  "fee": {"amount": 0, "asset_id": "1.3.0"},
                  "account": account["id"],
                  "new_options": options,
                  "extensions": {},
                  "prefix": self.prefix,
              }
          )
          return self.finalizeOp(op, account["name"], "active", **kwargs)