def main(): ''' Parse argv for options and arguments, and start schema generation. ''' parser = optparse.OptionParser(usage="%prog [options] <model_path> [another_model_path...]", formatter=optparse.TitledHelpFormatter()) parser.set_description(__doc__.strip()) parser.add_option("-f", "--function", dest="function", metavar="NAME", help="append integrity checking actions to functions named NAME (required)", action="store", default=None) parser.add_option("-o", "--output", dest='output', metavar="PATH", help="save sql model instances 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 None in [opts.output, opts.function]: 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)) m = ooaofooa.load_metamodel(args) for c_c in m.select_many('C_C'): filt = lambda sel: ooaofooa.is_contained_in(sel, c_c) and sel.Name == opts.function s_sync = m.select_any('S_SYNC', filt) if not s_sync: s_sync = m.new('S_SYNC', Name=opts.function) pe_pe = m.new('PE_PE') s_dt = m.select_any('S_DT', where(Name='boolean')) relate(pe_pe, s_sync, 8001) relate(s_dt, s_sync, 25) generate_actions(m, c_c, s_sync) xtuml.persist_instances(m, opts.output)
def build_component(m, c_c): ''' Build an xsd complex element out of a C_C, including its packaged S_DT and O_OBJ. ''' component = ET.Element('xs:element', name=c_c.name) classes = ET.SubElement(component, 'xs:complexType') classes = ET.SubElement(classes, 'xs:sequence') scope_filter = lambda selected: ooaofooa.is_contained_in(selected, c_c) for o_obj in m.select_many('O_OBJ', scope_filter): cls = build_class(o_obj) classes.append(cls) return component
def generate_actions(m, c_c, s_sync): text = '' handler = { 'R_SIMP': mk_simple_association_check, 'R_ASSOC': mk_linked_association_check, 'R_SUBSUP': mk_subsuper_association_check, 'R_COMP': mk_derived_association_check, } filt = lambda sel: ooaofooa.is_contained_in(sel, c_c) for r_rel in m.select_many('R_REL', filt): inst = subtype(r_rel, 206) fn = handler.get(inst.__class__.__name__) text += fn(m, inst) o_objs = m.select_many('O_OBJ', filt) for o_id in many(o_objs).O_ID[104](): text += mk_unique_constraint_check(m, o_id) text += 'return True;' s_sync.Action_Semantics_internal = text s_sync.Suc_Pars = 1
def build_schema(m, c_c): ''' Build an xsd schema from a bridgepoint component. ''' schema = ET.Element('xs:schema') schema.set('xmlns:xs', 'http://www.w3.org/2001/XMLSchema') global_filter = lambda selected: ooaofooa.is_global(selected) for s_dt in m.select_many('S_DT', global_filter): datatype = build_type(s_dt) if datatype is not None: schema.append(datatype) scope_filter = lambda selected: ooaofooa.is_contained_in(selected, c_c) for s_dt in m.select_many('S_DT', scope_filter): datatype = build_type(s_dt) if datatype is not None: schema.append(datatype) component = build_component(m, c_c) schema.append(component) return schema
def main(): ''' Parse argv for options and arguments, and start schema generation. ''' parser = optparse.OptionParser( usage="%prog [options] <model_path> [another_model_path...]", formatter=optparse.TitledHelpFormatter()) parser.set_description(__doc__.strip()) parser.add_option( "-f", "--function", dest="function", metavar="NAME", help= "append integrity checking actions to functions named NAME (required)", action="store", default=None) parser.add_option("-o", "--output", dest='output', metavar="PATH", help="save sql model instances 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 None in [opts.output, opts.function]: 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)) m = ooaofooa.load_metamodel(args) for c_c in m.select_many('C_C'): filt = lambda sel: ooaofooa.is_contained_in( sel, c_c) and sel.Name == opts.function s_sync = m.select_any('S_SYNC', filt) if not s_sync: s_sync = m.new('S_SYNC', Name=opts.function) pe_pe = m.new('PE_PE') s_dt = m.select_any('S_DT', where(Name='boolean')) relate(pe_pe, s_sync, 8001) relate(s_dt, s_sync, 25) generate_actions(m, c_c, s_sync) xtuml.persist_instances(m, opts.output)