@classmethod<EOL><INDENT>def externalCall(cls, method, url, codes=(<NUM_LIT:200>, <NUM_LIT>, <NUM_LIT>, <NUM_LIT>), **kwargs):<DEDENT>
if os.getenv("<STR_LIT>"):<EOL><INDENT>print("<STR_LIT>".format(datetime.now().strftime("<STR_LIT>"), method, url))<EOL>print(pformat(kwargs))<EOL><DEDENT>resp = cls.extSess.request(method, url, **kwargs)<EOL>if os.getenv("<STR_LIT>"):<EOL><INDENT>print("<STR_LIT>".format(datetime.now().strftime("<STR_LIT>"), resp.status_code))<EOL>print(pformat(dict(resp.headers)))<EOL>try:<EOL><INDENT>print(pformat(resp.json()))<EOL><DEDENT>except ValueError:<EOL><INDENT>print(resp.text)<EOL><DEDENT><DEDENT>if resp.status_code not in codes:<EOL><INDENT>raise SkypeApiException("<STR_LIT>".format(resp.status_code, method, url), resp)<EOL><DEDENT>return resp<EOL>
Make a public API call without a connected :class:`.Skype` instance.

The obvious implications are that no authenticated calls are possible, though this allows accessing some public
APIs such as join URL lookups.

Args:
    method (str): HTTP request method
    url (str): full URL to connect to
    codes (int list): expected HTTP response codes for success
    kwargs (dict): any extra parameters to pass to :func:`requests.request`

Returns:
    requests.Response: response object provided by :mod:`requests`

Raises:
    .SkypeAuthException: if an authentication rate limit is reached
    .SkypeApiException: if a successful status code is not received