parameters: (
          self,
          path,
          query,
          search_form=None,
          search_queries=None,
          columns=None,
          field_id=None,
          show_id=False,
          orderby=None,
          left=None,
          headings=None,
          create=True,
          details=True,
          editable=True,
          deletable=True,
          validation=None,
          pre_action_buttons=None,
          post_action_buttons=None,
          auto_process=True,
          rows_per_page=15,
          include_action_button_text=True,
          search_button_text="Filter",
          formstyle=FormStyleDefault,
          grid_class_style=GridClassStyle,
          T=lambda text: text,
          # deprecated
          fields=None,
      )
docstring: Grid is a searchable/sortable/pageable grid
  
          :param path: The part of the URL to be parsed by this grid
          :param query: the query used to filter the data
          :param search_form: py4web FORM to be included as the search form
          :param search_queries: future use - pass a dict of name and a search query
          :param columns: list of columns to display on the list page, if blank, glean tablename from first query
          :              and use all fields of that table
          :param field_id: the id field of the primary table for the grid - if there are multiple tables (joined)
                              then the table for this field is used as the table for edit/details/delete
          :param show_id: show the record id field on list page - default = False
          :param orderby: pydal orderby field or list of fields
          :param left: if joining other tables, specify the pydal left expression here
          :param headings: list of headings to be used for list page - if not provided use the field label
          :param create: URL to redirect to for creating records - set to False to not display the button
          :param editable: URL to redirect to for editing records - set to False to not display the button
          :param deletable: URL to redirect to for deleting records - set to False to not display the button
          :param validation: optional validation function to pass to create and edit forms
          :param pre_action_buttons: list of Column instances to include before the standard action buttons
          :param post_action_buttons: list of Column instances to include after the standard action buttons
          :param auto_process: True/False - automatically process the sql for the form - if False, user is
                                responsible for calling process().
          :param T: optional pluralize object
docstring_summary: Grid is a searchable/sortable/pageable grid
docstring_tokens: Grid is a searchable / sortable / pageable grid
function: def __init__(
          self,
          path,
          query,
          search_form=None,
          search_queries=None,
          columns=None,
          field_id=None,
          show_id=False,
          orderby=None,
          left=None,
          headings=None,
          create=True,
          details=True,
          editable=True,
          deletable=True,
          validation=None,
          pre_action_buttons=None,
          post_action_buttons=None,
          auto_process=True,
          rows_per_page=15,
          include_action_button_text=True,
          search_button_text="Filter",
          formstyle=FormStyleDefault,
          grid_class_style=GridClassStyle,
          T=lambda text: text,
          # deprecated
          fields=None,
      ):
          """
          Grid is a searchable/sortable/pageable grid
  
          :param path: The part of the URL to be parsed by this grid
          :param query: the query used to filter the data
          :param search_form: py4web FORM to be included as the search form
          :param search_queries: future use - pass a dict of name and a search query
          :param columns: list of columns to display on the list page, if blank, glean tablename from first query
          :              and use all fields of that table
          :param field_id: the id field of the primary table for the grid - if there are multiple tables (joined)
                              then the table for this field is used as the table for edit/details/delete
          :param show_id: show the record id field on list page - default = False
          :param orderby: pydal orderby field or list of fields
          :param left: if joining other tables, specify the pydal left expression here
          :param headings: list of headings to be used for list page - if not provided use the field label
          :param create: URL to redirect to for creating records - set to False to not display the button
          :param editable: URL to redirect to for editing records - set to False to not display the button
          :param deletable: URL to redirect to for deleting records - set to False to not display the button
          :param validation: optional validation function to pass to create and edit forms
          :param pre_action_buttons: list of Column instances to include before the standard action buttons
          :param post_action_buttons: list of Column instances to include after the standard action buttons
          :param auto_process: True/False - automatically process the sql for the form - if False, user is
                                responsible for calling process().
          :param T: optional pluralize object
          """
  
          # in case the query is a Table instead
          if isinstance(query, query._db.Table):
              query = query._id != None
  
          self.path = path or ""
          self.db = query._db
          self.T = T
          self.param = Param(
              query=query,
              columns=columns or fields,
              field_id=field_id,
              show_id=show_id,
              orderby=orderby,
              left=left,
              search_form=search_form,
              search_queries=search_queries,
              headings=headings or [],
              create=create,
              details=details,
              editable=editable,
              deletable=deletable,
              validation=validation,
              pre_action_buttons=pre_action_buttons,
              post_action_buttons=post_action_buttons,
              rows_per_page=rows_per_page,
              include_action_button_text=include_action_button_text,
              search_button_text=search_button_text,
              formstyle=formstyle,
              grid_class_style=grid_class_style,
              new_sidecar=None,
              new_submit_value=None,
              new_action_button_text="New",
              details_sidecar=None,
              details_submit_value=None,
              details_action_button_text="Details",
              edit_sidecar=None,
              edit_submit_value=None,
              edit_action_button_text="Edit",
              delete_action_button_text="Delete",
          )
  
          #  instance variables that will be computed
          self.action = None
          self.current_page_number = None
          self.endpoint = request.fullpath
          if self.path:
              self.endpoint = self.endpoint[: -len(self.path)].rstrip("/")
          self.hidden_fields = None
          self.form = None
          self.number_of_pages = None
          self.page_end = None
          self.page_start = None
          self.query_parms = request.params
          self.record_id = None
          self.rows = None
          self.tablename = None
          self.total_number_of_rows = None
          self.use_tablename = self.is_join()
          self.formatters = {}
          self.formatters_by_type = copy.copy(Grid.FORMATTERS_BY_TYPE)
          self.attributes_plugin = AttributesPlugin(request)
  
          if auto_process:
              self.process()
function_tokens: def __init__ ( self , path , query , search_form = None , search_queries = None , columns = None , field_id = None , show_id = False , orderby = None , left = None , headings = None , create = True , details = True , editable = True , deletable = True , validation = None , pre_action_buttons = None , post_action_buttons = None , auto_process = True , rows_per_page = 15 , include_action_button_text = True , search_button_text = "Filter" , formstyle = FormStyleDefault , grid_class_style = GridClassStyle , T = lambda text : text , # deprecated fields = None , ) : # in case the query is a Table instead if isinstance ( query , query . _db . Table ) : query = query . _id != None self . path = path or "" self . db = query . _db self . T = T self . param = Param ( query = query , columns = columns or fields , field_id = field_id , show_id = show_id , orderby = orderby , left = left , search_form = search_form , search_queries = search_queries , headings = headings or [ ] , create = create , details = details , editable = editable , deletable = deletable , validation = validation , pre_action_buttons = pre_action_buttons , post_action_buttons = post_action_buttons , rows_per_page = rows_per_page , include_action_button_text = include_action_button_text , search_button_text = search_button_text , formstyle = formstyle , grid_class_style = grid_class_style , new_sidecar = None , new_submit_value = None , new_action_button_text = "New" , details_sidecar = None , details_submit_value = None , details_action_button_text = "Details" , edit_sidecar = None , edit_submit_value = None , edit_action_button_text = "Edit" , delete_action_button_text = "Delete" , ) #  instance variables that will be computed self . action = None self . current_page_number = None self . endpoint = request . fullpath if self . path : self . endpoint = self . endpoint [ : - len ( self . path ) ] . rstrip ( "/" ) self . hidden_fields = None self . form = None self . number_of_pages = None self . page_end = None self . page_start = None self . query_parms = request . params self . record_id = None self . rows = None self . tablename = None self . total_number_of_rows = None self . use_tablename = self . is_join ( ) self . formatters = { } self . formatters_by_type = copy . copy ( Grid . FORMATTERS_BY_TYPE ) self . attributes_plugin = AttributesPlugin ( request ) if auto_process : self . process ( )