def watch_dir(path): """ Recursively add a directory to the watch files """ for dirpath, dirnames, filenames in os.walk(path): for name in dirnames: watch_dir(os.path.join(dirpath, name)) for name in filenames: watch_file(os.path.join(dirpath, name))
def load(self, name, cls=MarkupTemplate, relative_to=None): abs = path.join(template_root, path.dirname(relative_to or ''), name) watch_file(abs) _, ext = path.splitext(name) cls = template_class.get(ext, cls) return TemplateLoader.load(self, name, cls=cls, relative_to=relative_to)
def update_config(self, config): # add our templates p.toolkit.add_template_directory(config, 'templates/public') p.toolkit.add_public_directory(config, 'public') p.toolkit.add_resource('public/static/js', 'js') config['recombinant.definitions'] = """ ckanext.canada:tables/ati.yaml ckanext.canada:tables/briefingt.yaml ckanext.canada:tables/qpnotes.yaml ckanext.canada:tables/contracts.yaml ckanext.canada:tables/contractsa.yaml ckanext.canada:tables/grants.yaml ckanext.canada:tables/hospitalityq.yaml ckanext.canada:tables/reclassification.yaml ckanext.canada:tables/travela.yaml ckanext.canada:tables/travelq.yaml ckanext.canada:tables/wrongdoing.yaml ckanext.canada:tables/inventory.yaml ckanext.canada:tables/consultations.yaml ckanext.canada:tables/service.yaml ckanext.canada:tables/dac.yaml ckanext.canada:tables/nap.yaml ckanext.canada:tables/experiment.yaml """ config['ckan.search.show_all_types'] = True config['search.facets.limit'] = 200 # because org list config['scheming.presets'] = """ ckanext.scheming:presets.json ckanext.fluent:presets.json ckanext.canada:schemas/presets.yaml """ config['scheming.dataset_schemas'] = """ ckanext.canada:schemas/dataset.yaml ckanext.canada:schemas/info.yaml ckanext.canada:schemas/prop.yaml """ # Enable our custom DCAT profile. config['ckanext.dcat.rdf.profile'] = 'canada_dcat' if 'ckan.i18n_directory' in config: # Reload when translaton files change, because I'm slowly going # insane. translations_dir = config['ckan.i18n_directory'] if os.path.isdir(translations_dir): for folder, subs, files in os.walk(translations_dir): for filename in files: watch_file(os.path.join(folder, filename)) # monkey patch helpers.py pagination method hlp.Page.pager = _wet_pager hlp.SI_number_span = _SI_number_span_close hlp.build_nav_main = build_nav_main
def _initConfig(): """Setup configuration dictionary from default, command line and configuration file.""" cmdLineOpts = _initCommandLineOptions() # Set config defaults config = DEFAULT_CONFIG.copy() # Configuration file overrides defaults config_file = cmdLineOpts.get("config_file") if config_file: verbose = cmdLineOpts.get("verbose", 2) fileConf = _readConfigFile(config_file, verbose) config.update(fileConf) else: if cmdLineOpts["verbose"] >= 2: print "Running without configuration file." # Command line overrides file if cmdLineOpts.get("port"): config["port"] = cmdLineOpts.get("port") if cmdLineOpts.get("host"): config["host"] = cmdLineOpts.get("host") if cmdLineOpts.get("verbose") is not None: config["verbose"] = cmdLineOpts.get("verbose") if cmdLineOpts.get("profile") is not None: config["profile"] = True if cmdLineOpts.get("root_path"): root_path = os.path.abspath(cmdLineOpts.get("root_path")) config["provider_mapping"]["/"] = FilesystemProvider(root_path) if cmdLineOpts["verbose"] >= 3: print "Configuration(%s):" % cmdLineOpts["config_file"] pprint(config) if not config["provider_mapping"]: print >> sys.stderr, "ERROR: No DAV provider defined. Try --help option." sys.exit(-1) # raise RuntimeWarning("At least one DAV provider must be specified by a --root option, or in a configuration file.") if cmdLineOpts.get("reload"): print >> sys.stderr, "Installing paste.reloader." from paste import reloader #@UnresolvedImport reloader.install() if config_file: # Add config file changes reloader.watch_file(config_file) # import pydevd # pydevd.settrace() return config
def run_script(script): if not os.path.isfile(script): print script, "does not exist" sys.exit(1) reloader.install() reloader.watch_file(script) script_locals = {} execfile(script, {'__file__': script}, script_locals) app = script_locals['application'] app = EvalException(app) app = PrintDebugMiddleware(app) serve(app)
def _initConfig(): """Setup configuration dictionary from default, command line and configuration file.""" cmdLineOpts = _initCommandLineOptions() # Set config defaults config = DEFAULT_CONFIG.copy() # Configuration file overrides defaults config_file = cmdLineOpts.get("config_file") if config_file: verbose = cmdLineOpts.get("verbose", 2) fileConf = _readConfigFile(config_file, verbose) config.update(fileConf) else: if cmdLineOpts["verbose"] >= 2: print "Running without configuration file." # Command line overrides file if cmdLineOpts.get("port"): config["port"] = cmdLineOpts.get("port") if cmdLineOpts.get("host"): config["host"] = cmdLineOpts.get("host") if cmdLineOpts.get("verbose") is not None: config["verbose"] = cmdLineOpts.get("verbose") if cmdLineOpts.get("profile") is not None: config["profile"] = True if cmdLineOpts.get("root_path"): root_path = os.path.abspath(cmdLineOpts.get("root_path")) config["provider_mapping"]["/"] = FilesystemProvider(root_path) if cmdLineOpts["verbose"] >= 3: print "Configuration(%s):" % cmdLineOpts["config_file"] pprint(config) if not config["provider_mapping"]: print >>sys.stderr, "ERROR: No DAV provider defined. Try --help option." sys.exit(-1) # raise RuntimeWarning("At least one DAV provider must be specified by a --root option, or in a configuration file.") if cmdLineOpts.get("reload"): print >>sys.stderr, "Installing paste.reloader." from paste import reloader #@UnresolvedImport reloader.install() if config_file: # Add config file changes reloader.watch_file(config_file) # import pydevd # pydevd.settrace() return config
def _load_schema_module_path(url): """ Given a path like "ckanext.spatialx:spatialx_schema.json" find the second part relative to the import path of the first """ module, file_name = url.split(':', 1) try: # __import__ has an odd signature m = __import__(module, fromlist=['']) except ImportError: return p = os.path.join(os.path.dirname(inspect.getfile(m)), file_name) if os.path.exists(p): watch_file(p) return loader.load(open(p))
def _load_files(self, url): """ Given a path like "ckanext.csa:test.json" find the second part relative to the import path of the first *used for JS field_descriptions """ module, file_name = url.split(':', 1) try: # __import__ has an odd signature m = __import__(module, fromlist=['']) except ImportError: return p = os.path.join(os.path.dirname(inspect.getfile(m)), file_name) if os.path.exists(p): watch_file(p) return loader.load(open(p))
def _load_tables_module_path(url): """ Given a path like "ckanext.spatialx:recombinant_tables.json" find the second part relative to the import path of the first returns geno, path if found and None, None if not found """ module, file_name = url.split(':', 1) try: m = importlib.import_module(module) except ImportError: return None, None p = m.__path__[0] p = os.path.join(p, file_name) if os.path.exists(p): watch_file(p) return load.load(open(p)), p
def _load_tables_module_path(url): """ Given a path like "ckanext.spatialx:my_definition.json" find the second part relative to the import path of the first returns geno, path if found and None, None if not found """ module, file_name = url.split(':', 1) try: m = importlib.import_module(module) except ImportError: return None, None p = m.__path__[0] p = os.path.join(p, file_name) if os.path.exists(p): watch_file(p) return load.load(open(p)), p
def update_config(self, config): # add our templates p.toolkit.add_template_directory(config, "templates/public") p.toolkit.add_public_directory(config, "public") p.toolkit.add_resource("public/static/js", "js") config[ "recombinant.definitions" ] = """ ckanext.canada:tables/ati.yaml ckanext.canada:tables/contracts.yaml ckanext.canada:tables/contractsa.yaml ckanext.canada:tables/grants.yaml ckanext.canada:tables/hospitalityq.yaml ckanext.canada:tables/reclassification.yaml ckanext.canada:tables/travela.yaml ckanext.canada:tables/travelq.yaml ckanext.canada:tables/wrongdoing.yaml ckanext.canada:tables/inventory.yaml """ config["ckan.search.show_all_types"] = True config["search.facets.limit"] = 200 # because org list config[ "scheming.presets" ] = """ ckanext.scheming:presets.json ckanext.fluent:presets.json ckanext.canada:schemas/presets.yaml """ config[ "scheming.dataset_schemas" ] = """ ckanext.canada:schemas/dataset.yaml ckanext.canada:schemas/info.yaml """ if "ckan.i18n_directory" in config: # Reload when translaton files change, because I'm slowly going # insane. translations_dir = config["ckan.i18n_directory"] if os.path.isdir(translations_dir): for folder, subs, files in os.walk(translations_dir): for filename in files: watch_file(os.path.join(folder, filename))
def update_config(self, config): # add our templates p.toolkit.add_template_directory(config, 'templates/public') p.toolkit.add_public_directory(config, 'public') p.toolkit.add_resource('public/static/js', 'js') config['recombinant.definitions'] = """ ckanext.canada:tables/ati.yaml ckanext.canada:tables/contracts.yaml ckanext.canada:tables/contractsa.yaml ckanext.canada:tables/grants.yaml ckanext.canada:tables/hospitalityq.yaml ckanext.canada:tables/reclassification.yaml ckanext.canada:tables/travela.yaml ckanext.canada:tables/travelq.yaml ckanext.canada:tables/wrongdoing.yaml ckanext.canada:tables/inventory.yaml ckanext.canada:tables/consultations.yaml ckanext.canada:tables/service.yaml """ config['ckan.search.show_all_types'] = True config['search.facets.limit'] = 200 # because org list config['scheming.presets'] = """ ckanext.scheming:presets.json ckanext.fluent:presets.json ckanext.canada:schemas/presets.yaml """ config['scheming.dataset_schemas'] = """ ckanext.canada:schemas/dataset.yaml ckanext.canada:schemas/info.yaml """ # Enable our custom DCAT profile. config['ckanext.dcat.rdf.profile'] = 'canada_dcat' if 'ckan.i18n_directory' in config: # Reload when translaton files change, because I'm slowly going # insane. translations_dir = config['ckan.i18n_directory'] if os.path.isdir(translations_dir): for folder, subs, files in os.walk(translations_dir): for filename in files: watch_file(os.path.join(folder, filename))
def load_facets_module_path(relative_path): ''' Given a path like "ckanext.additionalfacets:default_facets.json" find the second part relative to the import path of the first :param relative_path: path to file ''' module, file_name = relative_path.split(':', 1) try: # __import__ has an odd signature module_to_import = __import__(module, fromlist=['']) except ImportError: return file_path = os.path.join( os.path.dirname(inspect.getfile(module_to_import)), file_name) if os.path.exists(file_path): watch_file(file_path) return load(open(file_path))
def reloader(): from paste import reloader reloader.install() reloader.watch_file(cfgfile) import glob # Restart on "compile_catalog" # TODO: make more generic, and more robust for lang in glob.glob('*/locale/*/LC_MESSAGES/*.mo'): reloader.watch_file(lang) for lang in glob.glob('*/i18n/*/LC_MESSAGES/*.mo'): reloader.watch_file(lang)
def build_application(env, template_path=None): assert template_path is None or \ os.path.isdir(template_path), \ 'template_path argument must be a diretory.' if template_path: # Add templates to the paste reloader watchlist. from paste import reloader [reloader.watch_file(filename) for filename in os.listdir(template_path)] return auth_middleware(webapp2.WSGIApplication([ (r'/', Index), (r'/users', Users), (r'/sessions', SessionList), (r'/sessions/(\d+)', Sessions), (r'/sessions/(\d+)/checklist', SessionChecklist), ], config={'template_path' : template_path}, debug=True))
def command(self): if self.options.stop_daemon: return self.stop_daemon() if not hasattr(self.options, 'set_user'): # Windows case: self.options.set_user = self.options.set_group = None # @@: Is this the right stage to set the user at? self.change_user_group( self.options.set_user, self.options.set_group) if self.requires_config_file: if not self.args: raise BadCommand('You must give a config file') app_spec = self.args[0] if (len(self.args) > 1 and self.args[1] in self.possible_subcommands): cmd = self.args[1] restvars = self.args[2:] else: cmd = None restvars = self.args[1:] else: app_spec = "" if (self.args and self.args[0] in self.possible_subcommands): cmd = self.args[0] restvars = self.args[1:] else: cmd = None restvars = self.args[:] if (getattr(self.options, 'daemon', False) and getattr(self.options, 'reload', False)): raise BadCommand('The --daemon and --reload options may not be used together') jython_monitor = False if self.options.reload: if jython and not self.options.disable_jython_reloader: # JythonMonitor raises the special SystemRestart # exception that'll cause the Jython interpreter to # reload in the existing Java process (avoiding # subprocess startup time) try: from paste.reloader import JythonMonitor except ImportError: pass else: jython_monitor = JythonMonitor(poll_interval=int( self.options.reload_interval)) if self.requires_config_file: jython_monitor.watch_file(self.args[0]) if not jython_monitor: if os.environ.get(self._reloader_environ_key): from paste import reloader if self.verbose > 1: print('Running reloading file monitor') reloader.install(int(self.options.reload_interval)) if self.requires_config_file: reloader.watch_file(self.args[0]) else: return self.restart_with_reloader() if cmd not in (None, 'start', 'stop', 'restart', 'status'): raise BadCommand( 'Error: must give start|stop|restart (not %s)' % cmd) if cmd == 'status' or self.options.show_status: return self.show_status() if cmd == 'restart' or cmd == 'stop': result = self.stop_daemon() if result: print("Could not stop daemon") # It's ok to continue trying to restart if stop_daemon returns # a 1, otherwise shortcut and return. if cmd == 'restart' and result != 1: return result if cmd == 'stop': return result self.options.daemon = True if cmd == 'start': self.options.daemon = True app_name = self.options.app_name vars = self.parse_vars(restvars) if not self._scheme_re.search(app_spec): app_spec = 'config:' + app_spec server_name = self.options.server_name if self.options.server: server_spec = 'egg:PasteScript' assert server_name is None server_name = self.options.server else: server_spec = app_spec base = os.getcwd() if getattr(self.options, 'daemon', False): if not self.options.pid_file: self.options.pid_file = 'paster.pid' if not self.options.log_file: self.options.log_file = 'paster.log' # Ensure the log file is writeable if self.options.log_file: try: writeable_log_file = open(self.options.log_file, 'a') except IOError as ioe: msg = 'Error: Unable to write to log file: %s' % ioe raise BadCommand(msg) writeable_log_file.close() # Ensure the pid file is writeable if self.options.pid_file: try: writeable_pid_file = open(self.options.pid_file, 'a') except IOError as ioe: msg = 'Error: Unable to write to pid file: %s' % ioe raise BadCommand(msg) writeable_pid_file.close() if getattr(self.options, 'daemon', False): try: self.daemonize() except DaemonizeException as ex: if self.verbose > 0: print(str(ex)) return if (self.options.monitor_restart and not os.environ.get(self._monitor_environ_key)): return self.restart_with_monitor() if self.options.pid_file: self.record_pid(self.options.pid_file) if self.options.log_file: stdout_log = LazyWriter(self.options.log_file, 'a') sys.stdout = stdout_log sys.stderr = stdout_log logging.basicConfig(stream=stdout_log) log_fn = app_spec if log_fn.startswith('config:'): log_fn = app_spec[len('config:'):] elif log_fn.startswith('egg:'): log_fn = None if log_fn: log_fn = os.path.join(base, log_fn) self.logging_file_config(log_fn) server = loadserver(server_spec, name=server_name, relative_to=base, global_conf=vars) app = loadapp( app_spec, name=app_name, relative_to=base, global_conf=vars) if self.verbose > 0: if hasattr(os, 'getpid'): msg = 'Starting server in PID %i.' % os.getpid() else: msg = 'Starting server.' print(msg) def serve(): try: server(app) except (SystemExit, KeyboardInterrupt) as e: if self.verbose > 1: raise if str(e): msg = ' ' + str(e) else: msg = '' print('Exiting%s (-v to see traceback)' % msg) except AttributeError as e: # Capturing bad error response from paste if str(e) == "'WSGIThreadPoolServer' object has no attribute 'thread_pool'": import socket raise socket.error(98, 'Address already in use') else: raise AttributeError(e) if jython_monitor: # JythonMonitor has to be ran from the main thread threading.Thread(target=serve).start() print('Starting Jython file monitor') jython_monitor.periodic_reload() else: serve()
def _init_config(): """Setup configuration dictionary from default, command line and configuration file.""" cli_opts = _init_command_line_options() cli_verbose = cli_opts["verbose"] # Set config defaults # config = DEFAULT_CONFIG.copy() config = copy.deepcopy(DEFAULT_CONFIG) # Configuration file overrides defaults config_file = cli_opts.get("config_file") if config_file: file_opts = _read_config_file(config_file, cli_verbose) # config.update(file_opts) util.deep_update(config, file_opts) if cli_verbose != DEFAULT_VERBOSE and "verbose" in file_opts: if cli_verbose >= 2: print("Config file defines 'verbose: {}' but is overridden by command line: {}." .format(file_opts["verbose"], cli_verbose)) config["verbose"] = cli_verbose else: if cli_verbose >= 2: print("Running without configuration file.") # Command line overrides file if cli_opts.get("port"): config["port"] = cli_opts.get("port") if cli_opts.get("host"): config["host"] = cli_opts.get("host") if cli_opts.get("verbose") is not None: config["verbose"] = cli_opts.get("verbose") if cli_opts.get("profile") is not None: config["profile"] = True if cli_opts.get("server") is not None: config["server"] = cli_opts.get("server") if cli_opts.get("ssl_adapter") is not None: config["ssl_adapter"] = cli_opts.get("ssl_adapter") if cli_opts.get("root_path"): root_path = os.path.abspath(cli_opts.get("root_path")) config["provider_mapping"]["/"] = FilesystemProvider(root_path) if config["verbose"] >= 5: print("Configuration({}):\n{}" .format(cli_opts["config_file"], pformat(config))) if not config["provider_mapping"]: print("ERROR: No DAV provider defined. Try --help option.", file=sys.stderr) sys.exit(-1) if cli_opts.get("reload"): print("Installing paste.reloader.", file=sys.stderr) from paste import reloader # @UnresolvedImport reloader.install() if config_file: # Add config file changes reloader.watch_file(config_file) # import pydevd # pydevd.settrace() return config
def command(self): if self.options.stop_daemon: return self.stop_daemon() if not hasattr(self.options, 'set_user'): # Windows case: self.options.set_user = self.options.set_group = None # @@: Is this the right stage to set the user at? self.change_user_group(self.options.set_user, self.options.set_group) if self.requires_config_file: if not self.args: raise BadCommand('You must give a config file') app_spec = self.args[0] if (len(self.args) > 1 and self.args[1] in self.possible_subcommands): cmd = self.args[1] restvars = self.args[2:] else: cmd = None restvars = self.args[1:] else: app_spec = "" if (self.args and self.args[0] in self.possible_subcommands): cmd = self.args[0] restvars = self.args[1:] else: cmd = None restvars = self.args[:] if self.options.reload: if os.environ.get(self._reloader_environ_key): from paste import reloader if self.verbose > 1: print 'Running reloading file monitor' reloader.install(int(self.options.reload_interval)) if self.requires_config_file: reloader.watch_file(self.args[0]) else: return self.restart_with_reloader() if (self.options.monitor_restart and not os.environ.get(self._monitor_environ_key)): return self.restart_with_monitor() if cmd not in (None, 'start', 'stop', 'restart', 'status'): raise BadCommand('Error: must give start|stop|restart (not %s)' % cmd) if cmd == 'status' or self.options.show_status: return self.show_status() if cmd == 'restart' or cmd == 'stop': result = self.stop_daemon() if result: if cmd == 'restart': print "Could not stop daemon; aborting" else: print "Could not stop daemon" return result if cmd == 'stop': return result app_name = self.options.app_name vars = self.parse_vars(restvars) if not self._scheme_re.search(app_spec): app_spec = 'config:' + app_spec server_name = self.options.server_name if self.options.server: server_spec = 'egg:PasteScript' assert server_name is None server_name = self.options.server else: server_spec = app_spec base = os.getcwd() # Ensure the log file is writeable if self.options.log_file: try: writeable_log_file = open(self.options.log_file, 'a') except IOError, ioe: msg = 'Error: Unable to write to log file: %s' % ioe raise BadCommand(msg) writeable_log_file.close()
def command(self): if self.options.stop_daemon: return self.stop_daemon() if not hasattr(self.options, 'set_user'): # Windows case: self.options.set_user = self.options.set_group = None # @@: Is this the right stage to set the user at? self.change_user_group(self.options.set_user, self.options.set_group) if self.requires_config_file: if not self.args: raise BadCommand('You must give a config file') app_spec = self.args[0] if (len(self.args) > 1 and self.args[1] in self.possible_subcommands): cmd = self.args[1] restvars = self.args[2:] else: cmd = None restvars = self.args[1:] else: app_spec = "" if (self.args and self.args[0] in self.possible_subcommands): cmd = self.args[0] restvars = self.args[1:] else: cmd = None restvars = self.args[:] if (getattr(self.options, 'daemon', False) and getattr(self.options, 'reload', False)): raise BadCommand( 'The --daemon and --reload options may not be used together') jython_monitor = False if self.options.reload: if jython and not self.options.disable_jython_reloader: # JythonMonitor raises the special SystemRestart # exception that'll cause the Jython interpreter to # reload in the existing Java process (avoiding # subprocess startup time) try: from paste.reloader import JythonMonitor except ImportError: pass else: jython_monitor = JythonMonitor( poll_interval=int(self.options.reload_interval)) if self.requires_config_file: jython_monitor.watch_file(self.args[0]) if not jython_monitor: if os.environ.get(self._reloader_environ_key): from paste import reloader if self.verbose > 1: print 'Running reloading file monitor' reloader.install(int(self.options.reload_interval)) if self.requires_config_file: reloader.watch_file(self.args[0]) else: return self.restart_with_reloader() if cmd not in (None, 'start', 'stop', 'restart', 'status'): raise BadCommand('Error: must give start|stop|restart (not %s)' % cmd) if cmd == 'status' or self.options.show_status: return self.show_status() if cmd == 'restart' or cmd == 'stop': result = self.stop_daemon() if result: if cmd == 'restart': print "Could not stop daemon; aborting" else: print "Could not stop daemon" return result if cmd == 'stop': return result self.options.daemon = True if cmd == 'start': self.options.daemon = True app_name = self.options.app_name vars = self.parse_vars(restvars) if not self._scheme_re.search(app_spec): app_spec = 'config:' + app_spec server_name = self.options.server_name if self.options.server: server_spec = 'egg:PasteScript' assert server_name is None server_name = self.options.server else: server_spec = app_spec base = os.getcwd() if getattr(self.options, 'daemon', False): if not self.options.pid_file: self.options.pid_file = 'paster.pid' if not self.options.log_file: self.options.log_file = 'paster.log' # Ensure the log file is writeable if self.options.log_file: try: writeable_log_file = open(self.options.log_file, 'a') except IOError, ioe: msg = 'Error: Unable to write to log file: %s' % ioe raise BadCommand(msg) writeable_log_file.close()
def command(self): if self.options.stop_daemon: return self.stop_daemon() if not hasattr(self.options, 'set_user'): # Windows case: self.options.set_user = self.options.set_group = None # @@: Is this the right stage to set the user at? self.change_user_group( self.options.set_user, self.options.set_group) if self.requires_config_file: if not self.args: raise BadCommand('You must give a config file') app_spec = self.args[0] if (len(self.args) > 1 and self.args[1] in self.possible_subcommands): cmd = self.args[1] restvars = self.args[2:] else: cmd = None restvars = self.args[1:] else: app_spec = "" if (self.args and self.args[0] in self.possible_subcommands): cmd = self.args[0] restvars = self.args[1:] else: cmd = None restvars = self.args[:] if self.options.reload: if os.environ.get(self._reloader_environ_key): from paste import reloader if self.verbose > 1: print 'Running reloading file monitor' reloader.install(int(self.options.reload_interval)) if self.requires_config_file: reloader.watch_file(self.args[0]) else: return self.restart_with_reloader() if (self.options.monitor_restart and not os.environ.get(self._monitor_environ_key)): return self.restart_with_monitor() if cmd not in (None, 'start', 'stop', 'restart', 'status'): raise BadCommand( 'Error: must give start|stop|restart (not %s)' % cmd) if cmd == 'status' or self.options.show_status: return self.show_status() if cmd == 'restart' or cmd == 'stop': result = self.stop_daemon() if result: if cmd == 'restart': print "Could not stop daemon; aborting" else: print "Could not stop daemon" return result if cmd == 'stop': return result app_name = self.options.app_name vars = self.parse_vars(restvars) if not self._scheme_re.search(app_spec): app_spec = 'config:' + app_spec server_name = self.options.server_name if self.options.server: server_spec = 'egg:PasteScript' assert server_name is None server_name = self.options.server else: server_spec = app_spec base = os.getcwd() # Ensure the log file is writeable if self.options.log_file: try: writeable_log_file = open(self.options.log_file, 'a') except IOError, ioe: msg = 'Error: Unable to write to log file: %s' % ioe raise BadCommand(msg) writeable_log_file.close()
def _init_config(): """Setup configuration dictionary from default, command line and configuration file.""" cli_opts, parser = _init_command_line_options() cli_verbose = cli_opts["verbose"] # Set config defaults config = copy.deepcopy(DEFAULT_CONFIG) # Configuration file overrides defaults config_file = cli_opts.get("config_file") if config_file: file_opts = _read_config_file(config_file, cli_verbose) util.deep_update(config, file_opts) if cli_verbose != DEFAULT_VERBOSE and "verbose" in file_opts: if cli_verbose >= 2: print( "Config file defines 'verbose: {}' but is overridden by command line: {}.".format( file_opts["verbose"], cli_verbose ) ) config["verbose"] = cli_verbose else: if cli_verbose >= 2: print("Running without configuration file.") # Command line overrides file if cli_opts.get("port"): config["port"] = cli_opts.get("port") if cli_opts.get("host"): config["host"] = cli_opts.get("host") if cli_opts.get("profile") is not None: config["profile"] = True if cli_opts.get("server") is not None: config["server"] = cli_opts.get("server") if cli_opts.get("ssl_adapter") is not None: config["ssl_adapter"] = cli_opts.get("ssl_adapter") # Command line overrides file only if -v or -q where passed: if cli_opts.get("verbose") != DEFAULT_VERBOSE: config["verbose"] = cli_opts.get("verbose") if cli_opts.get("root_path"): root_path = os.path.abspath(cli_opts.get("root_path")) config["provider_mapping"]["/"] = FilesystemProvider(root_path) if config["verbose"] >= 5: # TODO: remove passwords from user_mapping # config_cleaned = copy.deepcopy(config) print("Configuration({}):\n{}".format(cli_opts["config_file"], pformat(config))) if not config["provider_mapping"]: parser.error("No DAV provider defined.") # Quick-configuration of DomainController auth = cli_opts.get("auth") auth_conf = config.get("http_authenticator", {}) if auth and auth_conf.get("domain_controller"): parser.error( "--auth option can only be used when no domain_controller is configured" ) if auth == "anonymous": if config["simple_dc"]["user_mapping"]: parser.error( "--auth=anonymous can only be used when no user_mapping is configured" ) auth_conf.update( { "domain_controller": "wsgidav.dc.simple_dc.SimpleDomainController", "accept_basic": True, "accept_digest": True, "default_to_digest": True, } ) config["simple_dc"]["user_mapping"] = {"*": True} elif auth == "nt": if config.get("nt_dc"): parser.error( "--auth=nt can only be used when no nt_dc settings are configured" ) auth_conf.update( { "domain_controller": "wsgidav.dc.nt_dc.NTDomainController", "accept_basic": True, "accept_digest": False, "default_to_digest": False, } ) config["nt_dc"] = {} elif auth == "pam-login": if config.get("pam_dc"): parser.error( "--auth=pam-login can only be used when no pam_dc settings are configured" ) auth_conf.update( { "domain_controller": "wsgidav.dc.pam_dc.PAMDomainController", "accept_basic": True, "accept_digest": False, "default_to_digest": False, } ) config["pam_dc"] = {"service": "login"} # print(config) if cli_opts.get("reload"): print("Installing paste.reloader.", file=sys.stderr) from paste import reloader # @UnresolvedImport reloader.install() if config_file: # Add config file changes reloader.watch_file(config_file) # import pydevd # pydevd.settrace() return config
def _initConfig(): """Setup configuration dictionary from default, command line and configuration file.""" cmdLineOpts, args = _initCommandLineOptions() # Set config defaults config = DEFAULT_CONFIG.copy() if cmdLineOpts["verbose"] is None: temp_verbose = config["verbose"] else: temp_verbose = cmdLineOpts["verbose"] # print "verbose #1: ", temp_verbose # Configuration file overrides defaults config_file = cmdLineOpts.get("config_file") if config_file: fileConf = _readConfigFile(config_file, temp_verbose) config.update(fileConf) else: if temp_verbose >= 2: print "Running without configuration file." # print "verbose #2: ", config.get("verbose") # Command line overrides file if cmdLineOpts.get("port"): config["port"] = cmdLineOpts.get("port") if cmdLineOpts.get("host"): config["host"] = cmdLineOpts.get("host") if cmdLineOpts.get("verbose") is not None: config["verbose"] = cmdLineOpts.get("verbose") if cmdLineOpts.get("profile") is not None: config["profile"] = True if cmdLineOpts.get("root_path"): root_path = os.path.abspath(cmdLineOpts.get("root_path")) config["provider_mapping"]["/"] = FilesystemProvider(root_path) if config["verbose"] >= 3: print "Configuration(%s):" % cmdLineOpts["config_file"] pprint(config) log_path = cmdLineOpts.get("log_path", "") if log_path: log_path = os.path.abspath(log_path) config["log_path"] = log_path pid_file = cmdLineOpts.get("pid_file", "") if pid_file: pid_file = os.path.abspath(pid_file) config["pid_file"] = pid_file 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/." # print "verbose #3: ", config.get("verbose") if not config["provider_mapping"]: print >>sys.stderr, "ERROR: No DAV provider defined. Try --help option." sys.exit(-1) # raise RuntimeWarning("At least one DAV provider must be specified by a --root option, or in a configuration file.") if cmdLineOpts.get("reload"): print >>sys.stderr, "Installing paste.reloader." from paste import reloader #@UnresolvedImport reloader.install() if config_file: # Add config file changes reloader.watch_file(config_file) # import pydevd # pydevd.settrace() return config, args
def _load_schema_module_path(url): """ Given a path like "ckanext.spatialx:spatialx_schema.json" find the second part relative to the import path of the first """ log.debug("Schema URL is {0}".format(url)) module, file_name = url.split(':', 1) try: # __import__ has an odd signature m = __import__(module, fromlist=['']) except ImportError, e: log.error("Could not load lodule {0}, got {1}".format(module, e)) return p = os.path.join(os.path.dirname(inspect.getfile(m)), file_name) if os.path.exists(p): watch_file(p) return loader.load(open(p)) def _load_schema_url(url): import urllib2 try: res = urllib2.urlopen(url) tables = res.read() except urllib2.URLError: raise SchemingException("Could not load %s" % url) return loader.loads(tables, url) def _field_output_validators_group(f, schema, convert_extras):
def command(self): if self.options.stop_daemon: return self.stop_daemon() if not hasattr(self.options, 'set_user'): # Windows case: self.options.set_user = self.options.set_group = None # @@: Is this the right stage to set the user at? self.change_user_group( self.options.set_user, self.options.set_group) if self.requires_config_file: if not self.args: raise BadCommand('You must give a config file') app_spec = self.args[0] if (len(self.args) > 1 and self.args[1] in self.possible_subcommands): cmd = self.args[1] restvars = self.args[2:] else: cmd = None restvars = self.args[1:] else: app_spec = "" if (self.args and self.args[0] in self.possible_subcommands): cmd = self.args[0] restvars = self.args[1:] else: cmd = None restvars = self.args[:] if (getattr(self.options, 'daemon', False) and getattr(self.options, 'reload', False)): raise BadCommand('The --daemon and --reload options may not be used together') jython_monitor = False if self.options.reload: if jython and not self.options.disable_jython_reloader: # JythonMonitor raises the special SystemRestart # exception that'll cause the Jython interpreter to # reload in the existing Java process (avoiding # subprocess startup time) try: from paste.reloader import JythonMonitor except ImportError: pass else: jython_monitor = JythonMonitor(poll_interval=int( self.options.reload_interval)) if self.requires_config_file: jython_monitor.watch_file(self.args[0]) if not jython_monitor: if os.environ.get(self._reloader_environ_key): from paste import reloader if self.verbose > 1: print 'Running reloading file monitor' reloader.install(int(self.options.reload_interval)) if self.requires_config_file: reloader.watch_file(self.args[0]) else: return self.restart_with_reloader() if cmd not in (None, 'start', 'stop', 'restart', 'status'): raise BadCommand( 'Error: must give start|stop|restart (not %s)' % cmd) if cmd == 'status' or self.options.show_status: return self.show_status() if cmd == 'restart' or cmd == 'stop': result = self.stop_daemon() if result: if cmd == 'restart': print "Could not stop daemon; aborting" else: print "Could not stop daemon" return result if cmd == 'stop': return result self.options.daemon = True if cmd == 'start': self.options.daemon = True app_name = self.options.app_name vars = self.parse_vars(restvars) if not self._scheme_re.search(app_spec): app_spec = 'config:' + app_spec server_name = self.options.server_name if self.options.server: server_spec = 'egg:PasteScript' assert server_name is None server_name = self.options.server else: server_spec = app_spec base = os.getcwd() if getattr(self.options, 'daemon', False): if not self.options.pid_file: self.options.pid_file = 'paster.pid' if not self.options.log_file: self.options.log_file = 'paster.log' # Ensure the log file is writeable if self.options.log_file: try: writeable_log_file = open(self.options.log_file, 'a') except IOError, ioe: msg = 'Error: Unable to write to log file: %s' % ioe raise BadCommand(msg) writeable_log_file.close()
def command(self): if self.options.stop_daemon: return self.stop_daemon() if not hasattr(self.options, 'set_user'): # Windows case: self.options.set_user = self.options.set_group = None # @@: Is this the right stage to set the user at? self.change_user_group( self.options.set_user, self.options.set_group) if self.requires_config_file: if not self.args: raise BadCommand('You must give a config file') app_spec = self.args[0] if len(self.args) > 1 and self.args[1] in self.possible_subcommands: cmd = self.args[1] restvars = self.args[2:] else: cmd = None restvars = self.args[1:] else: app_spec = "" if self.args and self.args[0] in self.possible_subcommands: cmd = self.args[0] restvars = self.args[1:] else: cmd = None restvars = self.args[:] if (getattr(self.options, 'daemon', False) and getattr(self.options, 'reload', False)): raise BadCommand('The --daemon and --reload options may not be used together') jython_monitor = False if self.options.reload: if jython and not self.options.disable_jython_reloader: # JythonMonitor raises the special SystemRestart # exception that'll cause the Jython interpreter to # reload in the existing Java process (avoiding # subprocess startup time) try: from paste.reloader import JythonMonitor except ImportError: pass else: jython_monitor = JythonMonitor(poll_interval=int( self.options.reload_interval)) if self.requires_config_file: jython_monitor.watch_file(self.args[0]) if not jython_monitor: if os.environ.get(self._reloader_environ_key): from paste import reloader if self.verbose > 1: print('Running reloading file monitor') reloader.install(int(self.options.reload_interval)) if self.requires_config_file: reloader.watch_file(self.args[0]) else: return self.restart_with_reloader() if cmd not in (None, 'start', 'stop', 'restart', 'status'): raise BadCommand( f'Error: must give start|stop|restart (not {cmd})') if cmd == 'status' or self.options.show_status: return self.show_status() if cmd == 'restart' or cmd == 'stop': result = self.stop_daemon() if result: print("Could not stop daemon") # It's ok to continue trying to restart if stop_daemon returns # a 1, otherwise shortcut and return. if cmd == 'restart' and result != 1: return result if cmd == 'stop': return result self.options.daemon = True if cmd == 'start': self.options.daemon = True app_name = self.options.app_name vars = self.parse_vars(restvars) if not self._scheme_re.search(app_spec): app_spec = f"config:{app_spec}" server_name = self.options.server_name if self.options.server: server_spec = 'egg:PasteScript' assert server_name is None server_name = self.options.server else: server_spec = app_spec base = os.getcwd() if getattr(self.options, 'daemon', False): if not self.options.pid_file: self.options.pid_file = 'paster.pid' if not self.options.log_file: self.options.log_file = 'paster.log' # Ensure the log file is writeable if self.options.log_file: try: writeable_log_file = open(self.options.log_file, 'a') except OSError as ioe: msg = f'Error: Unable to write to log file: {ioe}' raise BadCommand(msg) writeable_log_file.close() # Ensure the pid file is writeable if self.options.pid_file: try: writeable_pid_file = open(self.options.pid_file, 'a') except OSError as ioe: msg = f'Error: Unable to write to pid file: {ioe}' raise BadCommand(msg) writeable_pid_file.close() if getattr(self.options, 'daemon', False): try: self.daemonize() except DaemonizeException as ex: if self.verbose > 0: print(str(ex)) return if (self.options.monitor_restart and not os.environ.get(self._monitor_environ_key)): return self.restart_with_monitor() if self.options.pid_file: self.record_pid(self.options.pid_file) if self.options.log_file: stdout_log = LazyWriter(self.options.log_file, 'a') sys.stdout = stdout_log sys.stderr = stdout_log logging.basicConfig(stream=stdout_log) log_fn = app_spec if log_fn.startswith('config:'): log_fn = app_spec[len('config:'):] elif log_fn.startswith('egg:'): log_fn = None if log_fn: log_fn = os.path.join(base, log_fn) self.logging_file_config(log_fn) server = loadserver(server_spec, name=server_name, relative_to=base, global_conf=vars) app = loadapp(app_spec, name=app_name, relative_to=base, global_conf=vars) if self.verbose > 0: if hasattr(os, 'getpid'): msg = 'Starting server in PID %i.' % os.getpid() else: msg = 'Starting server.' print(msg) def serve(): try: server(app) except (SystemExit, KeyboardInterrupt) as e: if self.verbose > 1: raise if str(e): msg = f" {str(e)}" else: msg = '' print(f'Exiting{msg} (-v to see traceback)') except AttributeError as e: # Capturing bad error response from paste if str(e) == "'WSGIThreadPoolServer' object has no attribute 'thread_pool'": raise OSError(98, 'Address already in use') else: raise AttributeError(e) if jython_monitor: # JythonMonitor has to be ran from the main thread threading.Thread(target=serve).start() print('Starting Jython file monitor') jython_monitor.periodic_reload() else: serve()
host, port = parts.netloc, '80' environ['SERVER_NAME'] = environ['HTTP_HOST'] = host environ['SERVER_PORT'] = port environ['SCRIPT_NAME'] = parts.path return proxy_exact_request(environ, start_response) return self.app(environ, start_response) config_dir = os.environ.get('SILVER_APP_CONFIG') if config_dir: from silversupport.util import read_config, fill_config_environ, asbool fn = os.path.join(config_dir, 'config.ini') conf = read_config(fn) conf = fill_config_environ(conf) from paste.reloader import watch_file watch_file(fn) else: conf = {} if asbool(conf.get('proxy', {}).get('enable'), False): application = Proxy(application, conf['proxy']) if asbool(conf.get('testing', {}).get('test'), False): from webtestrecorder import Recorder application = Recorder( application, os.path.join(os.environ['CONFIG_FILES'], 'webtest-record.requests')) if not is_production(): application = TransLogger(application)
def command(self): if self.options.stop_daemon: return self.stop_daemon() if not hasattr(self.options, "set_user"): # Windows case: self.options.set_user = self.options.set_group = None # @@: Is this the right stage to set the user at? self.change_user_group(self.options.set_user, self.options.set_group) if self.requires_config_file: if not self.args: raise BadCommand("You must give a config file") app_spec = self.args[0] if len(self.args) > 1 and self.args[1] in self.possible_subcommands: cmd = self.args[1] restvars = self.args[2:] else: cmd = None restvars = self.args[1:] else: app_spec = "" if self.args and self.args[0] in self.possible_subcommands: cmd = self.args[0] restvars = self.args[1:] else: cmd = None restvars = self.args[:] if self.options.reload: if os.environ.get(self._reloader_environ_key): from paste import reloader if self.verbose > 1: print "Running reloading file monitor" reloader.install(int(self.options.reload_interval)) if self.requires_config_file: reloader.watch_file(self.args[0]) else: return self.restart_with_reloader() if cmd not in (None, "start", "stop", "restart", "status"): raise BadCommand("Error: must give start|stop|restart (not %s)" % cmd) if cmd == "status" or self.options.show_status: return self.show_status() if cmd == "restart" or cmd == "stop": result = self.stop_daemon() if result: if cmd == "restart": print "Could not stop daemon; aborting" else: print "Could not stop daemon" return result if cmd == "stop": return result app_name = self.options.app_name vars = self.parse_vars(restvars) if not self._scheme_re.search(app_spec): app_spec = "config:" + app_spec server_name = self.options.server_name if self.options.server: server_spec = "egg:PasteScript" assert server_name is None server_name = self.options.server else: server_spec = app_spec base = os.getcwd() if getattr(self.options, "daemon", False): if not self.options.pid_file: self.options.pid_file = "paster.pid" if not self.options.log_file: self.options.log_file = "paster.log" # Ensure the log file is writeable if self.options.log_file: try: writeable_log_file = open(self.options.log_file, "a") except IOError, ioe: msg = "Error: Unable to write to log file: %s" % ioe raise BadCommand(msg) writeable_log_file.close()
def _initConfig(): """Setup configuration dictionary from default, command line and configuration file.""" cmdLineOpts = _initCommandLineOptions() # Set config defaults config = DEFAULT_CONFIG.copy() if cmdLineOpts["verbose"] is None: temp_verbose = config["verbose"] else: temp_verbose = cmdLineOpts["verbose"] # print "verbose #1: ", temp_verbose # Configuration file overrides defaults config_file = cmdLineOpts.get("config_file") if config_file: fileConf = _readConfigFile(config_file, temp_verbose) config.update(fileConf) else: if temp_verbose >= 2: print("Running without configuration file.") # print "verbose #2: ", config.get("verbose") # Command line overrides file if cmdLineOpts.get("port"): config["port"] = cmdLineOpts.get("port") if cmdLineOpts.get("host"): config["host"] = cmdLineOpts.get("host") if cmdLineOpts.get("verbose") is not None: config["verbose"] = cmdLineOpts.get("verbose") if cmdLineOpts.get("profile") is not None: config["profile"] = True if cmdLineOpts.get("server") is not None: config["server"] = cmdLineOpts.get("server") if cmdLineOpts.get("ssl_adapter") is not None: config["ssl_adapter"] = cmdLineOpts.get("ssl_adapter") if cmdLineOpts.get("root_path"): root_path = os.path.abspath(cmdLineOpts.get("root_path")) config["provider_mapping"]["/"] = FilesystemProvider(root_path) if config["verbose"] >= 4: print("Configuration({}):\n{}".format(cmdLineOpts["config_file"], pformat(config))) # 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/.") # print "verbose #3: ", config.get("verbose") if not config["provider_mapping"]: print("ERROR: No DAV provider defined. Try --help option.", file=sys.stderr) sys.exit(-1) # raise RuntimeWarning("At least one DAV provider must be specified by a --root option," # or in a configuration file.") if cmdLineOpts.get("reload"): print("Installing paste.reloader.", file=sys.stderr) from paste import reloader # @UnresolvedImport reloader.install() if config_file: # Add config file changes reloader.watch_file(config_file) # import pydevd # pydevd.settrace() return config
host, port = parts.netloc.split(':', 1) else: host, port = parts.netloc, '80' environ['SERVER_NAME'] = environ['HTTP_HOST'] = host environ['SERVER_PORT'] = port environ['SCRIPT_NAME'] = parts.path return proxy_exact_request(environ, start_response) return self.app(environ, start_response) config_dir = os.environ.get('SILVER_APP_CONFIG') if config_dir: from silversupport.util import read_config, fill_config_environ, asbool fn = os.path.join(config_dir, 'config.ini') conf = read_config(fn) conf = fill_config_environ(conf) from paste.reloader import watch_file watch_file(fn) else: conf = {} if asbool(conf.get('proxy', {}).get('enable'), False): application = Proxy(application, conf['proxy']) if asbool(conf.get('testing', {}).get('test'), False): from webtestrecorder import Recorder application = Recorder( application, os.path.join(os.environ['CONFIG_FILES'], 'webtest-record.requests')) if not is_production(): application = TransLogger(application)