| author | cavaliet |
| Tue, 26 Aug 2014 16:06:55 +0200 | |
| changeset 323 | d5e2007c01d8 |
| parent 318 | 815589aed866 |
| child 324 | a4a575e755aa |
| permissions | -rw-r--r-- |
|
318
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
1 |
# -*- coding: utf-8 -*- |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
2 |
''' |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
3 |
Created on Mar 13, 2012 |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
4 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
5 |
@author: ymh and tc |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
6 |
''' |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
7 |
from django.core.cache import cache |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
8 |
from django.core.exceptions import ValidationError |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
9 |
from django.http.response import Http404 |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
10 |
from django.shortcuts import get_object_or_404 |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
11 |
from django.utils.encoding import smart_str |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
12 |
from renkanmanager.models import Renkan |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
13 |
import md5 |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
14 |
import re |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
15 |
import uuid |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
16 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
17 |
import logging |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
18 |
logger = logging.getLogger(__name__) |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
19 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
20 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
21 |
def fix_cache_key(key): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
22 |
cache_key = re.sub(r'\s+', '-', key) |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
23 |
cache_key = smart_str(cache_key) |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
24 |
if len(cache_key) > (250-(2+len(cache.key_prefix)+len(str(cache.version)))-33): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
25 |
cache_key = cache_key[:(250-(2+len(cache.key_prefix)+len(str(cache.version)))-33)] + '-' + md5.new(cache_key).hexdigest() |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
26 |
return cache_key |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
27 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
28 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
29 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
30 |
class NodePlacer(): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
31 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
32 |
cat_nb_nodes = {} |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
33 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
34 |
def init(self, cat_nb_nodes_initial): |
| 323 | 35 |
raise NotImplementedError( "Should have implemented init" ) |
|
318
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
36 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
37 |
def get_place(self, category): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
38 |
if not category or category not in self.cat_nb_nodes: |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
39 |
raise Http404 |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
40 |
return self.cat_nb_nodes[category].pop(0) |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
41 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
42 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
43 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
44 |
class LineNodePlacer(NodePlacer): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
45 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
46 |
max_length = 0 |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
47 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
48 |
def init(self, cat_nb_nodes_initial): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
49 |
for c in cat_nb_nodes_initial: |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
50 |
nb = cat_nb_nodes_initial[c] |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
51 |
if isinstance(cat_nb_nodes_initial[c], tuple): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
52 |
_, nb = nb |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
53 |
self.max_length = nb if nb > self.max_length else self.max_length |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
54 |
for i_cat,c in enumerate(cat_nb_nodes_initial): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
55 |
self.cat_nb_nodes[c] = [] |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
56 |
order = i_cat |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
57 |
nb = cat_nb_nodes_initial[c] |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
58 |
if isinstance(cat_nb_nodes_initial[c], tuple): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
59 |
order, nb = nb |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
60 |
offset = float(self.max_length - nb) / 2 |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
61 |
for i in xrange(nb): |
| 323 | 62 |
self.cat_nb_nodes[c].append({ "x": order*500, "y": 100*(i+offset) }) |
|
318
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
63 |
#logger.debug(self.cat_nb_nodes) |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
64 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
65 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
66 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
67 |
class CircleNodePlacer(NodePlacer): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
68 |
#TODO: Does not work. Meant to be a real circle placer |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
69 |
def init(self, cat_nb_nodes_initial): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
70 |
for c in cat_nb_nodes_initial: |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
71 |
self.max_length = cat_nb_nodes_initial[c] if cat_nb_nodes_initial[c] > self.max_length else self.max_length |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
72 |
for i_cat,c in enumerate(cat_nb_nodes_initial): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
73 |
self.cat_nb_nodes[c] = [] |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
74 |
offset = float(self.max_length - cat_nb_nodes_initial[c]) / 2 |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
75 |
for i in xrange(cat_nb_nodes_initial[c]): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
76 |
self.cat_nb_nodes[c].append({ "x": i_cat*400, "y": 200*(i+offset) }) |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
77 |
#logger.debug(self.cat_nb_nodes) |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
78 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
79 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
80 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
81 |
def renkan_copier(user, old_rk_id): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
82 |
old_rk = get_object_or_404(Renkan, rk_id=old_rk_id) |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
83 |
rk = Renkan() |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
84 |
rk.rk_id = unicode(uuid.uuid1()) |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
85 |
rk.owner = user |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
86 |
rk.content = old_rk.content |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
87 |
#TODO : update title and uuid in the content's json data |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
88 |
rk.title = old_rk.title + " (copy)" |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
89 |
rk.save() |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
90 |
return rk |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
91 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
92 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
93 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
94 |
def renkan_deleter(user, rk_id): |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
95 |
rk = get_object_or_404(Renkan, rk_id=rk_id) |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
96 |
if rk.owner==user: |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
97 |
rk.delete() |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
98 |
else: |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
99 |
raise ValidationError("You are not allowed to remove this renkan") |
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
100 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
101 |
|
|
815589aed866
django app renkamanager (models, vanilla views, utils, static files)
cavaliet
parents:
diff
changeset
|
102 |