def init_database(argv): try: url = argv[1] except IndexError: from pycopia import basicconfig cf = basicconfig.get_config("database3.conf") url = cf["DATABASE_URL"] create_db(url) models.connect(url) database = models.database database.create_tables( [getattr(models, name) for name in models.TABLES + models._ASSOC_TABLES], safe=False) try: do_schedules(database) do_functional_areas(database) do_attribute_types(database) do_env_attribute_types(database) do_language(database) do_country(database) do_interface_types(database) do_default_environment(database) do_default_group(database) do_function(database) do_corporations(database) do_riskcategory(database) do_config(database) finally: database.close()
def init_database(argv): try: url = argv[1] except IndexError: from pycopia import basicconfig cf = basicconfig.get_config("database.conf") url = cf["DATABASE_URL"] create_db(url) db = create_engine(unicode(url)) tables.metadata.bind = db tables.metadata.create_all() db.close() SM = models.create_sessionmaker(url) dbsession = SM() try: do_schedules(dbsession) do_functional_areas(dbsession) do_attribute_types(dbsession) do_env_attribute_types(dbsession) do_language(dbsession) do_country(dbsession) do_equipment_category(dbsession) do_interface_types(dbsession) do_default_environment(dbsession) do_default_group(dbsession) do_software_category(dbsession) do_capability_groups(dbsession) do_capability_types(dbsession) do_corporations(dbsession) do_riskcategory(dbsession) do_config(dbsession) finally: dbsession.close()
def create_session(url=None): if url is None: cf = basicconfig.get_config("database.conf") url = cf["DATABASE_URL"] db = create_engine(url) tables.metadata.bind = db return sessionmaker(bind=db, autoflush=False)
def set_p4_config(): from pycopia import basicconfig p4conf = basicconfig.get_config("pyro4.conf") pcf = Pyro4.config for name in pcf.__slots__: setattr(pcf, name, p4conf.get(name, getattr(pcf, name)))
def storaged(argv): """The Droid storage server. storaged [-h <serverhost>] [-p <serverport>] [-d <databasefile>] [-l <logfile>] [-n] [-?] where: -h <host> is the server hostname to bind to. -p <port> is the TCP port to use (other than the default). -d <filename> specifies the Durus file to use for the database. -l <logfilename> file name to use for logging. -n Do NOT become a daemon, stay in foreground (for debugging). -? This help screen. Uses the configuration file /etc/droid/storage.conf to obtain the default option values. """ import getopt from pycopia import daemonize from pycopia import basicconfig cf = basicconfig.get_config( os.path.join("/", "etc", "droid", "storage.conf")) host = cf.get("host", DEFAULT_HOST) port = cf.get("port", DEFAULT_PORT) DBFILE = os.path.expandvars(cf.get("dbfile")) LOGFILE = os.path.expandvars(cf.get("dblog")) del cf do_daemon = True try: optlist, args = getopt.getopt(argv[1:], "d:l:h:p:n?") except getopt.GetoptError: print storaged.__doc__ sys.exit(2) for opt, optarg in optlist: if opt == "-d": DBFILE = optarg elif opt == "-l": LOGFILE = optarg elif opt == "-h": host = optarg elif opt == "-p": port = int(optarg) elif opt == "-n": do_daemon = False elif opt == "-?": print storaged.__doc__ return 2 if do_daemon: daemonize.daemonize(pidfile="/var/run/%s.pid" % (os.path.basename(argv[0]), )) try: startDurus(host, port, LOGFILE, DBFILE) except KeyboardInterrupt: return
def _get_secret(): global SECRET_KEY try: cf = basicconfig.get_config("auth.conf") except basicconfig.ConfigReadError: raise ModelError("No auth.conf config file found.") else: SECRET_KEY = cf.SECRET_KEY
def set_p4_config(): from pycopia import basicconfig p4conf = basicconfig.get_config("pyro4.conf") pcf = Pyro4.config for name in pcf.__slots__: setattr(pcf, name, p4conf.get(name, getattr(pcf, name))) # name server specific overrides pcf.DOTTEDNAMES = False
def storaged(argv): """The Pycopia storage server. storaged [-h <serverhost>] [-p <serverport>] [-d <databasefile>] [-l <logfile>] [-n] [-?] where: -h is the server hostname to bind to. -p is the TCP port to use (other than the default) -d specifies the Durus file to use for the database. -l Log file name to use for logging. -n Do NOT become a daemon, stay in foreground (for debugging) -? This help screen. """ import getopt from pycopia import basicconfig cf = basicconfig.get_config("storage.conf") host = cf.get("host", DEFAULT_HOST) port = cf.get("port", DEFAULT_PORT) DBFILE = os.path.expandvars(cf.get("dbfile")) LOGFILE = os.path.expandvars(cf.get("dblog")) del cf do_daemon = True try: optlist, args = getopt.getopt(argv[1:], "d:l:h:p:n?") except getopt.GetoptError: print storaged.__doc__ sys.exit(2) for opt, optarg in optlist: if opt == "-d": DBFILE = optarg elif opt == "-l": LOGFILE = optarg elif opt == "-h": host = optarg elif opt == "-p": port = int(optarg) elif opt == "-n": do_daemon = False elif opt == "-?": print storaged.__doc__ return 2 if do_daemon: from pycopia import daemonize daemonize.daemonize() try: start_durus(host, port, LOGFILE, DBFILE) except KeyboardInterrupt: return
def _get_server_config(servername): logfilename = "/var/log/%s.log" % (servername,) cffilename = "/etc/pycopia/%s.conf" % (servername,) pidfile="/var/run/%s.pid" % (servername,) socketpath = "/tmp/%s.sock" % (servername,) config = basicconfig.get_config(cffilename, CONFIGFILE=cffilename, PIDFILE=pidfile, SOCKETPATH=socketpath, LOGFILENAME=logfilename, SERVERNAME=servername) return config
def GetClient(config=None): """Get a Durus ClientStorage. This gets parameters from the external configuration file. The "host" and "port" values are used from this file. The file is /etc/droid/storage.conf. """ if config is None: from pycopia import basicconfig config = basicconfig.get_config( os.path.join("/", "etc", "droid", "storage.conf")) host = config.get("host", DEFAULT_HOST) port = config.get("port", DEFAULT_PORT) return DBClient(host, port)
def main(argv): global CF CF = basicconfig.get_config("/etc/pycopia/voicemail.conf") if CF.get("LOGFILE"): lf = logfile.open(CF.LOGFILE) else: lf = None rv = 1 try: rv = answering_machine(lf) finally: if lf: lf.close() return rv
def GetStorage(config=None): """Get a Durus FileStorage. This gets parameters from the external configuration file. The "dbfile" value is used from this file. The file is /etc/droid/storage.conf. """ if config is None: from pycopia import basicconfig config = basicconfig.get_config( os.path.join("/", "etc", "droid", "storage.conf")) filename = config.get("dbfile") if filename: return DBFile(os.path.expandvars(os.path.expanduser(filename))) else: raise ValueError, "no file name supplied or found in configuration."
def pytrapd(argv): """pytrapd [-d] Run a SNMP trap handler and email you on reciept of a trap. """ from pycopia import asyncio if len(argv) > 1 and argv[1] == "-d": import daemonize daemonize.daemonize() cf = basicconfig.get_config("./trapserver.conf") mailer = TrapMailer(cf) handlers = [mailer] dispatcher = traps.get_dispatcher(handlers) asyncio.poller.loop()
def pytrapd(argv): """pytrapd [-d] Run a SNMP trap handler and email you on reciept of a trap. """ from pycopia import asyncio if len(argv) > 1 and argv[1] == "-d": import daemonize daemonize.daemonize() cf = basicconfig.get_config("trapserver") mailer = TrapMailer(cf) handlers = [mailer] dispatcher = traps.get_dispatcher(handlers) asyncio.poller.loop()
def init_database(argv): try: url = argv[1] except IndexError: from pycopia import basicconfig cf = basicconfig.get_config("database.conf") url = cf["DATABASE_URL"] Maker = models.create_session(url) dbsession = Maker() try: do_config(dbsession) do_groups(dbsession) do_users(dbsession) do_assign(dbsession) finally: dbsession.close()
def get_config(extrafiles=None, initdict=None, **kwargs): """get_config([extrafiles=], [initdict=], [**kwargs]) Returns a RootContainer instance containing configuration parameters. An extra dictionary may be merged in with the 'initdict' parameter. And finally, extra options may be added with keyword parameters when calling this. """ from pycopia import socket from pycopia import basicconfig SOURCES = [] SOURCES.append(os.path.join(os.environ["HOME"], ".pycopiarc")) dbcf = basicconfig.get_config("storage.conf") if type(extrafiles) is str: extrafiles = [extrafiles] if extrafiles: FILES = SOURCES + extrafiles else: FILES = SOURCES try: # try getting the server. If not available, try # opening the data file directly. db = get_client(dbcf) except socket.SocketError: db = get_database(dbcf) cache = AttrDict() cf = db.get_root(cache) # copy default flags to cache so the don't get altered cache.flags = cf["flags"].copy() # initialize cache items to default values, so they can be altered at runtime. cf.update(cf["default"]) for f in FILES: if os.path.isfile(f): cf.mergefile(f) if type(initdict) is dict: cf.evalupdate(initdict) cf.update(kwargs) return cf
def main(argv): import getopt daemonize = True frontend = True dname = None servername = os.path.basename(argv[0]) logfilename = "/var/log/%s.log" % (servername,) pidfilename = "/var/run/%s.pid" % (servername,) cffile = SITE_CONFIG try: optlist, args = getopt.getopt(argv[1:], "?hdnNl:p:f:D:") except getopt.GetoptError: print _doc % (servername,) return for opt, optarg in optlist: if opt in ("-?", "-h"): print _doc % (servername,) return 2 elif opt == "-l": logfilename = optarg elif opt == "-n": daemonize = False elif opt == "-N": frontend = False elif opt == "-D": dname = optarg elif opt == "-f": cffile = optarg elif opt == "-p": pidfilename = optarg elif opt == "-d": from pycopia import autodebug # Sets up auto debugging handler. glbl = {"FQDN": dname or socket.get_fqdn()} config = basicconfig.get_config(cffile, globalspace=glbl) config.SERVERNAME = servername config.LOGFILENAME = logfilename config.PIDFILE = pidfilename config.DAEMON = daemonize config.USEFRONTEND = frontend config.ARGV = args if not args: return status(config) cmd = args[0] if cmd.startswith("stat"): return status(config) elif cmd.startswith("set"): return setup(config) elif cmd.startswith("star"): return start(config) elif cmd.startswith("stop"): return stop(config) elif cmd.startswith("rob"): return robots(config) elif cmd.startswith("che"): return check(config) else: print _doc % (servername,) return 2
def run_server(argv): username = None do_daemon = True debug = False killserver = False try: optlist, longopts, args = getopt.getopt(argv[1:], "dnh?kl:f:p:s:") except getopt.GetoptError: print(run_server._doc.format(procname=argv[0])) return if len(args) > 0: servername = args[0] else: servername = os.path.basename(argv[0]) logfilename = "/var/log/{}.log".format(servername) cffilename = "/etc/pycopia/{}.conf".format(servername) pidfile = "/var/run/{}.pid".format(servername) socketpath = '/tmp/{}.sock'.format(servername) for opt, optarg in optlist: if opt == "-n": do_daemon = False elif opt == "-k": killserver = True elif opt == "-d": from pycopia import autodebug # noqa debug = True elif opt == "-u": username = optarg elif opt == "-l": logfilename = optarg elif opt == "-f": cffilename = optarg elif opt == "-p": pidfile = optarg elif opt == "-s": socketpath = optarg elif opt in ("-h", "-?"): print(run_server._doc.format(procname=argv[0])) return 2 try: config = basicconfig.get_config(cffilename, CONFIGFILE=cffilename, PIDFILE=pidfile, SOCKETPATH=socketpath, LOGFILENAME=logfilename, DEBUG=debug, SERVERNAME=servername) except: ex, val, tb = sys.exc_info() logging.warn("Could not get server config: {} ({})".format( ex.__name__, val)) return 1 config.update(longopts) if username: config.USERNAME = username if killserver: kill_server(config) return 0 if check4server(config): logging.warn("Server {!r} already running on socket {!r}.".format( servername, socketpath)) return 1 if do_daemon and not debug: from pycopia import daemonize from pycopia import logfile lf = logfile.ManagedStdio(logfilename) daemonize.daemonize(lf, pidfile=pidfile) else: # for controller with open(pidfile, "w") as fo: fo.write("{}\n".format(os.getpid())) server = get_server(config) return int(server.run())
def DEBUG(*args, **kwargs): """Can use this instead of 'print' when debugging. """ parts = [] for name, value in kwargs.items(): parts.append("{}: {!r}".format(name, value)) print("DEBUG", " ".join(str(o) for o in args), ", ".join(parts), file=sys.stderr) # config file is optional here try: cf = basicconfig.get_config("logging.conf") except basicconfig.ConfigReadError as err: warn(err, "Using default values.") FACILITY = "USER" LEVEL = "WARNING" else: FACILITY = cf.FACILITY LEVEL = cf.LEVEL del cf del basicconfig syslog.openlog(sys.argv[0].split("/")[-1], syslog.LOG_PID, getattr(syslog, "LOG_" + FACILITY)) _oldloglevel = syslog.setlogmask(
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Lesser General Public License for more details. """ The Client for Remote controllers. """ __all__ = ["get_remote", "remote_copy"] import sys, os import Pyro.util import Pyro.core from pycopia import basicconfig cf = basicconfig.get_config("remote.conf") Pyro.config.PYRO_NS_HOSTNAME = cf.nameserver del cf, basicconfig # some platform specific stuff. Should be minimal if sys.platform == "linux2": from pycopia.remote.PosixClient import * elif sys.platform == "cygwin": from pycopia.remote.PosixClient import * elif sys.platform == "win32": from pycopia.remote.WindowsClient import * del sys
def get_site_config(filename=SITE_CONFIG): return basicconfig.get_config(filename, FQDN=socket.getfqdn())
def get_config(): from pycopia import basicconfig return basicconfig.get_config("ezmail.conf")
def get_site_config(filename=SITE_CONFIG): glbl = {"FQDN": socket.get_fqdn()} return basicconfig.get_config(filename, globalspace=glbl)
def _GetConfig(): global _config if _config is None: from pycopia import basicconfig _config = basicconfig.get_config("/etc/droid/powerdroid.conf") return _config
def get_site_config(filename=SITE_CONFIG): return basicconfig.get_config(filename)
def run_server(argv): username = None do_daemon = True debug = False killserver = False try: optlist, args = getopt.getopt(argv[1:], "dnh?kl:f:p:s:") except getopt.GetoptError: print run_server._doc % (argv[0],) return if len(args) > 0: servername = args[0] else: servername = os.path.basename(argv[0]) logfilename = "/var/log/%s.log" % (servername,) cffilename = "/etc/pycopia/%s.conf" % (servername,) pidfile="/var/run/%s.pid" % (servername,) socketpath = '/tmp/%s.sock' % (servername,) for opt, optarg in optlist: if opt == "-n": do_daemon = False elif opt == "-k": killserver = True elif opt == "-d": debug = True elif opt == "-u": username = optarg elif opt == "-l": logfilename = optarg elif opt == "-f": cffilename = optarg elif opt == "-p": pidfile = optarg elif opt == "-s": socketpath = optarg elif opt in ("-h", "-?"): print run_server._doc % (argv[0],) return 2 try: config = basicconfig.get_config(cffilename, CONFIGFILE=cffilename, PIDFILE=pidfile, SOCKETPATH=socketpath, LOGFILENAME=logfilename, DEBUG=debug, SERVERNAME=servername) except: ex, val, tb = sys.exc_info() print >>sys.stderr, "Could not get server config: %s (%s)" % (ex, val) return 1 if username: config.USERNAME = username if killserver: kill_server(config) return 0 if check4server(config): print >>sys.stderr, "Server %r already running on socket %r." % (servername, socketpath) return 1 if do_daemon and not debug: from pycopia import daemonize from pycopia import logfile lf = logfile.ManagedStdio(logfilename) daemonize.daemonize(lf, pidfile=pidfile) else: # for controller fo = open(pidfile, "w") fo.write("%s\n" % (os.getpid(),)) fo.close() del fo server = get_server(config) return int(server.run())
def run_server(argv): username = None do_daemon = True debug = False killserver = False try: optlist, args = getopt.getopt(argv[1:], "dnh?kl:f:p:s:") except getopt.GetoptError: print(run_server._doc % (argv[0], )) return if len(args) > 0: servername = args[0] else: servername = os.path.basename(argv[0]) logfilename = "/var/log/%s.log" % (servername, ) cffilename = "/etc/pycopia/%s.conf" % (servername, ) pidfile = "/var/run/%s.pid" % (servername, ) socketpath = '/tmp/%s.sock' % (servername, ) for opt, optarg in optlist: if opt == "-n": do_daemon = False elif opt == "-k": killserver = True elif opt == "-d": debug = True elif opt == "-u": username = optarg elif opt == "-l": logfilename = optarg elif opt == "-f": cffilename = optarg elif opt == "-p": pidfile = optarg elif opt == "-s": socketpath = optarg elif opt in ("-h", "-?"): print(run_server._doc % (argv[0], )) return 2 try: config = basicconfig.get_config(cffilename, CONFIGFILE=cffilename, PIDFILE=pidfile, SOCKETPATH=socketpath, LOGFILENAME=logfilename, DEBUG=debug, SERVERNAME=servername) except: ex, val, tb = sys.exc_info() logging.warn("Could not get server config: %s (%s)" % (ex, val)) return 1 if username: config.USERNAME = username if killserver: kill_server(config) return 0 if check4server(config): logging.warn("Server %r already running on socket %r." % (servername, socketpath)) return 1 if do_daemon and not debug: from pycopia import daemonize from pycopia import logfile lf = logfile.ManagedStdio(logfilename) daemonize.daemonize(lf, pidfile=pidfile) else: # for controller fo = open(pidfile, "w") fo.write("%s\n" % (os.getpid(), )) fo.close() del fo server = get_server(config) return int(server.run())
def warn(*args): print(*args, file=sys.stderr) def DEBUG(*args, **kwargs): """Can use this instead of 'print' when debugging. """ parts = [] for name, value in kwargs.items(): parts.append("{}: {!r}".format(name, value)) print("DEBUG", " ".join(str(o) for o in args), ", ".join(parts), file=sys.stderr) # config file is optional here try: cf = basicconfig.get_config("logging.conf") except basicconfig.ConfigReadError as err: warn(err, "Using default values.") FACILITY = "USER" LEVEL = "WARNING" else: FACILITY = cf.FACILITY LEVEL = cf.LEVEL del cf del basicconfig syslog.openlog(sys.argv[0].split("/")[-1], syslog.LOG_PID, getattr(syslog, "LOG_" + FACILITY)) _oldloglevel = syslog.setlogmask(syslog.LOG_UPTO(getattr(syslog, "LOG_" + LEVEL)))
def run_server(argv): username = None do_daemon = True debug = False killserver = False try: optlist, longopts, args = getopt.getopt(argv[1:], "dnh?kl:f:p:s:") except getopt.GetoptError: print(run_server._doc.format(procname=argv[0])) return if len(args) > 0: servername = args[0] else: servername = os.path.basename(argv[0]) logfilename = "/var/log/{}.log".format(servername) cffilename = "/etc/pycopia/{}.conf".format(servername) pidfile = "/var/run/{}.pid".format(servername) socketpath = '/tmp/{}.sock'.format(servername) for opt, optarg in optlist: if opt == "-n": do_daemon = False elif opt == "-k": killserver = True elif opt == "-d": from pycopia import autodebug # noqa debug = True elif opt == "-u": username = optarg elif opt == "-l": logfilename = optarg elif opt == "-f": cffilename = optarg elif opt == "-p": pidfile = optarg elif opt == "-s": socketpath = optarg elif opt in ("-h", "-?"): print(run_server._doc.format(procname=argv[0])) return 2 try: config = basicconfig.get_config(cffilename, CONFIGFILE=cffilename, PIDFILE=pidfile, SOCKETPATH=socketpath, LOGFILENAME=logfilename, DEBUG=debug, SERVERNAME=servername) except: ex, val, tb = sys.exc_info() logging.warn( "Could not get server config: {} ({})".format(ex.__name__, val)) return 1 config.update(longopts) if username: config.USERNAME = username if killserver: kill_server(config) return 0 if check4server(config): logging.warn( "Server {!r} already running on socket {!r}.".format(servername, socketpath)) return 1 if do_daemon and not debug: from pycopia import daemonize from pycopia import logfile lf = logfile.ManagedStdio(logfilename) daemonize.daemonize(lf, pidfile=pidfile) else: # for controller with open(pidfile, "w") as fo: fo.write("{}\n".format(os.getpid())) server = get_server(config) return int(server.run())
def main(argv): import getopt daemonize = True frontend = True force = False domainname = None servername = os.path.basename(argv[0]) logfilename = "/var/log/{}.log".format(servername) pidfilename = "/run/{}.pid".format(servername) cffile = SITE_CONFIG try: optlist, args = getopt.getopt(argv[1:], "?hdnNFl:p:f:D:") except getopt.GetoptError: print(_doc.format(progname=servername)) return for opt, optarg in optlist: if opt in ("-?", "-h"): print(_doc.format(progname=servername)) return 2 elif opt == "-l": logfilename = optarg elif opt == "-n": daemonize = False elif opt == "-N": frontend = False elif opt == "-D": domainname = optarg elif opt == "-f": cffile = optarg elif opt == "-F": force = True elif opt == "-p": pidfilename = optarg elif opt == "-d": from pycopia import autodebug # noqa FQDN = domainname or socket.getfqdn() config = basicconfig.get_config(cffile, FQDN=FQDN) config.SERVERNAME = servername config.LOGFILENAME = logfilename config.PIDFILE = pidfilename config.DAEMON = daemonize config.FORCE = force config.USEFRONTEND = frontend config.ARGV = args if not args: return status(config) cmd = args[0] if cmd.startswith("stat"): return status(config) elif cmd.startswith("set"): return setup(config) elif cmd.startswith("star"): return start(config) elif cmd.startswith("stop"): return stop(config) elif cmd.startswith("rob"): return robots(config) elif cmd.startswith("che"): return check(config) else: print(_doc.format(progname=servername)) return 2
def main(argv): import getopt daemonize = True frontend = True dname = None servername = os.path.basename(argv[0]) logfilename = "/var/log/%s.log" % (servername, ) pidfilename = "/var/run/%s.pid" % (servername, ) cffile = SITE_CONFIG try: optlist, args = getopt.getopt(argv[1:], "?hdnNl:p:f:D:") except getopt.GetoptError: print _doc % (servername, ) return for opt, optarg in optlist: if opt in ("-?", "-h"): print _doc % (servername, ) return 2 elif opt == "-l": logfilename = optarg elif opt == "-n": daemonize = False elif opt == "-N": frontend = False elif opt == "-D": dname = optarg elif opt == "-f": cffile = optarg elif opt == "-p": pidfilename = optarg elif opt == "-d": from pycopia import autodebug # Sets up auto debugging handler. glbl = {"FQDN": dname or socket.get_fqdn()} config = basicconfig.get_config(cffile, globalspace=glbl) config.SERVERNAME = servername config.LOGFILENAME = logfilename config.PIDFILE = pidfilename config.DAEMON = daemonize config.USEFRONTEND = frontend config.ARGV = args if not args: return status(config) cmd = args[0] if cmd.startswith("stat"): return status(config) elif cmd.startswith("set"): return setup(config) elif cmd.startswith("star"): return start(config) elif cmd.startswith("stop"): return stop(config) elif cmd.startswith("rob"): return robots(config) elif cmd.startswith("che"): return check(config) else: print _doc % (servername, ) return 2