Subject: [pgAdmin4][Patch] : Fix PG utilities with Python 2.6

From: Khushboo Vashi <[email-masked]>
Date: Fri, 15 Jun 2018 16:57:41 +0530

Hi,

Please find the attached patch which fixes the PG utilities with python 2.6.

Thanks,
Khushboo

---

From: Dave Page <[email-masked]>
Date: Fri, 15 Jun 2018 12:38:54 +0100

Thanks, applied.

-- 
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company

---

From: Khushboo Vashi <[email-masked]>
Date: Fri, 15 Jun 2018 19:25:06 +0530

Hi Dave,

Please find the attached patch for PG utilities - PY 2.6.

Thanks,
Khushboo

>> Please find the attached patch which fixes the PG utilities with python
diff --git a/web/pgadmin/misc/bgprocess/processes.py b/web/pgadmin/misc/bgprocess/processes.py
index cb98291..c6151e3 100644
--- a/web/pgadmin/misc/bgprocess/processes.py
+++ b/web/pgadmin/misc/bgprocess/processes.py
@@ -463,7 +463,7 @@ class BatchProcess(object):
                 stime = parser.parse(self.stime)
                 etime = parser.parse(self.etime or get_current_time())
 
-                execution_time = (etime - stime).total_seconds()
+                execution_time = BatchProcess.total_seconds(etime - stime)
 
             if process_output:
                 out, out_completed = read_log(
@@ -558,7 +558,7 @@ class BatchProcess(object):
             stime = parser.parse(p.start_time)
             etime = parser.parse(p.end_time or get_current_time())
 
-            execution_time = (etime - stime).total_seconds()
+            execution_time = BatchProcess.total_seconds(etime - stime)
             desc = ""
             try:
                 desc = loads(p.desc.encode('latin-1')) if \
@@ -601,6 +601,16 @@ class BatchProcess(object):
         return res
 
     @staticmethod
+    def total_seconds(dt):
+        # Keep backward compatibility with Python 2.6 which doesn't have
+        # this method
+        if hasattr(dt, 'total_seconds'):
+            return dt.total_seconds()
+        else:
+            return (dt.microseconds + (dt.seconds + dt.days * 24 * 3600) *
+                    10**6) / 10**6
+
+    @staticmethod
     def acknowledge(_pid):
         """
         Acknowledge from the user, he/she has alredy watched the status.
diff --git a/web/pgadmin/tools/backup/tests/test_batch_process.py b/web/pgadmin/tools/backup/tests/test_batch_process.py
index b020819..25342d4 100644
--- a/web/pgadmin/tools/backup/tests/test_batch_process.py
+++ b/web/pgadmin/tools/backup/tests/test_batch_process.py
@@ -119,7 +119,10 @@ class BatchProcessTest(BaseTestGenerator):
         current_app_mock.PGADMIN_RUNTIME = False
 
         def db_session_add_mock(j):
-            cmd_obj = loads(j.desc)
+            if sys.version_info < (2, 7):
+                cmd_obj = loads(str(j.desc))
+            else:
+                cmd_obj = loads(j.desc)
             self.assertTrue(isinstance(cmd_obj, IProcessDesc))
             self.assertEqual(cmd_obj.backup_type, self.class_params['type'])
             self.assertEqual(cmd_obj.bfile, self.class_params['bfile'])
diff --git a/web/pgadmin/tools/maintenance/tests/test_batch_process_maintenance.py b/web/pgadmin/tools/maintenance/tests/test_batch_process_maintenance.py
index f785c87..3700d96 100644
--- a/web/pgadmin/tools/maintenance/tests/test_batch_process_maintenance.py
+++ b/web/pgadmin/tools/maintenance/tests/test_batch_process_maintenance.py
@@ -73,7 +73,10 @@ class BatchProcessTest(BaseTestGenerator):
                 self.port = port
 
         def db_session_add_mock(j):
-            cmd_obj = loads(j.desc)
+            if sys.version_info < (2, 7):
+                cmd_obj = loads(str(j.desc))
+            else:
+                cmd_obj = loads(j.desc)
             self.assertTrue(isinstance(cmd_obj, IProcessDesc))
             self.assertEqual(cmd_obj.query, self.class_params['cmd'])
             self.assertEqual(cmd_obj.message, self.expected_msg)
diff --git a/web/pgadmin/tools/restore/tests/test_batch_process.py b/web/pgadmin/tools/restore/tests/test_batch_process.py
index ea33af2..8bc5ede 100644
--- a/web/pgadmin/tools/restore/tests/test_batch_process.py
+++ b/web/pgadmin/tools/restore/tests/test_batch_process.py
@@ -64,7 +64,10 @@ class BatchProcessTest(BaseTestGenerator):
         current_app_mock.PGADMIN_RUNTIME = False
 
         def db_session_add_mock(j):
-            cmd_obj = loads(j.desc)
+            if sys.version_info < (2, 7):
+                cmd_obj = loads(str(j.desc))
+            else:
+                cmd_obj = loads(j.desc)
             self.assertTrue(isinstance(cmd_obj, IProcessDesc))
             self.assertEqual(cmd_obj.bfile, self.class_params['bfile'])
             self.assertEqual(cmd_obj.cmd,

---

From: Dave Page <[email-masked]>
Date: Fri, 15 Jun 2018 15:06:12 +0100

Thanks, applied.