ppf/new: Fix date and time insertion in SQLite database.
authorMariana Mărășoiu <mariana.marasoiu@gmail.com>
Fri, 16 Sep 2011 01:35:02 +0000 (04:35 +0300)
committerMariana Mărășoiu <mariana.marasoiu@gmail.com>
Fri, 16 Sep 2011 01:35:02 +0000 (04:35 +0300)
ppf/new/config.py
ppf/new/storage.py

index bdc4dfd..655a6d1 100644 (file)
@@ -8,6 +8,7 @@ import os
 import os.path
 import logging
 import ConfigParser
+import datetime
 from StringIO import StringIO
 
 import storage
@@ -121,6 +122,9 @@ class SessionEntry(object):
         """Return name of the session."""
         session = self.data.sections()[0]
         cs_data = dict(self.data.items(session))
+        dt = cs_data['start_time'].replace('EEST ', '')
+        ts = datetime.datetime.strptime(dt, "%a %b %d %H:%M:%S %Y")
+        cs_data['start_time'] = ts
         cs = storage.ClientSession(
                             btclient = cs_data['bittorrent_client'],
                             system_os = cs_data['system_os'],
index 1453940..6f52b86 100644 (file)
@@ -487,6 +487,13 @@ class SQLiteDatabaseAccess(DatabaseAccess):
             i = s.lower() in ("yes", "true", "t", "1")
             return int(i)
 
+    def get_string_timestamp(self, ts):
+        # Timestamp is Python Datatime. Convert it to string format and
+        # pass it to internal SQLITE julianday() function.
+        return "%d-%02d-%02d %02d:%02d:%02d.%d" \
+                %(ts.year, ts.month, ts.day, ts.hour, ts.minute, ts.second,
+                        1000 * ts.microsecond)
+
     def add_swarm(self, swarm):
         """Insert swarm in database. swarm type is Swarm."""
         self.reset_query()
@@ -520,7 +527,12 @@ class SQLiteDatabaseAccess(DatabaseAccess):
         self.append_to_insert_query("public_port", session.public_port)
         self.append_to_insert_query("ds_limit", session.ds_limit)
         self.append_to_insert_query("us_limit", session.us_limit)
-        self.append_to_insert_query("start_time", session.start_time)
+
+        if session.start_time is not None:
+            timestamp_string = self.get_string_timestamp(session.start_time)
+            value = "julianday(" + "'" + timestamp_string + "'" + ")"
+            self.append_to_insert_query("start_time", value)
+
         self.append_to_insert_query("dht_enabled",
                                     self.str2bool(session.dht_enabled))
         self.append_to_insert_query("pxe_enabled",
@@ -534,6 +546,11 @@ class SQLiteDatabaseAccess(DatabaseAccess):
         self.values = re.sub(',\s*$', '', self.values)
         insert_query = "INSERT INTO client_sessions(" + self.columns +")" + \
                 " VALUES(" + self.values + ")"
+
+        # Remove single quote for before and after julianday() function
+        insert_query = insert_query.replace("\'julian", "julian")
+        insert_query = insert_query.replace(")'", ")")
+
         self.cursor.execute(insert_query)
         self.conn.commit()
         self.cursor.execute("SELECT * FROM client_sessions "
@@ -541,13 +558,6 @@ class SQLiteDatabaseAccess(DatabaseAccess):
         row = self.cursor.fetchone()
         return row[0]
 
-    def get_string_timestamp(self, ts):
-        # Timestamp is Python Datatime. Convert it to string format and
-        # pass it to internal SQLITE julianday() function.
-        return "%s-%s-%s %s:%s:%s.%s" \
-                %(ts.year, ts.month, ts.day, ts.hour, ts.minute, ts.second,
-                        1000 * ts.microsecond)
-
     def add_peer_status_message(self, msg):
         """Insert peer status message in database.
         msg type is PeerStatusMessage.
@@ -557,10 +567,9 @@ class SQLiteDatabaseAccess(DatabaseAccess):
 
         # TODO: Check msg.timestamp is not None. Raise exception.
         timestamp_string = self.get_string_timestamp(msg.timestamp)
-        value = "julianday(" + timestamp_string + ")"
+        value = "julianday(" + "'" + timestamp_string + "'" + ")"
         self.append_to_insert_query("timestamp", value)
 
-        self.append_to_insert_query("timestamp", msg.timestamp)
         self.append_to_insert_query("peer_ip", msg.peer_ip)
         self.append_to_insert_query("peer_port", msg.peer_port)
         self.append_to_insert_query("download_speed", msg.download_speed)
@@ -570,6 +579,11 @@ class SQLiteDatabaseAccess(DatabaseAccess):
         self.values = re.sub(',\s*$', '', self.values)
         insert_query = "INSERT INTO peer_status_messages(" + \
                 self.columns +")" + " VALUES(" + self.values + ")"
+
+        # Remove single quote for before and after julianday() function
+        insert_query = insert_query.replace("\'julian", "julian")
+        insert_query = insert_query.replace(")'", ")")
+
         self.cursor.execute(insert_query)
         self.conn.commit()
 
@@ -580,7 +594,7 @@ class SQLiteDatabaseAccess(DatabaseAccess):
 
         # TODO: Check msg.timestamp is not None. Raise exception.
         timestamp_string = self.get_string_timestamp(msg.timestamp)
-        value = "julianday(" + timestamp_string + ")"
+        value = "julianday(" + "'" + timestamp_string + "'" + ")"
         self.append_to_insert_query("timestamp", value)
 
         self.append_to_insert_query("num_peers", msg.num_peers)
@@ -595,6 +609,11 @@ class SQLiteDatabaseAccess(DatabaseAccess):
         self.values = re.sub(',\s*$', '', self.values)
         insert_query = "INSERT INTO status_messages(" + self.columns +")" + \
                 " VALUES(" + self.values + ")"
+
+        # Remove single quote for before and after julianday() function
+        insert_query = insert_query.replace("\'julian", "julian")
+        insert_query = insert_query.replace(")'", ")")
+
         self.cursor.execute(insert_query)
         self.conn.commit()
 
@@ -605,7 +624,7 @@ class SQLiteDatabaseAccess(DatabaseAccess):
 
         # TODO: Check msg.timestamp is not None. Raise exception.
         timestamp_string = self.get_string_timestamp(msg.timestamp)
-        value = "julianday(" + timestamp_string + ")"
+        value = "julianday(" + "'" + timestamp_string + "'" + ")"
         self.append_to_insert_query("timestamp", value)
 
         self.append_to_insert_query("transfer_direction_id",
@@ -623,6 +642,11 @@ class SQLiteDatabaseAccess(DatabaseAccess):
         self.values = re.sub(',\s*$', '', self.values)
         insert_query = "INSERT INTO verbose_messages(" + self.columns +")" + \
                 " VALUES(" + self.values + ")"
+
+        # Remove single quote for before and after julianday() function
+        insert_query = insert_query.replace("\'julian", "julian")
+        insert_query = insert_query.replace(")'", ")")
+
         self.cursor.execute(insert_query)
         self.conn.commit()