X-Git-Url: https://git.openstreetmap.org./osqa.git/blobdiff_plain/58f020d4fab8251103edb89bfc4cf5d5d389d1ad..321d25482e17050f100ada2d737e8ff7e46b00da:/forum/models/node.py diff --git a/forum/models/node.py b/forum/models/node.py index f2086fc..bebd07c 100644 --- a/forum/models/node.py +++ b/forum/models/node.py @@ -7,6 +7,7 @@ from django.utils.translation import ugettext as _ from django.utils.safestring import mark_safe from django.utils.html import strip_tags from forum.utils.html import sanitize_html +from utils import PickledObjectField class NodeContent(models.Model): title = models.CharField(max_length=300) @@ -22,8 +23,12 @@ class NodeContent(models.Model): def html(self): return self.as_markdown() + @classmethod + def _as_markdown(cls, content, *extensions): + return mark_safe(sanitize_html(markdown.markdown(content, extensions=extensions))) + def as_markdown(self, *extensions): - return mark_safe(sanitize_html(markdown.markdown(self.body, extensions=extensions))) + return self._as_markdown(self.body, *extensions) @property def headline(self): @@ -57,7 +62,7 @@ class NodeMetaClass(BaseMetaClass): @classmethod def setup_relations(cls): for node_cls in NodeMetaClass.types.values(): - NodeMetaClass.setup_relation(node_cls) + NodeMetaClass.setup_relation(node_cls) @classmethod def setup_relation(cls, node_cls): @@ -166,7 +171,6 @@ class NodeStateQuery(object): return "(%s)" % name in node.state_string - class Node(BaseModel, NodeContent): __metaclass__ = NodeMetaClass @@ -186,6 +190,7 @@ class Node(BaseModel, NodeContent): tags = models.ManyToManyField('Tag', related_name='%(class)ss') active_revision = models.OneToOneField('NodeRevision', related_name='active', null=True) + extra = PickledObjectField() extra_ref = models.ForeignKey('Node', null=True) extra_count = models.IntegerField(default=0) @@ -202,8 +207,8 @@ class Node(BaseModel, NodeContent): return self.headline @classmethod - def cache_key(cls, pk): - return '%s:node:%s' % (settings.APP_URL, pk) + def _generate_cache_key(cls, key, group="node"): + return super(Node, cls)._generate_cache_key(key, group) @classmethod def get_type(cls): @@ -244,7 +249,7 @@ class Node(BaseModel, NodeContent): def deleted(self): return self.nis.deleted - @property + @property def absolute_parent(self): if not self.abs_parent_id: return self @@ -303,10 +308,10 @@ class Node(BaseModel, NodeContent): new_tags = set(name for name in self.tagnames.split(u' ') if name) return dict( - current=list(new_tags), - added=list(new_tags - old_tags), - removed=list(old_tags - new_tags) - ) + current=list(new_tags), + added=list(new_tags - old_tags), + removed=list(old_tags - new_tags) + ) def _last_active_user(self): return self.last_edited and self.last_edited.by or self.author @@ -322,14 +327,14 @@ class Node(BaseModel, NodeContent): tag = Tag.objects.create(name=name, created_by=self._last_active_user()) if not self.nis.deleted: - tag.used_count = models.F('used_count') + 1 + tag.add_to_usage_count(1) tag.save() if not self.nis.deleted: for name in tag_changes['removed']: try: tag = Tag.objects.get(name=name) - tag.used_count = models.F('used_count') - 1 + tag.add_to_usage_count(-1) tag.save() except: pass @@ -344,20 +349,21 @@ class Node(BaseModel, NodeContent): if action: for tag in self.tags.all(): - tag.used_count = models.F('used_count') - 1 + tag.tag.add_to_usage_count(-1) tag.save() else: for tag in Tag.objects.filter(name__in=self.tagname_list()): - tag.used_count = models.F('used_count') + 1 + tag.add_to_usage_count(1) tag.save() def save(self, *args, **kwargs): tags_changed = self._process_changes_in_tags() - + if not self.id: self.node_type = self.get_type() super(BaseModel, self).save(*args, **kwargs) - self.active_revision = self._create_revision(self.author, 1, title=self.title, tagnames=self.tagnames, body=self.body) + self.active_revision = self._create_revision(self.author, 1, title=self.title, tagnames=self.tagnames, + body=self.body) self.update_last_activity(self.author) if self.parent_id and not self.abs_parent_id: