Ver código fonte

Adding exception handling for when inserting many documents when some of them are invalid

ogert 5 anos atrás
pai
commit
4b9e21ebfd
1 arquivos alterados com 14 adições e 1 exclusões
  1. 14 1
      cdplib/db_handlers/MongodbHandler.py

+ 14 - 1
cdplib/db_handlers/MongodbHandler.py

@@ -240,7 +240,20 @@ class MongodbHandler:
                 self._database[collection_name].insert_many(data, ordered=ordered)
 
         except Exception as error:
-            self._log.log_and_raise_error(('An error occured when trying to insert data into {}, {}. \nError: {}').format(self._database_name, collection_name, error))
+            if len(data) > 1:
+                self._log.warning(('An error occured inserting {} documents into database: {} and collection: {}.').format(len(data.index), self._database_name, collection_name)
+                self._log.warning('This might be because one or more documents are invalid.') 
+                self._log.warning('We will try to insert the documents one-by-one and report which are invalid.')
+                self._log.warning('Error: {}').format(error))
+                for row in data:
+                    try:
+                        self._database[collection_name].insert_one(row)
+                    except Exception as error:
+                        pprint(row)
+                        print(error)
+                        break
+            else:
+                self._log.log_and_raise_error(('An error occured when trying to insert data into {}, {}. \nError: {}').format(self._database_name, collection_name, error))
 
         self._log.info(('Data has been inserted into the {} collection').format(collection_name))