class_docstr: The Stripe Products Table implementation
class_docstr_tok: ["The","Stripe","Products","Table","implementation"]
code: def update_products(
      self, product_ids: List[Text], values_to_update: Dict[Text, Any]
  ) -> None:
      stripe = self.handler.connect()
      for product_id in product_ids:
          updated_product = stripe.Product.modify(
              product_id, **values_to_update
          )
          if "id" not in updated_product.to_dict():
              raise Exception("Product update failed")
          else:
              logger.info(
                  f'Product {updated_product.to_dict()["id"]} updated'
              )
  
imports: import pandas
  import stripe
  from typing import Text, List, Dict, Any
  from mindsdb_sql.parser import ast
  from mindsdb.integrations.libs.api_handler import APITable
  from mindsdb.integrations.handlers.utilities.query_utilities import INSERTQueryParser, DELETEQueryParser, UPDATEQueryParser, DELETEQueryExecutor, UPDATEQueryExecutor
  from mindsdb_sql.parser import ast
  from mindsdb.integrations.libs.api_handler import APITable
  from mindsdb.integrations.handlers.utilities.query_utilities.select_query_utilities import SELECTQueryParser, SELECTQueryExecutor
  from mindsdb.utilities import log
label_desc: Use image node_id 8 for calling the ProductsTable obj's underlying member method code with example usage: obj.update_products(product_ids, values_to_update) without return types