Gustavo Picon is sharing code with you
Bitbucket is a code hosting site. Unlimited public and private repositories. Free for small teams.
Don't show this againdjango-treebeard / tbexample / views.py
- commit
- 0f2a87d336ee
- parent
- f45c785ede80
- parent
- b38bf3705bca
- branch
- 1.6.X
merging from 1.61 tag to 1.6.X branch
1 |
dc6379f01920
|
|
2 |
dc6379f01920
|
import datetime |
3 |
dc6379f01920
|
import random |
4 |
dc6379f01920
|
|
5 |
dc6379f01920
|
from django import forms |
6 |
dc6379f01920
|
from django.db import transaction |
7 |
dc6379f01920
|
from django.http import HttpResponseRedirect |
8 |
dc6379f01920
|
from django.db import connection |
9 |
dc6379f01920
|
from django.shortcuts import render_to_response, get_object_or_404 |
10 |
dc6379f01920
|
from django.core.cache import cache |
11 |
dc6379f01920
|
|
12 |
dc6379f01920
|
from tbexample.models import MP_Post, AL_Post, NS_Post |
13 |
dc6379f01920
|
from tbexample.forms import CommentForm |
14 |
dc6379f01920
|
|
15 |
dc6379f01920
|
|
16 |
dc6379f01920
|
def treetype2model(treetype): |
17 |
dc6379f01920
|
""" Returns the tree model for a given tree type from the url |
18 |
dc6379f01920
|
""" |
19 |
dc6379f01920
|
return {'mp': MP_Post, |
20 |
dc6379f01920
|
'al': AL_Post, |
21 |
dc6379f01920
|
'ns': NS_Post}[treetype] |
22 |
dc6379f01920
|
|
23 |
dc6379f01920
|
|
24 |
dc6379f01920
|
@transaction.commit_on_success |
25 |
dc6379f01920
|
def load_random_data(request, treetype): |
26 |
dc6379f01920
|
""" Makes lots of dummy posts. |
27 |
dc6379f01920
|
""" |
28 |
dc6379f01920
|
tbmodel = treetype2model(treetype) |
29 |
dc6379f01920
|
data = {'sql_queries': connection.queries, |
30 |
dc6379f01920
|
'treetype': treetype} |
31 |
dc6379f01920
|
|
32 |
dc6379f01920
|
key = 'treebeard_tbexample_loadfloodprot_%s' % treetype |
33 |
dc6379f01920
|
if cache.get(key): |
34 |
dc6379f01920
|
return render_to_response('tbexample/loadflood.html', data) |
35 |
dc6379f01920
|
cache.set(key, True, 60*5) |
36 |
dc6379f01920
|
|
37 |
dc6379f01920
|
interval = range(1,6) |
38 |
dc6379f01920
|
vals = {1: 4, 2: 10, 3: 25, 4: 50, 5: 50} |
39 |
dc6379f01920
|
for depth in interval: |
40 |
dc6379f01920
|
num = vals[depth] |
41 |
dc6379f01920
|
if depth > 1: |
42 |
dc6379f01920
|
if treetype == 'al': |
43 |
dc6379f01920
|
nodes = [obj for obj in tbmodel.objects.all() |
44 |
dc6379f01920
|
if obj.get_depth() == depth-1] |
45 |
dc6379f01920
|
else: |
46 |
dc6379f01920
|
nodes = list(tbmodel.objects.filter(depth=depth-1)) |
47 |
dc6379f01920
|
for i in range(num): |
48 |
dc6379f01920
|
if depth == 1: |
49 |
dc6379f01920
|
meth = tbmodel.add_root |
50 |
dc6379f01920
|
else: |
51 |
dc6379f01920
|
node = nodes[random.randint(0, len(nodes)-1)] |
52 |
dc6379f01920
|
if treetype == 'ns': |
53 |
dc6379f01920
|
node = tbmodel.objects.get(pk=node.id) |
54 |
dc6379f01920
|
meth = node.add_child |
55 |
dc6379f01920
|
obj = meth(author='author_%d' % (i,), |
56 |
11d2c27832ed
|
comment='lorem ipsum! %d' % (random.randint(1000000000, |
57 |
11d2c27832ed
|
9999999999), ), |
58 |
dc6379f01920
|
created=datetime.datetime.now()) |
59 |
dc6379f01920
|
return render_to_response('tbexample/loaddata.html', data) |
60 |
dc6379f01920
|
|
61 |
dc6379f01920
|
|
62 |
dc6379f01920
|
@transaction.commit_on_success |
63 |
dc6379f01920
|
def delete_node(request, treetype, node_id): |
64 |
dc6379f01920
|
""" View to remove a message and it's replies |
65 |
dc6379f01920
|
""" |
66 |
dc6379f01920
|
tbmodel = treetype2model(treetype) |
67 |
dc6379f01920
|
data = {'sql_queries': connection.queries, |
68 |
dc6379f01920
|
'treetype': treetype} |
69 |
dc6379f01920
|
node = get_object_or_404(tbmodel, id=node_id) |
70 |
dc6379f01920
|
node.delete() |
71 |
dc6379f01920
|
return render_to_response('tbexample/delete.html', data) |
72 |
dc6379f01920
|
|
73 |
dc6379f01920
|
|
74 |
dc6379f01920
|
@transaction.commit_on_success |
75 |
dc6379f01920
|
def delete_all(request, treetype): |
76 |
dc6379f01920
|
""" Remove all messages |
77 |
dc6379f01920
|
""" |
78 |
dc6379f01920
|
tbmodel = treetype2model(treetype) |
79 |
dc6379f01920
|
data = {'sql_queries': connection.queries, |
80 |
dc6379f01920
|
'treetype': treetype} |
81 |
dc6379f01920
|
tbmodel.objects.all().delete() |
82 |
dc6379f01920
|
return render_to_response('tbexample/delete.html', data) |
83 |
dc6379f01920
|
|
84 |
dc6379f01920
|
|
85 |
dc6379f01920
|
@transaction.commit_on_success |
86 |
dc6379f01920
|
def convo(request, treetype, node_id=None): |
87 |
dc6379f01920
|
""" convo view~ |
88 |
dc6379f01920
|
""" |
89 |
dc6379f01920
|
tbmodel = treetype2model(treetype) |
90 |
dc6379f01920
|
data = {'sql_queries': connection.queries, |
91 |
dc6379f01920
|
'treetype': treetype} |
92 |
dc6379f01920
|
if node_id: |
93 |
dc6379f01920
|
root = get_object_or_404(tbmodel, id=node_id) |
94 |
dc6379f01920
|
if root.get_depth() != 1: |
95 |
dc6379f01920
|
# meh not really a root node, redirecting... |
96 |
dc6379f01920
|
return HttpResponseRedirect('%s#comment_%d' % |
97 |
dc6379f01920
|
(root.get_root().get_absolute_url(), root.id)) |
98 |
dc6379f01920
|
else: |
99 |
dc6379f01920
|
root = None |
100 |
dc6379f01920
|
|
101 |
dc6379f01920
|
if request.method == 'POST': |
102 |
dc6379f01920
|
form = CommentForm(request.POST) |
103 |
dc6379f01920
|
form.root = root |
104 |
dc6379f01920
|
form.tbmodel = tbmodel |
105 |
dc6379f01920
|
if form.is_valid(): |
106 |
dc6379f01920
|
obj = form.add_method( |
107 |
dc6379f01920
|
author=form.cleaned_data['author'], |
108 |
dc6379f01920
|
comment=form.cleaned_data['comment'], |
109 |
dc6379f01920
|
created=datetime.datetime.now()) |
110 |
dc6379f01920
|
if not root: |
111 |
dc6379f01920
|
root = obj |
112 |
dc6379f01920
|
data['link'] = '%s#comment_%d' % \ |
113 |
dc6379f01920
|
(root.get_absolute_url(), obj.id) |
114 |
dc6379f01920
|
return render_to_response('tbexample/posted.html', data) |
115 |
dc6379f01920
|
else: |
116 |
dc6379f01920
|
form = CommentForm() |
117 |
dc6379f01920
|
form.root = root |
118 |
dc6379f01920
|
form.tbmodel = tbmodel |
119 |
dc6379f01920
|
|
120 |
dc6379f01920
|
data['form'] = form |
121 |
dc6379f01920
|
if node_id: |
122 |
dc6379f01920
|
template_html = 'tbexample/convo.html' |
123 |
dc6379f01920
|
descendants = root.get_descendants() |
124 |
dc6379f01920
|
nodes = [(root, len(descendants))] + [ |
125 |
dc6379f01920
|
(node, node.get_children_count()) |
126 |
dc6379f01920
|
for node in descendants |
127 |
dc6379f01920
|
] |
128 |
dc6379f01920
|
data['mainpage'] = False |
129 |
dc6379f01920
|
data['nodes'] = nodes |
130 |
dc6379f01920
|
form.fields['parent'].widget = forms.TextInput() |
131 |
dc6379f01920
|
else: |
132 |
dc6379f01920
|
template_html = 'tbexample/main.html' |
133 |
dc6379f01920
|
data['mainpage'] = True |
134 |
dc6379f01920
|
data['nodes'] = [(node, node.descendants_count) |
135 |
dc6379f01920
|
for node in tbmodel.get_descendants_group_count()] |
136 |
dc6379f01920
|
data['total_comments'] = len(data['nodes']) + \ |
137 |
dc6379f01920
|
sum([count for _, count in data['nodes']]) |
138 |
dc6379f01920
|
data['treetype'] = treetype |
139 |
dc6379f01920
|
return render_to_response(template_html, data) |
140 |
dc6379f01920
|
|
141 |
dc6379f01920
|
|
142 |
07a8db24f7e4
|
def choose(request): |
143 |
07a8db24f7e4
|
return render_to_response('tbexample/choose.html', {}) |
144 |
dc6379f01920
|
|
145 |
dc6379f01920
|