def mysql_dsn(conf): """MySQL server dsn """ dsn = conf["mysql_dsn"] if conf else "mysql+pymysql://root@localhost/" # init database parsed = urlparse(dsn) db_settings = { "host": parsed.hostname, "port": parsed.port or 3306, "user": parsed.username, "passwd": parsed.password } conn = pymysql.connect(**db_settings) cursor = conn.cursor() sql = """ DROP DATABASE IF EXISTS meepo_test; CREATE DATABASE meepo_test; CREATE TABLE meepo_test.test ( id INT NOT NULL AUTO_INCREMENT, data VARCHAR (256) NOT NULL, PRIMARY KEY (id) ); RESET MASTER; """ cursor.execute(sql) print("executed") # release conn conn.close() return dsn
def binlog(mysql_dsn): # init mysql connection parsed = urlparse(mysql_dsn) db_settings = { "host": parsed.hostname, "port": parsed.port or 3306, "user": parsed.username, "passwd": parsed.password, "database": "meepo_test" } conn = pymysql.connect(**db_settings) cursor = conn.cursor() # test sqls sql = """ INSERT INTO test (data) VALUES ('a'); INSERT INTO test (data) VALUES ('b'), ('c'), ('d'); UPDATE test SET data = 'aa' WHERE id = 1; UPDATE test SET data = 'bb' WHERE id = 2; UPDATE test SET data = 'cc' WHERE id != 1; DELETE FROM test WHERE id != 1; DELETE FROM test WHERE id = 1; """ cursor.execute(sql) cursor.close() conn.commit() conn.close() # generates signals mysql_pub(mysql_dsn, tables=["test"])
def test_mysql_pub(mysql_dsn): test_write_sig, test_update_sig, test_delete_sig = [], [], [] test_binlog_sig = [] signal("test_write").connect(lambda pk: test_write_sig.append(pk), weak=False) signal("test_update").connect(lambda pk: test_update_sig.append(pk), weak=False) signal("test_delete").connect(lambda pk: test_delete_sig.append(pk), weak=False) signal("mysql_binlog_pos").connect(lambda pk: test_binlog_sig.append(pk), weak=False) parsed = urlparse(mysql_dsn) db_settings = { "host": parsed.hostname, "port": parsed.port or 3306, "user": parsed.username, "passwd": parsed.password, "database": "meepo_test" } conn = pymysql.connect(**db_settings) cursor = conn.cursor() # test sqls sql = """ INSERT INTO test (data) VALUES ('a'); INSERT INTO test (data) VALUES ('b'), ('c'), ('d'); UPDATE test SET data = 'aa' WHERE id = 1; UPDATE test SET data = 'bb' WHERE id = 2; UPDATE test SET data = 'cc' WHERE id != 1; DELETE FROM test WHERE id != 1; DELETE FROM test WHERE id = 1; """ cursor.execute(sql) cursor.close() conn.commit() conn.close() from meepo.pub import mysql_pub mysql_pub(mysql_dsn, tables=["test"]) assert test_write_sig == [1, 2, 3, 4] assert test_update_sig == [1, 2, 2, 3, 4] assert test_delete_sig == [2, 3, 4, 1] assert len(test_binlog_sig) == 7
def db_prepare(dsn): parsed = urlparse(dsn) db_settings = { "host": parsed.hostname, "port": parsed.port or 3306, "user": parsed.username, "passwd": parsed.password } conn = pymysql.connect(**db_settings) cursor = conn.cursor() sql = """ DROP DATABASE IF EXISTS meepo_test; CREATE DATABASE meepo_test; DROP TABLE IF EXISTS meepo_test.test; CREATE TABLE meepo_test.test ( id INT NOT NULL AUTO_INCREMENT, data VARCHAR (256) NOT NULL, PRIMARY KEY (id) ); RESET MASTER; """ cursor.execute(sql) logger.info("table created.") # genereate binlog sql = """ INSERT INTO test (data) VALUES ('a'); INSERT INTO test (data) VALUES ('b'), ('c'), ('d'); UPDATE test SET data = 'aa' WHERE id = 1; UPDATE test SET data = 'bb' WHERE id = 2; UPDATE test SET data = 'cc' WHERE id != 1; DELETE FROM test WHERE id != 1; DELETE FROM test WHERE id = 1; """ cursor.execute(sql) cursor.close() conn.commit() conn.close() logger.info("binlog created.")
def mysql_dsn(conf): """MySQL server dsn This fixture will init a clean meepo_test database with a 'test' table """ logger = logging.getLogger("fixture_mysql_dsn") dsn = conf["mysql_dsn"] if conf else \ "mysql+pymysql://root@localhost/meepo_test" # init database parsed = urlparse(dsn) db_settings = { "host": parsed.hostname, "port": parsed.port or 3306, "user": parsed.username, "passwd": parsed.password } conn = pymysql.connect(**db_settings) cursor = conn.cursor() sql = """ DROP DATABASE IF EXISTS meepo_test; CREATE DATABASE meepo_test; DROP TABLE IF EXISTS meepo_test.test; CREATE TABLE meepo_test.test ( id INT NOT NULL AUTO_INCREMENT, data VARCHAR (256) NOT NULL, PRIMARY KEY (id) ); RESET MASTER; """ cursor.execute(sql) logger.debug("executed") # release conn cursor.close() conn.close() return dsn