diff -r 058bb3dc685f -r 0b59724cb3f2 cubicweb/etwist/twconfig.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cubicweb/etwist/twconfig.py Sat Jan 16 13:48:51 2016 +0100 @@ -0,0 +1,115 @@ +# copyright 2003-2014 LOGILAB S.A. (Paris, FRANCE), all rights reserved. +# contact http://www.logilab.fr/ -- mailto:contact@logilab.fr +# +# This file is part of CubicWeb. +# +# CubicWeb is free software: you can redistribute it and/or modify it under the +# terms of the GNU Lesser General Public License as published by the Free +# Software Foundation, either version 2.1 of the License, or (at your option) +# any later version. +# +# CubicWeb is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +# details. +# +# You should have received a copy of the GNU Lesser General Public License along +# with CubicWeb. If not, see . +"""twisted server configurations: + +* the "all-in-one" configuration to get a web instance running in a twisted + web server integrating a repository server in the same process (only available + if the repository part of the software is installed +""" +__docformat__ = "restructuredtext en" + +from os.path import join + +from logilab.common.configuration import Method, merge_options + +from cubicweb.cwconfig import CONFIGURATIONS +from cubicweb.web.webconfig import WebConfiguration + + +class WebConfigurationBase(WebConfiguration): + """web instance (in a twisted web server) client of a RQL server""" + + options = merge_options(( + # ctl configuration + ('port', + {'type' : 'int', + 'default': None, + 'help': 'http server port number (default to 8080)', + 'group': 'web', 'level': 0, + }), + ('interface', + {'type' : 'string', + 'default': "", + 'help': 'http server address on which to listen (default to everywhere)', + 'group': 'web', 'level': 1, + }), + ('max-post-length', + {'type' : 'bytes', + 'default': '100MB', + 'help': 'maximum length of HTTP request. Default to 100 MB.', + 'group': 'web', 'level': 1, + }), + ('profile', + {'type' : 'string', + 'default': None, + 'help': 'profile code and use the specified file to store stats if this option is set', + 'group': 'web', 'level': 3, + }), + ('host', + {'type' : 'string', + 'default': None, + 'help': 'host name if not correctly detectable through gethostname', + 'group': 'main', 'level': 1, + }), + ('pid-file', + {'type' : 'string', + 'default': Method('default_pid_file'), + 'help': 'repository\'s pid file', + 'group': 'main', 'level': 2, + }), + ('uid', + {'type' : 'string', + 'default': None, + 'help': 'if this option is set, use the specified user to start \ +the repository rather than the user running the command', + 'group': 'main', 'level': WebConfiguration.mode == 'system' + }), + ('webserver-threadpool-size', + {'type': 'int', + 'default': 4, + 'help': "size of twisted's reactor threadpool. It should probably be not too \ +much greater than connection-poolsize", + 'group': 'web', 'level': 3, + }), + ) + WebConfiguration.options) + + def server_file(self): + return join(self.apphome, '%s-%s.py' % (self.appid, self.name)) + + def default_base_url(self): + from socket import getfqdn + return 'http://%s:%s/' % (self['host'] or getfqdn().lower(), self['port'] or 8080) + + +try: + from cubicweb.server.serverconfig import ServerConfiguration + + class AllInOneConfiguration(WebConfigurationBase, ServerConfiguration): + """repository and web instance in the same twisted process""" + name = 'all-in-one' + options = merge_options(WebConfigurationBase.options + + ServerConfiguration.options) + + cubicweb_appobject_path = WebConfigurationBase.cubicweb_appobject_path | ServerConfiguration.cubicweb_appobject_path + cube_appobject_path = WebConfigurationBase.cube_appobject_path | ServerConfiguration.cube_appobject_path + + + CONFIGURATIONS.append(AllInOneConfiguration) + +except ImportError: + pass