"""
Domenstrate how old names remain in reloaded modules
"""

import imp
import sys
import os

module_name = 'test_module'

def make_module(name, dict):
    """ test helper - create module from keywords """
    module = file(name + '.py', 'w')
    for key, value in dict.items():
        module.write('%s = %s\n' % (key, repr(value)))
    module.close()
    
    # Rmove old pyc
    pyc = name + '.pyc'
    if os.path.exists(pyc):
        os.remove(pyc)

def import_module(name):
    """ load module or return the cached module """
    try:
        return sys.modules[name]
    except KeyError:
        return load_module(name)

def load_module(name):
    """ Load module, reloading if it was allready imported """
    fp, pathname, description = imp.find_module(name)
    try:
        module = imp.load_module(name, fp, pathname, description)
    finally:
        if fp: fp.close()
    return module

# Create a module on disk and import
make_module(module_name, {'name': 'nir'})
module = import_module(module_name)
assert module.name == 'nir'

# Change a value in the module and reload
make_module(module_name, {'name': 'naomi'})
module = load_module(module_name)
assert module.name == 'naomi'

# Add a name the module and reload
make_module(module_name, {'name': 'naomi', 'age': 4})
module = load_module(module_name)
assert module.age == 4

# Remove a name from the module and reload
# Old names remain in the module
make_module(module_name, {'name': 'nir'})
module = load_module(module_name)
assert module.age == 4

