class_docstr: The DockerHub Repo Tag Table implementation
class_docstr_tok: ["The","DockerHub","Repo","Tag","Table","implementation"]
docstr: Pulls data from the https://docs.docker.com/docker-hub/api/latest/#tag/images" API
  
  Parameters
  ----------
  query : ast.Select
     Given SQL SELECT query
  
  Returns
  -------
  pd.DataFrame
      Repo Tag matching the query
  
  Raises
  ------
  ValueError
      If the query contains an unsupported condition
docstr_tok: ["Pulls","data","from","the","https",":","\/\/docs.docker.com\/docker-hub\/api\/latest\/","#","tag\/images","''","API","Parameters","--","--","--","--","--","query",":","ast.Select","Given","SQL","SELECT","query","Returns","--","--","--","-","pd.DataFrame","Repo","Tag","matching","the","query","Raises","--","--","--","ValueError","If","the","query","contains","an","unsupported","condition"]
code: def select(self, query: ast.Select) -> pd.DataFrame:
      """Pulls data from the https://docs.docker.com/docker-hub/api/latest/#tag/images" API
  
      Parameters
      ----------
      query : ast.Select
         Given SQL SELECT query
  
      Returns
      -------
      pd.DataFrame
          Repo Tag matching the query
  
      Raises
      ------
      ValueError
          If the query contains an unsupported condition
      """
  
      select_statement_parser = SELECTQueryParser(
          query, "repo_tag_details", self.get_columns()
      )
  
      (
          selected_columns,
          where_conditions,
          order_by_conditions,
          result_limit,
      ) = select_statement_parser.parse_query()
  
      search_params = {}
      subset_where_conditions = []
      for op, arg1, arg2 in where_conditions:
          if arg1 == "namespace":
              if op == "=":
                  search_params["namespace"] = arg2
              else:
                  raise NotImplementedError(
                      "Only '=' operator is supported for namespace column."
                  )
          elif arg1 == "repository":
              if op == "=":
                  search_params["repository"] = arg2
              else:
                  raise NotImplementedError(
                      "Only '=' operator is supported for repository column."
                  )
          elif arg1 == "tag":
              if op == "=":
                  search_params["tag"] = arg2
              else:
                  raise NotImplementedError(
                      "Only '=' operator is supported for tag column."
                  )
          elif arg1 in self.get_columns():
              subset_where_conditions.append([op, arg1, arg2])
  
      filter_flag = (
          ("namespace" in search_params)
          and ("repository" in search_params)
          and ("tag" in search_params)
      )
  
      if not filter_flag:
          raise NotImplementedError(
              "namespace, repository and tag column has to be present in where clause."
          )
  
      repo_tag_summary_df = pd.DataFrame(columns=self.get_columns())
  
      response = self.handler.docker_client.get_repo_tag(
          search_params["namespace"],
          search_params["repository"],
          search_params["tag"],
      )
  
      self.check_res(res=response)
  
      content = response["content"]
  
      repo_tag_summary_df = pd.json_normalize(
          {
              "creator": content["creator"],
              "id": content["id"],
              "images": content["images"],
              "last_updated": content["last_updated"],
              "last_updater": content["last_updater"],
              "last_updater_username": content["last_updater_username"],
              "name": content["name"],
              "repository": content["repository"],
              "full_size": content["full_size"],
              "v2": content["v2"],
              "tag_status": content["tag_status"],
              "tag_last_pulled": content["tag_last_pulled"],
              "tag_last_pushed": content["tag_last_pushed"],
              "media_type": content["media_type"],
              "content_type": content["media_type"],
          }
      )
  
      select_statement_executor = SELECTQueryExecutor(
          repo_tag_summary_df,
          selected_columns,
          subset_where_conditions,
          order_by_conditions,
          result_limit,
      )
  
      repo_tag_summary_df = select_statement_executor.execute_query()
  
      return repo_tag_summary_df
  
imports: import pandas
  from typing import List
  from mindsdb.integrations.libs.api_handler import APITable
  from mindsdb.integrations.handlers.utilities.query_utilities import SELECTQueryParser, SELECTQueryExecutor
  from mindsdb.utilities import log
  from mindsdb_sql.parser import ast
label_desc: Use image node_id 1 for calling the DockerHubRepoTagTable obj's underlying member method code with example usage: obj.select(query) and returns: repo_tag_summary_df