src/hdalab/utils.py
author cavaliet
Wed, 09 Jul 2014 12:26:11 +0200
changeset 290 fb86765b4c54
parent 266 825ff4d6a8ac
child 291 44af3e5e4114
permissions -rw-r--r--
node placer classes
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
154
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
'''
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
Created on Mar 13, 2012
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
290
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
     5
@author: ymh and tc
154
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
'''
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
from django.core.cache import cache
290
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
     8
from django.http.response import Http404
154
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
from django.utils.encoding import smart_str
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
import md5
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
import re
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
290
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    13
import logging
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    14
logger = logging.getLogger(__name__)
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    15
154
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
def fix_cache_key(key):
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
    cache_key = re.sub(r'\s+', '-', key)
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
    cache_key = smart_str(cache_key)
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
    if len(cache_key) > (250-(2+len(cache.key_prefix)+len(str(cache.version)))-33):
8527c5a3ddb7 add cache management to filter
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
        cache_key = cache_key[:(250-(2+len(cache.key_prefix)+len(str(cache.version)))-33)] + '-' + md5.new(cache_key).hexdigest()
290
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    22
    return cache_key
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    23
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    24
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    25
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    26
class NodePlacer():
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    27
    
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    28
    cat_nb_nodes = {}
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    29
    
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    30
    def init(self, cat_nb_nodes_initial):
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    31
        raise NotImplementedError( "Should have implemented get_place" )
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    32
    
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    33
    def get_place(self, category):
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    34
        if not category or category not in self.cat_nb_nodes:
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    35
            raise Http404
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    36
        return self.cat_nb_nodes[category].pop(0)
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    37
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    38
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    39
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    40
class LineNodePlacer(NodePlacer):
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    41
    
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    42
    max_length = 0
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    43
    
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    44
    def init(self, cat_nb_nodes_initial):
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    45
        for c in cat_nb_nodes_initial:
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    46
            self.max_length = cat_nb_nodes_initial[c] if cat_nb_nodes_initial[c] > self.max_length else self.max_length
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    47
        for i_cat,c in enumerate(cat_nb_nodes_initial):
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    48
            self.cat_nb_nodes[c] = []
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    49
            offset = float(self.max_length - cat_nb_nodes_initial[c]) / 2
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    50
            for i in xrange(cat_nb_nodes_initial[c]):
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    51
                self.cat_nb_nodes[c].append({ "x": i_cat*200, "y": 100*(i+offset) })
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    52
        #logger.debug(self.cat_nb_nodes)
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    53
        
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    54
                
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    55
    
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    56
        
fb86765b4c54 node placer classes
cavaliet
parents: 266
diff changeset
    57