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()
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)
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())
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)
# 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
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
def register(): ldmud.register_efun("python_reload", reload_modules)
def register(): ldmud.register_efun("wrap", efun_wrap) ldmud.register_efun("wrap_say", efun_wrap_say) ldmud.register_efun("left", efun_left)
# 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 = []
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)
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)
def register(): ldmud.register_efun("json_serialize", efun_json_serialize) ldmud.register_efun("json_parse", efun_json_parse)
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