f1158750f11cda344ad4c14cfbb1984000b3a135
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:
Benjamin Renard Fix logging SQL execution e...

Benjamin Renard authored 10 years ago

45) 				log.error('Error executing request %s' % sql)
46) 				log.error('Error executing request : %s' % e)
Benjamin Renard Manage DB disconnection

Benjamin Renard authored 10 years ago

47) 				return False
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

71) 
Benjamin Renard Add subscribe method

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

86) 
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

113) 			else:
Benjamin Renard Manage DB disconnection

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

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

Benjamin Renard authored 10 years ago

117) 		if self.connect():
118) 			ret=self.select("SELECT groups FROM groups WHERE email='%s'" % email)
119) 			if ret!=False:
120) 				json_groups=json.dumps(groups)
121) 				if len(ret)==1:
122) 					return self.do_sql("UPDATE groups SET groups='%s' WHERE email='%s'" % (json_groups,email))
123) 				else:
124) 					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

125) 			else: