class MailListDataBaseFactoryTest(unittest.TestCase): """docstring for MailListFactoryTest""" def setUp(self): self.db_name="testtable" self.conn=sqlite3.connect(self.db_name) cursor=self.conn.cursor() cursor.execute(''' CREATE TABLE maillist (maillist_id INTEGER PRIMARY KEY, name text)''') cursor.execute(''' CREATE TABLE subscribers (subscriber_id INTEGER PRIMARY KEY, name text, email text)''') cursor.execute(''' CREATE TABLE maillists_to_subscribers (maillist_id INTEGER PRIMARY KEY, subscriber_id int)''') self.factory = MailListDataBaseFactory(self.conn) def test_init_id(self): self.assertEqual(1,self.factory.init_id(self.conn)) def test_next_id(self): m1 = self.factory.create("Hack Bulgaria") c=self.conn.cursor() c.execute("INSERT INTO maillist(name) VALUES(?)",(m1.get_name(),)) self.assertEqual(1, m1.get_id()) c=self.conn.cursor() m2 = self.factory.create("Uni Sofia") c.execute("INSERT INTO maillist(name) VALUES(?)",(m2.get_name(),)) self.assertEqual(2,m2.get_id()) factory=MailListDataBaseFactory(self.conn) self.assertEqual(3,factory.next_id()) def tearDown(self): call("rm " + self.db_name,shell=True)
def test_next_id(self): m1 = self.factory.create("Hack Bulgaria") c=self.conn.cursor() c.execute("INSERT INTO maillist(name) VALUES(?)",(m1.get_name(),)) self.assertEqual(1, m1.get_id()) c=self.conn.cursor() m2 = self.factory.create("Uni Sofia") c.execute("INSERT INTO maillist(name) VALUES(?)",(m2.get_name(),)) self.assertEqual(2,m2.get_id()) factory=MailListDataBaseFactory(self.conn) self.assertEqual(3,factory.next_id())
def __init__(self): self.db_path = "maillist" self.conn=sqlite3.connect(self.db_path) self.create_table(self.conn.cursor()) self.factory = MailListDataBaseFactory(self.conn) self.cp = CommandParser() self.lists = {} self._load_initial_state() self._init_callbacks() self._loop()
def setUp(self): self.db_name="testtable" self.conn=sqlite3.connect(self.db_name) cursor=self.conn.cursor() cursor.execute(''' CREATE TABLE maillist (maillist_id INTEGER PRIMARY KEY, name text)''') cursor.execute(''' CREATE TABLE subscribers (subscriber_id INTEGER PRIMARY KEY, name text, email text)''') cursor.execute(''' CREATE TABLE maillists_to_subscribers (maillist_id INTEGER PRIMARY KEY, subscriber_id int)''') self.factory = MailListDataBaseFactory(self.conn)
class MailListDataBaseAdapter(): def __init__(self, db_name, mail_list=None): self.db_name = db_name self.mail_list = mail_list self._connection = self._create_connection(self.db_name) self.factory=MailListDataBaseFactory(self._connection) def _create_connection(self, db_name): return sqlite3.connect(db_name) def _get_cursor(self): return self._connection.cursor() def _commit_connection(self): self._connection.commit() def _close_connection(self): self._connection.close() def save(self): c=self._get_cursor() c.execute("INSERT INTO maillist(name) VALUES(?)",(self.mail_list.get_name(),)) subscribers = self.mail_list.get_subscribers() c=self._get_cursor() ids=c.execute("SELECT subscriber_id FROM subscribers").fetchall() subscriber_max_id=0 if ids != []: subscriber_max_id=ids[len(ids)-1][0] for subs in subscribers: c.execute("INSERT INTO subscribers(name, email) VALUES(?,?)",(subs[0],subs[1])) c.execute("INSERT INTO maillists_to_subscribers(maillist_id, subscriber_id) VALUES(?,?)",(self.mail_list.get_id(),subscriber_max_id+1)) subscriber_max_id+=1 self._commit_connection() def load(self,list_id): c=self._get_cursor() list_name=c.execute("SELECT name FROM maillist WHERE maillist_id=?",str(list_id)).fetchall() maillist = self.factory.create(list_name[0][0]) ids_of_subscribers=c.execute("SELECT subscriber_id FROM maillists_to_subscribers WHERE maillist_id=?",str(list_id)).fetchall() for id in ids_of_subscribers: subscriber=c.execute("SELECT name, email FROM subscribers WHERE subscriber_id=?",str(id[0])).fetchall() maillist.add_subscriber(subscriber[0][0],subscriber[0][1]) return maillist
class MailListProgram(): """docstring for MailListProgram""" def __init__(self): self.db_path = "maillist" self.conn=sqlite3.connect(self.db_path) self.create_table(self.conn.cursor()) self.factory = MailListDataBaseFactory(self.conn) self.cp = CommandParser() self.lists = {} self._load_initial_state() self._init_callbacks() self._loop() def create_table(self,cursor): cursor.execute(''' CREATE TABLE IF NOT EXISTS maillist (maillist_id INTEGER PRIMARY KEY, name text)''') cursor.execute(''' CREATE TABLE IF NOT EXISTS subscribers (subscriber_id INTEGER PRIMARY KEY, name text, email text)''') cursor.execute(''' CREATE TABLE IF NOT EXISTS maillists_to_subscribers (maillist_id int, subscriber_id int)''') def create_list_callback(self, arguments): name = " ".join(arguments) maillist = self.factory.create(name) maillist_adapter = MailListDataBaseAdapter(self.db_path,maillist) maillist_adapter.save() self.lists[maillist.get_id()] = (maillist, maillist_adapter) def add_subscriber_callback(self, arguments): list_id = int("".join(arguments)) if not list_id in self.lists: print("Id is incorrect, try again.") else: name = input("name>") email = input("email>") self.lists[list_id][0].add_subscriber(name, email) #TODO: function which add subscriber into tables def show_lists_callback(self, arguments): for list_id in self.lists: current_list = self.lists[list_id][0] print("[{}] {}".format(list_id, current_list.get_name())) def show_list_callback(self, arguments): list_id = int("".join(arguments)) if list_id in self.lists: subscribers = self.lists[list_id][0].get_subscribers() for s in subscribers: print("{} - {}".format(s[0], s[1])) else: print("List with id <{}> was not found".format(list_id)) def exit_callback(self, arguments): sys.exit(0) def _load_initial_state(self): c=self.conn; ids_of_maillists=c.execute("SELECT maillist_id FROM maillist").fetchall() for id in ids_of_maillists: adapter=MailListDataBaseAdapter("maillist") maillist=adapter.load(id[0]) self.lists[id[0]]=(maillist,adapter) def _init_callbacks(self): self.cp.on("create", self.create_list_callback) self.cp.on("add", self.add_subscriber_callback) self.cp.on("show_lists", self.show_lists_callback) self.cp.on("show_list", self.show_list_callback) self.cp.on("exit", self.exit_callback) # TODO - implement the rest of the callbacks def _loop(self): while True: command = input(">") self.cp.take_command(command)
def __init__(self, db_name, mail_list=None): self.db_name = db_name self.mail_list = mail_list self._connection = self._create_connection(self.db_name) self.factory=MailListDataBaseFactory(self._connection)