def execute(self, executable, properties): script = executable['script'] cp = Properties() cp.set_property('database', executable['database']) if 'schema' in executable.keys(): cp.set_property('schema', executable['schema']) if 'environment' in properties.keys(): cp.set_property('environment', properties.get_property('environment')) if 'previous' in properties.keys(): cp.set_property('previous', properties.get_property('previous')) stream = PreProcessor.parse(script, cp) tmp = File("tmp.sql") f = open(tmp.get_url(), 'w') f.write(stream) f.close() #script_reader = open(tmp.get_url()) feedback = File('feedback.log') feedback_writer = open(feedback.get_url(), 'w') statement = "sqlcmd -b -S " + executable['host'] + " -U " + executable[ 'username'] + ' -P ' + executable['password'] + " -d " + executable[ 'database'] + " -i " + tmp.get_url() call = CallFactory.new_call(statement) call['stdout'] = feedback_writer call['stderr'] = feedback_writer result = Shell.execute(call) self.set_result(result)
def execute(self, executable, properties): script = executable['script'] cp = Properties() cp.set_property('database', executable['database']) if 'environment' in properties.keys(): cp.set_property('environment', properties.get_property('environment')) if 'previous' in properties.keys(): cp.set_property('previous', properties.get_property('previous')) stream = PreProcessor.parse(script, cp) tmp = File("tmp.sql") f = open(tmp.get_url(), 'w') f.write(stream) f.close() script_reader = open(tmp.get_url()) feedback = File('feedback.log') feedback_writer = open(feedback.get_url(), 'w') statement = "mysql --show-warnings --host=" + executable[ 'host'] + " --user="******" --password="******" " + executable['database'] call = CallFactory.new_call(statement) call['stdin'] = script_reader call['stdout'] = feedback_writer call['stderr'] = feedback_writer result = Shell.execute(call) self.set_result(result)
def testCheckVersion(self): script = File("checkversion.sql") properties = Properties() properties.set_property('name', 'app_prop') properties.set_property('previous', '1.0.0') stream = PreProcessor.parse(script, properties) tmp = File("tmp.sql") f = open(tmp.get_url(), 'w') f.write(stream) f.close() script_reader = open(tmp.get_url()) feedback = File('feedback.log') feedback_writer = open(feedback.get_url(), 'w') statement = "mysql --show-warnings --host=localhost --user=apps --password=apps acme" call = CallFactory.new_call(statement) call['stdin'] = script_reader call['stdout'] = feedback_writer call['stderr'] = feedback_writer result = Shell.execute(call) print "result", result
def execute(self, executable, properties): """ Execute the script provided by `executable` on the target server. :type executable: dict :param executable: Should contain the following keys and values: * **host**: The address of the server to connect to; * **port**: Server port to connect to; * **database**: The database name; * **schema**: The schema to use; * **username**: Database username; * **password**: Database user password; * **script**: Path to the script to execute. :type properties: noora.system.Properties.Properties :param properties: A Noora project properties instance """ script = executable['script'] cp = dict() cp['database'] = executable['database'] if 'schema' in executable.keys(): cp['schema'] = executable['schema'] if 'environment' in properties.keys(): cp['environment'] = properties.get('environment') if 'previous' in properties.keys(): cp['previous'] = properties.get('previous') stream = PreProcessor.parse(script, cp) tmp = File("tmp.sql") f = open(tmp.get_url(), 'w') f.write(stream) f.close() # FIXME: remove? #script_reader = open(tmp.get_url()) feedback = File('feedback.log') feedback_writer = open(feedback.get_url(), 'w') # FIXME: rewrite with format statement = "sqlcmd -b -S {host},{port} -U {user} -P {passwd} -d {db} -i {url}".format( host=executable['host'], port=executable.get('port') or 1433, user=executable['username'], passwd=executable['password'], db=executable['database'], url=tmp.get_url(), ) call = CallFactory.new_call(statement) call['stdout'] = feedback_writer call['stderr'] = feedback_writer result = Shell.execute(call) self.set_result(result)
def execute(self, executable, properties): """ Execute the script provided by `executable` on the target server. :type executable: dict :param executable: Should contain the following keys and values: * **host**: The address of the server to connect to; * **port**: Server port to connect to; * **database**: The database name; * **username**: Database username; * **password**: Database user password; * **script**: Path to the script to execute. :type properties: noora.system.Properties.Properties :param properties: A Noora project properties instance """ script = executable['script'] cp = { 'database': executable['database'], 'username': executable['username'].split('@')[0] } if 'environment' in properties.keys(): cp['environment'] = properties.get('environment') if 'previous' in properties.keys(): cp['previous'] = properties.get('previous') stream = PreProcessor.parse(script, cp) tmp = File("tmp.sql") f = open(tmp.get_url(), 'w') f.write(stream) f.close() script_reader = open(tmp.get_url()) feedback = File('feedback.log') feedback_writer = open(feedback.get_url(), 'w') statement = \ "PGPASSWORD={passwd} psql -h {host} -p {port} -U {user} -d {db} " \ "-v ON_ERROR_STOP=1".format( host=executable['host'], port=executable.get('port'), user=executable['username'], passwd=executable['password'], db=executable['database'], ) call = CallFactory.new_call(statement) call['stdin'] = script_reader call['stdout'] = feedback_writer call['stderr'] = feedback_writer result = Shell.execute(call) self.set_result(result)
def __get_config(self): """ Load a myproject.json file and update some extra parameters if this is an actual project """ current_dir = self.__props.get("current.dir") project_file = self.__props.get("project.file") config_file = File(os.path.join(current_dir, project_file)) if not config_file.exists(): noora_dir = self.__props.get("noora.dir") config_file = File(os.path.join(noora_dir, project_file)) # Read project configuration with open(config_file.get_url()) as fd: data = json.load(fd) return data
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."
def execute(self, properties, arguments): """ Build the package after verifying version is valid, and database, if provided. :param properties: The project properties :param arguments: A dict of { 'version': 'The version to package for' 'database': 'The database to package for (optional)' } """ prepared_args = self._validate_and_prepare(properties, arguments) version = prepared_args['version'] databases = prepared_args['databases'] current_dir = properties.get('current.dir') component_name = properties.get('component_name') target_dir = os.path.join(current_dir, properties.get('component_target_folder')) objects = properties.get('create_objects') if version == properties.get("default_version"): build_dir = properties.get("create.dir") else: build_dir = os.path.join(properties.get("alter.dir"), version) # exclude the file 'version.sql', this file is excluded from the dat listing below. component_excluded_files = properties.get('component_excluded_files') excluded_files = properties.get('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 '{}'".format(version)) zip_file = os.path.join(target_dir, component_name + '_' + version + '.zip') zip_handle = ZipFile(zip_file, 'w') for database in databases: for obj in objects: if not obj == 'lib': # global ddl objects folder = File(os.path.join(build_dir, database, 'ddl', obj)) zip_dir = File(os.path.join(component_name + '_' + version, 'ddl', obj)) 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 if version == properties.get("default_version"): version_statement = properties.get("component_insert_statement") else: version_statement = properties.get("component_update_statement") 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("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 {} created.".format(version))