Removed rollback from non transactional block
[snf-cloudcms] / cloudcms / forms.py
index cee9d5b..caac453 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',
@@ -46,7 +49,7 @@ RESIZE_GEOMETRY = getattr(settings, 'CMS_RST_IMPORT_RESIZE_GEOMETRY',
 
 def service_from_filename(rst):
     fname = os.path.basename(rst).replace(".rst","")
-    service_slug = DEFAULT_SERVICE_MAP.get(fname, None)
+    service_slug = SERVICE_MAP.get(fname, None)
     if not service_slug:
         return None
 
@@ -145,7 +148,10 @@ 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)
+                except Exception, e:
+                    logger.exception("Can not rollback")
                 logger.exception("Failed to clean existing data")
                 logger.removeHandler(stream_handler)
                 logger.setLevel(old_level)
@@ -192,7 +198,8 @@ class RstZipImportForm(forms.Form):
                 # the faq/guide content
                 if data_type == 'faq':
                     logger.info('Processing FAQ entry, %s, %s, %s', service, slug, title)
-                    cat = add_or_update_faq_category(category[0], category[1])
+                    cat = add_or_update_faq_category(unicode(category[0]),
+                            unicode(category[1]))
                     question = add_or_update_faq_question(user, service, cat, slug, \
                             title, html_content)
 
@@ -203,15 +210,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)
 
@@ -272,9 +289,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.title = title
+    q.slug = slugify(slug)
+    q.title = unicode(title)
     q.save()
+
     q.application = [Application.current()]
     q.save()
 
@@ -302,8 +320,8 @@ 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.title = title
+    guide.slug = slugify(slug)
+    guide.title = unicode(title)
     guide.save()
 
     RawContentModel = UserGuideEntry.content_type_for(RawContent)