X-Git-Url: https://mudpy.org/gitweb?a=blobdiff_plain;f=lib%2Fmudpy%2Fmisc.py;h=2edf96697ad4730e495de1e27952d0e8f0e38b78;hb=75a2586b815808fa97e22f0077f2b02d79607a55;hp=d8c863ab80032e103882c5163fdb545ba21c73cb;hpb=c817b9432d6ac5512dc86a266ac033d3078fcdcc;p=mudpy.git diff --git a/lib/mudpy/misc.py b/lib/mudpy/misc.py index d8c863a..2edf966 100644 --- a/lib/mudpy/misc.py +++ b/lib/mudpy/misc.py @@ -5,6 +5,22 @@ # to use, copy, modify, and distribute this software is granted under # terms provided in the LICENSE file distributed with this software. +import codecs +import ctypes +import ctypes.util +import os +import random +import re +import signal +import socket +import sys +import syslog +import time +import traceback +import unicodedata + +import mudpy + class Element: @@ -12,8 +28,6 @@ class Element: def __init__(self, key, universe, filename=None): """Set up a new element.""" - import mudpy.data - import os.path # keep track of our key name self.key = key @@ -169,7 +183,6 @@ class Element: def getlist(self, facet, default=None): """Return values as list type.""" - import mudpy.data if default is None: default = [] value = self.get(facet) @@ -180,7 +193,6 @@ class Element: def getdict(self, facet, default=None): """Return values as dict type.""" - import mudpy.data if default is None: default = {} value = self.get(facet) @@ -370,7 +382,6 @@ class Element: def portals(self): """Map the portal directions for a room to neighbors.""" - import re portals = {} if re.match("""^location:-?\d+,-?\d+,-?\d+$""", self.key): coordinates = [(int(x)) @@ -420,8 +431,6 @@ class Universe: def __init__(self, filename="", load=False): """Initialize the universe.""" - import os - import os.path self.categories = {} self.contents = {} self.default_origins = {} @@ -456,7 +465,6 @@ class Universe: def load(self): """Load universe data from persistent storage.""" - import mudpy.data # the files dict must exist and filename needs to be read-only if not hasattr( @@ -518,7 +526,6 @@ class Universe: def initialize_server_socket(self): """Create and open the listening socket.""" - import socket # need to know the local address and port number for the listener host = self.categories["internal"]["network"].get("host") @@ -574,7 +581,6 @@ class User: def __init__(self): """Default values for the in-memory user variables.""" - import mudpy.telnet self.account = None self.address = "" self.authenticated = False @@ -754,7 +760,6 @@ class User: def adjust_echoing(self): """Adjust echoing to match state menu requirements.""" - import mudpy.telnet if mudpy.telnet.is_enabled(self, mudpy.telnet.TELOPT_ECHO, mudpy.telnet.US): if menu_echo_on(self.state): @@ -780,7 +785,6 @@ class User: prepend_padding=True ): """Send arbitrary text to a connected user.""" - import mudpy.telnet # unless raw mode is on, clean it up all nice and pretty if not raw: @@ -917,8 +921,6 @@ class User: def enqueue_input(self): """Process and enqueue any new input.""" - import mudpy.telnet - import unicodedata # check for some input try: @@ -1059,10 +1061,6 @@ def broadcast(message, add_prompt=True): def log(message, level=0): """Log a message.""" - import codecs - import os.path - import syslog - import time # a couple references we need file_name = universe.categories["internal"]["logging"].get("file") @@ -1176,7 +1174,6 @@ def get_loglines(level, start, stop): def glyph_columns(character): """Convenience function to return the column width of a glyph.""" - import unicodedata if unicodedata.east_asian_width(character) in "FW": return 2 else: @@ -1185,7 +1182,6 @@ def glyph_columns(character): def wrap_ansi_text(text, width): """Wrap text with arbitrary width while ignoring ANSI colors.""" - import unicodedata # the current position in the entire text string, including all # characters, printable or otherwise @@ -1276,7 +1272,6 @@ def wrap_ansi_text(text, width): def weighted_choice(data): """Takes a dict weighted by value and returns a random key.""" - import random # this will hold our expanded list of keys from the data expanded = [] @@ -1292,7 +1287,6 @@ def weighted_choice(data): def random_name(): """Returns a random character name.""" - import random # the vowels and consonants needed to create romaji syllables vowels = [ @@ -1344,9 +1338,6 @@ def random_name(): def replace_macros(user, text, is_input=False): """Replaces macros in text output.""" - import codecs - import mudpy.data - import os.path # third person pronouns pronouns = { @@ -1443,7 +1434,6 @@ def first_word(text, separator=" "): def on_pulse(): """The things which should happen on each pulse, aside from reloads.""" - import time # open the listening socket if it hasn't been already if not hasattr(universe, "listening_socket"): @@ -1518,7 +1508,6 @@ def reload_data(): def check_for_connection(listening_socket): """Check for a waiting connection and return a new user object.""" - import mudpy.telnet # try to accept a new connection try: @@ -1735,7 +1724,6 @@ def get_choice_action(user, choice): def handle_user_input(user): """The main handler, branches to a state-specific handler.""" - import mudpy.telnet # if the user's client echo is off, send a blank line for aesthetics if mudpy.telnet.is_enabled(user, mudpy.telnet.TELOPT_ECHO, @@ -1813,7 +1801,6 @@ def handler_entering_account_name(user): def handler_checking_password(user): """Handle the login account password.""" - import mudpy.password # get the next waiting line of input input_data = user.input_queue.pop(0) @@ -1847,7 +1834,6 @@ def handler_checking_password(user): def handler_entering_new_password(user): """Handle a new password entry.""" - import mudpy.password # get the next waiting line of input input_data = user.input_queue.pop(0) @@ -1888,7 +1874,6 @@ def handler_entering_new_password(user): def handler_verifying_new_password(user): """Handle the re-entered new password for verification.""" - import mudpy.password # get the next waiting line of input input_data = user.input_queue.pop(0) @@ -2104,7 +2089,6 @@ def command_look(actor, parameters): def command_say(actor, parameters): """Speak to others in the same room.""" - import unicodedata # check for replacement macros and escape them parameters = escape_macros(parameters) @@ -2195,7 +2179,6 @@ def command_chat(actor): def command_show(actor, parameters): """Show program data.""" - import re message = "" arguments = parameters.split() if not parameters: @@ -2419,7 +2402,6 @@ def command_delete(actor, parameters): def command_error(actor, input_data): """Generic error for an unrecognized command word.""" - import random # 90% of the time use a generic error if random.randrange(10): @@ -2435,12 +2417,6 @@ def command_error(actor, input_data): def daemonize(universe): """Fork and disassociate from everything.""" - import codecs - import ctypes - import ctypes.util - import os - import os.path - import sys # only if this is what we're configured to do if universe.contents["internal:process"].getboolean("daemon"): @@ -2520,9 +2496,6 @@ def daemonize(universe): def create_pidfile(universe): """Write a file containing the current process ID.""" - import codecs - import os - import os.path pid = str(os.getpid()) log("Process ID: " + pid) file_name = universe.contents["internal:process"].get("pidfile") @@ -2537,8 +2510,6 @@ def create_pidfile(universe): def remove_pidfile(universe): """Remove the file containing the current process ID.""" - import os - import os.path file_name = universe.contents["internal:process"].get("pidfile") if file_name: if not os.path.isabs(file_name): @@ -2549,7 +2520,6 @@ def remove_pidfile(universe): def excepthook(excepttype, value, tracebackdata): """Handle uncaught exceptions.""" - import traceback # assemble the list of errors into a single string message = "".join( @@ -2571,7 +2541,6 @@ def excepthook(excepttype, value, tracebackdata): def sighook(what, where): """Handle external signals.""" - import signal # a generic message message = "Caught signal: " @@ -2596,20 +2565,17 @@ def sighook(what, where): def override_excepthook(): """Redefine sys.excepthook with our own.""" - import sys sys.excepthook = excepthook def assign_sighook(): """Assign a customized handler for some signals.""" - import signal signal.signal(signal.SIGHUP, sighook) signal.signal(signal.SIGTERM, sighook) def setup(): """This contains functions to be performed when starting the engine.""" - import sys # see if a configuration file was specified if len(sys.argv) > 1: