nodes: 0, module; 1, function_definition; 2, function_name:ls; 3, parameters; 4, block; 5, identifier:self; 6, default_parameter; 7, expression_statement; 8, expression_statement; 9, expression_statement; 10, expression_statement; 11, return_statement; 12, identifier:startswith; 13, None; 14, string:'''
          List all cubes available to the calling client.
  
          :param startswith: string to use in a simple "startswith" query filter
          :returns list: sorted list of cube names
          '''; 15, call; 16, assignment; 17, assignment; 18, identifier:tables; 19, attribute; 20, argument_list; 21, identifier:startswith; 22, call; 23, identifier:tables; 24, call; 25, identifier:logger; 26, identifier:info; 27, binary_operator:'Listing cubes starting with "%s")' % startswith; 28, identifier:unicode; 29, argument_list; 30, identifier:sorted; 31, generator_expression; 32, string:'Listing cubes starting with "%s")'; 33, identifier:startswith; 34, boolean_operator; 35, identifier:name; 36, for_in_clause; 37, if_clause; 38, identifier:startswith; 39, string; 40, identifier:name; 41, attribute; 42, call; 43, identifier:self; 44, identifier:db_tables; 45, attribute; 46, argument_list; 47, identifier:name; 48, identifier:startswith; 49, identifier:startswith
code: def ls(self, startswith=None):
          '''
          List all cubes available to the calling client.
  
          :param startswith: string to use in a simple "startswith" query filter
          :returns list: sorted list of cube names
          '''
          logger.info('Listing cubes starting with "%s")' % startswith)
          startswith = unicode(startswith or '')
          tables = sorted(name for name in self.db_tables
                          if name.startswith(startswith))
          return tables