src/hdalab/views/renkan.py
author cavaliet
Fri, 11 Jul 2014 16:49:14 +0200
changeset 292 f6742c41d7a3
parent 291 44af3e5e4114
child 296 c69dfb9d410e
permissions -rw-r--r--
user form management with django registration
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
288
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
     2
'''
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
     3
Created on Jul 01, 2014
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
     4
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
     5
@author: tc
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
     6
'''
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
     7
from datetime import datetime
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
     8
from django.db.models import Q
288
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
     9
from django.http.response import HttpResponse
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    10
from django.views.generic import View
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    11
from django.views.decorators.csrf import csrf_exempt
290
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
    12
from hdabo.models import Tag
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
    13
from hdalab.utils import LineNodePlacer
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    14
from hdalab.views.ajax import filter_generic
288
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    15
import json
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    16
import uuid
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    17
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    18
import logging
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    19
logger = logging.getLogger(__name__)
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    20
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    21
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    22
class RenkanGetPut(View):
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    23
    
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    24
    @csrf_exempt
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    25
    def dispatch(self, *args, **kwargs):
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    26
        return super(RenkanGetPut, self).dispatch(*args, **kwargs)
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    27
    
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    28
    def get(self, request):
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    29
        #file_path = settings.JSON_TEST_PATH
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    30
        #content = open(file_path,"r")
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    31
        
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    32
        now = datetime.now().strftime("%Y-%m-%d %H:%M")
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    33
        
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    34
        content = {
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    35
          "id": unicode(uuid.uuid1()),
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    36
          "title": "Renkan généré " + now,
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    37
          "description": "(empty description)",
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    38
          "created": now,
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    39
          "updated": now,
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    40
          "nodes": [],
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    41
          "edges": [],
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    42
          "views": [],
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    43
          "users": [],
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    44
        }
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    45
        
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    46
        # Get tags and countries
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    47
        labels = request.GET.get("label", "").split(",")
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    48
        countries = request.GET.get("country", "").split(",")
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    49
        # Tags arrive with french label, countries with dbpedia uri
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    50
        label_list = [t for t in labels if t!=""]
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    51
        country_list = [c for c in countries if c!=""]
291
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    52
        all_tags = Tag.objects.filter( Q(label__in=label_list) | Q(dbpedia_uri__in=country_list) ).select_related("dbpedia_fields")
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    53
        
290
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
    54
        # Get datasheets from ajax filter search
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
    55
        filter_output = filter_generic(request.GET.get('lang',request.LANGUAGE_CODE), None, ",".join(label_list), ",".join(country_list))
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
    56
        filter_output = json.loads(filter_output)
291
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    57
        #logger.debug("COUCOU")
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    58
        #logger.debug(json.dumps(filter_output, indent=2))
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    59
        #return HttpResponse(json.dumps(filter_output, indent=2), content_type="application/json")
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    60
        
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    61
        # Prepare other tags
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    62
        related_tags = []
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    63
        all_labels = [t.label for t in all_tags]
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    64
        related_tags_dict = {}
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    65
        for c in filter_output["contents"]:
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    66
            c["id"] = unicode(uuid.uuid1())
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    67
            related_tags_dict[c["id"]] = []
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    68
            for t in c["tags"]:
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    69
                if t["label"] not in all_labels and t["order"]<6:
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    70
                    thumbnail_url = ""
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    71
                    for tt in filter_output["tags"]:
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    72
                        if tt["label"]==t["label"]:
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    73
                            thumbnail_url = tt["thumbnail"]
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    74
                    related_tags.append({"label": t["label"], "thumbnail":thumbnail_url, "id":t["id"]})
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    75
                    all_labels.append(t["label"])
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    76
                    related_tags_dict[c["id"]].append(t["id"])
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    77
        #return HttpResponse(json.dumps({"t":related_tags_label}, indent=2), content_type="application/json")
290
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
    78
        
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
    79
        # Prepare Node placer :
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
    80
        np = LineNodePlacer()
291
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    81
        np.init({"tags": (1, len(all_tags)), "datasheet": (2, len(filter_output["contents"])), "related": (3, len(related_tags))})
290
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
    82
        
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    83
        project_id = unicode(uuid.uuid1())
288
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
    84
        
290
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
    85
        for t in all_tags:
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    86
            content["nodes"].append({
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    87
              "id": unicode(uuid.uuid1()),
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    88
              "title": t.label,
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    89
              "description": t.dbpedia_uri,
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    90
              "uri": t.dbpedia_uri,
290
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
    91
              "position": np.get_place("tags"),
291
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    92
              "image": t.dbpedia_fields.thumbnail if hasattr(t, 'dbpedia_fields') and t.dbpedia_fields and t.dbpedia_fields.thumbnail else None,
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    93
              "size": 0,
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    94
              "project_id": project_id,
291
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    95
              "color": None,
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    96
              #"created_by": "roster_user-84fe909f-ba37-48e6-a25f-9d2f129a95b7"
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    97
            })
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
    98
        
291
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
    99
        for c in filter_output["contents"]:
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   100
            content["nodes"].append({
291
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   101
              "id": c["id"],
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   102
              "title": c["title"],
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   103
              "description": c["description"],
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   104
              "uri": c["url"],
290
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
   105
              "position": np.get_place("datasheet"),
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   106
              "image": None,
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   107
              "size": 0,
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   108
              "project_id": project_id,
291
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   109
              "color": "#FF0033",
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   110
              #"created_by": "roster_user-84fe909f-ba37-48e6-a25f-9d2f129a95b7"
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   111
            })
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   112
        
291
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   113
        for t in related_tags:
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   114
            content["nodes"].append({
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   115
              "id": t["id"],
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   116
              "title": t["label"],
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   117
              "description": "",
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   118
              "uri": "",
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   119
              "position": np.get_place("related"),
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   120
              "image": t["thumbnail"],
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   121
              "size": 0,
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   122
              "project_id": project_id,
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   123
              "color": "#00FF33",
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   124
              #"created_by": "roster_user-84fe909f-ba37-48e6-a25f-9d2f129a95b7"
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   125
            })
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   126
        
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   127
        for c_id in related_tags_dict:
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   128
            for tag_id in related_tags_dict[c_id]:
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   129
                content["edges"].append({
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   130
                    "id": unicode(uuid.uuid1()),
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   131
                    "title": "",
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   132
                    "description": "",
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   133
                    "uri": "",
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   134
                    "color": None,
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   135
                    "from": c_id,
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   136
                    "to": tag_id,
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   137
                    "project_id": project_id,
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   138
                    #"created_by": "de68xf75y6hs5rgjhgghxbm217xk"
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   139
                })
44af3e5e4114 enhance line placer
cavaliet
parents: 290
diff changeset
   140
        
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   141
        
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   142
        
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   143
        return HttpResponse(json.dumps(content), content_type="application/json")
288
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
   144
    
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
   145
    
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
   146
    def put(self, request):
0bb9c29cd41d renkan first step : link, views and get put for json
cavaliet
parents:
diff changeset
   147
        
289
eb479baeb2bf renkan first step with tag and datasheet nodes
cavaliet
parents: 288
diff changeset
   148
        return HttpResponse("OK")
290
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
   149
        
fb86765b4c54 node placer classes
cavaliet
parents: 289
diff changeset
   150