cwctl.py
changeset 4181 c79135c217df
parent 4021 280c910c8710
parent 4064 3b12e4192983
child 4352 afe1f9bc308a
--- a/cwctl.py	Tue Dec 22 09:27:28 2009 +0100
+++ b/cwctl.py	Tue Dec 22 10:27:49 2009 +0100
@@ -12,7 +12,7 @@
     def kill(*args): pass
     def getpgid(): pass
 
-from os.path import exists, join, isfile, isdir
+from os.path import exists, join, isfile, isdir, dirname, abspath
 
 from logilab.common.clcommands import register_commands, pop_arg
 from logilab.common.shellutils import ASK
@@ -307,6 +307,7 @@
         helper.bootstrap(cubes, self.config.config_level)
         # write down configuration
         config.save()
+        self._handle_win32(config, appid)
         print '-> generated %s' % config.main_config_file()
         # handle i18n files structure
         # in the first cube given
@@ -332,6 +333,29 @@
         print '\n-> creation done for %r.\n' % config.apphome
         helper.postcreate()
 
+    def _handle_win32(self, config, appid):
+        if sys.platform != 'win32':
+            return
+        service_template = """
+import sys
+import win32serviceutil
+sys.path.insert(0, r"%(CWPATH)s")
+
+from cubicweb.etwist.service import CWService
+
+classdict = {'_svc_name_': 'cubicweb-%(APPID)s',
+             '_svc_display_name_': 'CubicWeb ' + '%(CNAME)s',
+             'instance': '%(APPID)s'}
+%(CNAME)sService = type('%(CNAME)sService', (CWService,), classdict)
+
+if __name__ == '__main__':
+    win32serviceutil.HandleCommandLine(%(CNAME)sService)
+"""
+        open(join(config.apphome, 'win32svc.py'), 'wb').write(
+            service_template % {'APPID': appid,
+                                'CNAME': appid.capitalize(),
+                                'CWPATH': abspath(join(dirname(__file__), '..'))})
+
 
 class DeleteInstanceCommand(Command):
     """Delete an instance. Will remove instance's files and