Subversion Repositories

?revision_form?Rev ?revision_input??revision_submit??revision_endform?

Rev 27 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
27 magnus 1
Author: Magnus Holmgren <holmgren@debian.org>
2
Description: Mostly adapt server to run as a daemon
2 magnus 3
 
39 magnus 4
--- a/pyscrabble/net/server.py
5
+++ b/pyscrabble/net/server.py
6
@@ -46,7 +46,7 @@ class ScrabbleServerFactory(protocol.Ser
2 magnus 7
         self.db = db.DB()
8
         self.maxUsersLoggedIn = 0
9
         self.startDate = util.Time(seconds=time.time(), dispDate=True)
10
-        self.rankings = rank.Rankings( resources["config"][constants.RANK_CONFIG] )
11
+        self.rankings = rank.Rankings( resources["serverconfig"][constants.RANK_CONFIG] )
12
 
13
         dir = resources["resources"][constants.DICT_DIR].path
14
         for lang in os.listdir( dir ):
39 magnus 15
--- a/pyscrabble/dist.py
16
+++ b/pyscrabble/dist.py
17
@@ -3,6 +3,8 @@ import os
2 magnus 18
 import sys
39 magnus 19
 from distutils.command.install_lib import install_lib
20
 from distutils.command.install_scripts import install_scripts
21
+from distutils.command.install_data import install_data
22
+from distutils.command.install import install
2 magnus 23
 
24
 APP_NAME = 'pyscrabble'
25
 
39 magnus 26
@@ -31,8 +33,6 @@ except ImportError:
2 magnus 27
     RESOURCE_PREFIX = 'resources'
28
 
29
 CONFIG_DIR = get_app_data_dir()
30
-if not os.path.exists(CONFIG_DIR):
31
-    CONFIG_DIR = os.path.join(RESOURCE_PREFIX, 'config')
32
 
39 magnus 33
 def getLocaleDirs(dir, domain):
34
     l = []
35
@@ -76,6 +76,13 @@ def getDataFiles():
36
            getResourceDirs('resources/dict', True, 'resources') + \
37
            getResourceDirs('resources/letters', True, 'resources')
38
 
2 magnus 39
+try:
40
+    from __installed__ import SERVER_LOG_DIR, SERVER_DB_DIR, SERVER_CONFIG_DIR
41
+except ImportError:
42
+    SERVER_CONFIG_DIR = os.path.join(RESOURCE_PREFIX, 'config')
43
+    SERVER_DB_DIR = CONFIG_DIR
44
+    SERVER_LOG_DIR = CONFIG_DIR
39 magnus 45
+
2 magnus 46
 def ensure_config_dir(dir):
47
     '''
39 magnus 48
     Ensure config directory exists
49
@@ -112,11 +119,14 @@ class InstallLib(install_lib):
50
         self.mkpath(os.path.dirname(filename))
51
 
52
         install = self.distribution.get_command_obj('install')
53
-        datadir = os.path.join(install.prefix, 'share', APP_NAME)
54
+        datadir = os.path.join(install.prefix, 'share', 'games', APP_NAME)
55
 
56
         fp = open(filename, 'w')
57
         fp.write('# Generated by setup.py do not modify\n')
58
-        fp.write("RESOURCE_PREFIX = '%s'\n" % datadir)
59
+        fp.write("RESOURCE_PREFIX = %r\n" % datadir)
60
+        fp.write("SERVER_CONFIG_DIR = %r\n" % install.confdir)
61
+        fp.write("SERVER_DB_DIR = %r\n" % install.dbdir)
62
+        fp.write("SERVER_LOG_DIR = %r\n" % install.logdir)
63
         fp.close()
2 magnus 64
 
39 magnus 65
         return filename
66
@@ -125,6 +135,35 @@ class InstallLib(install_lib):
67
         template = self.generate_template()
68
         return install_lib.install(self) + [template]
2 magnus 69
 
39 magnus 70
+class InstallData(install_data):
71
+    def fix_path(self, item):
72
+        install = self.distribution.get_command_obj('install')
73
+        if type(item) in (list, tuple):
74
+            if 'config' in item[0]:
75
+                return (item[0].replace('config', install.confdir), item[1])
76
+            else:
77
+                return (item[0].replace('resources', 'share/games/'+APP_NAME), item[1])
78
+        else:
79
+            return item
80
+
81
+    def finalize_options(self):
82
+        self.data_files = [ self.fix_path(f) for f in self.data_files ]
83
+        install_data.finalize_options(self)
84
+
85
+class Install(install):
86
+    user_options = install.user_options + [ ('logdir=', None, "log directory"),
87
+                                            ('dbdir=', None, "database directory"),
88
+                                            ('confdir=', None, "configuration directory") ]
89
+
90
+    def initialize_options(self):
91
+        self.logdir = None
92
+        self.dbdir = None
93
+        self.confdir = None
94
+        install.initialize_options(self)
95
+
96
+    def finalize_options(self):
97
+        install.finalize_options(self)
98
+
2 magnus 99
 class Resource(object):
100
     '''
101
     Filesystem resource
39 magnus 102
@@ -180,4 +219,4 @@ class Resource(object):
103
         @param value:
104
         '''
105
         self.data[item] = value
106
-        
107
\ No newline at end of file
108
+        
109
--- a/pyscrabble/db.py
110
+++ b/pyscrabble/db.py
2 magnus 111
@@ -1,5 +1,4 @@
112
 from pyscrabble import constants
113
-from pyscrabble import manager
114
 from ZODB import FileStorage, DB as _DB
115
 import transaction
116
 
39 magnus 117
@@ -12,8 +11,10 @@ class DB(object):
2 magnus 118
         '''
119
         Initialize the connection to the DB
120
         '''
121
-        r = manager.ResourceManager()
122
-        path = r["config"][constants.DB_LOCATION]
123
+        import os
124
+        from pyscrabble import dist
125
+
126
+        path = os.path.join(dist.SERVER_DB_DIR, constants.DB_LOCATION)
127
 
128
         storage = FileStorage.FileStorage(path)    
129
         db = _DB(storage)
39 magnus 130
--- a/pyscrabble/manager.py
131
+++ b/pyscrabble/manager.py
132
@@ -36,6 +36,7 @@ class ResourceManager(object):
2 magnus 133
         '''
134
         self.loaded = True
135
 
136
+        self["serverconfig"] = dist.Resource( dist.SERVER_CONFIG_DIR )
137
         self["config"] = dist.Resource( dist.CONFIG_DIR )
138
         self["resources"] = dist.Resource( dist.RESOURCE_PREFIX )
139
 
39 magnus 140
--- a/server_console.py
141
+++ b/server_console.py
142
@@ -76,15 +76,15 @@ class ServerConsole(object):
2 magnus 143
         '''
144
         Configure the server
145
         '''
146
-        dist.ensure_config_dir(dist.CONFIG_DIR)
147
+        dist.ensure_config_dir(dist.SERVER_CONFIG_DIR)
148
         resources = manager.ResourceManager()
149
         logging.basicConfig(level=logging.DEBUG,
150
                     format='%(asctime)s %(name)s %(levelname)s %(message)s',
151
-                    filename=resources["config"][constants.LOG_FILE],
152
-                    filemode='w')
153
+                    filename=os.path.join(dist.SERVER_LOG_DIR, constants.LOG_FILE),
154
+                    filemode='a')
155
 
156
 
157
-        config = resources["config"][constants.SERVER_CONSOLE_CONFIG]
158
+        config = resources["serverconfig"][constants.SERVER_CONSOLE_CONFIG]
159
 
160
         if not os.path.exists(config):
161
             raise IOError, "%s must exist in %s" % (constants.SERVER_CONSOLE_CONFIG, resources["config"].path)
39 magnus 162
--- a/setup.py
163
+++ b/setup.py
164
@@ -7,21 +7,12 @@ except ImportError:
2 magnus 165
     HAS_PY2EXE = False
166
 import glob
167
 import os
168
-import pkg_resources
169
+#import pkg_resources
170
 import sys
171
 from pyscrabble.constants import VERSION
172
 from pyscrabble import util
173
 from pyscrabble import dist
174
 
175
-def fix_path(item):
176
-    if type(item) in (list, tuple):
177
-        if 'config' in item[0]:
178
-            return (item[0].replace('config', dist.get_app_data_dir()), item[1])
179
-        else:
180
-            return (item[0].replace('resources/', 'share/pyscrabble/'), item[1])
39 magnus 181
-    else:
2 magnus 182
-        return item
39 magnus 183
-
2 magnus 184
 kwargs = {
185
     'name': 'pyscrabble',
39 magnus 186
     'version': VERSION,
187
@@ -80,7 +71,7 @@ if HAS_PY2EXE and 'py2exe' in sys.argv:
188
     #    kwargs['data_files'] += dist.getResourceDirs(egg.location, ensureLower=False, basePath=None, outdir='extra')
2 magnus 189
 else:
190
     kwargs['scripts'] = ['pyscrabble-main.py', 'server_console.py', 'db_upgrade.py']
191
-    kwargs['data_files'] = [fix_path(x) for x in kwargs['data_files']]
192
-    kwargs['cmdclass'] = {'install_lib': dist.InstallLib, 'install_scripts' : dist.InstallScripts}
193
+    #    kwargs['data_files'] = [fix_path(x) for x in kwargs['data_files']]
39 magnus 194
+    kwargs['cmdclass'] = {'install': dist.Install, 'install_lib': dist.InstallLib, 'install_scripts' : dist.InstallScripts, 'install_data': dist.InstallData}
2 magnus 195
 
196
-setup(**kwargs)
197
\ No newline at end of file
198
+setup(**kwargs)