ppf: Add support for datetime timestamps in SQLiteDatabaseAccess.
authorRazvan Deaconescu <razvan.deaconescu@cs.pub.ro>
Mon, 22 Aug 2011 10:16:46 +0000 (13:16 +0300)
committerRazvan Deaconescu <razvan.deaconescu@cs.pub.ro>
Mon, 22 Aug 2011 10:16:46 +0000 (13:16 +0300)
ppf/new/storage.py

index a14de4e..9701ff4 100644 (file)
@@ -9,6 +9,7 @@ import os.path
 import re
 import logging
 import sqlite3
+import datetime
 
 #
 # Logging code heavily inspired by Logging HOWTO documentation:
@@ -475,9 +476,22 @@ class SQLiteDatabaseAccess(DatabaseAccess):
         self.cursor.execute(insert_query)
         self.conn.commit()
 
+    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):
         self.reset_query()
         self.append_to_insert_query("client_session_id", msg.client_session_id)
+
+        # TODO: Check msg.timestamp is not None. Raise exception.
+        timestamp_string = self.get_string_timestamp(msg.timestamp)
+        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)
@@ -494,7 +508,12 @@ class SQLiteDatabaseAccess(DatabaseAccess):
     def add_status_message(self, msg):
         self.reset_query()
         self.append_to_insert_query("client_session_id", msg.client_session_id)
-        self.append_to_insert_query("timestamp", msg.timestamp)
+
+        # TODO: Check msg.timestamp is not None. Raise exception.
+        timestamp_string = self.get_string_timestamp(msg.timestamp)
+        value = "julianday(" + timestamp_string + ")"
+        self.append_to_insert_query("timestamp", value)
+
         self.append_to_insert_query("num_peers", msg.num_peers)
         self.append_to_insert_query("num_dht_peers", msg.num_dht_peers)
         self.append_to_insert_query("download_speed", msg.download_speed)
@@ -513,7 +532,12 @@ class SQLiteDatabaseAccess(DatabaseAccess):
     def add_verbose_message(self, msg):
         self.reset_query()
         self.append_to_insert_query("client_session_id", msg.client_session_id)
-        self.append_to_insert_query("timestamp", msg.timestamp)
+
+        # TODO: Check msg.timestamp is not None. Raise exception.
+        timestamp_string = self.get_string_timestamp(msg.timestamp)
+        value = "julianday(" + timestamp_string + ")"
+        self.append_to_insert_query("timestamp", value)
+
         self.append_to_insert_query("transfer_direction_id",
                 transfer_directions[msg.transfer_direction])
         self.append_to_insert_query("peer_ip", msg.peer_ip)