[FIX] document module: avoid exception when check non openerp databases
authorChristophe Simonis <christophe@tinyerp.com>
Tue, 25 Nov 2008 13:35:16 +0000 (14:35 +0100)
committerChristophe Simonis <christophe@tinyerp.com>
Tue, 25 Nov 2008 13:35:16 +0000 (14:35 +0100)
lp bug: https://launchpad.net/bugs/301004 fixed

bzr revid: christophe@tinyerp.com-20081125133516-78ivqrebot9pezuh

addons/document/ftpserver/abstracted_fs.py

index fe624da..6892a5f 100644 (file)
@@ -68,15 +68,25 @@ class abstracted_fs:
     def db_list(self):
         s = netsvc.LocalService('db')
         result = s.list()
-        self.db_name_list=[]
+        self.db_name_list = []
         for db_name in result:
-            db = pooler.get_db_only(db_name)
-            cr = db.cursor()
-            cr.execute("select id from ir_module_module where name like 'document%' and state='installed' ")
-            res=cr.fetchone()
-            if res and len(res):
-                self.db_name_list.append(db_name)
-            cr.close()
+            db, cr = None, None
+            try:
+                db = pooler.get_db_only(db_name)
+                cr = db.cursor()
+                cr.execute("SELECT 1 FROM pg_class WHERE relkind = 'r' AND relname = 'ir_module_module'")
+                if not cr.fetchone():
+                    continue
+
+                cr.execute("select id from ir_module_module where name like 'document%' and state='installed' ")
+                res = cr.fetchone()
+                if res and len(res):
+                    self.db_name_list.append(db_name)
+            finally:
+                if cr is not None:
+                    cr.close()
+                if db is not None:
+                    pooler.close_db(db_name)
         return self.db_name_list
 
     # Ok