]> git.openstreetmap.org Git - osqa.git/blobdiff - forum/models/node.py
Wraps the markdowner call with a try except block, and logs the possible errors.
[osqa.git] / forum / models / node.py
index 75b39339e3284d74e913f60d99e80fa35a7b8d21..6d8a4834f3a6a5a244a65dae748173fb26a09775 100644 (file)
@@ -25,7 +25,13 @@ class NodeContent(models.Model):
 
     @classmethod
     def _as_markdown(cls, content, *extensions):
 
     @classmethod
     def _as_markdown(cls, content, *extensions):
-        return mark_safe(sanitize_html(markdown.markdown(content, extensions=extensions)))
+        try:
+            return mark_safe(sanitize_html(markdown.markdown(content, extensions=extensions)))
+        except Exception, e:
+            import traceback
+            logging.error("Caught exception %s in markdown parser rendering %s %s:\s %s" % (
+                str(e), cls.__name__, str(e), traceback.format_exc()))
+            return ''
 
     def as_markdown(self, *extensions):
         return self._as_markdown(self.body, *extensions)
 
     def as_markdown(self, *extensions):
         return self._as_markdown(self.body, *extensions)
@@ -106,6 +112,9 @@ class NodeQuerySet(CachedQuerySet):
         apply_bool = lambda q, b: b and q or ~q
         return self.filter(*[apply_bool(models.Q(state_string__contains="(%s)" % s), b) for s, b in kwargs.items()])
 
         apply_bool = lambda q, b: b and q or ~q
         return self.filter(*[apply_bool(models.Q(state_string__contains="(%s)" % s), b) for s, b in kwargs.items()])
 
+    def children_count(self, child_type):
+        return NodeMetaClass.types[child_type].objects.filter_state(deleted=False).filter(parent__in=self).count()
+
 
 class NodeManager(CachedManager):
     use_for_related_fields = True
 
 class NodeManager(CachedManager):
     use_for_related_fields = True