Update of /cvsroot/modeling/ProjectModeling/Modeling/scripts
In directory sc8-pr-cvs1:/tmp/cvs-serv7380/Modeling/scripts
Added Files:
mdl_compile_model.py
Log Message:
Added scripts/mdl_compile_model.py and update the __init__.py generated
by mdl_generate_DB_schema.py so that it automatically tries to load the
pickled model. Using the pickled model is *much* faster than loading the
model from its xml description.
--- NEW FILE: mdl_compile_model.py ---
#! /usr/bin/env python
#-----------------------------------------------------------------------------
#
# Modeling Framework: an Object-Relational Bridge for python
# (c) 2001, 2002, 2003 Sebastien Bigaret
#
# This file is part of the Modeling Framework.
#
# The Modeling Framework is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as published
# by the Free Software Foundation; either version 2 of the License, or (at
# your option) any later version.
#
# The Modeling Framework is distributed in the hope that it will be
# useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License along
# with the Modeling Framework; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
#-----------------------------------------------------------------------------
"""
compile_model.py
``Compile'' an xml_model into two python modules, model_<modelName>.py and
model_<modelName>_pickled.py:
- model_<model_name>.py: contains the whole xml-file in a single module
attribute: model_src
- model_<modelName>_pickled.py: the second one contains a single attribute
as well: model_pickle, which is a raw string to be loaded by
cPickle.loads()
Storing the model in a python file make it easier to install a package and
its model using distutils. Storing the pickled version accelerates the
loading of a model.
Written by: Sebastien Bigaret
"""
import sys, getopt
def loadModel(xmlFilePath):
"""
Creates a python module (file: model_<modelName>.py) and dumps the
content of the file 'xmlFilePath' in a string attribute named 'model_src'
"""
from Modeling import ModelSet
ms=ModelSet.ModelSet()
ms.addModelFromXML({'file': xmlFilePath})
model=ms.models()[0]
model._modelSet=None
return model
def write_xml_model_in_python_module(xmlFilePath, modelName):
"""
Creates a python module (file: model_<modelName>.py) and dumps the
content of the file 'xmlFilePath' in a string attribute named 'model_src'
"""
xml=open(xmlFilePath, 'r')
file=open('model_%s.py'%modelName, 'w')
file.write('model_src="""')
s=xml.readline()
while s!='':
file.write(s)
s=xml.readline()
file.write('"""\n')
xml.close()
file.close()
def write_pickled_model(model):
"""
Creates a python module (file: model_<modelName>_pickle.py) and dumps a
pickled version of the supplied model in module's attribute 'model_pickle'.
"""
import cPickle
file=open('model_%s_pickle.py'%model.name(), 'w')
file.write('model_pickle=r"""')
pickled=cPickle.dump(model, file)
file.write('"""\n')
file.close()
def usage(prgName, exitStatus=None):
print """%s <model.xml>
``Compile'' an xml_model into two python modules, model_<modelName>.py and
model_<modelName>_pickled.py.
- model_<model_name>.py: contains the whole xml-file in a single module
attribute: model_src
- model_<modelName>_pickled.py: the second one contains a single attribute
as well: model_pickle, which is a raw string to be loaded by
cPickle.loads()
Options
-------
-h Prints this message
""" % prgName
if exitStatus is not None:
sys.exit(exitStatus)
def main(argv):
me=argv[0]
try:
options, args = getopt.getopt(sys.argv[1:], 'h')
except getopt.GetoptError,msg:
print me, msg
usage(me, 1)
verbose=0
for k, v in options:
if k=='-h': usage(me, 0)
if len(args)!=1:
usage(me,1)
model=loadModel(args[0])
write_xml_model_in_python_module(args[0], model.name())
write_pickled_model(model)
if __name__ == "__main__":
main(sys.argv)
|