code: def decode_timeseries(self, resp_ttb, tsobj,
                            convert_timestamp=False):
          
          if resp_ttb is None:
              return tsobj
  
          self.maybe_err_ttb(resp_ttb)
  
          # NB: some queries return a BARE 'tsqueryresp' atom
          # catch that here:
          if resp_ttb == tsqueryresp_a:
              return tsobj
  
          # The response atom is the first element in the response tuple
          resp_a = resp_ttb[0]
          if resp_a == tsputresp_a:
              return
          elif resp_a == tsgetresp_a or resp_a == tsqueryresp_a:
              resp_data = resp_ttb[1]
              if len(resp_data) == 0:
                  return
              elif len(resp_data) == 3:
                  resp_colnames = resp_data[0]
                  resp_coltypes = resp_data[1]
                  tsobj.columns = self.decode_timeseries_cols(
                          resp_colnames, resp_coltypes)
                  resp_rows = resp_data[2]
                  tsobj.rows = []
                  for resp_row in resp_rows:
                      tsobj.rows.append(
                          self.decode_timeseries_row(resp_row, resp_coltypes,
                                                     convert_timestamp))
              else:
                  raise RiakError(
                      "Expected 3-tuple in response, got: {}".format(resp_data))
          else:
              raise RiakError("Unknown TTB response type: {}".format(resp_a))
docs: Fills an TsObject with the appropriate data and
          metadata from a TTB-encoded TsGetResp / TsQueryResp.
  
          :param resp_ttb: the decoded TTB data
          :type resp_ttb: TTB-encoded tsqueryrsp or tsgetresp
          :param tsobj: a TsObject
          :type tsobj: TsObject
          :param convert_timestamp: Convert timestamps to datetime objects
          :type tsobj: boolean