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

update

parent e77142b8
...@@ -8,12 +8,11 @@ from django.contrib.admin.widgets import FilteredSelectMultiple ...@@ -8,12 +8,11 @@ from django.contrib.admin.widgets import FilteredSelectMultiple
import os import os
from django.conf import settings from django.conf import settings
from django.urls import reverse from django.urls import reverse
#-------------------------------------------------------------------------------
class SearchForm(forms.ModelForm): class SearchForm(forms.ModelForm):
class Meta: class Meta:
model = Search model = Search
exclude = ["user"] exclude = ["user"]
# fields = '__all__'
widgets = {'startDate': forms.DateInput(attrs={'type':'date', 'class':"form-control"}), widgets = {'startDate': forms.DateInput(attrs={'type':'date', 'class':"form-control"}),
'endDate': forms.DateInput(attrs={'type':'date', 'class':"form-control"}), 'endDate': forms.DateInput(attrs={'type':'date', 'class':"form-control"}),
...@@ -28,7 +27,7 @@ class SearchForm(forms.ModelForm): ...@@ -28,7 +27,7 @@ class SearchForm(forms.ModelForm):
form.user = user form.user = user
form.save() form.save()
#-------------------------------------------------------------------------------
class ProfileForm(forms.Form): class ProfileForm(forms.Form):
subscriptions = forms.ModelMultipleChoiceField(queryset=Publisher.objects.all(), widget=FilteredSelectMultiple("Publishers", is_stacked=False), required=False) subscriptions = forms.ModelMultipleChoiceField(queryset=Publisher.objects.all(), widget=FilteredSelectMultiple("Publishers", is_stacked=False), required=False)
class Media: class Media:
...@@ -38,7 +37,7 @@ class ProfileForm(forms.Form): ...@@ -38,7 +37,7 @@ class ProfileForm(forms.Form):
# in the temple # in the temple
css = {'all': (os.path.join(settings.BASE_DIR, '/static/admin/css/widgets.css'),),} css = {'all': (os.path.join(settings.BASE_DIR, '/static/admin/css/widgets.css'),),}
js = ('/catalog/js/jsi18n',) js = ('/catalog/js/jsi18n',)
#-------------------------------------------------------------------------------
class SubscriptionsForm(forms.ModelForm): class SubscriptionsForm(forms.ModelForm):
# def __init__(self, *args, **kwargs): # def __init__(self, *args, **kwargs):
...@@ -53,7 +52,7 @@ class SubscriptionsForm(forms.ModelForm): ...@@ -53,7 +52,7 @@ class SubscriptionsForm(forms.ModelForm):
fields = ('subscriptions',) fields = ('subscriptions',)
# field_classes = {'subscriptions': forms.ModelMultipleChoiceField,} # field_classes = {'subscriptions': forms.ModelMultipleChoiceField,}
widgets = {'subscriptions': FilteredSelectMultiple("Publishers", is_stacked=False),} widgets = {'subscriptions': FilteredSelectMultiple("Publishers", is_stacked=False),}
class Media: class Media:
# Django also includes a few javascript files necessary # Django also includes a few javascript files necessary
# for the operation of this form element. You need to # for the operation of this form element. You need to
# include <script src="/admin/jsi18n"></script> # include <script src="/admin/jsi18n"></script>
...@@ -61,7 +60,4 @@ class SubscriptionsForm(forms.ModelForm): ...@@ -61,7 +60,4 @@ class SubscriptionsForm(forms.ModelForm):
css = {'all': (os.path.join(settings.BASE_DIR, '/static/admin/css/widgets.css'),),} css = {'all': (os.path.join(settings.BASE_DIR, '/static/admin/css/widgets.css'),),}
js = ('/catalog/js/jsi18n') js = ('/catalog/js/jsi18n')
#forms.MultipleChoiceField(label="Fuentes", widget=forms.SelectMultiple(attrs={'class':"form-control"}), choices=choice, required=False)
...@@ -10,127 +10,97 @@ import itertools ...@@ -10,127 +10,97 @@ import itertools
from datetime import date from datetime import date
class Command(BaseCommand): class Command(BaseCommand):
help = 'Update database' help = 'Update database'
def add_arguments(self, parser): def add_arguments(self, parser):
parser.add_argument('basedir', nargs=1, type=str) parser.add_argument('basedir', nargs=1, type=str)
def handle(self, *args, **options): def handle(self, *args, **options):
#update radio stations recotding time
print("Recording Time:") if True:
recordingsDir = "/home/mario/virtualHDD/m3/recordings/" #update radio stations recotding time
audioTime.objects.all().delete() print("Recording Time:")
publishers = Publisher.objects.all().filter(type="audio") recordingsDir = "/home/mario/virtualHDD/m3/recordings/"
for p in publishers: audioTime.objects.all().delete()
files = [files for r, d, files in os.walk(recordingsDir+p.shortName)] publishers = Publisher.objects.all().filter(type="audio")
files = list(itertools.chain.from_iterable(files)) for p in publishers:
minutes = len(files) files = [files for r, d, files in os.walk(recordingsDir+p.shortName)]
sortedFiles = sorted([(f[:f.find(".flac")]) for f in files if f.find(".flac")>0 and f.count(".")==1]) files = list(itertools.chain.from_iterable(files))
print(p.shortName+": "+ str(minutes)) minutes = len(files)
if len(sortedFiles)>2: sortedFiles = sorted([(f[:f.find(".flac")]) for f in files if f.find(".flac")>0 and f.count(".")==1])
print("timestamp: " + sortedFiles[0]) print(p.shortName+": "+ str(minutes))
print("len timestamp: " + str(len(sortedFiles[0]))) if len(sortedFiles)>2:
#print (files) print("timestamp: " + sortedFiles[0])
#print (sortedFiles) print("len timestamp: " + str(len(sortedFiles[0])))
since = datetime.datetime.utcfromtimestamp(int(sortedFiles[0]))
audioTime.objects.update_or_create(publisher=p, defaults={'minutes': minutes, "startDate": since},) since = datetime.datetime.utcfromtimestamp(int(sortedFiles[0]))
#load news audioTime.objects.update_or_create(publisher=p, defaults={'minutes': minutes, "startDate": since},)
os.chdir(options['basedir'][0]) #load news
publisherList = os.listdir(options['basedir'][0]) os.chdir(options['basedir'][0])
for p in publisherList: publisherList = os.listdir(options['basedir'][0])
print p for p in publisherList:
os.chdir(p) print (p)
publisher = Publisher.objects.all().filter(shortName=p)[0] os.chdir(p)
news = News.objects.all().filter(publisher=publisher.id).order_by("-date") publisher = Publisher.objects.all().filter(shortName=p)[0]
# print publisher.id news = News.objects.all().filter(publisher=publisher.id).order_by("-date")
minYear = 0 minYear = 0
lastDate = datetime.datetime(1950,1,1) lastDate = datetime.datetime(1950,1,1)
# print news.count()
if news.count()>0: if news.count()>0:
minYear = news[0].date.year minYear = news[0].date.year
lastDate = news[0].date lastDate = news[0].date
yearList = [ int(y) for y in os.listdir('.')] yearList = [ int(y) for y in os.listdir('.')]
# print "LastDate"+str(lastDate) print (yearList)
print yearList for y in yearList:
for y in yearList: if y >=minYear:
if y >=minYear: os.chdir(str(y))
os.chdir(str(y)) print (os.getcwd())
print os.getcwd() filesList = os.listdir(".")
filesList = os.listdir(".") for f in filesList:
for f in filesList: fileDate = datetime.datetime.strptime(f[:f.find(".")], "%Y-%m-%d").date()
# print "file: " + f
fileDate = datetime.datetime.strptime(f[:f.find(".")], "%Y-%m-%d").date() if fileDate >= lastDate.date():
with open(f) as data_file:
if fileDate >= lastDate.date(): try:
# print "fileDate: " + str(fileDate) data = json.load(data_file)
with open(f) as data_file: for d in data:
try: newsDate = dateutil.parser.parse(d['date'])
data = json.load(data_file) if News.objects.all().filter(Q(publisher=publisher.id)&Q(title=d['title'])&Q(date__gte=newsDate)).count() == 0:
for d in data:
# if d['date'].find("+") >=0: if d['title'] == None:
# date =d['date'][:d['date'].find("+")].replace("T", " ") d['title'] = "Sin Titulo"
# newsDate = datetime.datetime.strptime(date, "%Y-%m-%d %H:%M:%S") if len(d['title']) >= 512:
# else: d['title'] = d['title'][:500]
# date = d['date'] print (p + " "+ str(newsDate) + ": " + d['title'])
# newsDate = datetime.datetime.strptime(date, "%Y-%m-%d") news = News()
# print d['date'] news.publisher = publisher
# print d['title'] news.title = d['title']
newsDate = dateutil.parser.parse(d['date']) news.text = d['text']
news.url = d['url']
news.date = newsDate
# newsDate = timezone.make_aware(newsDate, timezone.get_current_timezone()) news.save()
# print "newsDate:" if d['topic'] == "" or d['topic'] == None or d['topic'] ==[]:
# print newsDate d['topic'] = "Sin Tema"
if News.objects.all().filter(Q(publisher=publisher.id)&Q(title=d['title'])&Q(date__gte=newsDate)).count() == 0:
# print "no news match" if type(d['topic'])=="list":
if d['title'] == None: for t in d['topic']:
d['title'] = "Sin Titulo" topic, created = Topic.objects.all().get_or_create(name=t)
if len(d['title']) >= 512: news.topic.add(topic)
d['title'] = d['title'][:500] else:
print p + " "+ str(newsDate) + ": " + d['title'] topic, created = Topic.objects.all().get_or_create(name=d['topic'])
# 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) news.topic.add(topic)
else:
topic, created = Topic.objects.all().get_or_create(name=d['topic']) except ValueError as e:
news.topic.add(topic) print (e)
# print news.date print ("Error: " + os.getcwd()+"/"+f)
# print d['date'] print (type(d['topic']))
# #news.save()
# except (RuntimeError, TypeError, NameError, ValueError) as e: data_file.close()
except ValueError as e:
os.chdir("..")
print e os.chdir("..")
# print e.NameError
print "Error: " + os.getcwd()+"/"+f
print type(d['topic'])
# print "TOPIC: " + str(d['topic'])
data_file.close()
os.chdir("..")
os.chdir("..")
...@@ -10,8 +10,8 @@ class AuthRequiredMiddleware(object): ...@@ -10,8 +10,8 @@ class AuthRequiredMiddleware(object):
# the view (and later middleware) are called. # the view (and later middleware) are called.
response = self.get_response(request) response = self.get_response(request)
print request.path_info print (request.path_info)
print reverse('login') print (reverse('login'))
if request.path_info == reverse('ws-news-list2'): if request.path_info == reverse('ws-news-list2'):
return response return response
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2017-08-15 20:59 # Generated by Django 1.11.10 on 2018-02-14 15:48
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
...@@ -18,15 +18,15 @@ class Migration(migrations.Migration): ...@@ -18,15 +18,15 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=128)), ('name', models.CharField(max_length=128)),
('shortName', models.CharField(default=b'', max_length=32)), ('shortName', models.CharField(default='', max_length=32)),
('crawler', models.CharField(default=b'', max_length=32)), ('crawler', models.CharField(default='', max_length=64)),
('type', models.CharField(default=b'', max_length=32)), ('type', models.CharField(default='', max_length=32)),
('url', models.URLField(default=b'')), ('url', models.URLField(default='')),
], ],
options={ options={
'ordering': ('name',),
'verbose_name': 'Medio', 'verbose_name': 'Medio',
'verbose_name_plural': 'Medios', 'verbose_name_plural': 'Medios',
'ordering': ('name',),
}, },
), ),
] ]
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2017-08-15 20:59 # Generated by Django 1.11.10 on 2018-02-14 15:49
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
...@@ -16,12 +16,12 @@ class Migration(migrations.Migration): ...@@ -16,12 +16,12 @@ class Migration(migrations.Migration):
name='Topic', name='Topic',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('name', models.CharField(max_length=256, verbose_name=b'Tema')), ('name', models.CharField(max_length=256, verbose_name='Tema')),
], ],
options={ options={
'ordering': ('name',),
'verbose_name': 'Tema', 'verbose_name': 'Tema',
'verbose_name_plural': 'Temas', 'verbose_name_plural': 'Temas',
'ordering': ('name',),
}, },
), ),
] ]
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2017-08-15 20:59 # Generated by Django 1.11.10 on 2018-02-14 15:49
from __future__ import unicode_literals from __future__ import unicode_literals
import django.contrib.postgres.indexes
import django.contrib.postgres.search
from django.db import migrations, models from django.db import migrations, models
import django.db.models.deletion import django.db.models.deletion
...@@ -18,16 +20,21 @@ class Migration(migrations.Migration): ...@@ -18,16 +20,21 @@ class Migration(migrations.Migration):
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=512)), ('title', models.CharField(max_length=512)),
('date', models.DateTimeField(verbose_name=b'Publication Date')), ('date', models.DateTimeField(verbose_name='Publication Date')),
('text', models.TextField(blank=True, default=b'', verbose_name=b'News Text')), ('text', models.TextField(blank=True, default='', verbose_name='News Text')),
('url', models.URLField(max_length=512, verbose_name=b'URL')), ('url', models.URLField(max_length=512, verbose_name='URL')),
('publisher', models.ForeignKey(default=b'', on_delete=django.db.models.deletion.CASCADE, to='catalog.Publisher')), ('search_vector', django.contrib.postgres.search.SearchVectorField(null=True)),
('topic', models.ManyToManyField(blank=True, to='catalog.Topic', verbose_name=b'Topic(s)')), ('publisher', models.ForeignKey(default='', on_delete=django.db.models.deletion.CASCADE, to='catalog.Publisher')),
('topic', models.ManyToManyField(blank=True, to='catalog.Topic', verbose_name='Topic(s)')),
], ],
options={ options={
'ordering': ('date',),
'verbose_name': 'Noticia', 'verbose_name': 'Noticia',
'verbose_name_plural': 'Noticias', 'verbose_name_plural': 'Noticias',
'ordering': ('date',),
}, },
), ),
migrations.AddIndex(
model_name='news',
index=django.contrib.postgres.indexes.GinIndex(fields=['search_vector'], name='catalog_new_search__62ed1c_gin'),
),
] ]
# -*- coding: utf-8 -*-
# Generated by Django 1.10.7 on 2017-08-16 03:52
from __future__ import unicode_literals
import django.contrib.postgres.search
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('catalog', '0003_news'),
]
operations = [
migrations.AddField(
model_name='news',
name='search_vector',
field=django.contrib.postgres.search.SearchVectorField(null=True),
),
]
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-12-14 18:25 # Generated by Django 1.11.10 on 2018-02-14 15:49
from __future__ import unicode_literals from __future__ import unicode_literals
from django.conf import settings from django.conf import settings
...@@ -11,7 +11,7 @@ class Migration(migrations.Migration): ...@@ -11,7 +11,7 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('catalog', '0008_profile_subscriptions'), ('catalog', '0003_auto_20180214_1549'),
] ]
operations = [ operations = [
...@@ -19,10 +19,10 @@ class Migration(migrations.Migration): ...@@ -19,10 +19,10 @@ class Migration(migrations.Migration):
name='Search', name='Search',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('startDate', models.DateTimeField(verbose_name=b'Start Date')), ('startDate', models.DateTimeField(verbose_name='Start Date')),
('endDate', models.DateTimeField(verbose_name=b'End Date')), ('endDate', models.DateTimeField(verbose_name='End Date')),
('text', models.CharField(max_length=128)), ('text', models.CharField(blank=True, max_length=128)),
('publishers', models.ManyToManyField(to='catalog.Publisher')), ('publishers', models.ManyToManyField(blank=True, to='catalog.Publisher')),
('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
], ],
), ),
......
# -*- coding: utf-8 -*-
# Generated by Django 1.11.4 on 2017-08-19 20:50
from __future__ import unicode_literals
import django.contrib.postgres.indexes
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('catalog', '0004_news_search_vector'),
]
operations = [
migrations.AddIndex(
model_name='news',
index=django.contrib.postgres.indexes.GinIndex(fields=[b'search_vector'], name='catalog_new_search__62ed1c_gin'),
),
]
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-12-13 00:06 # Generated by Django 1.11.10 on 2018-02-14 15:50
from __future__ import unicode_literals from __future__ import unicode_literals
from django.conf import settings from django.conf import settings
...@@ -11,7 +11,7 @@ class Migration(migrations.Migration): ...@@ -11,7 +11,7 @@ class Migration(migrations.Migration):
dependencies = [ dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL), migrations.swappable_dependency(settings.AUTH_USER_MODEL),
('catalog', '0006_auto_20171126_0109'), ('catalog', '0004_search'),
] ]
operations = [ operations = [
...@@ -19,6 +19,7 @@ class Migration(migrations.Migration): ...@@ -19,6 +19,7 @@ class Migration(migrations.Migration):
name='Profile', name='Profile',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('subscriptions', models.ManyToManyField(to='catalog.Publisher')),
('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
], ],
), ),
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# Generated by Django 1.11.9 on 2018-01-31 20:50 # Generated by Django 1.11.10 on 2018-02-14 15:50
from __future__ import unicode_literals from __future__ import unicode_literals
from django.db import migrations, models from django.db import migrations, models
...@@ -9,7 +9,7 @@ import django.db.models.deletion ...@@ -9,7 +9,7 @@ import django.db.models.deletion
class Migration(migrations.Migration): class Migration(migrations.Migration):
dependencies = [ dependencies = [
('catalog', '0014_auto_20171221_1820'), ('catalog', '0005_profile'),
] ]
operations = [ operations = [
...@@ -17,8 +17,8 @@ class Migration(migrations.Migration): ...@@ -17,8 +17,8 @@ class Migration(migrations.Migration):
name='audioTime', name='audioTime',
fields=[ fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('startDate', models.DateTimeField(verbose_name=b'Start Date')), ('startDate', models.DateTimeField(verbose_name='Start Date')),
('seconds', models.BigIntegerField(default=0)), ('minutes', models.BigIntegerField(default=0)),
('publisher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='catalog.Publisher')), ('publisher', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='catalog.Publisher')),
], ],
), ),
......
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-11-26 01:09
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('catalog', '0005_auto_20170819_2050'),
]
operations = [
migrations.AlterField(
model_name='publisher',
name='crawler',
field=models.CharField(default=b'', max_length=64),
),
]
# -*- 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'),
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-12-14 18:52
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('catalog', '0009_search'),
]
operations = [
migrations.AlterField(
model_name='search',
name='publishers',
field=models.ManyToManyField(blank=True, to='catalog.Publisher'),
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-12-18 18:43
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('catalog', '0010_auto_20171214_1852'),
]
operations = [
migrations.AlterField(
model_name='search',
name='text',
field=models.CharField(blank=True, max_length=128),
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-12-21 16:47
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('catalog', '0011_auto_20171218_1843'),
]
operations = [
migrations.AlterField(
model_name='search',
name='endDate',
field=models.DateTimeField(blank=True, verbose_name=b'End Date'),
),
migrations.AlterField(
model_name='search',
name='startDate',
field=models.DateTimeField(blank=True, verbose_name=b'Start Date'),
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-12-21 17:28
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('catalog', '0012_auto_20171221_1647'),
]
operations = [
migrations.AlterField(
model_name='search',
name='endDate',
field=models.DateTimeField(blank=True, null=True, verbose_name=b'End Date'),
),
migrations.AlterField(
model_name='search',
name='startDate',
field=models.DateTimeField(blank=True, null=True, verbose_name=b'Start Date'),
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.7 on 2017-12-21 18:20
from __future__ import unicode_literals
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('catalog', '0013_auto_20171221_1728'),
]
operations = [
migrations.AlterField(
model_name='search',
name='endDate',
field=models.DateTimeField(verbose_name=b'End Date'),
),
migrations.AlterField(
model_name='search',
name='startDate',
field=models.DateTimeField(verbose_name=b'Start Date'),
),
]
# -*- coding: utf-8 -*-
# Generated by Django 1.11.9 on 2018-01-31 21:05
from __future__ import unicode_literals
from django.db import migrations
class Migration(migrations.Migration):
dependencies = [
('catalog', '0015_audiotime'),
]
operations = [
migrations.RenameField(
model_name='audiotime',
old_name='seconds',
new_name='minutes',
),
]
...@@ -79,14 +79,12 @@ class Search(models.Model): ...@@ -79,14 +79,12 @@ class Search(models.Model):
class Profile(models.Model): class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE) user = models.OneToOneField(User, on_delete=models.CASCADE)
subscriptions = models.ManyToManyField(Publisher) subscriptions = models.ManyToManyField(Publisher)
# def __init__(self, *args, **kwargs):
# self.subscriptions = Publisher.objects.all()
# super().__init__(*args, **kwargs)
@receiver(post_save, sender=User) @receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs): def create_user_profile(sender, instance, created, **kwargs):
if created: if created:
Profile.objects.create(user=instance)#, subscriptions=Publisher.objects.all()) Profile.objects.create(user=instance)#, subscriptions=Publisher.objects.all())
print ("profile created") print ("profile created")
@receiver(post_save, sender=User) @receiver(post_save, sender=User)
......
...@@ -31,7 +31,10 @@ ...@@ -31,7 +31,10 @@
<div class="panel-body"> <div class="panel-body">
<div id="audioCalendar"></div> <div id="audioCalendar"></div>
<div id="audioDiv">audio tag</div> <div id="audioDiv">
<audio id="audioPlay" controls>
</audio>
</div>
<!-- /.table-responsive --> <!-- /.table-responsive -->
</div> </div>
...@@ -57,6 +60,8 @@ ...@@ -57,6 +60,8 @@
<script> <script>
function getAudioList(publisher, startdate, enddate) function getAudioList(publisher, startdate, enddate)
{ {
url = "/catalog/ws/playlist/?startdate="+startdate+"&enddate="+enddate+"&publisher="+publisher;
console.log(url);
var xmlhttp; var xmlhttp;
if (window.XMLHttpRequest) if (window.XMLHttpRequest)
{//IE7+, Firefox, Chrome, Opera, Safari {//IE7+, Firefox, Chrome, Opera, Safari
...@@ -74,10 +79,11 @@ function getAudioList(publisher, startdate, enddate) ...@@ -74,10 +79,11 @@ function getAudioList(publisher, startdate, enddate)
var jsonObj = JSON.parse(xmlhttp.responseText); var jsonObj = JSON.parse(xmlhttp.responseText);
console.log(jsonObj); console.log(jsonObj);
var audioDiv = document.getElementById("audioDiv");
audioDiv.appendChild(document.createElement("audio"));
} }
} }
xmlhttp.open("GET", url ,true);
xmlhttp.open("GET", "/catalog/ws/playlist/?startdate="+startdate+"&enddate="+enddate+"&publisher="+publisher,true);
xmlhttp.send(); xmlhttp.send();
}; };
$(document).ready(function () { $(document).ready(function () {
...@@ -110,16 +116,16 @@ $(document).ready(function () { ...@@ -110,16 +116,16 @@ $(document).ready(function () {
function rangeChanged(target, range) { function rangeChanged(target, range) {
console.log(range); console.log(range);
var audioDiv = document.getElementById("audioDiv"); //var audioDiv = document.getElementById("audioDiv");
while (audioDiv.firstChild) // while (audioDiv.firstChild)
audioDiv.removeChild(audioDiv.firstChild); // audioDiv.removeChild(audioDiv.firstChild);
var sound = document.createElement('audio'); // var sound = document.createElement('audio');
sound.id = 'audio-player'; // sound.id = 'audio-player';
sound.controls = 'controls'; // sound.controls = 'controls';
sound.src = 'media/Blue Browne.mp3'; // sound.src = 'media/Blue Browne.mp3';
sound.type = 'audio/mpeg'; // sound.type = 'audio/mpeg';
audioDiv.appendChild(sound); // audioDiv.appendChild(sound);
getAudioList("{{publisher.shortName}}",range.start,range.end); getAudioList("{{publisher.shortName}}",range.start,range.end);
} }
......
...@@ -23,10 +23,10 @@ urlpatterns = [ ...@@ -23,10 +23,10 @@ urlpatterns = [
url(r'^audio/$', views.audioList, name='audio'), url(r'^audio/$', views.audioList, name='audio'),
url(r'^audio/(?P<publisher>\w+)$', views.audioPublisher, name='audio'), url(r'^audio/(?P<publisher>\w+)$', views.audioPublisher, name='audio'),
url(r'^settings/$', views.settings, name='settings'), url(r'^settings/$', views.settingsView, name='settings'),
url(r'^settings/profile$', views.settings, name='settings-profile'), url(r'^settings/profile$', views.settingsView, name='settings-profile'),
url(r'^settings/subscriptions$', views.settings, name='settings-subscriptions'), url(r'^settings/subscriptions$', views.settingsView, name='settings-subscriptions'),
url(r'^settings/password$', views.settings, name='settings-password'), url(r'^settings/password$', views.settingsView, name='settings-password'),
url(r'^settings/searches$', views.settingsSearches, name='settings-search'), url(r'^settings/searches$', views.settingsSearches, name='settings-search'),
] ]
......
...@@ -5,7 +5,7 @@ from django.shortcuts import render ...@@ -5,7 +5,7 @@ from django.shortcuts import render
# Create your views here. # Create your views here.
from django.conf import settings
from catalog.models import Publisher, News, Search, audioTime from catalog.models import Publisher, News, Search, audioTime
from django.core.exceptions import ObjectDoesNotExist from django.core.exceptions import ObjectDoesNotExist
from django.shortcuts import redirect from django.shortcuts import redirect
...@@ -27,20 +27,38 @@ import dateutil.parser ...@@ -27,20 +27,38 @@ import dateutil.parser
import urllib import urllib
import json import json
import StringIO #import StringIO #python2
from io import StringIO #python3
import time import time
import zipfile import zipfile
import csv import csv
from quantiphy import Quantity from quantiphy import Quantity
from .audioList import getAudioList #from .audioList import getAudioList
from numpy import array_equal
import os
import shutil
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def getAudiosList2Convert(streamPublisher, initTimestamp, endTimestamp, days): def getAudiosList2Convert(request, streamPublisher, initTimestamp, endTimestamp, days):
if not request.session.session_key:
request.session.save()
session_id = request.session.session_key
cwd = settings.BASE_DIR
print ("CDW: " + cwd)
directory = cwd+"/catalog/static/audioPlayList/sessions/"+session_id+"/"
if not os.path.exists(directory):
os.mkdir(directory)
else:
shutil.rmtree(directory)
os.mkdir(directory)
recordingsPath = '/home/mario/virtualHDD/m3/recordings/' recordingsPath = '/home/mario/virtualHDD/m3/recordings/'
initialDate = datetime.fromtimestamp(initTimestamp) #+ timedelta(hours=6) initialDate = datetime.datetime.fromtimestamp(initTimestamp) #+ timedelta(hours=6)
endDate = datetime.fromtimestamp(endTimestamp) #+ timedelta(hours=6) endDate = datetime.datetime.fromtimestamp(endTimestamp) #+ timedelta(hours=6)
audiosList = [] audiosList = []
...@@ -58,19 +76,20 @@ def getAudiosList2Convert(streamPublisher, initTimestamp, endTimestamp, days): ...@@ -58,19 +76,20 @@ def getAudiosList2Convert(streamPublisher, initTimestamp, endTimestamp, days):
for file in os.listdir(recordingsPath+audiosPath): for file in os.listdir(recordingsPath+audiosPath):
audioTimestamp = int(file.split(".")[0]) audioTimestamp = int(file.split(".")[0])
if audioTimestamp >= initTimestamp and audioTimestamp <= endTimestamp: if audioTimestamp >= initTimestamp and audioTimestamp <= endTimestamp:
audiosList.append(recordingsPath+audiosPath+file) audiosList.append(audiosPath+file)
#audiosList.append((recordingsPath+audiosPath, file)) os.symlink(recordingsPath+audiosPath+file, directory+file)
# Next day dir # Next day dir
initialDate += timedelta(days=1) initialDate += datetime.timedelta(days=1)
return audiosList return audiosList
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def getRecordingDays(initTimestamp, endTimestamp): def getRecordingDays(initTimestamp, endTimestamp):
initialDate = datetime.fromtimestamp(initTimestamp) #+ timedelta(hours=6) initialDate = datetime.datetime.fromtimestamp(initTimestamp) #+ timedelta(hours=6)
endDate = datetime.fromtimestamp(endTimestamp) #+ timedelta(hours=6) endDate = datetime.datetime.fromtimestamp(endTimestamp) #+ timedelta(hours=6)
print(initialDate) print(initialDate)
print(endDate) print(endDate)
...@@ -85,18 +104,18 @@ def getRecordingDays(initTimestamp, endTimestamp): ...@@ -85,18 +104,18 @@ def getRecordingDays(initTimestamp, endTimestamp):
else: else:
while not array_equal(iDate, eDate): while not array_equal(iDate, eDate):
days += 1 days += 1
initialDate += timedelta(days=1) initialDate += datetime.timedelta(days=1)
iDate = [initialDate.day, initialDate.month, initialDate.year] iDate = [initialDate.day, initialDate.month, initialDate.year]
return days return days
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def getAudiosList(streamPublisher, initTimestamp, endTimestamp): def getAudiosList(request, streamPublisher, initTimestamp, endTimestamp):
initTimestamp = float(initTimestamp) initTimestamp = float(initTimestamp)
endTimestamp = float(endTimestamp) endTimestamp = float(endTimestamp)
days = getRecordingDays(initTimestamp, endTimestamp) days = getRecordingDays(initTimestamp, endTimestamp)
print('Recording days: {0}'.format(days)) print('Recording days: {0}'.format(days))
audiosList = getAudiosList2Convert(streamPublisher, initTimestamp, endTimestamp, days) audiosList = getAudiosList2Convert(request, streamPublisher, initTimestamp, endTimestamp, days)
return audiosList return audiosList
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
...@@ -112,7 +131,7 @@ def news2JSON(news): ...@@ -112,7 +131,7 @@ def news2JSON(news):
data.append(item) data.append(item)
return data return data
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def settings(request): def settingsView(request):
# form = ProfileForm( initial={'subscriptions':[ v for v in request.user.profile.subscriptions.all().values_list('id', flat=True)]}) # form = ProfileForm( initial={'subscriptions':[ v for v in request.user.profile.subscriptions.all().values_list('id', flat=True)]})
print ("subS",[ v for v in request.user.profile.subscriptions.all().values_list('id', flat=True)]) print ("subS",[ v for v in request.user.profile.subscriptions.all().values_list('id', flat=True)])
...@@ -124,15 +143,15 @@ def settings(request): ...@@ -124,15 +143,15 @@ def settings(request):
if form.is_valid(): if form.is_valid():
request.user.profile.subscriptions=form.cleaned_data['subscriptions'] request.user.profile.subscriptions=form.cleaned_data['subscriptions']
else: else:
form = ProfileForm( initial={'subscriptions':[ v for v in request.user.profile.subscriptions.all().values_list('id', flat=True)]}) form = ProfileForm( initial={'subscriptions':[ v for v in request.user.profile.subscriptions.all().values_list('id', flat=True)]})
news = News.objects.all() news = News.objects.all()
publishersList = Publisher.objects.all().filter( Q(id__in = news.values('publisher').distinct())) publishersList = Publisher.objects.all().filter( Q(id__in = news.values('publisher').distinct()))
choice = [ (r.id,r.name) for r in publishersList ] choice = [ (r.id,r.name) for r in publishersList ]
form.fields['subscriptions'].choices=choice form.fields['subscriptions'].choices=choice
print( request.user.profile.subscriptions.all() ) print( request.user.profile.subscriptions.all() )
return render(request,'userprofile.html',{"form":form}) return render(request,'userprofile.html',{"form":form})
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def settingsSearches(request): def settingsSearches(request):
return render(request,'searches.html',{}) return render(request,'searches.html',{})
...@@ -205,7 +224,7 @@ def index(request): ...@@ -205,7 +224,7 @@ def index(request):
for q in queryset: for q in queryset:
myRequest = request.GET.copy() myRequest = request.GET.copy()
myRequest.update({"publishers":q['publisher']}) myRequest.update({"publishers":q['publisher']})
urlDict[q['publisher']] = urllib.urlencode(myRequest) urlDict[q['publisher']] = urllib.parse.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] donutChart = [{"label": Publisher.objects.get(id=q['publisher']).name, "value":q["count"], "url":urlDict[q['publisher']]} for q in queryset]
...@@ -250,7 +269,7 @@ def publisherList(request, type="all"): ...@@ -250,7 +269,7 @@ def publisherList(request, type="all"):
if 'publishers' in myRequest: if 'publishers' in myRequest:
del myRequest['publishers'] 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.parse.urlencode(myRequest)})
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def newsList(request, publisherShortName="all"): def newsList(request, publisherShortName="all"):
...@@ -262,14 +281,15 @@ def wsAudioList(request): ...@@ -262,14 +281,15 @@ def wsAudioList(request):
data = dict() data = dict()
print("wsAudioList", request.GET) print("wsAudioList", request.GET)
startDate = dateutil.parser.parse(request.GET['startdate']).strftime('%s') startDate = dateutil.parser.parse(request.GET['startdate']).strftime('%s')
endDate = dateutil.parser.parse(request.GET['enddate']).strftime('%s') endDate = dateutil.parser.parse(request.GET['enddate']).strftime('%s')
print ("STARTDATE", startDate) print ("STARTDATE", startDate)
audioList = getAudioList(request.GET['publisher'], startDate, endDate) audioList = getAudiosList(request, request.GET['publisher'], startDate, endDate)
# audioList = getAudioList('RadioFormula1041', '1512158400', '1512396000') # audioList = getAudiosList(request, 'RadioFormula1041', '1512158400', '1512396000')
print ("audioList", audioList) print ("audioList", audioList)
return HttpResponse(json.dumps(data), content_type="application/json") return HttpResponse(json.dumps(audioList), content_type="application/json")
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def wsSearchList(request): def wsSearchList(request):
...@@ -277,19 +297,17 @@ def wsSearchList(request): ...@@ -277,19 +297,17 @@ def wsSearchList(request):
searches = Search.objects.all().filter(user=request.user) searches = Search.objects.all().filter(user=request.user)
data = dict() data = dict()
data['data']=[[s.text, "*" if s is None else s.startDate.strftime('%Y-%m-%d'), "*" if s is None else s.endDate.strftime('%Y-%m-%d'), ','.join([ sub.shortName for sub in s.publishers.all()])] for s in searches] data['data']=[[s.text, "*" if s is None else s.startDate.strftime('%Y-%m-%d'), "*" if s is None else s.endDate.strftime('%Y-%m-%d'), ','.join([ sub.shortName for sub in s.publishers.all()])] for s in searches]
data['recordsTotal'] = searches.count() data['recordsTotal'] = searches.count()
data['recordsFiltered'] = searches.count() data['recordsFiltered'] = searches.count()
return HttpResponse(json.dumps(data), content_type="application/json")
return HttpResponse(json.dumps(data), content_type="application/json")
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def wsNewsList2(request): def wsNewsList2(request):
news = getNewsByRequest(request) news = getNewsByRequest(request)
data = [{"id":n.id, "text":n.text, "date":n.date.strftime('%Y-%m-%d')} for n in news] data = [{"id":n.id, "publisher":n.publisher.name, "text":n.text, "date":n.date.strftime('%Y-%m-%d')} for n in news]
return HttpResponse(json.dumps(data), content_type="application/json") return HttpResponse(json.dumps(data), content_type="application/json")
#------------------------------------------------------------------------------- #-------------------------------------------------------------------------------
def wsNewsList(request):#, publisherShortName="all"): def wsNewsList(request):#, publisherShortName="all"):
......
This diff is collapsed.
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