Esempio n. 1
0
def main():
    '''
    Parse argv for options and arguments, and start schema generation.
    '''
    parser = optparse.OptionParser(
        usage="%prog [options] <model_path> [another_model_path...]",
        version=xtuml.version.complete_string,
        formatter=optparse.TitledHelpFormatter())

    parser.set_description(__doc__.strip())

    parser.add_option("-c",
                      "--component",
                      dest="component",
                      metavar="NAME",
                      help="export sql schema for the component named NAME",
                      action="store",
                      default=None)

    parser.add_option("-d",
                      "--derived-attributes",
                      dest="derived",
                      help="include derived attributes in the schema",
                      action="store_true",
                      default=False)

    parser.add_option("-o",
                      "--output",
                      dest='output',
                      metavar="PATH",
                      help="save sql schema to PATH (required)",
                      action="store",
                      default=None)

    parser.add_option("-v",
                      "--verbosity",
                      dest='verbosity',
                      action="count",
                      help="increase debug logging level",
                      default=2)

    (opts, args) = parser.parse_args()
    if len(args) == 0 or opts.output is None:
        parser.print_help()
        sys.exit(1)

    levels = {
        0: logging.ERROR,
        1: logging.WARNING,
        2: logging.INFO,
        3: logging.DEBUG,
    }
    logging.basicConfig(level=levels.get(opts.verbosity, logging.DEBUG))

    loader = ooaofooa.Loader()
    for filename in args:
        loader.filename_input(filename)

    c = loader.build_component(opts.component, opts.derived)
    xtuml.persist_database(c, opts.output)
Esempio n. 2
0
 def test_persist_database(self):
     schema = '''
         CREATE TABLE X (BOOLEAN BOOLEAN,
                         INTEGER INTEGER,
                         REAL REAL,
                         STRING STRING,
                         UNIQUE_ID UNIQUE_ID,
                         Next UNIQUE_ID);
                         
     CREATE ROP REF_ID R1 FROM 1C X ( Next ) PHRASE 'precedes'
                          TO   1C X ( UNIQUE_ID ) PHRASE 'succeeds';
     '''
     loader = xtuml.ModelLoader()
     loader.input(schema)
     m = loader.build_metamodel()
     m.new('X', Boolean=True, Integer=4, String='str', Uniquie_Id=5)
     
     s = xtuml.serialize(m)
 
     (_, filename) = tempfile.mkstemp()
     try:
         xtuml.persist_database(m, filename)
         with open(filename) as f:
             self.assertEqual(s, f.read())
     finally:
         atexit.register(os.remove, filename)
Esempio n. 3
0
    def test_persist_database(self):
        schema = '''
            CREATE TABLE X (BOOLEAN BOOLEAN,
                            INTEGER INTEGER,
                            REAL REAL,
                            STRING STRING,
                            UNIQUE_ID UNIQUE_ID,
                            Next UNIQUE_ID);
                            
        CREATE ROP REF_ID R1 FROM 1C X ( Next ) PHRASE 'precedes'
                             TO   1C X ( UNIQUE_ID ) PHRASE 'succeeds';
        '''
        loader = xtuml.ModelLoader()
        loader.input(schema)
        m = loader.build_metamodel()
        m.new('X', Boolean=True, Integer=4, String='str', Uniquie_Id=5)

        s = xtuml.serialize(m)

        (_, filename) = tempfile.mkstemp()
        try:
            xtuml.persist_database(m, filename)
            with open(filename) as f:
                self.assertEqual(s, f.read())
        finally:
            atexit.register(os.remove, filename)
Esempio n. 4
0
def main():
    '''
    Parse argv for options and arguments, and start schema generation.
    '''
    parser = optparse.OptionParser(usage="%prog [options] <model_path> [another_model_path...]",
                                   version=xtuml.version.complete_string,
                                   formatter=optparse.TitledHelpFormatter())
                                   
    parser.set_description(__doc__.strip())
    
    parser.add_option("-c", "--component", dest="component", metavar="NAME",
                      help="export sql schema for the component named NAME",
                      action="store", default=None)
    
    parser.add_option("-d", "--derived-attributes", dest="derived",
                      help="include derived attributes in the schema",
                      action="store_true", default=False)
    
    parser.add_option("-o", "--output", dest='output', metavar="PATH",
                      help="save sql schema to PATH (required)",
                      action="store", default=None)
    
    parser.add_option("-v", "--verbosity", dest='verbosity', action="count", 
                      help="increase debug logging level", default=2)

    
    (opts, args) = parser.parse_args()
    if len(args) == 0 or opts.output is None:
        parser.print_help()
        sys.exit(1)

    levels = {
              0: logging.ERROR,
              1: logging.WARNING,
              2: logging.INFO,
              3: logging.DEBUG,
    }
    logging.basicConfig(level=levels.get(opts.verbosity, logging.DEBUG))

    loader = ooaofooa.Loader()
    for filename in args:
        loader.filename_input(filename)

    c = loader.build_component(opts.component, opts.derived)
    xtuml.persist_database(c, opts.output)
Esempio n. 5
0
def main(argv=None):
    loglevel = logging.INFO
    database_filename = 'mcdbms.gen'
    enable_persistance = True
    dump_sql_file = ''
    force_overwrite = False
    emit_when = 'change'
    diff_filename = None
    inputs = list()
    includes = ['.']
    check_integrity = False
    argv = argv or sys.argv
    quiet_insert_mismatch = False
    
    i = 1
    while i < len(argv):
        if argv[i] == '-arch':
            i += 1
            inputs.append((argv[i], 'arc'))

        elif argv[i] == '-import':
            i += 1
            inputs.append((argv[i], 'sql'))

        elif argv[i] == '-include':
            i += 1
            includes.append(argv[i])

        elif argv[i] == '-emit':
            i += 1
            emit_when = argv[i]
    
        elif argv[i] == '-f':
            i += 1
            database_filename = argv[i]

        elif argv[i] == '-force':
            force_overwrite = True

        elif argv[i] == '-integrity':
            check_integrity = True
            
        elif argv[i] == '-diff':
            i += 1
            diff_filename = argv[i]
            
        elif argv[i] == '-nopersist':
            enable_persistance = False
            
        elif argv[i] == '-dumpsql':
            i += 1
            dump_sql_file = argv[i]

        elif argv[i] == '-v':
            i += 1
            loglevel = logging.DEBUG
            
        elif argv[i] == '-qim':
            quiet_insert_mismatch = True
            
        elif argv[i] == '-version':
            print(rsl.version.complete_string)
            sys.exit(0)
            
        elif argv[i] == '-h':
            print(complete_usage % argv[0])
            sys.exit(0)
            
        elif argv[i] in ['//', '-ignore_rest']:
            break

        # ignore these options
        elif argv[i] in ['-lVHs', '-lSCs', '-l2b', '-l2s', '-l3b', '-l3s',
                             '-q', '-l']:
            pass
            
        # ignore these options (which expects a following value)
        elif argv[i] in ['-d', '-priority', '-e', '-t', '-#']:
            i += 1
            
        else:
            print("PARSE ERROR: Argument: %s" % argv[i])
            print("Couldn't find match for argument")
            print(brief_usage % (argv[0], argv[0]))
            sys.exit(1)
            
        i += 1
        
    logging.basicConfig(stream=sys.stdout, level=loglevel)
    
    id_generator = xtuml.IntegerGenerator()
    metamodel = xtuml.MetaModel(id_generator)
    loader = xtuml.ModelLoader()
    
    if quiet_insert_mismatch:
        load_logger = logging.getLogger(xtuml.load.__name__)
        load_logger.setLevel(logging.ERROR)

    if diff_filename:
        with open(diff_filename, 'w') as f:
            f.write(' '.join(argv))
            f.write('\n')
            
    if enable_persistance and os.path.isfile(database_filename):
        loader.filename_input(database_filename)
        
    for filename, kind in inputs:
        if kind == 'sql':
            loader.filename_input(filename)
            
        elif kind == 'arc':
            loader.populate(metamodel)
            rt = rsl.Runtime(metamodel, emit_when, force_overwrite, diff_filename)
            ast = rsl.parse_file(filename)
            rsl.evaluate(rt, ast, includes)
            loader = xtuml.ModelLoader()
            
        else:
            #should not happen
            print("Unknown %s is of unknown kind '%s', skipping it" % (filename, kind))

    errors = 0
    if check_integrity:
        errors += xtuml.check_association_integrity(metamodel)
        errors += xtuml.check_uniqueness_constraint(metamodel)
        
    if enable_persistance:
        xtuml.persist_database(metamodel, database_filename)

    if dump_sql_file != '':
        xtuml.persist_instances(metamodel, dump_sql_file)

    return errors
Esempio n. 6
0
def main(argv=None):
    loglevel = logging.INFO
    database_filename = 'mcdbms.gen'
    enable_persistance = True
    dump_sql_file = ''
    force_overwrite = False
    emit_when = 'change'
    diff_filename = None
    inputs = list()
    includes = ['.']
    check_integrity = False
    argv = argv or sys.argv
    quiet_insert_mismatch = False

    i = 1
    while i < len(argv):
        if argv[i] == '-arch':
            i += 1
            inputs.append((argv[i], 'arc'))

        elif argv[i] == '-import':
            i += 1
            inputs.append((argv[i], 'sql'))

        elif argv[i] == '-include':
            i += 1
            includes.append(argv[i])

        elif argv[i] == '-emit':
            i += 1
            emit_when = argv[i]

        elif argv[i] == '-f':
            i += 1
            database_filename = argv[i]

        elif argv[i] == '-force':
            force_overwrite = True

        elif argv[i] == '-integrity':
            check_integrity = True

        elif argv[i] == '-diff':
            i += 1
            diff_filename = argv[i]

        elif argv[i] == '-nopersist':
            enable_persistance = False

        elif argv[i] == '-dumpsql':
            i += 1
            dump_sql_file = argv[i]

        elif argv[i] == '-v':
            i += 1
            loglevel = logging.DEBUG

        elif argv[i] == '-qim':
            quiet_insert_mismatch = True

        elif argv[i] == '-version':
            print(rsl.version.complete_string)
            sys.exit(0)

        elif argv[i] == '-h':
            print(complete_usage % argv[0])
            sys.exit(0)

        elif argv[i] in ['//', '-ignore_rest']:
            break

        # ignore these options
        elif argv[i] in [
                '-lVHs', '-lSCs', '-l2b', '-l2s', '-l3b', '-l3s', '-q', '-l'
        ]:
            pass

        # ignore these options (which expects a following value)
        elif argv[i] in ['-d', '-priority', '-e', '-t', '-#']:
            i += 1

        else:
            print("PARSE ERROR: Argument: %s" % argv[i])
            print("Couldn't find match for argument")
            print(brief_usage % (argv[0], argv[0]))
            sys.exit(1)

        i += 1

    logging.basicConfig(stream=sys.stdout, level=loglevel)

    id_generator = xtuml.IntegerGenerator()
    metamodel = xtuml.MetaModel(id_generator)
    loader = xtuml.ModelLoader()

    if quiet_insert_mismatch:
        load_logger = logging.getLogger(xtuml.load.__name__)
        load_logger.setLevel(logging.ERROR)

    if diff_filename:
        with open(diff_filename, 'w') as f:
            f.write(' '.join(argv))
            f.write('\n')

    if enable_persistance and os.path.isfile(database_filename):
        loader.filename_input(database_filename)

    for filename, kind in inputs:
        if kind == 'sql':
            loader.filename_input(filename)

        elif kind == 'arc':
            loader.populate(metamodel)
            rt = rsl.Runtime(metamodel, emit_when, force_overwrite,
                             diff_filename)
            ast = rsl.parse_file(filename)
            rsl.evaluate(rt, ast, includes)
            loader = xtuml.ModelLoader()

        else:
            #should not happen
            print("Unknown %s is of unknown kind '%s', skipping it" %
                  (filename, kind))

    errors = 0
    if check_integrity:
        errors += xtuml.check_association_integrity(metamodel)
        errors += xtuml.check_uniqueness_constraint(metamodel)

    if enable_persistance:
        xtuml.persist_database(metamodel, database_filename)

    if dump_sql_file != '':
        xtuml.persist_instances(metamodel, dump_sql_file)

    return errors
Esempio n. 7
0
def main():
    loglevel = 2
    database_filename = "mcdbms.gen"
    enable_persistance = True
    inputs = list()

    i = 1
    while i < len(sys.argv):
        if sys.argv[i] == "-arch":
            i += 1
            inputs.append((sys.argv[i], "arc"))

        elif sys.argv[i] == "-import":
            i += 1
            inputs.append((sys.argv[i], "sql"))

        elif sys.argv[i] == "-f":
            i += 1
            database_filename = sys.argv[i]

        elif sys.argv[i] == "-nopersist":
            enable_persistance = False

        elif sys.argv[i] == "-v":
            loglevel = max(loglevel, 3)

        elif sys.argv[i] == "-version":
            print(rsl.version.complete_string)
            sys.exit(0)

        elif sys.argv[i] == "-h":
            print(complete_usage % sys.argv[0])
            sys.exit(0)

        elif sys.argv[i] in ["//", "-ignore_rest"]:
            break

        # ignore these options
        elif sys.argv[i] in ["-lVHs", "-lSCs", "-l2b", "-l2s", "-l3b", "-l3s", "-nopersist", "-q", "-l"]:
            pass

        # ignore these options (which expects a following value)
        elif sys.argv[i] in ["-d", "-priority", "-e", "-t", "-t", "-f", "#"]:
            i += 1

        else:
            print("PARSE ERROR: Argument: %s" % sys.argv[i])
            print("Couldn't find match for argument")
            print(brief_usage % (sys.argv[0], sys.argv[0]))
            sys.exit(1)

        i += 1

    levels = {0: logging.ERROR, 1: logging.WARNING, 2: logging.INFO, 3: logging.DEBUG}
    logging.basicConfig(stream=sys.stdout, level=levels.get(loglevel, logging.DEBUG))

    id_generator = xtuml.IntegerGenerator()
    metamodel = xtuml.MetaModel(id_generator)

    if enable_persistance and os.path.isfile(database_filename):
        loader = xtuml.ModelLoader()
        loader.filename_input(database_filename)
        loader.populate(metamodel)

    for filename, kind in inputs:
        if kind == "sql":
            loader = xtuml.ModelLoader()
            loader.filename_input(filename)
            loader.populate(metamodel)

        elif kind == "arc":
            rt = rsl.Runtime(metamodel, emit="change")
            ast = rsl.parse_file(filename)
            rsl.evaluate(rt, ast, ["."])

        else:
            # should not happen
            print("Unknown %s is of unknown kind '%s', skipping it" % (filename, kind))

    if enable_persistance:
        xtuml.persist_database(metamodel, database_filename)