Rev 2 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#! /bin/sh /usr/share/dpatch/dpatch-run## 10_installation.dpatch by Magnus Holmgren <magnus@kibibyte.se>#### All lines beginning with `## DP:' are a description of the patch.## DP: Mostly adapt server to run as a daemon@DPATCH@--- pyscrabble-1.6.2.orig/pyscrabble/net/server.py+++ pyscrabble-1.6.2/pyscrabble/net/server.py@@ -46,7 +46,7 @@self.db = db.DB()self.maxUsersLoggedIn = 0self.startDate = util.Time(seconds=time.time(), dispDate=True)- self.rankings = rank.Rankings( resources["config"][constants.RANK_CONFIG] )+ self.rankings = rank.Rankings( resources["serverconfig"][constants.RANK_CONFIG] )dir = resources["resources"][constants.DICT_DIR].pathfor lang in os.listdir( dir ):--- pyscrabble-1.6.2.orig/pyscrabble/dist.py+++ pyscrabble-1.6.2/pyscrabble/dist.py@@ -1,8 +1,6 @@import globimport osimport sys-from distutils.command.install_lib import install_lib-from distutils.command.install_scripts import install_scriptsAPP_NAME = 'pyscrabble'@@ -31,50 +29,13 @@RESOURCE_PREFIX = 'resources'CONFIG_DIR = get_app_data_dir()-if not os.path.exists(CONFIG_DIR):- CONFIG_DIR = os.path.join(RESOURCE_PREFIX, 'config')-def getLocaleDirs(dir, domain):- l = []-- langs = os.listdir( dir )- for lang in langs:- d = os.path.join(dir,lang,"LC_MESSAGES")- path = os.path.join(d, '%s.mo' % domain)- l.append( (d,[path]) )-- return l--def getResourceDirs(dir, ensureLower=True, basePath = None, outdir=None):- result = []- absolute = os.path.abspath(dir)-- base = basePath- if base is None:- base = os.path.dirname(absolute)- else:- base = os.path.dirname( os.path.abspath(base) )-- for root, dirs, files in os.walk(absolute):- if ensureLower and not os.path.basename(root).islower(): continue- if len(files) > 0:- f = []- d = root[len(base)+1:]- if outdir is not None:- d = os.path.join(outdir, d)- for file in files:- f.append( os.path.join(root, file) )- result.append( (d, f) )- return result--def getDataFiles():- return getLocaleDirs('resources/locale',APP_NAME) + \- [('resources/images', glob.glob('resources/images/*.*')), \- ('resources/sounds', glob.glob('resources/sounds/*.*')), \- ('config', glob.glob('resources/config/*.cfg')), \- ('resources/web', glob.glob('resources/web/*.*'))] + \- getResourceDirs('resources/dict', True, 'resources') + \- getResourceDirs('resources/letters', True, 'resources')+try:+ from __installed__ import SERVER_LOG_DIR, SERVER_DB_DIR, SERVER_CONFIG_DIR+except ImportError:+ SERVER_CONFIG_DIR = os.path.join(RESOURCE_PREFIX, 'config')+ SERVER_DB_DIR = CONFIG_DIR+ SERVER_LOG_DIR = CONFIG_DIRdef ensure_config_dir(dir):'''@@ -86,45 +47,6 @@os.makedirs(dir)-class InstallScripts(install_scripts):- '''- install_scripts handler to strip any possible ^M's from files so they will run properly on unix- '''-- def run(self):- install_scripts.run(self)- for file in self.get_outputs():- self.fix(file)-- def fix(self, path):- f = open(path, "rb")- data = f.read().replace("\r\n", "\n")- f.close()- f = open(path, "w")- f.write(data)- f.close()---class InstallLib(install_lib):-- def generate_template(self):- filename = os.path.join(self.build_dir, APP_NAME, '__installed__.py')- self.mkpath(os.path.dirname(filename))-- install = self.distribution.get_command_obj('install')- datadir = os.path.join(install.prefix, 'share', APP_NAME)-- fp = open(filename, 'w')- fp.write('# Generated by setup.py do not modify\n')- fp.write("RESOURCE_PREFIX = '%s'\n" % datadir)- fp.close()-- return filename-- def install(self):- template = self.generate_template()- return install_lib.install(self) + [template]-class Resource(object):'''Filesystem resource--- pyscrabble-1.6.2.orig/pyscrabble/db.py+++ pyscrabble-1.6.2/pyscrabble/db.py@@ -1,5 +1,4 @@from pyscrabble import constants-from pyscrabble import managerfrom ZODB import FileStorage, DB as _DBimport transaction@@ -12,8 +11,10 @@'''Initialize the connection to the DB'''- r = manager.ResourceManager()- path = r["config"][constants.DB_LOCATION]+ import os+ from pyscrabble import dist++ path = os.path.join(dist.SERVER_DB_DIR, constants.DB_LOCATION)storage = FileStorage.FileStorage(path)db = _DB(storage)--- pyscrabble-1.6.2.orig/pyscrabble/manager.py+++ pyscrabble-1.6.2/pyscrabble/manager.py@@ -36,6 +36,7 @@'''self.loaded = True+ self["serverconfig"] = dist.Resource( dist.SERVER_CONFIG_DIR )self["config"] = dist.Resource( dist.CONFIG_DIR )self["resources"] = dist.Resource( dist.RESOURCE_PREFIX )--- pyscrabble-1.6.2.orig/server_console.py+++ pyscrabble-1.6.2/server_console.py@@ -76,15 +76,15 @@'''Configure the server'''- dist.ensure_config_dir(dist.CONFIG_DIR)+ dist.ensure_config_dir(dist.SERVER_CONFIG_DIR)resources = manager.ResourceManager()logging.basicConfig(level=logging.DEBUG,format='%(asctime)s %(name)s %(levelname)s %(message)s',- filename=resources["config"][constants.LOG_FILE],- filemode='w')+ filename=os.path.join(dist.SERVER_LOG_DIR, constants.LOG_FILE),+ filemode='a')- config = resources["config"][constants.SERVER_CONSOLE_CONFIG]+ config = resources["serverconfig"][constants.SERVER_CONSOLE_CONFIG]if not os.path.exists(config):raise IOError, "%s must exist in %s" % (constants.SERVER_CONSOLE_CONFIG, resources["config"].path)--- pyscrabble-1.6.2.orig/setup.py+++ pyscrabble-1.6.2/setup.py@@ -7,20 +7,130 @@HAS_PY2EXE = Falseimport globimport os-import pkg_resources+#import pkg_resourcesimport sys+from distutils.command.install_lib import install_lib+from distutils.command.install_scripts import install_scripts+from distutils.command.install_data import install_data+from distutils.command.install import installfrom pyscrabble.constants import VERSIONfrom pyscrabble import utilfrom pyscrabble import dist-def fix_path(item):- if type(item) in (list, tuple):- if 'config' in item[0]:- return (item[0].replace('config', dist.get_app_data_dir()), item[1])- else:- return (item[0].replace('resources/', 'share/pyscrabble/'), item[1])++def getLocaleDirs(dir, domain):+ l = []++ langs = os.listdir( dir )+ for lang in langs:+ d = os.path.join(dir,lang,"LC_MESSAGES")+ path = os.path.join(d, '%s.mo' % domain)+ l.append( (d,[path]) )++ return l++def getResourceDirs(dir, ensureLower=True, basePath = None, outdir=None):+ result = []+ absolute = os.path.abspath(dir)++ base = basePath+ if base is None:+ base = os.path.dirname(absolute)else:- return item+ base = os.path.dirname( os.path.abspath(base) )++ for root, dirs, files in os.walk(absolute):+ if ensureLower and not os.path.basename(root).islower(): continue+ if len(files) > 0:+ f = []+ d = root[len(base)+1:]+ if outdir is not None:+ d = os.path.join(outdir, d)+ for file in files:+ f.append( os.path.join(root, file) )+ result.append( (d, f) )+ return result++def getDataFiles():+ return getLocaleDirs('resources/locale',dist.APP_NAME) + \+ [('resources/images', glob.glob('resources/images/*.*')), \+ ('resources/sounds', glob.glob('resources/sounds/*.*')), \+ ('config', glob.glob('resources/config/*.cfg')), \+ ('resources/web', glob.glob('resources/web/*.*'))] + \+ getResourceDirs('resources/dict', True, 'resources') + \+ getResourceDirs('resources/letters', True, 'resources')++class InstallScripts(install_scripts):+ '''+ install_scripts handler to strip any possible ^Ms from files so they will run properly on unix+ '''++ def run(self):+ install_scripts.run(self)+ for file in self.get_outputs():+ self.fix(file)++ def fix(self, path):+ f = open(path, "rb")+ data = f.read().replace("\r\n", "\n")+ f.close()+ f = open(path, "w")+ f.write(data)+ f.close()+++class InstallLib(install_lib):++ def generate_template(self):+ filename = os.path.join(self.build_dir, dist.APP_NAME, '__installed__.py')+ self.mkpath(os.path.dirname(filename))++ install = self.distribution.get_command_obj('install')+ datadir = os.path.join(install.prefix, 'share', 'games', dist.APP_NAME)++ fp = open(filename, 'w')+ fp.write('# Generated by setup.py do not modify\n')+ fp.write("RESOURCE_PREFIX = %r\n" % datadir)+ fp.write("SERVER_CONFIG_DIR = %r\n" % install.confdir)+ fp.write("SERVER_DB_DIR = %r\n" % install.dbdir)+ fp.write("SERVER_LOG_DIR = %r\n" % install.logdir)+ fp.close()++ return filename++ def install(self):+ template = self.generate_template()+ return install_lib.install(self) + [template]++class InstallData(install_data):+ def fix_path(self, item):+ install = self.distribution.get_command_obj('install')+ if type(item) in (list, tuple):+ if 'config' in item[0]:+ return (item[0].replace('config', install.confdir), item[1])+ else:+ return (item[0].replace('resources/', 'share/games/pyscrabble/'), item[1])+ else:+ return item++ def finalize_options(self):+ self.data_files = [ self.fix_path(f) for f in self.data_files ]+ install_data.finalize_options(self)++class Install(install):+ user_options = install.user_options + [ ('logdir=', None, "log directory"),+ ('dbdir=', None, "database directory"),+ ('confdir=', None, "configuration directory") ]++ def initialize_options(self):+ self.logdir = None+ self.dbdir = None+ self.confdir = None+ install.initialize_options(self)++ def finalize_options(self):+ print self.logdir+ install.finalize_options(self)kwargs = {'name': 'pyscrabble',@@ -28,7 +138,7 @@'author': 'Kevin Conaway','author_email': 'kevin.a.conaway@gmail.com','url': 'http://pyscrabble.sourceforge.net',- 'data_files': dist.getDataFiles(),+ 'data_files': getDataFiles(),'packages': ['pyscrabble', 'pyscrabble.command', 'pyscrabble.game', 'pyscrabble.gui', 'pyscrabble.net']}@@ -77,10 +187,10 @@kwargs['data_files'] += [('.', ['CHANGELOG.txt'])]kwargs['data_files'] += [('.', ['LICENSE.txt'])]#for egg in eggpacks:- # kwargs['data_files'] += dist.getResourceDirs(egg.location, ensureLower=False, basePath=None, outdir='extra')+ # kwargs['data_files'] += getResourceDirs(egg.location, ensureLower=False, basePath=None, outdir='extra')else:kwargs['scripts'] = ['pyscrabble-main.py', 'server_console.py', 'db_upgrade.py']- kwargs['data_files'] = [fix_path(x) for x in kwargs['data_files']]- kwargs['cmdclass'] = {'install_lib': dist.InstallLib, 'install_scripts' : dist.InstallScripts}+ # kwargs['data_files'] = [fix_path(x) for x in kwargs['data_files']]+ kwargs['cmdclass'] = {'install': Install, 'install_lib': InstallLib, 'install_scripts' : InstallScripts, 'install_data': InstallData}-setup(**kwargs)\ No newline at end of file+setup(**kwargs)