def _runCherryPy(self, app, config): version = "WsgiDAV/%s %s Python/%s" % ( __version__, wsgiserver.CherryPyWSGIServer.version, PYTHON_VERSION) wsgiserver.CherryPyWSGIServer.version = version protocol = "http" if config["verbose"] >= 1: print("Running %s" % version) print("Listening on %s://%s:%s ..." % (protocol, config["host"], config["port"])) self._server = CherryPyWSGIServer( (config["host"], config["port"]), app, server_name=version, ) self._server.start()
def _runCherryPy(self, app, config): version = "WsgiDAV/%s %s Python/%s" % ( __version__, wsgiserver.CherryPyWSGIServer.version, PYTHON_VERSION ) wsgiserver.CherryPyWSGIServer.version = version protocol = "http" if config["verbose"] >= 1: print("Running %s" % version) print("Listening on %s://%s:%s ..." % (protocol, config["host"], config["port"])) self._server = CherryPyWSGIServer( (config["host"], config["port"]), app, server_name=version, ) self._server.start()
class WsgiDavDaemon(Daemon): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.config = self._initConfig() self._server = None def _initConfig(self): """Setup configuration dictionary from default, command line and configuration file.""" from tg import config as tg_config # Set config defaults config = DEFAULT_CONFIG.copy() temp_verbose = config["verbose"] # Configuration file overrides defaults default_config_file = os.path.abspath(DEFAULT_CONFIG_FILE) config_file = tg_config.get('wsgidav.config_path', default_config_file) fileConf = self._readConfigFile(config_file, temp_verbose) config.update(fileConf) if not useLxml and config["verbose"] >= 1: print( "WARNING: Could not import lxml: using xml instead (slower). Consider installing lxml from http://codespeak.net/lxml/." ) from wsgidav.dir_browser import WsgiDavDirBrowser from tracim.lib.webdav.tracim_http_authenticator import TracimHTTPAuthenticator from wsgidav.error_printer import ErrorPrinter from tracim.lib.webdav.utils import TracimWsgiDavDebugFilter config['middleware_stack'] = [ WsgiDavDirBrowser, TracimHTTPAuthenticator, ErrorPrinter, TracimWsgiDavDebugFilter, ] config['provider_mapping'] = { config['root_path']: Provider( # TODO: Test to Re enabme archived and deleted show_archived=False, # config['show_archived'], show_deleted=False, # config['show_deleted'], show_history=False, # config['show_history'], manage_locks=config['manager_locks']) } config['domaincontroller'] = TracimDomainController(presetdomain=None, presetserver=None) return config def _readConfigFile(self, config_file, verbose): """Read configuration file options into a dictionary.""" if not os.path.exists(config_file): raise RuntimeError("Couldn't open configuration file '%s'." % config_file) try: import imp conf = {} configmodule = imp.load_source("configuration_module", config_file) for k, v in vars(configmodule).items(): if k.startswith("__"): continue elif isfunction(v): continue conf[k] = v except Exception as e: exceptioninfo = traceback.format_exception_only( sys.exc_type, sys.exc_value) # @UndefinedVariable exceptiontext = "" for einfo in exceptioninfo: exceptiontext += einfo + "\n" print("Failed to read configuration file: " + config_file + "\nDue to " + exceptiontext, file=sys.stderr) raise return conf def run(self): app = WsgiDAVApp(self.config) # Try running WsgiDAV inside the following external servers: self._runCherryPy(app, self.config) def _runCherryPy(self, app, config): version = "WsgiDAV/%s %s Python/%s" % ( __version__, wsgiserver.CherryPyWSGIServer.version, PYTHON_VERSION) wsgiserver.CherryPyWSGIServer.version = version protocol = "http" if config["verbose"] >= 1: print("Running %s" % version) print("Listening on %s://%s:%s ..." % (protocol, config["host"], config["port"])) self._server = CherryPyWSGIServer( (config["host"], config["port"]), app, server_name=version, ) self._server.start() def stop(self): self._server.stop() def append_thread_callback(self, callback: collections.Callable) -> None: """ Place here the logic who permit to execute a callback in your daemon. To get an exemple of that, take a look at socketserver.BaseServer#service_actions and how we use it in tracim.lib.daemons.TracimSocketServerMixin#service_actions . :param callback: callback to execute in your thread. """ raise NotImplementedError()
class WsgiDavDaemon(Daemon): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.config = self._initConfig() self._server = None def _initConfig(self): """Setup configuration dictionary from default, command line and configuration file.""" from tg import config as tg_config # Set config defaults config = DEFAULT_CONFIG.copy() temp_verbose = config["verbose"] # Configuration file overrides defaults default_config_file = os.path.abspath(DEFAULT_CONFIG_FILE) config_file = tg_config.get('wsgidav.config_path', default_config_file) fileConf = self._readConfigFile(config_file, temp_verbose) config.update(fileConf) if not useLxml and config["verbose"] >= 1: print( "WARNING: Could not import lxml: using xml instead (slower). Consider installing lxml from http://codespeak.net/lxml/.") from wsgidav.dir_browser import WsgiDavDirBrowser from tracim.lib.webdav.tracim_http_authenticator import TracimHTTPAuthenticator from wsgidav.error_printer import ErrorPrinter from tracim.lib.webdav.utils import TracimWsgiDavDebugFilter config['middleware_stack'] = [ WsgiDavDirBrowser, TracimHTTPAuthenticator, ErrorPrinter, TracimWsgiDavDebugFilter, ] config['provider_mapping'] = { config['root_path']: Provider( # TODO: Test to Re enabme archived and deleted show_archived=False, # config['show_archived'], show_deleted=False, # config['show_deleted'], show_history=False, # config['show_history'], manage_locks=config['manager_locks'] ) } config['domaincontroller'] = TracimDomainController(presetdomain=None, presetserver=None) return config def _readConfigFile(self, config_file, verbose): """Read configuration file options into a dictionary.""" if not os.path.exists(config_file): raise RuntimeError("Couldn't open configuration file '%s'." % config_file) try: import imp conf = {} configmodule = imp.load_source("configuration_module", config_file) for k, v in vars(configmodule).items(): if k.startswith("__"): continue elif isfunction(v): continue conf[k] = v except Exception as e: exceptioninfo = traceback.format_exception_only(sys.exc_type, sys.exc_value) # @UndefinedVariable exceptiontext = "" for einfo in exceptioninfo: exceptiontext += einfo + "\n" print("Failed to read configuration file: " + config_file + "\nDue to " + exceptiontext, file=sys.stderr) raise return conf def run(self): app = WsgiDAVApp(self.config) # Try running WsgiDAV inside the following external servers: self._runCherryPy(app, self.config) def _runCherryPy(self, app, config): version = "WsgiDAV/%s %s Python/%s" % ( __version__, wsgiserver.CherryPyWSGIServer.version, PYTHON_VERSION ) wsgiserver.CherryPyWSGIServer.version = version protocol = "http" if config["verbose"] >= 1: print("Running %s" % version) print("Listening on %s://%s:%s ..." % (protocol, config["host"], config["port"])) self._server = CherryPyWSGIServer( (config["host"], config["port"]), app, server_name=version, ) self._server.start() def stop(self): self._server.stop() def append_thread_callback(self, callback: collections.Callable) -> None: """ Place here the logic who permit to execute a callback in your daemon. To get an exemple of that, take a look at socketserver.BaseServer#service_actions and how we use it in tracim.lib.daemons.TracimSocketServerMixin#service_actions . :param callback: callback to execute in your thread. """ raise NotImplementedError()