constantmodule.py
上传用户:ghyvgy
上传日期:2009-05-26
资源大小:547k
文件大小:4k
源码类别:

其他游戏

开发平台:

Python

  1. '''
  2. constantmodule.py - illustrates the technique of building a module of variables that are
  3.                     used as constants from data retrieved from a relational database.
  4. '''
  5. import sys
  6. import imp
  7. import string
  8. def _BuildInMemoryConstantModule(moduleName, dbData):
  9.   '''
  10.   Builds an in memory constant module from the specified args.  To use
  11.   the module, import in within your code.  Note however that the module
  12.   must have been built prior to the processing of the import statement
  13.   moduleName - name of module to generate
  14.   dbData     - list of tuples of data retrieved from database, the data would look
  15.                like the following, with a tuple values for each row
  16.                [ (1, 'Global'), (2, 'Radial'), (3, 'Whisper') ]
  17.   '''  
  18.   
  19.   # assumption is that the module only gets built once, so we're not checking
  20.   # that it previously exists
  21.   mod = imp.new_module(moduleName)
  22.   sys.modules[moduleName] = mod
  23.   
  24.   for row in dbData:
  25.     # assumption is that every table used to generate a constant module will have
  26.     # an id and description as its first 2 columns
  27.     (constantValue, constantName) = row[0:2]
  28.     
  29.     # modify the constant name to a constant form, making all letters upper
  30.     # case and replacing all spaces with underscores
  31.     constantName = string.upper(string.replace(constantName, ' ', '_'))
  32.     
  33.     # insert it into the module
  34.     setattr(mod, constantName, constantValue)
  35.     
  36.     
  37.     
  38. def _BuildOnDiskConstantModule(filePath, dbData):
  39.   '''
  40.   Builds a constant module to an on disk file given the specified args.  To use it,
  41.   simply import it from within your code.
  42.   filePath   - file path in form '[path]/[moduleName].py', e.g. 'C:/mycode/chattype.py'
  43.   dbData     - list of tuples of data retrieved from database, the data would look
  44.                like the following, with a tuple values for each row
  45.                [ (1, 'Global'), (2, 'Radial'), (3, 'Whisper') ]
  46.   '''  
  47.   
  48.   try:
  49.     fstream = open(filePath, 'w')
  50.   except IOError:
  51.     print 'failed to open %s for write' % filePath
  52.     return
  53.   else:
  54.     # write a header for the file
  55.     fstream.write('# This file is auto generated from the database.n')
  56.     fstream.write('n')
  57.     
  58.     for row in dbData:
  59.       # assumption is that every table used to generate a constant module will have
  60.       # an id and description as its first 2 columns
  61.       (constantValue, constantName) = row[0:2]
  62.       
  63.       # modify the constant name to a constant form, making all letters upper
  64.       # case and replacing all spaces with underscores
  65.       constantName = string.upper(string.replace(constantName, ' ', '_'))
  66.      
  67.       # write the assignement statement out to the file, with a newline character to end
  68.       fstream.write(constantName)
  69.       fstream.write(' = ')
  70.       fstream.write(str(constantValue))
  71.       fstream.write('n') 
  72.   
  73.      
  74. def Test():
  75.   '''
  76.   Demonstrates the creation of contant modules
  77.   '''
  78.   # create contant module on disk  
  79.   dbData = [ (1, 'Global'), (2, 'Radial'), (3, 'Whisper') ]
  80.   
  81.   _BuildOnDiskConstantModule('chattype1.py', dbData)
  82.   import chattype1
  83.   
  84.   print 'Imported module from disk:'
  85.   print 'value of GLOBAL = %s' % chattype1.GLOBAL
  86.   print 'value of RADIAL = %s' % chattype1.RADIAL
  87.   print 'value of WHISPER = %s' % chattype1.WHISPER
  88.   del sys.modules['chattype1']
  89.   print 'n'
  90.   
  91.   # create constant module in memory
  92.   dbData = [ (5, 'Global'), (6, 'Radial'), (7, 'Whisper') ]
  93.   
  94.   _BuildInMemoryConstantModule('chattype2', dbData)
  95.   import chattype2
  96.   
  97.   print 'Imported in memory module:'
  98.   print 'value of GLOBAL = %s' % chattype2.GLOBAL
  99.   print 'value of RADIAL = %s' % chattype2.RADIAL
  100.   print 'value of WHISPER = %s' % chattype2.WHISPER
  101.   
  102. if __name__ == '__main__':
  103.   Test()