X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/3c3864586d0d186ca2408c1016052db1d3c4dc55..d0a422f6749091582d3f4b94e7fda9869b9ed4e4:/forum/models/node.py?ds=sidebyside diff --git a/forum/models/node.py b/forum/models/node.py index bebd07c..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 @@ -349,7 +363,7 @@ class Node(BaseModel, NodeContent): if action: for tag in self.tags.all(): - tag.tag.add_to_usage_count(-1) + tag.add_to_usage_count(-1) tag.save() else: for tag in Tag.objects.filter(name__in=self.tagname_list()):