etwist/twconfig.py
changeset 0 b97547f5f1fa
child 136 ff51a18c66a3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/etwist/twconfig.py	Wed Nov 05 15:52:50 2008 +0100
@@ -0,0 +1,96 @@
+"""twisted server configurations:
+
+* the "twisted" configuration to get a web application running in a standalone
+  twisted web server which talk to a repository server using Pyro
+  
+* the "all-in-one" configuration to get a web application 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
+
+:organization: Logilab
+:copyright: 2001-2008 LOGILAB S.A. (Paris, FRANCE), all rights reserved.
+:contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr
+"""
+__docformat__ = "restructuredtext en"
+
+from os.path import join
+
+from cubicweb.web.webconfig import WebConfiguration, merge_options, Method
+
+class TwistedConfiguration(WebConfiguration):
+    """web application (in a twisted web server) client of a RQL server"""
+    name = 'twisted'
+
+    options = merge_options((
+        # ctl configuration
+        ('host',
+         {'type' : 'string',
+          'default': None,
+          'help': 'host name if not correctly detectable through gethostname',
+          'group': 'main', 'inputlevel': 1,
+          }),
+        ('port',
+         {'type' : 'int',
+          'default': None,
+          'help': 'http server port number (default to 8080)',
+          'group': 'main', 'inputlevel': 0,
+          }),
+        ('pid-file',
+         {'type' : 'string',
+          'default': Method('default_pid_file'),
+          'help': 'repository\'s pid file',
+          'group': 'main', 'inputlevel': 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', 'inputlevel': 0,
+          }),
+        ('session-time',
+         {'type' : 'int',
+          'default': 30*60,
+          'help': 'session expiration time, default to 30 minutes',
+          'group': 'main', 'inputlevel': 1,
+          }),
+        ('profile',
+         {'type' : 'string',
+          'default': None,
+          'help': 'profile code and use the specified file to store stats if this option is set',
+          'group': 'main', 'inputlevel': 2,
+          }),
+        ('pyro-server',
+         {'type' : 'yn',
+          # pyro is only a recommends by default, so don't activate it here
+          'default': False, 
+          'help': 'run a pyro server',
+          'group': 'main', 'inputlevel': 1,
+          }),
+        ) + 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 gethostname
+        return 'http://%s:%s/' % (self['host'] or gethostname(), self['port'] or 8080)
+
+try:
+    from cubicweb.server.serverconfig import ServerConfiguration
+
+    class AllInOneConfiguration(TwistedConfiguration, ServerConfiguration):
+        """repository and web application in the same twisted process"""
+        name = 'all-in-one'
+        repo_method = 'inmemory'
+        options = merge_options(TwistedConfiguration.options
+                                + ServerConfiguration.options)
+
+        cubicweb_vobject_path = TwistedConfiguration.cubicweb_vobject_path | ServerConfiguration.cubicweb_vobject_path
+        cube_vobject_path = TwistedConfiguration.cube_vobject_path | ServerConfiguration.cube_vobject_path
+        def pyro_enabled(self):
+            """tell if pyro is activated for the in memory repository"""
+            return self['pyro-server']
+        
+except ImportError:
+    pass