def execute(self, properties, arguments): """ Drop a database after checking if schema and environment are valid values. Also check that host is not on the block list. :type properties: system.Properties.Properties :param properties: The project properties :type arguments: dict :param arguments: This dict contains the plugin arguments: * **host**: The hostname to drop on; * **environment**: Environment to drop the database from. """ prepared_args = self._validate_and_prepare(properties, arguments) host = prepared_args['host'] environment = prepared_args['environment'] databases = properties.get('databases') objects = properties.get('drop_objects') # retrieve the user credentials for this database project. users = properties.get('postgresql_users') # try to retrieve the users from the credentials file, when no users are configured in # myproject.json. if not users: # retrieve the name of this database project, introduced in version 1.0.12 profile = PropertyHelper.get_profile(properties) if profile: users = profile.get('postgresql_users') # fail when no users are found. This means that they are not set in myproject.json or # credentials.json Fail.fail_on_no_users(users) for database in databases: print( "dropping database '{db}' on host '{host}' using environment '{env}'" .format(db=database, host=host, env=environment)) executor = PropertyHelper.get_postgres_properties( users, host, database) connector = self.get_connector() for obj in objects: folder = File( os.path.join(properties.get('plugin.dir'), 'postgresql', 'drop', obj)) ConnectionExecutor.execute(connector, executor, properties, folder) print("database '{}' dropped".format(database))
def execute(self, properties, arguments): """ Create a new database instance for the initial version. :type properties: system.Properties.Properties :param properties: The project properties :type arguments: dict :param arguments: This dict contains the plugin arguments: * **host**: The hostname where the database is running; * **environment**: The environment to create the database in (optional). """ prepared_args = self._validate_and_prepare(properties, arguments) host = prepared_args['host'] environment = prepared_args['environment'] databases = properties.get('databases') objects = properties.get('create_objects') # retrieve the user credentials for this database project. users = properties.get('postgresql_users') # try to retrieve the users from the credentials file, when no users are configured in # myproject.json. if not users: # retrieve the name of this database project, introduced in version 1.0.12 profile = PropertyHelper.get_profile(properties) if profile: users = profile.get('postgresql_users') # fail when no users are found. This means that they are not set in myproject.json or # credentials.json Fail.fail_on_no_users(users) connector = self.get_connector() create_dir = properties.get('create.dir') for database in databases: print("creating database '{db}' on host '{host}' using environment '{env}'".format( db=database, host=host, env=environment)) executor = PropertyHelper.get_postgres_properties(users, host, database) for obj in objects: # global ddl objects folder = File(os.path.join(create_dir, database, 'ddl', obj)) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific ddl objects folder = File(os.path.join(create_dir, database, 'ddl', obj, environment)) ConnectionExecutor.execute(connector, executor, properties, folder) # global dat objects folder = File(os.path.join(create_dir, database, 'dat')) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific dat objects folder = File(os.path.join(create_dir, database, 'dat', environment)) ConnectionExecutor.execute(connector, executor, properties, folder) print("database '{}' created.".format(database))
def execute(self, properties, arguments): """ Update database after checking if schema and environment are valid values. Also check that host is not on the block list and that the version to update to is valid :type properties: system.Properties.Properties :param properties: The project properties :type arguments: dict :param arguments: This dict contains the plugin arguments: * **version**: The version to update the database to; * **host**: The hostname that hosts the database to update; * **schema**: Schema to update (optional); * **environment**: Environment to update the database in (optional). """ prepared_args = self._validate_and_prepare(properties, arguments) version = prepared_args['version'] host = prepared_args['host'] environment = prepared_args['environment'] databases = properties.get('databases') objects = properties.get('create_objects') version_database = properties.get('version_database') alter_dir = properties.get('alter.dir') # retrieve the user credentials for this database project. users = properties.get('postgresql_users') # try to retrieve the users from the credentials file, when no users are configured in # myproject.json. if not users: # retrieve the name of this database project, introduced in version 1.0.12 profile = PropertyHelper.get_profile(properties) if profile: users = profile.get('postgresql_users') connector = self.get_connector() for database in databases: print( "updating database '{db}' on host '{host}' using environment '{env}'" .format(db=database, host=host, env=environment)) executor = PropertyHelper.get_mysql_properties( users, host, database) if database == version_database: self.fail_on_invalid_environment(connector, executor, environment, properties) self.fail_on_invalid_version(connector, executor, version, properties) for obj in objects: # global ddl objects folder = File( os.path.join(alter_dir, version, database, 'ddl', obj)) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific ddl objects folder = File( os.path.join(alter_dir, version, database, 'ddl', obj, environment)) ConnectionExecutor.execute(connector, executor, properties, folder) # global dat objects folder = File(os.path.join(alter_dir, version, database, 'dat')) ConnectionExecutor.execute(connector, executor, properties, folder) # environment specific dat objects folder = File( os.path.join(alter_dir, version, database, 'dat', environment)) ConnectionExecutor.execute(connector, executor, properties, folder) print("database '{}' updated".format(database))
credentials = os.path.join(home_dir, '.noora', 'credentials.json') # create the .noora folder if not exists if not os.path.isdir(os.path.dirname(credentials)): os.makedirs(os.path.dirname(credentials)) # create .noora/credentials if not exists if not os.path.isfile(credentials): f = open(credentials, 'w') f.close() # use credentials f = open(credentials, 'r') credentials = json.load(f) # resolve the name of the project, which is in myproject.json project = "acme-db" profile = credentials.get(project) mysql_users = None if profile: mysql_users = profile.get('mysql_users') databases = ['acme'] host = 'localhost' for database in databases: executor = PropertyHelper.get_mysql_properties(mysql_users, host, database) print(executor['username'])