def execute(self, args, options): filters = {} if options.filter: if not os.path.exists(options.filter): self.parser().error('filter: unable to open for reading') filters = create_filter(options.filter, options.include_tags, options.exclude_tags) input, output = args # load the source state saved_state = None for provider in PROVIDERS: if provider.can_load(input): saved_state = provider.load(input, filters) break else: self.parser().error('state: unable to open for reading') # save the generated SQL for provider in PROVIDERS: if provider.can_save(output) and hasattr(provider, 'save_sql'): provider.save_sql(saved_state, output, options.comment, options.type) break else: self.parser().error('output: unable to generate SQL')
def execute(self, args, options): filters = {} if options.filter: if not os.path.exists(options.filter): self.parser().error('filter: unable to open for reading') filters = create_filter(options.filter, options.include_tags, options.exclude_tags) input, output = args # load the source state saved_state = None for provider in PROVIDERS: if provider.can_load(input): saved_state = provider.load(input, filters) break else: self.parser().error('source: unable to open for reading') # (re)name it if applicable if options.name: saved_state.name = options.name elif saved_state.setdefault('name') is None: saved_state.name = get_uuid4() # save it to target state for provider in PROVIDERS: if provider.can_save(output): provider.save(saved_state, output, options.comment) break else: self.parser().error('target: unable to open for writing')
def execute(self, args, options): filters = {} if options.filter: if not os.path.exists(options.filter): self.parser().error('filter: unable to open for reading') filters = create_filter(options.filter, options.include_tags, options.exclude_tags) source_location, target_location = args source = target = None # load the source state for provider in PROVIDERS: if provider.can_load(source_location): source = provider.load(source_location, filters) break else: self.parser().error('source: unable to open for reading') # load the target state for provider in PROVIDERS: if provider.can_load(target_location): target = provider.load(target_location, filters) break else: self.parser().error('target: unable to open for reading') if not source.__class__ == target.__class__: self.parser().error('source and target represent different databases') source.setdefault('name') target.setdefault('name') self.source_version, self.target_version = source.name, target.name source.name = target.name = None if source == target: return for db in Database.list(): if db.__state__ == source.__class__: self.db = db self.builders = {} self.tags = {} for builder in self.db.__builders__: self.builders[builder.DbClass] = builder self.tags[builder.DbClass] = builder.XmlTag self.diff = [] self.compute_diff([], source, target) if not options.html: self.print_simple_diff() else: self.print_html_diff(source, target, options.lines)