"""
Global and local dictionaries, + initialization/utility functions.
"""

global_dict = {}


def init_global_dict():
    """
    Initialize global dictionary with twill3 commands.

    This must be done after all the other modules are loaded, so that all
    of the commands are already defined.
    """
    exec("from twill3.commands import *", global_dict)
    import twill3.commands
    command_list = twill3.commands.__all__

    import twill3.parse
    twill3.parse.command_list.extend(command_list)


# local dictionaries.
_local_dict_stack = []


###

# local dictionary management functions.

def new_local_dict():
    """
    Initialize a new local dictionary & push it onto the stack.
    """
    d = {}
    _local_dict_stack.append(d)

    return d


def pop_local_dict():
    """
    Get rid of the current local dictionary.
    """
    _local_dict_stack.pop()


###

def get_twill_glocals():
    """
    Return global dict & current local dictionary.
    """
    global global_dict, _local_dict_stack
    assert global_dict is not None, "must initialize global namespace first!"

    if len(_local_dict_stack) == 0:
        new_local_dict()

    return global_dict, _local_dict_stack[-1]

###
