#-*- coding: utf-8 -*- # from django.core.urlresolvers import reverse # from django.http import HttpResponseRedirect from django.shortcuts import get_object_or_404 from django.views import generic from django.http import HttpResponse import json from .models import * from django.views.decorators.cache import never_cache class SearchDetailView(generic.DetailView): model = Keyword context_object_name = 'keyword' template_name = 'trademark/search_detail.html' slug_field = 'slug' view_url_name = 'trademark:search-detail' def get_context_data(self, **kwargs): context = super(SearchDetailView, self).get_context_data(**kwargs) self.get_object().save() identity = self.get_object().searches.filter(similarity=146)[0] identity_results = identity.results.filter(status='Acting') identity_expired_results = identity.results.filter(status='Expired') context['identity'] = identity_results context['identity_expired'] = identity_expired_results identity_ids = identity_results.values_list('id', flat=True) nice_busy_ids = identity_results.values_list('nices__nice_id', flat=True).distinct() contains = self.get_object().searches.filter(similarity=100)[0] contains_results = contains.results.filter(title__isnull=False, status='Acting').exclude(id__in=identity_ids) contains_expired_results = contains.results.filter(title__isnull=False, status='Expired').exclude(id__in=identity_ids) context['contains'] = contains_results[:18] contains_ids = contains_results.values_list('id', flat=True) similar = self.get_object().searches.filter(similarity=97)[0] similar_results = similar.results.filter(status='Acting').exclude(id__in=contains_ids | identity_ids) similar_expired_results = similar.results.filter(status='Expired').exclude(id__in=contains_ids | identity_ids) context['similar'] = similar_results[:12] context['similar_expired'] = (contains_expired_results | similar_expired_results).distinct() context['nice_busy'] = Nice.objects.filter(nice_id__in=nice_busy_ids).order_by('nice_id') context['products_busy'] = {} for nice in context['nice_busy']: products = Product.objects.filter(id__in=identity_results.values_list('products__id'), nice_id=nice.nice_id) context['products_busy'][nice.nice_id] = products context['nice_available'] = Nice.objects.filter(nice_id__in=[x for x in range(1,46) if x not in nice_busy_ids]).order_by('nice_id') return context class TrademarkDetailView(generic.DetailView): model = Trademark context_object_name = 'trademark' template_name = 'trademark/trademark_detail.html' view_url_name = 'trademark:trademark-detail' def get_context_data(self, **kwargs): context = super(TrademarkDetailView, self).get_context_data(**kwargs) tm = self.get_object() context['tm'] = tm context['nice_available'] = Nice.objects.filter(nice_id__in=[x for x in range(1,46) if x not in tm.nices.values_list('nice_id', flat=True)]).order_by('nice_id') context['products_busy'] = {} for nice in tm.nices.all(): products = Product.objects.filter(id__in=tm.products.values_list('id'), nice_id=nice.nice_id) context['products_busy'][nice.nice_id] = products return context class IndexView(generic.ListView): template_name = 'trademark/index.html' context_object_name = 'trademarks' def get_queryset(self): return Keyword.objects.all() import threading import time class SearchResultsThread(threading.Thread): def __init__(self, keyword, **kwargs): self.keyword = keyword super(SearchResultsThread, self).__init__(**kwargs) def run(self): loaded = False while not loaded: loaded = self.keyword.load_results() time.sleep(5) class Search(generic.View): # def get(self, request): # # return HttpResponse('result') @never_cache def get(self, request, slug): keyword = get_object_or_404(Keyword, slug=slug) identity = keyword.searches.filter(similarity=146)[0] contains = keyword.searches.filter(similarity=100)[0] similar = keyword.searches.filter(similarity=97)[0] response = { 'identity': { 'id': identity.id, 'status': identity.status, 'nices': identity.nices.count(), 'count': identity.results.all().count() }, 'contains': { 'id': contains.id, 'status': contains.status, 'count': contains.results.all().count() }, 'similar': { 'id': similar.id, 'status': similar.status, 'count': similar.results.all().count() }, 'status': 'ok' } return HttpResponse(json.dumps(response), content_type='application/json') def post(self, request): keyword = request.POST.get('keyword', '') nices = request.POST.get('nices', '') if keyword: k, created = Keyword.objects.get_or_create(request=keyword, nices=nices) else: return HttpResponse(json.dumps({ 'status': 'error', 'description': 'Empty request'}), content_type="application/json") loading = SearchResultsThread(keyword=k) loading.start() identity = k.searches.filter(similarity=146)[0] contains = k.searches.filter(similarity=100)[0] similar = k.searches.filter(similarity=97)[0] response = { 'identity': { 'id': identity.id, 'status': identity.status, 'nices': identity.nices.count(), 'count': identity.results.all().count() }, 'contains': { 'id': contains.id, 'status': contains.status, 'count': contains.results.all().count() }, 'similar': { 'id': similar.id, 'status': similar.status, 'count': similar.results.all().count() }, 'slug': k.slug, 'status': 'ok' } return HttpResponse(json.dumps(response), content_type="application/json")