X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/51b8ed2ffcf802325aeca0411b6e5daf7d1564ac..c6c2f8819fc57f538764f3bccc7580bc6d94e25b:/forum/models/node.py diff --git a/forum/models/node.py b/forum/models/node.py index 70d10b6..6d8a483 100644 --- a/forum/models/node.py +++ b/forum/models/node.py @@ -25,7 +25,13 @@ class NodeContent(models.Model): @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) @@ -95,12 +101,20 @@ class NodeQuerySet(CachedQuerySet): return super(NodeQuerySet, self).obj_from_datadict(datadict) def get(self, *args, **kwargs): - return super(NodeQuerySet, self).get(*args, **kwargs).leaf + node = super(NodeQuerySet, self).get(*args, **kwargs).leaf + + if not isinstance(node, self.model): + raise self.model.DoesNotExist() + + return node def filter_state(self, **kwargs): 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