def main(): if len(sys.argv) < 2: logger.info('usage: %s <path to ooaofooa model folder>' % sys.argv[0]) sys.exit(1) loader = ooaofooa.Loader() for filename in sys.argv[1:]: loader.filename_input(filename) m = loader.build_metamodel() for r_rel in m.select_many('R_REL', description_filter): logger.info('Filtering R%d' % r_rel.Numb) xtuml.delete(r_rel) for o_obj in m.select_many('O_OBJ', description_filter): logger.info('Filtering %s' % o_obj.Key_Lett) for r_rel in many(o_obj).R_OIR[201].R_REL[201](): logger.info('Filtering R%d' % r_rel.Numb) for r_oir in many(r_rel).R_OIR[201](): xtuml.unrelate(r_rel, r_oir, 201) xtuml.delete(r_rel) xtuml.delete(o_obj) for o_attr in m.select_many('O_ATTR', where(Name='SMspd_ID')): if not one(o_attr).O_RATTR[106](): continue for o_oida in many(o_attr).O_OIDA[105](): for o_rtida in many(o_oida).O_RTIDA[110](): xtuml.delete(o_rtida) xtuml.delete(o_oida) for o_ref in many(o_attr).O_RATTR[106].O_REF[108](): xtuml.delete(o_ref) c = ooaofooa.mk_component(m, None, derived_attributes=True) metaclass = c.find_metaclass('ACT_ACT') metaclass.insert_attribute(index=5, name='return_value', type_name='INTEGER') for o_obj in m.select_many('O_OBJ'): for o_attr in many(o_obj).O_ATTR[102](description_filter): logger.info('Filtering %s.%s' % (o_obj.Key_Lett, o_attr.Name)) metaclass = c.find_metaclass(o_obj.Key_Lett) metaclass.delete_attribute(o_attr.Name) xtuml.persist_schema(c, '/dev/stdout')
def main(): ''' Parse argv for options and arguments, and start schema generation. ''' parser = optparse.OptionParser(usage="%prog [options] arg ...", formatter=optparse.TitledHelpFormatter()) parser.set_description(__doc__) 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("-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) source = loader.build_metamodel() c_c = source.select_any('C_C', lambda inst: inst.Name == opts.component) if not c_c and opts.component: logger.error('unable to find a component named %s' % opts.component) logger.info('available components to choose from are: %s' % ', '.join([c_c.Name for c_c in source.select_many('C_C')])) sys.exit(1) target = mk_metamodel(source, c_c) xtuml.persist_schema(target, opts.output)
def test_persist_schema(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 ( UNIQUE_ID ) PHRASE 'precedes' TO 1C X ( Next ) PHRASE 'succeeds'; ''' loader = xtuml.ModelLoader() loader.input(schema) m = loader.build_metamodel() s = xtuml.serialize_schema(m) (_, filename) = tempfile.mkstemp() try: xtuml.persist_schema(m, filename) with open(filename) as f: self.assertEqual(s, f.read()) finally: atexit.register(os.remove, filename)