from django.core.management.base import BaseCommand, CommandError from catalog.models import User, News, Publisher, Topic, audioTime, Search from django.db.models import Q from django.core.paginator import Paginator from django.contrib.postgres.search import SearchQuery import os import json import csv from django.core import serializers import sys import datetime class Command(BaseCommand): help = 'Custom search' def add_arguments(self, parser): parser.add_argument('jsonfile', nargs=1, type=str) #(options['basedir'][0] parser.add_argument('outfile', nargs=1, type=str) def handle(self, *args, **options): filename = options['jsonfile'][0] with open(filename, 'r') as f: searchCfg = json.load(f) myQuery = ~Q() myQuery &= Q(publisher_id__in=searchCfg['publishers']) myQuery &= Q(date__gte=searchCfg['startDate']) myQuery &= Q(date__lte=searchCfg['endDate']) qText = None for i in searchCfg["phrases"]: if qText is None: qText = SearchQuery(i, search_type='phrase') else: qText |= SearchQuery(i, search_type='phrase') #myQuery &=qText news = News.objects.filter(myQuery, search_vector=qText) print(news.count()) if news.count() >0: nn = news[0] print(nn.publisher.shortName, nn) qs_json = list() #serializers.serialize('json', news) for n in news: qs_json.append({"publisher":n.publisher.shortName, "date":n.date, "title":n.title, "text":n.text, "url":n.url}) print(qs_json[0]) with open(options['outfile'][0], "w") as ff: w = csv.DictWriter(ff, qs_json[0].keys()) w.writeheader() for i in qs_json: w.writerow(i)