61f1a78943c73b35ef43eae06da5569e579f0643
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
8) 
9) class DB(object):
10) 
11) 	def __init__(self,host,user,pwd,db):
12) 		self.host = host
13) 		self.user = user
14) 		self.pwd  = pwd
15) 		self.db   = db
16) 		self.con  = 0
17) 
18) 	def connect(self):
19) 		if self.con == 0:
20) 			try:
21) 				con = MySQLdb.connect(self.host,self.user,self.pwd,self.db)
22) 				self.con = con
23) 				return True
24) 			except Exception, e:
25) 				log.fatal('Error connecting to database : %s' % e)
26) 				return
27) 
28) 	def do_sql(self,sql):
29) 		try:
30) 			c=self.con.cursor()
31) 			c.execute(sql)
32) 			self.con.commit()
33) 			return c
34) 		except Exception,e:
35) 			log.error('Error executing request %s : %s' % (sql,e))
36) 			return False
37) 
38) 	def select(self,sql):
39) 		ret=self.do_sql(sql)
40) 		if ret!=False:
41) 			return ret.fetchall()
42) 		return ret
43) 
44) 	def login(self,email,password):
45) 		ret=self.select("SELECT email,name,password FROM users WHERE email='%s' AND password='%s'" % (email,password))
46) 		log.debug(ret)
47) 		if ret:
48) 			if len(ret)==1:
49) 				return {
50) 					'email': ret[0][0],
51) 					'name': ret[0][1]
52) 				}
53) 			elif len(ret)>=1:
54) 				log.warning('Duplicate user %s in database' % email)
55) 		elif ret==():
56) 			return { 'loginerror': 'Utilisateur inconnu' }
57) 		return { 'loginerror': 'Erreur inconnu' }
58) 
Benjamin Renard Add subscribe method

Benjamin Renard authored 10 years ago

59) 	def subscribe(self,email,name,password):
60) 		ret=self.select("SELECT count(*) as count FROM users WHERE email='%s'" % (email))
61) 		log.debug(ret)
62) 		if ret[0][0]!=0:
63) 			return {'subscribeerror': u'Cette adresse mail est déjà associés a un compte !'}
64) 		else:
65) 			if self.do_sql("INSERT INTO users (email,name,password) VALUES ('%s','%s','%s')" % (email,name,password)):
66) 				return {
67) 					'email': email,
68) 					'name': name,
69) 					'password': password
70) 				}
71) 		return {'subscribeerror': u'Une erreur est survenue durant votre inscription :('}
72) 
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

73) 	def sync_group(self,email,groups):
74) 		db_groups=self.get_group(email)
75) 		json_group=json.dumps(groups)
76) 		if db_groups!=False:
Benjamin Renard Support lastChange field in...

Benjamin Renard authored 10 years ago

77) 			log.debug('Database groups : %s' % db_groups)
78) 			log.debug('Provided groups : %s' % groups)
79) 			if 'groups' not in db_groups or db_groups['groups']=={}:
80) 				log.debug('Database group is empty')
81) 				if 'groups' not in groups or groups['groups']=={}:
82) 					log.debug('Database and provided group are empty. Return empty')
83) 					return {'groups': {'groups': {}}}
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

84) 				else:
Benjamin Renard Support lastChange field in...

Benjamin Renard authored 10 years ago

85) 					log.debug('Insert provided groups in database and return it')
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

86) 					if self.do_sql("INSERT INTO groups (email,groups) VALUES ('%s','%s')" % (email,json_group)):
87) 						return {'groups': groups}
Benjamin Renard Support lastChange field in...

Benjamin Renard authored 10 years ago

88) 			elif 'groups' not in groups or groups['groups']=={}:
89) 				log.debug('Provide group is empty. Return database groups')
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

90) 				return {'groups': db_groups}
91) 			else:
Benjamin Renard Support lastChange field in...

Benjamin Renard authored 10 years ago

92) 				log.debug('Update database with provided group and return it')
Benjamin Renard Initial commit

Benjamin Renard authored 10 years ago

93) 				if self.do_sql("UPDATE groups SET groups='%s' WHERE email='%s'" % (json_group,email)):
94) 					return {'groups': groups}
95) 		return {'syncerror': 'Erreur inconnu'}
96) 
97) 	def get_group(self,email):
98) 		ret=self.select("SELECT groups FROM groups WHERE email='%s'" % email)
99) 		if ret!=False:
100) 			if len(ret)==1:
101) 				return json.loads(ret[0][0])
102) 			else:
Benjamin Renard Support lastChange field in...

Benjamin Renard authored 10 years ago

103) 				return {'groups': {}}