docs: def fql(self, query, args=None, post_args=None):
          """FQL query.
  
          Example query: "SELECT affiliations FROM user WHERE uid = me()"
  
          """
          args = args or {}
          if self.access_token:
              if post_args is not None:
                  post_args["access_token"] = self.access_token
              else:
                  args["access_token"] = self.access_token
          post_data = None if post_args is None else urllib.urlencode(post_args)
  
          """Check if query is a dict and
             use the multiquery method
             else use single query
          """
          if not isinstance(query, basestring):
              args["queries"] = query
              fql_method = 'fql.multiquery'
          else:
              args["query"] = query
              fql_method = 'fql.query'
  
          args["format"] = "json"
  
          try:
              file = urllib2.urlopen("https://api.facebook.com/method/" +
                                     fql_method + "?" + urllib.urlencode(args),
                                     post_data, timeout=self.timeout)
          except TypeError:
              # Timeout support for Python <2.6
              if self.timeout:
                  socket.setdefaulttimeout(self.timeout)
              file = urllib2.urlopen("https://api.facebook.com/method/" +
                                     fql_method + "?" + urllib.urlencode(args),
                                     post_data)
  
          try:
              content = file.read()
              response = _parse_json(content)
              #Return a list if success, return a dictionary if failed
              if type(response) is dict and "error_code" in response:
                  raise GraphAPIError(response)
          except (Exception, e):
              raise e
          finally:
              file.close()
  
          return response