BUGFIX : added non-commited module
[wifihood] / wifiscanner / wifimap / db.py
1
2 import sqlite3
3
4 import config
5
6 create_db = """
7     CREATE TABLE ap (
8         mac TEXT PRIMARY KEY UNIQUE NOT NULL,
9         rss INTEGER NOT NULL,
10         last_seen TIMESTAMP NOT NULL,
11         n INTEGER DEFAULT 0,
12         lat REAL DEFAULT 0,
13         lon REAL DEFAULT 0,
14         alt REAL DEFAULT 0,
15         lat2 REAL DEFAULT 0,
16         lon2 REAL DEFAULT 0,
17         alt2 REAL DEFAULT 0
18         );
19 """
20
21 class database :
22
23     def __init__ ( self , dbname=None ) :
24         self.setfilename( dbname )
25         self.db = None
26
27     def setfilename ( self , dbname ) :
28         self.dbname = dbname
29
30     def open ( self ) :
31
32         if self.db :
33             self.close()
34
35         self.db = sqlite3.connect( self.dbname )
36
37         rc = self.db.execute( "SELECT * FROM sqlite_master" )
38         tables = map( lambda x : "%s-%s" % ( x[0] , x[1] ) , rc.fetchall() )
39
40         if not tables :
41             self.db.executescript( create_db )
42
43     def close ( self ) :
44         self.db.close()
45         self.db = None
46
47     def is_open ( self ) :
48         if not self.db :
49             return False 
50         return True 
51
52     def __get ( self , query ) :
53         rc = self.db.execute( query )
54         return rc.fetchone()
55
56     def add ( self , mac , rss , timestamp , gps=None ) :
57   
58         query = "INSERT INTO ap ( mac , rss , last_seen ) VALUES ( '%s' , %d , %f )" % ( mac , rss , timestamp )
59         rc = self.db.execute( query )
60         if rc.rowcount :
61             if gps :
62                 lat , lon , alt = gps
63                 query = "UPDATE ap SET n=1 , lat=%f , lat2=%f , lon=%f , lon2=%f , alt=%f , alt2=%f WHERE mac='%s'" % ( lat , lat*lat , lon , lon*lon , alt , alt*alt , mac )
64                 rc = self.db.execute( query )
65             self.db.commit()
66
67     def update ( self , mac , rss , timestamp , gps=None ) :
68
69         query = "UPDATE ap set rss=%d , last_seen=%f" % ( rss , timestamp )
70         if gps :
71             lat , lon = gps
72             query = " , n=n+1 , lat=lat+%f , lat2=lat2+%f , lon=lon+%f , lon2=lon2+%f , alt=alt+%f , alt2=alt2+%f" % ( lat , lat*lat , lon , lon*lon , alt , alt*alt )
73         query += " WHERE mac='%s'" % mac
74         rc = self.db.execute( query )
75         if rc.rowcount :
76             self.db.commit()
77
78     def delete ( self , mac ) :
79         rc = self.db.execute( "DELETE FROM ap WHERE mac='%s'" % mac )
80         if rc.rowcount :
81             self.db.commit()
82
83     def get ( self , mac ) :
84         query = "SELECT rss FROM ap WHERE mac='%s'" % mac
85         return self.__get( query )
86
87     def nrows ( self ) :
88         query = "SELECT COUNT(*) FROM ap"
89         values = self.__get( query )
90         return int( values[0] )
91