cubicweb/etwist/twconfig.py
changeset 11057 0b59724cb3f2
parent 10301 729f36a1bcfa
child 11739 bc864c80ec36
--- /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 <http://www.gnu.org/licenses/>.
+"""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