[Modeling-cvs] ProjectModeling/Modeling/scripts mdl_compile_model.py,NONE,1.1
Status: Abandoned
Brought to you by:
sbigaret
From: <sbi...@us...> - 2003-04-25 18:13:41
|
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) |