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())
Пример #3
0
 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
Пример #6
0
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)