コード例 #1
0
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
コード例 #2
0
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 
コード例 #3
0
ファイル: generate_blog.py プロジェクト: cponeill/pow_devel
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