# HG changeset patch # User cavaliet # Date 1404901571 -7200 # Node ID fb86765b4c547a8bb9610756336c66c9efe2087e # Parent eb479baeb2bf28501b95ed9b9f2e0a612b8b1e6b node placer classes diff -r eb479baeb2bf -r fb86765b4c54 .pydevproject --- a/.pydevproject Tue Jul 08 12:03:06 2014 +0200 +++ b/.pydevproject Wed Jul 09 12:26:11 2014 +0200 @@ -5,6 +5,6 @@ hdabo_python python 2.7 -/hdabo/web +/${PROJECT_DIR_NAME}/src diff -r eb479baeb2bf -r fb86765b4c54 src/hdalab/utils.py --- a/src/hdalab/utils.py Tue Jul 08 12:03:06 2014 +0200 +++ b/src/hdalab/utils.py Wed Jul 09 12:26:11 2014 +0200 @@ -2,17 +2,56 @@ ''' Created on Mar 13, 2012 -@author: ymh +@author: ymh and tc ''' from django.core.cache import cache +from django.http.response import Http404 from django.utils.encoding import smart_str import md5 import re +import logging +logger = logging.getLogger(__name__) + def fix_cache_key(key): cache_key = re.sub(r'\s+', '-', key) cache_key = smart_str(cache_key) if len(cache_key) > (250-(2+len(cache.key_prefix)+len(str(cache.version)))-33): cache_key = cache_key[:(250-(2+len(cache.key_prefix)+len(str(cache.version)))-33)] + '-' + md5.new(cache_key).hexdigest() - return cache_key \ No newline at end of file + return cache_key + + + +class NodePlacer(): + + cat_nb_nodes = {} + + def init(self, cat_nb_nodes_initial): + raise NotImplementedError( "Should have implemented get_place" ) + + def get_place(self, category): + if not category or category not in self.cat_nb_nodes: + raise Http404 + return self.cat_nb_nodes[category].pop(0) + + + +class LineNodePlacer(NodePlacer): + + max_length = 0 + + def init(self, cat_nb_nodes_initial): + for c in cat_nb_nodes_initial: + self.max_length = cat_nb_nodes_initial[c] if cat_nb_nodes_initial[c] > self.max_length else self.max_length + for i_cat,c in enumerate(cat_nb_nodes_initial): + self.cat_nb_nodes[c] = [] + offset = float(self.max_length - cat_nb_nodes_initial[c]) / 2 + for i in xrange(cat_nb_nodes_initial[c]): + self.cat_nb_nodes[c].append({ "x": i_cat*200, "y": 100*(i+offset) }) + #logger.debug(self.cat_nb_nodes) + + + + + \ No newline at end of file diff -r eb479baeb2bf -r fb86765b4c54 src/hdalab/views/ajax.py --- a/src/hdalab/views/ajax.py Tue Jul 08 12:03:06 2014 +0200 +++ b/src/hdalab/views/ajax.py Wed Jul 09 12:26:11 2014 +0200 @@ -11,7 +11,7 @@ from hdabo.models import Tag, Datasheet, TaggedSheet from hdalab.models import HdaSession, Country, TagYears, DatasheetExtras from hdalab.models.dataviz import DbpediaFieldsTranslation, DbpediaFields -from hdalab.models.categories import WpCategory, WpCategoryInclusion, TagWpCategory +from hdalab.models.categories import WpCategory from hdalab.utils import fix_cache_key import copy import json @@ -170,7 +170,7 @@ HdaSession.objects.filter(sessionid=sessionid).update(data=json.dumps(data)) else: data = HdaSession.objects.get(sessionid=sessionid).data - data = json.loads(data) if data else {} + data = json.loads(data) if data else {} resobj = {'data': data, "write_allowed" : write, "sessionid": sessionid } if write: @@ -241,7 +241,7 @@ # On ne récupère que les catégories qui sont également des tags qrx = '(\\m|\\b)%s'%q - qs = Tag.objects.filter(label__iregex=q) + qs = Tag.objects.filter(label__iregex=qrx) labels = [tag.label for tag in qs] diff -r eb479baeb2bf -r fb86765b4c54 src/hdalab/views/renkan.py --- a/src/hdalab/views/renkan.py Tue Jul 08 12:03:06 2014 +0200 +++ b/src/hdalab/views/renkan.py Wed Jul 09 12:26:11 2014 +0200 @@ -5,12 +5,12 @@ @author: tc ''' from datetime import datetime -from django.conf import settings from django.db.models import Q from django.http.response import HttpResponse from django.views.generic import View from django.views.decorators.csrf import csrf_exempt -from hdabo.models import Tag, Datasheet, TaggedSheet +from hdabo.models import Tag +from hdalab.utils import LineNodePlacer from hdalab.views.ajax import filter_generic import json import uuid @@ -51,37 +51,36 @@ country_list = [c for c in countries if c!=""] all_tags = Tag.objects.filter( Q(label__in=label_list) | Q(dbpedia_uri__in=country_list) ) + # Get datasheets from ajax filter search + filter_output = filter_generic(request.GET.get('lang',request.LANGUAGE_CODE), None, ",".join(label_list), ",".join(country_list)) + filter_output = json.loads(filter_output) + + # Prepare Node placer : + np = LineNodePlacer() + np.init({"tags": len(all_tags), "datasheet":len(filter_output["contents"])}) + project_id = unicode(uuid.uuid1()) - for i,t in enumerate(all_tags): + for t in all_tags: content["nodes"].append({ "id": unicode(uuid.uuid1()), "title": t.label, "description": t.dbpedia_uri, "uri": t.dbpedia_uri, - "position": { - "x": 0, - "y": 100*i - }, + "position": np.get_place("tags"), "image": None, "size": 0, "project_id": project_id, #"created_by": "roster_user-84fe909f-ba37-48e6-a25f-9d2f129a95b7" }) - # Get datasheets from ajax filter search - filter_output = filter_generic(request.GET.get('lang',request.LANGUAGE_CODE), None, ",".join(label_list), ",".join(country_list)) - filter_output = json.loads(filter_output) - for i,c in enumerate(filter_output["contents"]): + for c in filter_output["contents"] : content["nodes"].append({ "id": unicode(uuid.uuid1()), "title": c["title"], "description": c["description"], "uri": c["url"], - "position": { - "x": 200, - "y": 100*i - 50 - }, + "position": np.get_place("datasheet"), "image": None, "size": 0, "project_id": project_id, @@ -96,4 +95,5 @@ def put(self, request): return HttpResponse("OK") - + + \ No newline at end of file