<commit_before># -*- coding: utf-8 -*-
# from rest_framework import viewsets
# from serializers import EnteSerializer
import decimal
import json
from collections import OrderedDict
from django.core.serializers.json import DjangoJSONEncoder
from django.db.models import Avg, Count
from django.http import JsonResponse
from django.shortcuts import get_object_or_404
from models import *


class MyJSONEncoder(DjangoJSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            return float(o)
        else:
            return super(MyJSONEncoder, self).default(o)


class MyJsonResponse(JsonResponse):
    def __init__(self, *args, **kwargs):
        super(MyJsonResponse, self).__init__(encoder=MyJSONEncoder, *args, **kwargs)
        self['Access-Control-Allow-Origin'] = '*'
        self['Access-Control-Allow-Methods'] = 'POST,PUT,GET'
        self['Access-Control-Allow-Headers'] = 'content-type'


def index(request):
    data = OrderedDict([
        ('overview', request.build_absolute_uri('overview/')),
        ('detail', request.build_absolute_uri('detail/')),
        ('entity-search', request.build_absolute_uri('entity-search/')),
        ('shareholder-search', request.build_absolute_uri('shareholder-search/')),
    ])

    return MyJsonResponse(data)


def overview(request):
    ranking_num_items = 50

    dimension_range = {
        'S': {'to': 100},
        'M': {'from': 100, 'to': 1000},
        'L': {'from': 1000},
    }
    quota_range = {
        'S': {'to': 25},
        'M': {'from': 25, 'to': 75},
        'L': {'from': 75},
    }
    performance_range = {
        'S': {'to': 25},
        'M': {'from': 25, 'to': 75},
        'L': {'from': 75},
    }

    conditions = {}

    conditions['anno_riferimento'] = '2013'

    if request.GET.get('entityId'):
        conditions['ente_partecipato_id'] = request.GET['entityId']

    if request.GET.get('area'):
        conditions['regioni_settori__regione'] = request.GET['area']

    if request.GET.get('dimension') and request.GET['dimension'] in dimension_range:
        range = dimension_range[request.GET['dimension']]
        if 'from' in range:
            conditions['fatturato__gt'] = range['from']
        if 'to' in range:
            conditions['fatturato__lte'] = range['to']

    if request.GET.get('quota') and request.GET['quota'] in quota_range:
        range = quota_range[request.GET['quota']]
        if 'from' in range:
            conditions['quota_pubblica__gt'] = range['from']
        if 'to' in range:
            conditions['quota_pubblica__lte'] = range['to']

    if request.GET.get('performance') and request.GET['performance'] in performance_range:
        range = performance_range[request.GET['performance']]
        if 'from' in range:
            conditions['indice_performance__gt'] = range['from']
        if 'to' in range:
            conditions['indice_performance__lte'] = range['to']

    if request.GET.get('type'):
        conditions['categoria_id__in'] = request.GET['type']
        # conditions['tipologia__in'] = request.GET['type']

    if request.GET.get('sector'):
        conditions['regioni_settori__settore__in'] = request.GET['sector']

    if request.GET.get('shareholderId'):
        conditions['regioni_settori__settore__in'] = request.GET['shareholderId']

    related = ['ente_partecipato__ente__regione']
    enti_partecipati_cronologia = EntePartecipatoCronologia.objects.filter(**conditions).distinct().select_related(*related).prefetch_related(*related)

    counter = enti_partecipati_cronologia.count()

    ranking_ids = []
    for order_by_field in ['fatturato', 'quota_pubblica', 'indice_performance']:
        for order_by_direction in ['', '-']:
            ranking_ids += enti_partecipati_cronologia.order_by('{}{}'.format(order_by_direction, order_by_field)).values_list('id', flat=True)[:ranking_num_items]

    averages = {
        'dimension': enti_partecipati_cronologia.aggregate(Avg('fatturato'))['fatturato__avg'],
        'quota': enti_partecipati_cronologia.aggregate(Avg('quota_pubblica'))['quota_pubblica__avg'],
        'performance': enti_partecipati_cronologia.aggregate(Avg('indice_performance'))['indice_performance__avg'],
    }

    data = {
        'item': [
            {
                'id': 'entity',
                'data': [{'id': x.ente_partecipato_id, 'x': x.indice_performance, 'y': x.quota_pubblica, 'r': x.fatturato, 'codiceFiscale': x.ente_partecipato.ente.codice_fiscale, 'regione': x.ente_partecipato.ente.regione.denominazione if x.ente_partecipato.ente.regione else None} for x in enti_partecipati_cronologia.order_by('-fatturato')[:50]],
            },
            {
                'id': 'area',
                'data': {
                    'features': [{'id': x.cod_reg, 'category': x.num_enti} for x in Territorio.objects.regioni().filter(enti_settori__ente_partecipato_cronologia__in=enti_partecipati_cronologia).annotate(num_enti=Count('enti_settori__ente_partecipato_cronologia', distinct=True)).order_by('-num_enti')],
                },
            },
            {
                'id': 'type',
                'data': [{'id': x.pk, 'label': x.descrizione, 'value': x.num_enti} for x in EntePartecipatoCategoria.objects.filter(enti_partecipati_cronologia__in=enti_partecipati_cronologia).annotate(num_enti=Count('enti_partecipati_cronologia')).order_by('-num_enti')],
                # 'data': [{'id': x['tipologia'], 'label': EntePartecipatoCronologia.TIPOLOGIA[x['tipologia']], 'value': x['num_enti']} for x in enti_partecipati_cronologia.values('tipologia').annotate(num_enti=Count('tipologia')).order_by('-num_enti')],
            },
            {
                'id': 'sector',
                'data': [{'id': x.pk, 'label': x.descrizione, 'value': x.num_enti} for x in EntePartecipatoSettore.objects.filter(enti_regioni__ente_partecipato_cronologia__in=enti_partecipati_cronologia).annotate(num_enti=Count('enti_regioni__ente_partecipato_cronologia', distinct=True)).order_by('-num_enti')],
            },
            {
                'id': 'ranking',
                'data': [{'id': x.ente_partecipato.ente.id, 'label': x.ente_partecipato.ente.denominazione, 'description': '', 'dimension': x.fatturato, 'quota': x.quota_pubblica, 'performance': x.indice_performance} for x in EntePartecipatoCronologia.objects.filter(pk__in=ranking_ids).select_related('ente_partecipato__ente')],
            },
            {
                'id': 'shareholder',
                'data': [{'id': x.ente.id, 'label': x.ente.denominazione, 'value': x.num_enti} for x in EnteAzionista.objects.filter(quote__ente_partecipato_cronologia__in=enti_partecipati_cronologia).annotate(num_enti=Count('quote__ente_partecipato_cronologia')).order_by('-num_enti').select_related('ente')[:5]],
            },<commit_msg>Change POST to GET/5<commit_after># -*- coding: utf-8 -*-
# from rest_framework import viewsets
# from serializers import EnteSerializer
import decimal
import json
from collections import OrderedDict
from django.core.serializers.json import DjangoJSONEncoder
from django.db.models import Avg, Count
from django.http import JsonResponse
from django.shortcuts import get_object_or_404
from models import *


class MyJSONEncoder(DjangoJSONEncoder):
    def default(self, o):
        if isinstance(o, decimal.Decimal):
            return float(o)
        else:
            return super(MyJSONEncoder, self).default(o)


class MyJsonResponse(JsonResponse):
    def __init__(self, *args, **kwargs):
        super(MyJsonResponse, self).__init__(encoder=MyJSONEncoder, *args, **kwargs)
        self['Access-Control-Allow-Origin'] = '*'
        self['Access-Control-Allow-Methods'] = 'POST,PUT,GET'
        self['Access-Control-Allow-Headers'] = 'content-type'


def index(request):
    data = OrderedDict([
        ('overview', request.build_absolute_uri('overview/')),
        ('detail', request.build_absolute_uri('detail/')),
        ('entity-search', request.build_absolute_uri('entity-search/')),
        ('shareholder-search', request.build_absolute_uri('shareholder-search/')),
    ])

    return MyJsonResponse(data)


def overview(request):
    ranking_num_items = 50

    dimension_range = {
        'S': {'to': 100},
        'M': {'from': 100, 'to': 1000},
        'L': {'from': 1000},
    }
    quota_range = {
        'S': {'to': 25},
        'M': {'from': 25, 'to': 75},
        'L': {'from': 75},
    }
    performance_range = {
        'S': {'to': 25},
        'M': {'from': 25, 'to': 75},
        'L': {'from': 75},
    }

    conditions = {}

    conditions['anno_riferimento'] = '2013'

    if request.GET.get('entityId'):
        conditions['ente_partecipato_id'] = request.GET['entityId']

    if request.GET.get('area'):
        conditions['regioni_settori__regione'] = request.GET['area']

    if request.GET.get('dimension') and request.GET['dimension'] in dimension_range:
        range = dimension_range[request.GET['dimension']]
        if 'from' in range:
            conditions['fatturato__gt'] = range['from']
        if 'to' in range:
            conditions['fatturato__lte'] = range['to']

    if request.GET.get('quota') and request.GET['quota'] in quota_range:
        range = quota_range[request.GET['quota']]
        if 'from' in range:
            conditions['quota_pubblica__gt'] = range['from']
        if 'to' in range:
            conditions['quota_pubblica__lte'] = range['to']

    if request.GET.get('performance') and request.GET['performance'] in performance_range:
        range = performance_range[request.GET['performance']]
        if 'from' in range:
            conditions['indice_performance__gt'] = range['from']
        if 'to' in range:
            conditions['indice_performance__lte'] = range['to']

    if request.GET.get('type'):
        conditions['categoria_id__in'] = request.GET['type'].split(',')
        # conditions['tipologia__in'] = request.GET['type']

    if request.GET.get('sector'):
        conditions['regioni_settori__settore__in'] = request.GET['sector'].split(',')

    if request.GET.get('shareholderId'):
        conditions['quote__ente_azionista__in'] = request.GET['shareholderId'].split(',')

    related = ['ente_partecipato__ente__regione']
    enti_partecipati_cronologia = EntePartecipatoCronologia.objects.filter(**conditions).distinct().select_related(*related).prefetch_related(*related)

    counter = enti_partecipati_cronologia.count()

    ranking_ids = []
    for order_by_field in ['fatturato', 'quota_pubblica', 'indice_performance']:
        for order_by_direction in ['', '-']:
            ranking_ids += enti_partecipati_cronologia.order_by('{}{}'.format(order_by_direction, order_by_field)).values_list('id', flat=True)[:ranking_num_items]

    averages = {
        'dimension': enti_partecipati_cronologia.aggregate(Avg('fatturato'))['fatturato__avg'] or 0,
        'quota': enti_partecipati_cronologia.aggregate(Avg('quota_pubblica'))['quota_pubblica__avg'] or 0,
        'performance': enti_partecipati_cronologia.aggregate(Avg('indice_performance'))['indice_performance__avg'] or 0,
    }

    data = {
        'item': [
            {
                'id': 'entity',
                'data': [{'id': x.ente_partecipato_id, 'x': x.indice_performance, 'y': x.quota_pubblica, 'r': x.fatturato, 'codiceFiscale': x.ente_partecipato.ente.codice_fiscale, 'regione': x.ente_partecipato.ente.regione.denominazione if x.ente_partecipato.ente.regione else None} for x in enti_partecipati_cronologia.order_by('-fatturato')[:50]],
            },
            {
                'id': 'area',
                'data': {
                    'features': [{'id': x.cod_reg, 'category': x.num_enti} for x in Territorio.objects.regioni().filter(enti_settori__ente_partecipato_cronologia__in=enti_partecipati_cronologia).annotate(num_enti=Count('enti_settori__ente_partecipato_cronologia', distinct=True)).order_by('-num_enti')],
                },
            },
            {
                'id': 'type',
                'data': [{'id': x.pk, 'label': x.descrizione, 'value': x.num_enti} for x in EntePartecipatoCategoria.objects.filter(enti_partecipati_cronologia__in=enti_partecipati_cronologia).annotate(num_enti=Count('enti_partecipati_cronologia')).order_by('-num_enti')],
                # 'data': [{'id': x['tipologia'], 'label': EntePartecipatoCronologia.TIPOLOGIA[x['tipologia']], 'value': x['num_enti']} for x in enti_partecipati_cronologia.values('tipologia').annotate(num_enti=Count('tipologia')).order_by('-num_enti')],
            },
            {
                'id': 'sector',
                'data': [{'id': x.pk, 'label': x.descrizione, 'value': x.num_enti} for x in EntePartecipatoSettore.objects.filter(enti_regioni__ente_partecipato_cronologia__in=enti_partecipati_cronologia).annotate(num_enti=Count('enti_regioni__ente_partecipato_cronologia', distinct=True)).order_by('-num_enti')],
            },
            {
                'id': 'ranking',
                'data': [{'id': x.ente_partecipato.ente.id, 'label': x.ente_partecipato.ente.denominazione, 'description': '', 'dimension': x.fatturato, 'quota': x.quota_pubblica, 'performance': x.indice_performance} for x in EntePartecipatoCronologia.objects.filter(pk__in=ranking_ids).select_related('ente_partecipato__ente')],
            },
            {
                'id': 'shareholder',
                'data': [{'id': x.ente.id, 'label': x.ente.denominazione, 'value': x.num_enti} for x in EnteAzionista.objects.filter(quote__ente_partecipato_cronologia__in=enti_partecipati_cronologia).annotate(num_enti=Count('quote__ente_partecipato_cronologia')).order_by('-num_enti').select_related('ente')[:5]],
            },
{'fraction_non_alphanumeric': 0.15215485756026298, 'fraction_numerical': 0.006574141709276844, 'mean_word_length': 3.515501319261214, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1665963', 'n_tokens_mistral': 4642, 'n_tokens_neox': 4415, 'n_words': 691}