def main(): """ Executes the render methods to generate a model, controller, migration and the views according to the given options """ parser = OptionParser() mode= MODE_CREATE parser.add_option("-m", "--model", action="store", type="string", dest="model", help="defines the model for this migration.", default ="None") parser.add_option("-c", "--comment", action="store", type="string", dest="comment", help="defines a comment for this migration.", default ="No Comment") parser.add_option("-d", "--column-definitions", action="store", type="string", dest="col_defs", help="""column definitions.Form: d- 'NAME TYPE opt, NAME2 TYPE2 opt2' Name, type, options (all SQLAlchemy style).""", default="None") parser.add_option("-f", "--force", action="store_true", dest="force", help="forces overrides of existing files", default=False) # # column definition format: NAME TYPE opt1 opt2 optn, NAME2 TYPE2 opt1 opt2 optn # start = datetime.datetime.now() (options, args) = parser.parse_args() #if no model given and no parameter at all, then quit with error if options.model == "None" and len(args) < 1: parser.error("You must at least specify an migration name by giving -n <name>.") return else: # if no model given but a parameter, than assume that the first parameter # is the model if options.model == "None": options.model = args[0] print "generate_mvc for model:", options.model # generate the model generate_model.render_model(modelname = options.model, force = options.force, comment = options.comment ) print # generate the Controller generate_controller.render_controller( name = options.model, force = options.force ) print # generate the views generate_scaffold.scaffold(modelname = options.model, force = options.force, actions = ["list", "show","create", "edit", "message"] ) print # generate the migration # ooptions_col_defs has to be a comma separated list of column names and SQLAlchemy DB types: # example: lastname String(100), email String(100) col_defs = options.col_defs generate_migration.render_migration( modelname = options.model, comment = options.comment, col_defs = options.col_defs ) print end = datetime.datetime.now() duration = end - start print "generated_mvc in("+ str(duration) +")" print return
def render_model(modelname="NONE_GIVEN", force=False, parts_dir=settings.base["parts_dir"], output_path="./models/", attributes=[], comment="", model_only=False): """ Renders the generated Model Class in path/models. Renders the according BaseModel in path/models/basemodels. Renders a basic test in tests dierctory. Uses the stubs from stubs/partials. """ print("-"*50) print("generate_model: " + modelname) print("-"*50) # new model filename collection_name = powlib.pluralize(modelname) classname = str.capitalize(modelname) baseclassname = "Base" + classname filename = os.path.normpath(os.path.join(output_path, modelname +".py")) #print "filename: %s" % (filename) if os.path.isfile( os.path.normpath( filename ) ) and force != True: print(filename + " (exists)...(Use -f to force override)") else: infile = None infile = open (os.path.normpath( parts_dir + "model.py"), "r") ostr = "" ostr = ostr + infile.read() infile.close() d = datetime.datetime.now() ostr = ostr.replace("#DATE", d.strftime("%Y/%m/%d %H:%M:%S") ) ostr = ostr.replace("#MODELCLASS", classname) ostr = ostr.replace("#MODEL_COLLECTION", collection_name) ostr = ostr.replace("#MODEL_SCHEMA", modelname) ostr = ostr.replace("#MODELNAME" , modelname ) #ostr = ostr.replace("#BASECLASS", baseclassname) #ostr = ostr.replace("#MODELTABLE", powlib.plural(string.lower(modelname)) ) # write the output file to disk ofile = open( filename , "w+") print(" --", filename + " (created)") ofile.write( ostr ) ofile.close() ### generate BaseModel if neccessary # render_basemodel(baseclassname, modelname, collection_name, classname, output_path, parts_dir, properties) #ef render_model(modelname="NONE_GIVEN", force=False, parts_dir=settings.base["parts_dir"], # output_path="./models/", attributes=[], comment=""): # render the according migration (and schema) if not model_only: generate_migration.render_migration( modelname, comment=comment, col_defs = None, parts_dir=settings.base["parts_dir"], prefix_dir = "./") generate_controller.render_controller( controller_name=modelname, force=force, parts_dir=settings.base["parts_dir"], zero_tornado=False, prefix_path="./") generate_scaffold.generate_scaffold( modelname, force=force) # render a basic testcase render_test_stub(modelname, classname, parts_dir) #render_schema(modelname) #create the empty schema: #model = powlib.load_class("models." + modelname, classname) #model.create_schema() powlib.check_copy_file("./stubs/templates/schema.py", "migrations/schemas/", new_name= modelname + "_schema.py", replace=[("#MODELNAME", modelname)]) return
def generate_all_for( model ): generate_model.render_model(model, True, model + " Model") generate_controller.render_controller(model, True) generate_scaffold.scaffold(model, True) generate_migration.render_migration(model, model, model + " Migration") return