def testDropPass(self): NOORA_DIR = os.path.dirname(noora.__file__) CURRENT_DIR = os.path.abspath('.') properties = Properties() properties.set_property("noora.dir", NOORA_DIR) properties.set_property("current.dir", CURRENT_DIR) properties.set_property("plugin.dir", os.path.join(NOORA_DIR, 'plugins')) properties.set_property("project.file", "myproject.json") app = App() f = app.get_config_file(properties) f = open(f.get_url()) data = json.load(f) for key in data.keys(): properties.set_property(key, data[key]) parser = argparse.ArgumentParser( description="mynoora, a sql deployment tool", add_help=False) parser.add_argument("commands", help="display a square of a given number", type=str, nargs='+') parser.add_argument('-r', action='store_true', help='show the revision') parser.add_argument('-t', type=str, help='version', required=False) arguments = parser.parse_args(['generate', '-t=mssql']) plugin = GeneratePlugin() plugin.execute(arguments, properties)
def testGeneratePass(self): properties = dict() properties["noora.dir"] = noora.__file__ properties["current.dir"] = os.path.abspath('.') properties["plugin.dir"] = os.path.join(properties.get('noora.dir'), 'plugins') properties["project.file"] = "myproject.json" app = App() f = app.get_config_file(properties) f = open(f.get_url()) data = json.load(f) for key in data.keys(): properties[key] = data[key] parser = argparse.ArgumentParser( description="mynoora, a sql deployment tool", add_help=False) parser.add_argument("commands", help="display a square of a given number", type=str, nargs='+') parser.add_argument('-r', action='store_true', help='show the revision') parser.add_argument('-t', type=str, help='version', required=False) arguments = parser.parse_args(['generate', '-t=mysql']) plugin = GeneratePlugin() plugin.execute(arguments, properties)
def testDropPass(self): NOORA_DIR = os.path.dirname(noora.__file__) CURRENT_DIR = os.path.abspath('.') properties = Properties() properties.set_property("noora.dir", NOORA_DIR) properties.set_property("current.dir", CURRENT_DIR) properties.set_property("plugin.dir", os.path.join(NOORA_DIR, 'plugins')) properties.set_property("project.file", "myproject.json") app = App() f = app.get_config_file(properties) f = open(f.get_url()) data = json.load(f) for key in data.keys(): properties.set_property(key, data[key]) parser = argparse.ArgumentParser(description="mynoora, a sql deployment tool", add_help=False) parser.add_argument("commands", help="display a square of a given number", type=str, nargs='+') parser.add_argument('-r', action='store_true', help='show the revision') parser.add_argument('-h', type=str, help='host', required=False) parser.add_argument('-s', type=str, help='schema', required=False) parser.add_argument('-e', type=str, help='environment', required=False) parser.add_argument('-a', type=str, help='alias', required=False) arguments = parser.parse_args(['drop', '-h=elsevierdb4.c07v9zv3jhxs.eu-west-1.rds.amazonaws.com,1433']) plugin = DropPlugin() plugin.execute(arguments, properties)
def testCreatePass(self): # retrieve the basic properties. properties = App.properties() # load the properties from the myproject.json file. App.load_properties(properties) # retrieve the basic mynoora parser. parser = App.get_parser() args = ['create', '-h', 'localhost'] plugin = CreatePlugin() arguments = plugin.parse_args(parser, args) plugin.set_connector(MysqlConnectorStub()) plugin.execute(arguments, properties)
def main(args=None): properties = Properties() properties.set_property("noora.dir", NOORA_DIR) properties.set_property("current.dir", CURRENT_DIR) properties.set_property("plugin.dir", os.path.join(NOORA_DIR, 'plugins')) properties.set_property("project.file", "myproject.json") # find the project config file myproject.json, in the current folder or in the noora folder app = App() f = app.get_config_file(properties) f = open(f.get_url()) data = json.load(f) for key in data.keys(): properties.set_property(key, data[key]) # Instantiate the argument parser parser = argparse.ArgumentParser(description="mynoora, a sql deployment tool", add_help=False) parser.add_argument("commands", help="display a square of a given number", type=str, nargs='+') parser.add_argument('-r', action='store_true', help='show the revision') parser.add_argument('-v', type=str, help='version', required=False) parser.add_argument('-h', type=str, help='host', required=False) parser.add_argument('-d', type=str, help='database', required=False) parser.add_argument('-e', type=str, help='environment', required=False) parser.add_argument('-a', type=str, help='alias', required=False) parser.add_argument('-s', type=str, help='schema', required=False) parser.add_argument('-t', type=str, help='technology', required=False) args = parser.parse_args(args) # show the revision if args.r: print noora.__title__ + " version " + noora.__version__ exit(0) # execute the given commands commands = args.commands Fail.fail_on_no_command(commands) for command in commands: plugin = App.find_plugin(command, properties) Fail.fail_on_invalid_plugin(plugin) plugin.execute(args, properties)
def testBuildPass(self): NOORA_DIR = os.path.dirname(noora.__file__) CURRENT_DIR = os.path.abspath('.') properties = dict() properties["noora.dir"] = NOORA_DIR properties["current.dir"] = CURRENT_DIR properties["plugin.dir"] = os.path.join(NOORA_DIR, 'plugins') properties["project.file"] = "myproject.json" app = App() f = app.get_config_file(properties) f = open(f.get_url()) data = json.load(f) for key in data.keys(): properties[key] = data[key] parser = argparse.ArgumentParser( description="mynoora, a mysql deployment tool", add_help=False) parser.add_argument("commands", help="display a square of a given number", type=str, nargs='+') parser.add_argument('-r', action='store_true', help='show the revision') parser.add_argument('-v', type=str, help='version', required=False) parser.add_argument('-h', type=str, help='host', required=False) parser.add_argument('-d', type=str, help='database', required=False) parser.add_argument('-e', type=str, help='environment', required=False) parser.add_argument('-a', type=str, help='alias', required=False) arguments = parser.parse_args(['build', '-v=1.0.1']) plugin = BuildPlugin() plugin.execute(arguments, properties)
def execute(self, arguments, properties): properties.set_property('create.dir', os.path.join(properties.get_property('current.dir'), 'create')) properties.set_property('alter.dir', os.path.join(properties.get_property('current.dir'), 'alter')) version = arguments.v Fail.fail_on_no_version(version) Fail.fail_on_unknown_version(version, properties) default_databases = properties.get_property('databases') databases = Ora.nvl(arguments.d, default_databases) Fail.fail_on_invalid_database(arguments.d, properties) current_dir = properties.get_property('current.dir') component_name = properties.get_property('component_name') target_dir = os.path.join(current_dir, properties.get_property('component_target_folder')) objects = properties.get_property('create_objects') build_dir = App.build_dir(version, properties) # exclude the file 'version.sql', this file is excluded from the dat listing below. component_excluded_files = properties.get_property('component_excluded_files') excluded_files = properties.get_property('excluded_files') excluded_files.extend(component_excluded_files) # create the target folder, if not present. if not File(target_dir).exists(): os.makedirs(target_dir) print "building component with version '" + version + "'" zip_file = os.path.join(target_dir, component_name + '_' + version + '.zip') zip_handle = ZipFile(zip_file, 'w') for database in databases: for object in objects: if not object == 'lib': # global ddl objects folder = File(os.path.join(build_dir, database, 'ddl', object)) zip_dir = File(os.path.join(component_name + '_' + version, 'ddl', object)) files = Files.list_filtered(folder, properties) for file in files: print file.get_url() target_file = File(os.path.join(zip_dir.get_url(), file.tail())) zip_handle.write(file.get_url(), target_file.get_url(), ZIP_DEFLATED) # global dat files folder = File(os.path.join(build_dir, database, 'dat')) zip_dir = File(os.path.join(component_name + '_' + version, 'dat')) files = Files.list_filtered(folder, properties) for file in files: print file.get_url() target_file = File(os.path.join(zip_dir.get_url(), file.tail())) zip_handle.write(file.get_url(), target_file.get_url(), ZIP_DEFLATED) # create the version script in the dat folder version_statement = self.version_statement(version, properties) version_statement = version_statement.replace('<version>', version) version_statement = version_statement.replace('<name>', component_name) f = open('version.sql', 'w') f.write(version_statement) f.close() zip_dir = File(os.path.join(component_name + '_' + version, 'dat')) target_file = File(os.path.join(zip_dir.get_url(), 'version.sql')) zip_handle.write('version.sql', target_file.get_url()) # remove the version.sql file. os.remove('version.sql') # create the checkversion script in the root folder # first retrieve the previous version for the checkversion script versions = Versions() version_loader = VersionLoader(versions) version_loader.load(properties) versions.sort() previous = versions.previous(Version(version)) component_select_statement = properties.get_property("component_select_statement") component_select_statement = component_select_statement.replace('<name>', component_name) component_select_statement = component_select_statement.replace('<previous>', previous.get_value()) print component_select_statement f = open('checkversion.sql', 'w') f.write(component_select_statement) f.close() zip_dir = File(os.path.join(component_name + '_' + version)) target_file = File(os.path.join(zip_dir.get_url(), 'checkversion.sql')) zip_handle.write('checkversion.sql', target_file.get_url()) # remove the version.sql file. os.remove('checkversion.sql') zip_handle.close() print "component with version " + version + " created."