Ejemplo n.º 1
0
    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')
Ejemplo n.º 2
0
    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')
Ejemplo n.º 3
0
    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')
Ejemplo n.º 4
0
    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)