human
Complete the below
def glance(msg, flavor='chat', long=False):

    ''''Extract "headline" info about a message.
    Use parameter ``long`` to control whether a short or long tuple is returned.
    When ``flavor`` is ``chat``
    (``msg`` being a `Message <https://core.telegram.org/bots/api#message>`_ object):
    - short: (content_type, ``msg[\'chat\'][\'type\']``, ``msg[\'chat\'][\'id\']``)
    - long: (content_type, ``msg[\'chat\'][\'type\']``, ``msg[\'chat\'][\'id\']``, ``msg[\'date\']``, ``msg[\'message_id\']``)
    *content_type* can be: ``text``, ``audio``, ``document``, ``game``, ``photo``, ``sticker``, ``video``, ``voice``,
    ``video_note``, ``contact``, ``location``, ``venue``, ``new_chat_member``, ``left_chat_member``, ``new_chat_title``,
    ``new_chat_photo``, ``delete_chat_photo``, ``group_chat_created``, ``supergroup_chat_created``,
    ``channel_chat_created``, ``migrate_to_chat_id``, ``migrate_from_chat_id``, ``pinned_message``,
    ``new_chat_members``, ``invoice``, ``successful_payment``.
    When ``flavor`` is ``callback_query``
    (``msg`` being a `CallbackQuery <https://core.telegram.org/bots/api#callbackquery>`_ object):
    - regardless: (``msg[\'id\']``, ``msg[\'from\'][\'id\']``, ``msg[\'data\']``)
    When ``flavor`` is ``inline_query``
    (``msg`` being a `InlineQuery <https://core.telegram.org/bots/api#inlinequery>`_ object):
    - short: (``msg[\'id\']``, ``msg[\'from\'][\'id\']``, ``msg[\'query\']``)
    - long: (``msg[\'id\']``, ``msg[\'from\'][\'id\']``, ``msg[\'query\']``, ``msg[\'offset\']``)
    When ``flavor`` is ``chosen_inline_result``
    (``msg`` being a `ChosenInlineResult <https://core.telegram.org/bots/api#choseninlineresult>`_ object):
    - regardless: (``msg[\'result_id\']``, ``msg[\'from\'][\'id\']``, ``msg[\'query\']``)
    When ``flavor`` is ``shipping_query``
    (``msg`` being a `ShippingQuery <https://core.telegram.org/bots/api#shippingquery>`_ object):
    - regardless: (``msg[\'id\']``, ``msg[\'from\'][\'id\']``, ``msg[\'invoice_payload\']``)
    When ``flavor`` is ``pre_checkout_query``
    (``msg`` being a...'''

Write me a the Python program you requested?
assistant
#Here is the Python program you requested.
    def gl_chat():
        content_type = _find_first_key(msg, all_content_types)
        if long:
            return (content_type, msg['chat']['type'], msg['chat']['id'], msg['date'], msg['message_id'])
        else:
            return (content_type, msg['chat']['type'], msg['chat']['id'])
    def gl_callback_query():
        return (msg['id'], msg['from']['id'], msg['data'])
    def gl_inline_query():
        if long:
            return (msg['id'], msg['from']['id'], msg['query'], msg['offset'])
        else:
            return (msg['id'], msg['from']['id'], msg['query'])
    def gl_chosen_inline_result():
        return (msg['result_id'], msg['from']['id'], msg['query'])
    def gl_shipping_query():
        return (msg['id'], msg['from']['id'], msg['invoice_payload'])
    def gl_pre_checkout_query():
        if long:
            return (msg['id'], msg['from']['id'], msg['invoice_payload'], msg['currency'], msg['total_amount'])
        else:
            return (msg['id'], msg['from']['id'], msg['invoice_payload'])
    try:
        fn = {'chat': gl_chat, 'callback_query': gl_callback_query, 'inline_query': gl_inline_query, 'chosen_inline_result': gl_chosen_inline_result, 'shipping_query': gl_shipping_query, 'pre_checkout_query': gl_pre_checkout_query}[flavor]
    except KeyError:
        raise exception.BadFlavor(flavor)
    return fn()