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)
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)
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)
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
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
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)