Commit beef9215 authored by Mario Chirinos Colunga's avatar Mario Chirinos Colunga 💬

mario

parent fe43e886
......@@ -2,28 +2,40 @@
from django import forms
#from django.contrib.auth.forms import UserCreationForm
#from django.contrib.auth.models import User
from catalog.models import Publisher, News
from catalog.models import Publisher, News, Profile
from django.db.models import Q
from django.contrib.admin.widgets import FilteredSelectMultiple
import os
from django.conf import settings
from django.urls import reverse
class SearchForm(forms.Form):
startDate = forms.DateField(label="Fecha de Inicio", widget=forms.DateInput(attrs={'type':'date', 'class':"form-control"}), required=False)
endDate = forms.DateField(label="Fecha de Fin", widget=forms.DateInput(attrs={'type':'date', 'class':"form-control"}), required=False)
endDate = forms.DateField(label="Fecha de Fin", widget=forms.DateInput(attrs={'type':'date', 'class':"form-control"}), required=False)
# news = News.objects.all()
# publishersList = Publisher.objects.all().filter( Q(id__in = news.values('publisher').distinct()))
# choice = [ (r.id,r.name) for r in publishersList ]
# publishers = forms.MultipleChoiceField(label="Fuentes", widget=forms.SelectMultiple(attrs={'class':"form-control"}), choices=choice, required=False)
publishers = forms.MultipleChoiceField(label="Fuentes", widget=forms.SelectMultiple(attrs={'class':"form-control"}), choices=[], required=False)
publishers = forms.MultipleChoiceField(label="Fuentes", widget=forms.SelectMultiple(attrs={'class':"form-control"}), choices=[], required=False)
text = forms. CharField(label="Palabras Clave", widget=forms.TextInput(attrs={'class':"form-control", "placeholder":"Palabras clave"}), required=False)
def __init__(self, *args, **kwargs):
super(SearchForm, self).__init__(*args, **kwargs)
news = News.objects.all()
news = News.objects.all()
publishersList = Publisher.objects.all().filter( Q(id__in = news.values('publisher').distinct()))
choice = [ (r.id,r.name) for r in publishersList ]
self.fields['publishers'] = forms.MultipleChoiceField(label="Fuentes", widget=forms.SelectMultiple(attrs={'class':"form-control"}), choices=choice, required=False)
class ProfileForm(forms.Form):
subscriptions = forms.ModelMultipleChoiceField(queryset=Publisher.objects.all(), widget=FilteredSelectMultiple("Publishers", is_stacked=False), required=False)
class Media:
# Django also includes a few javascript files necessary
# for the operation of this form element. You need to
# include <script src="/admin/jsi18n"></script>
# in the temple
css = {'all': (os.path.join(settings.BASE_DIR, '/static/admin/css/widgets.css'),),}
js = ('/catalog/js/jsi18n',)
No preview for this file type
from django.core.management.base import BaseCommand, CommandError
from catalog.models import News, Publisher, Topic
from django.db.models import Q
import os
import json
import datetime
from django.utils import timezone
import dateutil.parser
class Command(BaseCommand):
help = 'Update database'
def add_arguments(self, parser):
parser.add_argument('basedir', nargs=1, type=str)
def handle(self, *args, **options):
os.chdir(options['basedir'][0])
publisherList = os.listdir(options['basedir'][0])
for p in publisherList:
print p
os.chdir(p)
publisher = Publisher.objects.all().filter(shortName=p)[0]
news = News.objects.all().filter(publisher=publisher.id).order_by("-date")
# print publisher.id
minYear = 0
lastDate = datetime.datetime(1950,1,1)
# print news.count()
if news.count()>0:
minYear = news[0].date.year
lastDate = news[0].date
yearList = [ int(y) for y in os.listdir('.')]
# print "LastDate"+str(lastDate)
print yearList
for y in yearList:
if y >=minYear:
os.chdir(str(y))
print os.getcwd()
filesList = os.listdir(".")
for f in filesList:
# print "file: " + f
fileDate = datetime.datetime.strptime(f[:f.find(".")], "%Y-%m-%d").date()
if fileDate >= lastDate.date():
# print "fileDate: " + str(fileDate)
with open(f) as data_file:
try:
data = json.load(data_file)
for d in data:
# if d['date'].find("+") >=0:
# date =d['date'][:d['date'].find("+")].replace("T", " ")
# newsDate = datetime.datetime.strptime(date, "%Y-%m-%d %H:%M:%S")
# else:
# date = d['date']
# newsDate = datetime.datetime.strptime(date, "%Y-%m-%d")
# print d['date']
# print d['title']
newsDate = dateutil.parser.parse(d['date'])
# newsDate = timezone.make_aware(newsDate, timezone.get_current_timezone())
# print "newsDate:"
# print newsDate
if News.objects.all().filter(Q(publisher=publisher.id)&Q(title=d['title'])&Q(date__gte=newsDate)).count() == 0:
# print "no news match"
if d['title'] == None:
d['title'] = "Sin Titulo"
if len(d['title']) >= 512:
d['title'] = d['title'][:500]
print p + " "+ str(newsDate) + ": " + d['title']
# print type(d['topic'])
news = News()
news.publisher = publisher
# print "title"
news.title = d['title']
# print "text"
news.text = d['text']
# print "url"
news.url = d['url']
# print "date"
news.date = newsDate
news.save()
# print "TOPIC: " + str(d['topic'])
# print type(d['topic'])
if d['topic'] == "" or d['topic'] == None or d['topic'] ==[]:
d['topic'] = "Sin Tema"
if type(d['topic'])=="list":
for t in d['topic']:
topic, created = Topic.objects.all().get_or_create(name=t)
news.topic.add(topic)
else:
topic, created = Topic.objects.all().get_or_create(name=d['topic'])
news.topic.add(topic)
# print news.date
# print d['date']
# #news.save()
# except (RuntimeError, TypeError, NameError, ValueError) as e:
except ValueError as e:
print e
# print e.NameError
print "Error: " + os.getcwd()+"/"+f
print type(d['topic'])
# print "TOPIC: " + str(d['topic'])
data_file.close()
os.chdir("..")
os.chdir("..")
......@@ -12,6 +12,10 @@ class AuthRequiredMiddleware(object):
response = self.get_response(request)
print request.path_info
print reverse('login')
if request.path_info == reverse('ws-news-list2'):
return response
if not request.user.is_authenticated() and request.path_info != reverse('login'):
return HttpResponseRedirect(reverse('login'))
......
No preview for this file type
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-12-13 00:06
from __future__ import unicode_literals
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('catalog', '0006_auto_20171126_0109'),
]
operations = [
migrations.CreateModel(
name='Profile',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
],
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-12-13 01:57
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('catalog', '0007_profile'),
]
operations = [
migrations.AddField(
model_name='profile',
name='subscriptions',
field=models.ManyToManyField(to='catalog.Publisher'),
),
]
......@@ -2,22 +2,26 @@ from django.db import models
from django.db.models.fields import TextField
from django.contrib.postgres.search import SearchVectorField, SearchVector
from django.contrib.postgres.indexes import GinIndex
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
# Create your models here.
class Publisher(models.Model):
name = models.CharField(max_length=128)
shortName = models.CharField(max_length=32, default="")
crawler = models.CharField(max_length=64, default="")
type = models.CharField(max_length=32, default='')
url = models.URLField(default="")
shortName = models.CharField(max_length=32, default="")
crawler = models.CharField(max_length=64, default="")
type = models.CharField(max_length=32, default='')
url = models.URLField(default="")
def __str__(self):
return self.name
def __str__(self):
return self.shortName
class Meta:
verbose_name = 'Medio'
verbose_name_plural = 'Medios'
ordering = ('name',)
class Meta:
verbose_name = 'Medio'
verbose_name_plural = 'Medios'
ordering = ('name',)
class Topic(models.Model):
......@@ -33,16 +37,16 @@ class Topic(models.Model):
class PostManager(models.Manager):
def with_documents(self):
vector = SearchVector('text')
return self.get_queryset().annotate(document=vector)
vector = SearchVector('text')
return self.get_queryset().annotate(document=vector)
class News(models.Model):
title = models.CharField(max_length=512)
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE, default='')
topic = models.ManyToManyField(Topic, verbose_name='Topic(s)', blank=True)
date = models.DateTimeField(verbose_name='Publication Date')
text = TextField(verbose_name='News Text', default='', blank=True)
url = models.URLField(verbose_name='URL', max_length=512)
title = models.CharField(max_length=512)
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE, default='')
topic = models.ManyToManyField(Topic, verbose_name='Topic(s)', blank=True)
date = models.DateTimeField(verbose_name='Publication Date')
text = TextField(verbose_name='News Text', default='', blank=True)
url = models.URLField(verbose_name='URL', max_length=512)
search_vector = SearchVectorField(null=True)
objects = PostManager()
......@@ -53,11 +57,27 @@ class News(models.Model):
instance.search_vector = instance.document
instance.save(update_fields=['search_vector'])
def __str__(self):
return self.title
def __str__(self):
return self.title
class Meta:
verbose_name = 'Noticia'
verbose_name_plural = 'Noticias'
ordering = ('date',)
class Meta:
verbose_name = 'Noticia'
verbose_name_plural = 'Noticias'
ordering = ('date',)
indexes = [ GinIndex(fields=['search_vector']) ]
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
subscriptions = models.ManyToManyField(Publisher)
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Profile.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.profile.save()
No preview for this file type
......@@ -18,48 +18,45 @@
</div>
<!-- /.navbar-header -->
<ul class="nav navbar-top-links navbar-right">
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-envelope fa-fw"></i> <i class="fa fa-caret-down"></i>
</a>
<ul class="dropdown-menu dropdown-messages">
{% block dropdown-messages %}{% endblock %}
</ul>
<!-- /.dropdown-messages -->
</li>
<!-- /.dropdown -->
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-tasks fa-fw"></i> <i class="fa fa-caret-down"></i>
</a>
<ul class="dropdown-menu dropdown-tasks">
{% block dropdown-tasks %}{% endblock %}
</ul>
<!-- /.dropdown-tasks -->
</li>
<!-- /.dropdown -->
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-bell fa-fw"></i> <i class="fa fa-caret-down"></i>
</a>
<ul class="dropdown-menu dropdown-alerts">
{% block dropdown-alerts %}{% endblock %}
</ul>
<!-- /.dropdown-alerts -->
</li>
<ul class="nav navbar-top-links navbar-right">
<!-- /.dropdown-messages -->
<!-- <li class="dropdown">-->
<!-- <a class="dropdown-toggle" data-toggle="dropdown" href="#">-->
<!-- <i class="fa fa-envelope fa-fw"></i> <i class="fa fa-caret-down"></i>-->
<!-- </a>-->
<!-- <ul class="dropdown-menu dropdown-messages">-->
<!-- {% block dropdown-messages %}{% endblock %} -->
<!-- </ul>-->
<!-- </li>-->
<!-- /.dropdown-tasks -->
<!-- <li class="dropdown">-->
<!-- <a class="dropdown-toggle" data-toggle="dropdown" href="#">-->
<!-- <i class="fa fa-tasks fa-fw"></i> <i class="fa fa-caret-down"></i>-->
<!-- </a>-->
<!-- <ul class="dropdown-menu dropdown-tasks">-->
<!-- {% block dropdown-tasks %}{% endblock %} -->
<!-- </ul>-->
<!-- </li>-->
<!-- /.dropdown-alerts -->
<!-- <li class="dropdown">-->
<!-- <a class="dropdown-toggle" data-toggle="dropdown" href="#">-->
<!-- <i class="fa fa-bell fa-fw"></i> <i class="fa fa-caret-down"></i>-->
<!-- </a>-->
<!-- <ul class="dropdown-menu dropdown-alerts">-->
<!-- {% block dropdown-alerts %}{% endblock %} -->
<!-- </ul>-->
<!-- </li>-->
<!-- /.dropdown -->
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
<i class="fa fa-user fa-fw"></i> <i class="fa fa-caret-down"></i>
</a>
<ul class="dropdown-menu dropdown-user">
<li><a href="#"><i class="fa fa-user fa-fw"></i> {{ user.get_username }}</a>
<li><a href="{% url 'settings-profile' %}"><i class="fa fa-user fa-fw"></i> {{ user.get_username }}</a>
</li>
<li><a href="#"><i class="fa fa-gear fa-fw"></i> Settings</a>
<li><a href="{% url 'settings' %}"><i class="fa fa-gear fa-fw"></i> Settings</a>
</li>
<li class="divider"></li>
<li><a href="{% url 'logout'%}?next={{request.path}}"><i class="fa fa-sign-out fa-fw"></i> Logout</a>
......@@ -70,9 +67,10 @@
<!-- /.dropdown -->
</ul>
<!-- /.navbar-top-links -->
{% include "leftMenuBar.html" %}
<div class="navbar-default sidebar" role="navigation">
{% block lefPanel %}{% endblock %}
</div>
<!-- /.navbar-static-side -->
</nav>
......
......@@ -12,6 +12,10 @@
<link rel="icon" href="{% static 'images/m3.png' %}">
<title>Monitoreo de Multiples Medios</title>
{% load staticfiles %}
<script type="text/javascript" src="{% static 'static_jquery/js/jquery.js' %}" ></script>
<script type="text/javascript" src="{% static 'admin/js/jquery.init.js' %}" ></script>
<!-- Custom CSS -->
<!-- Bootstrap Core CSS -->
......@@ -43,13 +47,14 @@
<![endif]-->
<!-- /#wrapper -->
{% block headMedia %}{% endblock %}
</head>
<body>
{% block budy %}{% endblock %}
<!-- jQuery -->
<script src="{% static 'vendor/jquery/jquery.min.js' %}"></script>
<!-- Bootstrap Core JavaScript -->
......@@ -69,6 +74,8 @@
<!-- Custom Theme JavaScript -->
<script src="{% static 'dist/js/sb-admin-2.js' %}"></script>
{% block scripts %}{% endblock %}
</body>
......
{% extends "base_generic.html" %}
{% block lefPanel %}{% include "leftMenuBar.html" %}{% endblock %}
{% block dash %}
<!-- /.row -->
<div class="row">
......
{% extends "base_index.html" %}
{% block dash-title %}
<b>{{form.text.value|default:"Tablero"|capfirst}}</b>
......@@ -66,7 +67,7 @@
<i class="fa fa-database fa-5x"></i>
</div>
<div class="col-xs-9 text-right">
<div class="huge">{{info.nNews|intcomma}}</div>
<div class="huge">{{info.nNewsText}}</div>
<div>Noticias</div>
</div>
</div>
......
<div class="navbar-default sidebar" role="navigation">
<div class="sidebar-nav navbar-collapse">
<ul class="nav" id="side-menu">
<div class="sidebar-nav navbar-collapse">
<ul class="nav" id="side-menu">
<li>
<a href="{% url 'index' %}?{{ request.GET.urlencode }}"><i class="fa fa-dashboard fa-fw"></i> Dashboard</a>
</li>
<li>
<a href="#"><i class="fa fa-search fa-fw"></i>Busqueda<span class="fa arrow"></span></a>
<ul class="nav nav-second-level collapse in" aria-expanded="true">
<form role="form">
<li>
<div class="form-group">
{{form.publishers.label_tag}}
{{form.publishers}}
</div>
</li>
<li>
<a href="{% url 'index' %}?{{ request.GET.urlencode }}"><i class="fa fa-dashboard fa-fw"></i> Dashboard</a>
</li>
<li>
<div class="form-group">
{{form.startDate.label_tag}}
{{form.startDate}}
</div>
</li>
<li>
<div class="form-group">
{{form.endDate.label_tag}}
{{form.endDate}}
</div>
</li>
<li>
<div class="form-group">
{{form.text.label_tag}}
{{form.text}}
</div>
</li>
<li>
<a href="#"><i class="fa fa-search fa-fw"></i>Busqueda<span class="fa arrow"></span></a>
<ul class="nav nav-second-level collapse in" aria-expanded="true">
<form role="form">
<li>
<div class="form-group">
{{form.publishers.label_tag}}
{{form.publishers}}
</div>
</li>
<li>
<div class="form-group">
{{form.startDate.label_tag}}
{{form.startDate}}
</div>
</li>
<li>
<div class="form-group">
{{form.endDate.label_tag}}
{{form.endDate}}
</div>
</li>
<li>
<div class="form-group">
{{form.text.label_tag}}
{{form.text}}
</div>
</li>
<li>
<button type="submit" class="btn btn-default" style="width:100%;">Buscar</button>
</li>
</form>
</ul>
<!-- /.nav-second-level -->
</li>
<li>
<a href="#"><i class="fa fa-download fa-fw"></i>Descargar<span class="fa arrow"></span></a>
<ul class="nav nav-second-level" aria-expanded="true">
<form role="form">
<li>
<a href="{% url 'ws-download-news' %}?{{ request.GET.urlencode }}&format=JSON" target="blank">JSON</a>
</li>
<li>
<button type="submit" class="btn btn-default" style="width:100%;">Buscar</button>
<a href="{% url 'ws-download-news' %}?{{ request.GET.urlencode }}&format=CSV" target="blank">CSV</a>
</li>
</form>
</ul>
<!-- /.nav-second-level -->
</li>
<li>
<a href="#"><i class="fa fa-download fa-fw"></i>Descargar<span class="fa arrow"></span></a>
<ul class="nav nav-second-level" aria-expanded="true">
<form role="form">
<li>
<a href="{% url 'ws-download-news' %}?{{ request.GET.urlencode }}&format=JSON" target="blank">JSON</a>
</li>
<li>
<a href="{% url 'ws-download-news' %}?{{ request.GET.urlencode }}&format=CSV" target="blank">CSV</a>
</li>
</form>
</ul>
</li>
</ul>
</div>
<!-- /.sidebar-collapse -->
</form>
</ul>
</li>
</ul>
</div>
<!-- /.sidebar-collapse -->
{% extends "base_generic.html" %}
{% block lefPanel %}{% include "leftMenuBar.html" %}{% endblock %}
{% load app_filters %}
{% block dash-title %}<a href="{{news.publisher.url}}" target="blank">{{news.publisher.name}}</a>{% endblock %}
......
{% extends "base_generic.html" %}
{% block lefPanel %}{% include "leftMenuBar.html" %}{% endblock %}
{% block dash-title %}
<b>{{form.text.value|default:"Noticias"|capfirst}}</b>
......
{% extends "base_generic.html" %}
{% block lefPanel %}{% include "leftMenuBar.html" %}{% endblock %}
{% load humanize %}
{% block dash-title %}
......
{% extends "base_generic.html" %}
{% block lefPanel %}
<div class="sidebar-nav navbar-collapse">
<ul class="nav" id="side-menu">
<li>
<a href="{% url 'settings-profile' %}"><i class="fa fa-user fa-fw"></i>Perfil</a>
</li>
<li>
<a href="{% url 'settings-password' %}"><i class="fa fa-lock fa-fw"></i>Contraseña</a>
</li>
<li>
<a href="{% url 'settings-subscriptions' %}"><i class="fa fa-rss fa-fw"></i>Subscripciones</a>
</li>
<!-- <li>-->
<!-- <a href=""><i class="fa fa-user fa-rss"></i>Subscripciones</a>-->
<!-- </li>-->
</ul>
</div>
{% endblock %}
{% block dash %}
<!-- /.row -->
<div class="row">
{% block infoPanels %}{% endblock %}
</div>
<!-- /.row -->
<div class="row">
{% block graphs1 %}{% endblock %}
</div>
{% endblock %}
{% extends "settings_base.html" %}
{% block headMedia %}
{{ form.media }}
{% endblock %}
{% block dash-title %}
<b>{{form.text.value|default:"Perfi de usuario"|capfirst}}</b>
{% endblock %}
{% block infoPanels %}
<form method="post">
{% csrf_token %}
<div>{{ form }}</div>
<div><button type="submit">Save changes</button></div>
</form>
{% endblock %}
{% block scripts %}
<script>
</script>
{% endblock %}
from django.conf.urls import url
from . import views
from django.views.i18n import javascript_catalog
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^js/jsi18n/$', javascript_catalog, name='jsi18n'),
url(r'^publishers/$', views.publisherList, name='publishers-list'),
url(r'^publishers/(?P<type>\w+)$', views.publisherList, name='publishers-list'),
url(r'^news/details/(?P<newsId>\w+)/$', views.newsDetails, name='news-details'),
url(r'^news/$', views.newsList, name='news-list'),
url(r'^ws/news/$', views.wsNewsList, name='ws-news-list'),
url(r'^ws/jsonnews/$', views.wsNewsList2, name='ws-news-list2'),
url(r'^ws/graphs/$', views.wsGraphs, name='ws-graphs'),
url(r'^ws/download/$', views.wsDownloadNews, name='ws-download-news'),
url(r'^audio/$', views.audioList, name='audio'),
url(r'^audio/(?P<publisher>\w+)$', views.audioPublisher, name='audio'),
url(r'^settings/$', views.settings, name='settings'),
url(r'^settings/profile$', views.settings, name='settings-profile'),
url(r'^settings/subscriptions$', views.settings, name='settings-subscriptions'),
url(r'^settings/password$', views.settings, name='settings-password'),
]
No preview for this file type
......@@ -13,17 +13,21 @@ from django.http import HttpResponse
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
import json
import datetime
from dateutil.relativedelta import relativedelta
from django.db.models import Q
from .forms import SearchForm
from .forms import SearchForm, ProfileForm
import urllib
from django.db.models import Count
from django.core.urlresolvers import reverse
import json
import StringIO
#from io import StringIO
import time
import zipfile
import csv
from django.db.models.functions import TruncMonth, TruncYear
from quantiphy import Quantity
#-------------------------------------------------------------------------------
def news2JSON(news):
data = list()
......@@ -37,27 +41,43 @@ def news2JSON(news):
data.append(item)
return data
#-------------------------------------------------------------------------------
def settings(request):
form = ProfileForm(request.POST.copy())
print(request.POST)
#User.objects.get(username=)
print( request.user.profile.subscriptions )
if 'subscriptions' in request.POST:
request.user.profile.subscriptions = Publisher.objects.all().filter(id__in=request.POST['subscriptions'])
request.user.save()
print( request.user.profile.subscriptions )
return render(request,'userprofile.html',{"form":form})
#-------------------------------------------------------------------------------
def getNewsByRequest(request):
print "getNewsByRequest\n\n\n"
print ("getNewsByRequest\n\n\n")
form = SearchForm(request.GET)
myQuery = ~Q()
if 'publishers' in request.GET and request.GET['publishers']!="None" and request.GET['publishers']!="" and request.GET['publishers']!="[]":
myQuery &= Q(publisher_id__in=form['publishers'].value())
if 'startDate' in request.GET and request.GET['startDate']!="None" and request.GET['startDate']!="":
if 'startDate' in request.GET and request.GET['startDate']!="None" and request.GET['startDate']!="":
myQuery &= Q(date__gte=request.GET['startDate'])
else:
myQuery &= Q(date__gte=(datetime.date.today()- relativedelta(years=1)).strftime("%Y-%m-%d"))
if 'endDate' in request.GET and request.GET['endDate']!="None" and request.GET['endDate']!="":
if 'endDate' in request.GET and request.GET['endDate']!="None" and request.GET['endDate']!="":
myQuery &= Q(date__lte=request.GET['endDate'])
if "text" in request.GET and request.GET['text']!="None" and request.GET['text']!="":
# myQuery &= Q(text__search=request.GET['text'])
# myQuery &= Q(text__search=request.GET['text'])
myQuery &= Q(search_vector=request.GET['text'])
print myQuery
print (myQuery)
return News.objects.all().filter(myQuery)
......@@ -79,6 +99,7 @@ def index(request):
info = dict()
info['nPublishers'] = news.values('publisher').distinct().count()
info['nNews'] = news.count()
info['nNewsText'] = Quantity(news.count()).render(prec=3)
info['nAudio'] = Publisher.objects.all().filter(type="audio").count()
queryset = news.values("publisher").order_by("publisher").annotate(count = Count('publisher') )
......@@ -88,7 +109,7 @@ def index(request):
myRequest = request.GET.copy()
myRequest.update({"publishers":q['publisher']})
urlDict[q['publisher']] = urllib.urlencode(myRequest)
print urlDict
print (urlDict)
donutChart = [{"label": Publisher.objects.get(id=q['publisher']).name, "value":q["count"], "url":urlDict[q['publisher']]} for q in queryset]
......@@ -108,13 +129,13 @@ def index(request):
return render(request,'index.html',{"form":form, "info":info, "donutChart":donutChart, "histogram": histogramsData, "histogramsLabels":histogramsLabels})
#-------------------------------------------------------------------------------
def publisherList(request, type="all"):
form = SearchForm(request.GET)
form = SearchForm(request.GET)
typeQuery = ~Q()
if type!="all":
typeQuery = Q(type=type)
news = getNewsByRequest(request)
publishers = Publisher.objects.all().filter( Q(id__in = news.values('publisher').distinct()) & typeQuery)
......@@ -132,7 +153,7 @@ def publisherList(request, type="all"):
if 'publishers' in myRequest:
del myRequest['publishers']
return render(request,'publisherList.html',{"form":form, "publishers":publishers, "queryurl":urllib.urlencode(myRequest)})
return render(request,'publisherList.html',{"form":form, "publishers":publishers, "queryurl":urllib.urlencode(myRequest)})
#-------------------------------------------------------------------------------
def newsList(request, publisherShortName="all"):
......@@ -141,9 +162,15 @@ def newsList(request, publisherShortName="all"):
return render(request,'newsList.html',{"form":form})
#-------------------------------------------------------------------------------
def wsNewsList2(request):
news = getNewsByRequest(request)
data = [{"id":n.id, "text":n.text, "date":n.date.strftime('%Y-%m-%d')} for n in news]
return HttpResponse(json.dumps(data), content_type="application/json")
#-------------------------------------------------------------------------------
def wsNewsList(request):#, publisherShortName="all"):
print request.GET
print (request.GET)
columns = ['title', 'url', 'date']
order = dict()
order["asc"]=""
......@@ -151,8 +178,8 @@ def wsNewsList(request):#, publisherShortName="all"):
orderBy = columns[ int(request.GET["order[0][column]"]) ]
direction = order[request.GET["order[0][dir]"]]
startDate = datetime.datetime(1950,1,1,0,0,0)
endDate = datetime.datetime.today()
startDate = datetime.datetime(1950,1,1,0,0,0)
endDate = datetime.datetime.today()
request.GET = request.GET.copy()
......@@ -184,20 +211,20 @@ def wsNewsList(request):#, publisherShortName="all"):
for n in news:
row = list()
row.append('<a href="'+reverse('news-details', args =(n.id,) )+ "?"+ request.GET.urlencode() +'">'+ n.title+ '</a>')
row.append('<a href="'+n.url+'" target="blank">'+n.publisher.shortName+'</a>')
row.append(n.date.strftime("%Y-%m-%d"))
row.append('<a href="'+n.url+'" target="blank">'+n.publisher.shortName+'</a>')
row.append(n.date.strftime("%Y-%m-%d"))
data['data'].append(row)
# print request.GET
return HttpResponse(json.dumps(data), content_type="application/json")
#-------------------------------------------------------------------------------
def newsDetails(request, newsId):
form = SearchForm(request.GET)
form = SearchForm(request.GET)
news = News.objects.get(id=newsId)
# news.text = news.text.replace(request.GET['text'], "<b>"+request.GET['text']+"</b>")
return render(request,'newsDetails.html',{"form":form,"news":news})
return render(request,'newsDetails.html',{"form":form,"news":news})
#-------------------------------------------------------------------------------
def wsGraphs(request):
data=dict()
......@@ -218,13 +245,13 @@ def wsDownloadNews(request):
if request.GET['format']=="CSV":
csvString = StringIO.StringIO()
writer = csv.writer(csvString,quoting=csv.QUOTE_ALL)#, fieldnames=[k for k in data[0]])
writer = csv.writer(csvString,quoting=csv.QUOTE_ALL)#, fieldnames=[k for k in data[0]])
# writer.writeheader()
for d in data:
row = [ d[k].encode('utf-8') for k in d ]
writer.writerow( row )
writer.writerow( row )
zf.writestr("data.csv", csvString.getvalue())
zf.close()
response = HttpResponse(s.getvalue(), content_type="application/x-zip-compressed")
......@@ -233,17 +260,17 @@ def wsDownloadNews(request):
#-------------------------------------------------------------------------------
def audioList(request):
form = SearchForm(request.GET)
form = SearchForm(request.GET)
publishers = Publisher.objects.all().filter( type="audio")
return render(request,'audioList.html',{"form":form, "publishers":publishers})
return render(request,'audioList.html',{"form":form, "publishers":publishers})
#-------------------------------------------------------------------------------
def audioPublisher(request, publisher):
form = SearchForm(request.GET)
form = SearchForm(request.GET)
info=dict()
if Publisher.objects.all().filter(shortName=publisher).count() > 0:
p = Publisher.objects.all().filter(shortName=publisher)[0]
return render(request,'audioPlay.html',{"form":form, "publisher":p})
return render(request,'audioPlay.html',{"form":form, "publisher":p})
No preview for this file type
......@@ -40,6 +40,7 @@ INSTALLED_APPS = [
'django.contrib.humanize',
'catalog.apps.CatalogConfig',
'django.contrib.postgres',
'django_static_jquery',
]
......
......@@ -19,10 +19,11 @@ from django.conf.urls import include
from django.views.generic import RedirectView
from django.conf.urls.static import static
from django.conf import settings
from django.views.i18n import javascript_catalog
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^catalog/', include('catalog.urls')),
url(r'^$', RedirectView.as_view(url='/catalog/', permanent=True)),
url(r'^accounts/', include('django.contrib.auth.urls')),
url(r'^admin/', admin.site.urls),
url(r'^catalog/', include('catalog.urls')),
url(r'^$', RedirectView.as_view(url='/catalog/', permanent=True)),
url(r'^accounts/', include('django.contrib.auth.urls')),
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
No preview for this file type
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment