0bdae5c0f4e36ea02faf0861044969b6d60b6d00
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

1) #!/usr/bin/python
2) # -*- coding: utf-8 -*-
3) 
4) import json
5) import logging
6) log = logging.getLogger(__name__)
7) import MySQLdb
Benjamin Renard Implementation of groups ob...

Benjamin Renard authored 10 years ago

8) from mycoserver import group
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

9) 
10) class DB(object):
11) 
12) 	def __init__(self,host,user,pwd,db):
13) 		self.host = host
14) 		self.user = user
15) 		self.pwd  = pwd
16) 		self.db   = db
17) 		self.con  = 0
18) 
19) 	def connect(self):
20) 		if self.con == 0:
21) 			try:
22) 				con = MySQLdb.connect(self.host,self.user,self.pwd,self.db)
23) 				self.con = con
24) 				return True
25) 			except Exception, e:
26) 				log.fatal('Error connecting to database : %s' % e)
27) 				return
Benjamin Renard Manage DB disconnection

Benjamin Renard authored 10 years ago

28) 		else:
29) 			try:
30) 				self.con.ping(True)
31) 			except Exception, e:
32) 				self.con  = 0
33) 				return self.connect()
34) 			return True
35) 				
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

36) 
37) 	def do_sql(self,sql):
Benjamin Renard Manage DB disconnection

Benjamin Renard authored 10 years ago

38) 		if self.connect():
39) 			try:
40) 				c=self.con.cursor()
41) 				c.execute(sql)
42) 				self.con.commit()
43) 				return c
44) 			except Exception,e:
45) 				log.error('Error executing request %s : %s' % (sql,e))
46) 				return False
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

47) 
48) 	def select(self,sql):
Benjamin Renard Manage DB disconnection

Benjamin Renard authored 10 years ago

49) 		if self.connect():
50) 			ret=self.do_sql(sql)
51) 			if ret!=False:
52) 				return ret.fetchall()
53) 			return ret
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

54) 
55) 	def login(self,email,password):
Benjamin Renard Manage DB disconnection

Benjamin Renard authored 10 years ago

56) 		if self.connect():
57) 			ret=self.select("SELECT email,name,password FROM users WHERE email='%s' AND password='%s'" % (email,password))
58) 			log.debug(ret)
59) 			if ret:
60) 				if len(ret)==1:
61) 					return {
62) 						'email': ret[0][0],
63) 						'name': ret[0][1]
64) 					}
65) 				elif len(ret)>=1:
66) 					log.warning('Duplicate user %s in database' % email)
67) 			elif ret==():
68) 				return { 'loginerror': 'Utilisateur inconnu' }
69) 			return { 'loginerror': 'Erreur inconnu' }
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

70) 
Benjamin Renard Add subscribe method

Benjamin Renard authored 10 years ago

71) 	def subscribe(self,email,name,password):
Benjamin Renard Manage DB disconnection

Benjamin Renard authored 10 years ago

72) 		if self.connect():
73) 			ret=self.select("SELECT count(*) as count FROM users WHERE email='%s'" % (email))
74) 			log.debug(ret)
75) 			if ret[0][0]!=0:
76) 				return {'subscribeerror': u'Cette adresse mail est déjà associés a un compte !'}
77) 			else:
78) 				if self.do_sql("INSERT INTO users (email,name,password) VALUES ('%s','%s','%s')" % (email,name,password)):
79) 					return {
80) 						'email': email,
81) 						'name': name,
82) 						'password': password
83) 					}
84) 			return {'subscribeerror': u'Une erreur est survenue durant votre inscription :('}
Benjamin Renard Add subscribe method

Benjamin Renard authored 10 years ago

85) 
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

86) 	def sync_group(self,email,groups):
Benjamin Renard Manage DB disconnection

Benjamin Renard authored 10 years ago

87) 		if self.connect():
88) 			db_groups=self.get_group(email)
89) 			if db_groups!=False:
90) 				db_grouplist=group.GroupList()
91) 				db_grouplist.load(db_groups)
92) 				grouplist=group.GroupList()
93) 				grouplist.load(groups)
94) 				synced_grouplist=db_grouplist.sync(grouplist)
95) 				if self.set_group(email,synced_grouplist.export()):
96) 					log.debug('Groups successfuly synchronized, return result')
97) 					return {'groups': synced_grouplist.export()}
98) 				else:
99) 					return {'syncerror': 'Erreur en modifiant les informations de la base de donnees'}
100) 			return {'syncerror': 'Erreur inconnu'}
101) 		else:
102) 			return {'syncerror': u"Erreur de connexion à la base de données"}
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

103) 
104) 	def get_group(self,email):
Benjamin Renard Manage DB disconnection

Benjamin Renard authored 10 years ago

105) 		if self.connect():
106) 			ret=self.select("SELECT groups FROM groups WHERE email='%s'" % email)
107) 			if ret!=False:
108) 				if len(ret)==1:
109) 					return json.loads(ret[0][0])
110) 				else:
111) 					return {'groups': {}}
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

112) 			else:
Benjamin Renard Manage DB disconnection

Benjamin Renard authored 10 years ago

113) 				return False
Benjamin Renard Implementation of groups ob...

Benjamin Renard authored 10 years ago

114) 
115) 	def set_group(self,email,groups):
Benjamin Renard Manage DB disconnection

Benjamin Renard authored 10 years ago

116) 		if self.connect():
117) 			ret=self.select("SELECT groups FROM groups WHERE email='%s'" % email)
118) 			if ret!=False:
119) 				json_groups=json.dumps(groups)
120) 				if len(ret)==1:
121) 					return self.do_sql("UPDATE groups SET groups='%s' WHERE email='%s'" % (json_groups,email))
122) 				else:
123) 					return self.do_sql("INSERT INTO groups (email,groups) VALUES ('%s','%s')" % (email,json_groups))
Benjamin Renard Implementation of groups ob...

Benjamin Renard authored 10 years ago

124) 			else: