You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

208 lines
7.4 KiB

#-*- 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.all()
context['identity'] = identity_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).exclude(id__in=identity_ids)
context['contains'] = contains_results[:30]
contains_ids = contains_results.values_list('id', flat=True)
similar = self.get_object().searches.filter(similarity=97)[0]
context['similar'] = similar.results.all().exclude(id__in=contains_ids | identity_ids)[:30]
context['nice_busy'] = Nice.objects.filter(nice_id__in=nice_busy_ids).order_by('nice_id')
context['products_busy'] = Product.objects.filter(id__in=identity_results.values_list('products__id')).order_by('nice__nice_id')
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')
# identity = self.get_object().searches.filter(similarity=146)[0]
# identity_results = identity.results.all()
# context['identity'] = identity_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).exclude(id__in=identity_ids)
# context['contains'] = contains_results[:30]
# contains_ids = contains_results.values_list('id', flat=True)
# similar = self.get_object().searches.filter(similarity=97)[0]
# context['similar'] = similar.results.all().exclude(id__in=contains_ids | identity_ids)[:30]
# context['nice_busy'] = Nice.objects.filter(nice_id__in=nice_busy_ids).order_by('nice_id')
# context['products_busy'] = Product.objects.filter(id__in=identity_results.values_list('products__id')).order_by('nice__nice_id')
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):
self.keyword.load_results()
class Search(generic.View):
# def get(self, request):
# <view logic>
# return HttpResponse('result')
@never_cache
def get(self, request, slug):
keyword = get_object_or_404(Keyword, slug=slug)
loading = SearchResultsThread(keyword=keyword)
loading.start()
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')
try:
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': 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')
except:
return HttpResponse(json.dumps({ 'status': 'error', 'description': 'Request not found', 'slug': slug }), content_type="application/json")
def post(self, request):
keyword = request.POST.get('keyword', '')
if keyword:
k, created = Keyword.objects.get_or_create(request=keyword)
else:
return HttpResponse(json.dumps({ 'status': 'error', 'description': 'Empty request'}), content_type="application/json")
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")