Improved sphinx import db errors handling
authorKostas Papadimitriou <kpap@grnet.gr>
Tue, 31 Jul 2012 13:28:47 +0000 (16:28 +0300)
committerKostas Papadimitriou <kpap@grnet.gr>
Tue, 31 Jul 2012 13:28:47 +0000 (16:28 +0300)
- Catch rollback excpetion
- Force slug length to db length

cloudcms/forms.py

index b38a8be..c14c909 100644 (file)
@@ -23,6 +23,9 @@ from feincms.content.raw.models import RawContent
 
 logger = logging.getLogger('cloudcms.rstimport')
 
+def slugify(title):
+    return title[:90]
+
 # base filename to service slug map
 DEFAULT_SERVICE_MAP = {
         'cyclades':'cyclades',
@@ -145,7 +148,11 @@ class RstZipImportForm(forms.Form):
                 logger.warning("Removing exising entries")
                 self.clean_existing_data()
             except Exception, e:
-                transaction.savepoint_rollback(sid)
+                try:
+                    transaction.savepoint_rollback(sid)
+                    transaction.rollback()
+                except Exception, e:
+                    logger.exception("Can not rollback")
                 logger.exception("Failed to clean existing data")
                 logger.removeHandler(stream_handler)
                 logger.setLevel(old_level)
@@ -204,15 +211,25 @@ class RstZipImportForm(forms.Form):
 
 
         except Exception, e:
-            print e
+            print e, "EXCEPTION"
             logger.exception("RST import failed")
             logger.removeHandler(stream_handler)
             logger.setLevel(old_level)
-            transaction.savepoint_rollback(sid)
+            try:
+                transaction.savepoint_rollback(sid)
+                transaction.rollback()
+            except Exception, e:
+                logger.exception("Can not rollback")
+
             return False, stream.getvalue()
 
         if dry_run:
-            transaction.savepoint_rollback(sid)
+            try:
+                transaction.savepoint_rollback(sid)
+                transaction.rollback()
+            except Exception, e:
+                logger.exception("Can not rollback")
+
         else:
             transaction.savepoint_commit(sid)
 
@@ -273,9 +290,10 @@ def add_or_update_faq_question(author, service, category, slug,\
     q.is_active = True
     q.category = category
     q.service = service
-    q.slug = slug
+    q.slug = slugify(slug)
     q.title = unicode(title)
     q.save()
+
     q.application = [Application.current()]
     q.save()
 
@@ -303,7 +321,7 @@ def add_or_update_guide_entry(author, service, slug, title, html_content):
     guide.author = author
     guide.is_active = True
     guide.service = service
-    guide.slug = slug
+    guide.slug = slugify(slug)
     guide.title = unicode(title)
     guide.save()