Example #1
0
def startup():
    """ Loads all registered packages that offer the ldmud_efun entry point.

    In the configuration file ~/.ldmud-efuns single efuns can be deactivated
    with entries like:

        [efuns]
        name_of_the_efun = off
    """

    import pkg_resources, traceback, sys, os, configparser
    import ldmud

    config = configparser.ConfigParser()
    config['efuns'] = {}
    config.read(os.path.expanduser('~/.ldmud-efuns'))
    efunconfig = config['efuns']

    for entry_point in pkg_resources.iter_entry_points('ldmud_efun'):
        if efunconfig.getboolean(entry_point.name, True):
            try:
                print("Registering Python efun", entry_point.name)
                ldmud.register_efun(entry_point.name, entry_point.load())
            except:
                traceback.print_exc()
Example #2
0
def register():
    """
    Register all efuns.
    """
    ldmud.register_efun("dbus_call_method", efun_dbus_call_method)
    ldmud.register_efun("dbus_register_signal_listener",
                        efun_dbus_register_signal_listener)
    ldmud.register_efun("dbus_unregister_signal_listener",
                        efun_dbus_unregister_signal_listener)
    ldmud.register_efun("dbus_publish_object", efun_dbus_publish_object)
    ldmud.register_efun("dbus_emit_signal", efun_dbus_emit_signal)
Example #3
0
def reload_modules():
    """
    SYNOPSIS
            void python_reload()

    DESCRIPTION
            Reloads all Python efuns. All packages providing the "ldmud_efuns"
            entry point are loaded. If they were already loaded, they are reloaded.
            Then the entry point is executed to register the efuns.

            Before reloading the function on_reload() is called in the module.

    SEE ALSO
            python_efun_help(E)
    """
    importlib.reload(site)
    ws = pkg_resources.WorkingSet()
    modules = dict(sys.modules)
    reloaded = set()

    config = configparser.ConfigParser()
    config['efuns'] = {}
    config.read(os.path.expanduser('~/.ldmud-efuns'))
    efunconfig = config['efuns']

    for entry_point in ws.iter_entry_points('ldmud_efun'):
        if efunconfig.getboolean(entry_point.name, True):
            # Remove the corresponding modules from sys.modules
            # so they will be reloaded.
            names = entry_point.module_name.split('.')
            for module in ('.'.join(names[:pos]) for pos in range(len(names), 0, -1)):
                if not module in modules or module in reloaded:
                    break

                try:
                    sys.modules[module].on_reload()
                except:
                    pass

                del sys.modules[module]
                reloaded.add(module)
                print("Reload module", module)

            ldmud.register_efun(entry_point.name, entry_point.load())
Example #4
0
        except SystemExit:
            prompt = None
        except:
            self.showtraceback()
            prompt = sys.ps1
        finally:
            sys.stdout = oldout
            sys.stderr = olderr

        text = self.output.getvalue()
        self.output.seek(0)
        self.output.truncate(0)
        return (text, prompt,)

def console(line = ""):
    ob = ldmud.efuns.this_object()
    obname = ldmud.efuns.object_name(ob)

    if obname in consoles:
        console = consoles[obname]
    else:
        console = LDMudConsole(len(line) == 0)
        consoles[obname] = console

    (output, prompt) = console.input(line)
    if prompt is None:
        del consoles[obname]
    return ldmud.Array((output, prompt,))

ldmud.register_efun("python_console", console)
Example #5
0
# Test of the garbage collection.
lpc_value = None


def python_set(val):
    """Remember the value <val>."""
    global lpc_value
    lpc_value = val


def python_get():
    """Return the remembered value."""
    return lpc_value


ldmud.register_efun("python_test", python_test)
ldmud.register_efun("python_return", python_return)
ldmud.register_efun("python_get", python_get)
ldmud.register_efun("python_set", python_set)

ldmud.register_efun("abs", lambda x: x * 2)
ldmud.register_efun("unregister_abs", lambda: ldmud.unregister_efun("abs"))

# Test of the hooks
num_hb = 0


def hb_hook():
    global num_hb
    num_hb += 1
Example #6
0
    testob_var = ob.variables.var_testob


def python_check_testob() -> bool:
    """Verify the lfun and variable object from python_remember_testob()."""
    global testob_lfun, testob_var
    if testob_lfun() != "f_testob":
        print("testob->fun_testob() returned wrong result.\n", file=sys.stderr)
        return False
    if testob_var.value != "v_testob":
        print("testob->var_testob has wrong value.\n", file=sys.stderr)
        return False
    return True


ldmud.register_efun("python_test", python_test)
ldmud.register_efun("python_return", python_return)
ldmud.register_efun("python_get", python_get)
ldmud.register_efun("python_set", python_set)
ldmud.register_efun("python_error", python_error)
ldmud.register_efun("python_gc", python_gc)
ldmud.register_efun("python_typecheck", python_typecheck)
ldmud.register_efun("python_remember_testob", python_remember_testob)
ldmud.register_efun("python_check_testob", python_check_testob)

ldmud.register_efun("abs", lambda x: x * 2)
ldmud.register_efun("unregister_abs", lambda: ldmud.unregister_efun("abs"))

# Test of the hooks
num_hb = 0
Example #7
0
def register():
    ldmud.register_efun("python_reload", reload_modules)
Example #8
0
def register():
    ldmud.register_efun("wrap", efun_wrap)
    ldmud.register_efun("wrap_say", efun_wrap_say)
    ldmud.register_efun("left", efun_left)
Example #9
0
# Test of the garbage collection.
lpc_value = None
def python_set(val):
    """Remember the value <val>."""
    global lpc_value
    lpc_value = val

def python_get():
    """Return the remembered value."""
    return lpc_value

def python_error():
    """Make an exception."""
    raise Exception("Testing")

ldmud.register_efun("python_test", python_test)
ldmud.register_efun("python_return", python_return)
ldmud.register_efun("python_get", python_get)
ldmud.register_efun("python_set", python_set)
ldmud.register_efun("python_error", python_error)

ldmud.register_efun("abs", lambda x: x*2)
ldmud.register_efun("unregister_abs", lambda: ldmud.unregister_efun("abs"))

# Test of the hooks
num_hb = 0
def hb_hook():
    global num_hb
    num_hb += 1

ob_list = []
Example #10
0
def register():
    ldmud.register_efun("python_efun_help", python_efun_help)
def register():
    ldmud.register_efun('make_interactive'      , control.efun_make_interactive)
    ldmud.register_efun('users'                 , control.efun_users)
    ldmud.register_efun('send_interactive_input', input.efun_send_interactive_input)
    ldmud.register_efun('input_to'              , input.efun_input_to)
    ldmud.register_efun('find_input_to'         , input.efun_find_input_to)
    ldmud.register_efun('input_to_info'         , input.efun_input_to_info)
    ldmud.register_efun('remove_input_to'       , input.efun_remove_input_to)
    ldmud.register_efun('caller_stack'          , input.efun_caller_stack)
    ldmud.register_efun('this_interactive'      , input.efun_this_interactive)
    ldmud.register_efun('interactive'           , interactive.efun_interactive)
    ldmud.register_efun('remove_interactive'    , interactive.efun_remove_interactive)
    ldmud.register_efun('exec'                  , interactive.efun_exec)
    ldmud.register_efun('configure_interactive' , interactive.efun_configure_interactive)
    ldmud.register_efun('interactive_info'      , interactive.efun_interactive_info)
    ldmud.register_efun('object_info'           , interactive.efun_object_info)
    ldmud.register_efun('printf'                , message.efun_printf)
    ldmud.register_efun('write'                 , message.efun_write)
    ldmud.register_efun('say'                   , message.efun_say)
    ldmud.register_efun('tell_room'             , message.efun_tell_room)
    ldmud.register_efun('tell_object'           , message.efun_tell_object)
    ldmud.register_efun('binary_message'        , message.efun_binary_message)
    ldmud.register_efun('snoop'                 , message.efun_snoop)
Example #12
0
        text = self.output.getvalue()
        self.output.seek(0)
        self.output.truncate(0)
        return (
            text,
            prompt,
        )


def console(line=""):
    ob = ldmud.efuns.this_object()
    obname = ldmud.efuns.object_name(ob)

    if obname in consoles:
        console = consoles[obname]
    else:
        console = LDMudConsole(len(line) == 0)
        consoles[obname] = console

    (output, prompt) = console.input(line)
    if prompt is None:
        del consoles[obname]
    return ldmud.Array((
        output,
        prompt,
    ))


ldmud.register_efun("python_console", console)
Example #13
0
def register():
    ldmud.register_efun("json_serialize", efun_json_serialize)
    ldmud.register_efun("json_parse", efun_json_parse)
Example #14
0
sys.path.insert(0, os.path.dirname(os.path.realpath(__file__)))

# If you wan't to add modules during runtime
# add an efun to supplement this list.
modules = ["console", "echo"]

def reload_modules():
    # For Python >= 3.4 use importlib
    import imp

    for mod in modules:
        if mod in sys.modules:
            modob = sys.modules[mod]
            try:
                modob.on_reload()
            except:
                pass
            imp.reload(modob)
        else:
            fp, path, desc = imp.find_module(mod)

            try:
                imp.load_module(mod, fp, path, desc)
            finally:
                if fp:
                    fp.close()

ldmud.register_efun("python_reload", reload_modules)

import console, echo