Commit 78fc91e9c3c568ea3bedcf4a93eb59796c0d0778
1 parent
1938eae6
Exists in
master
and in
3 other branches
Adding mural app and models
Showing
15 changed files
with
212 additions
and
0 deletions
Show diff stats
amadeus/settings.py
| ... | ... | @@ -54,6 +54,7 @@ INSTALLED_APPS = [ |
| 54 | 54 | 'session_security', |
| 55 | 55 | 'django_crontab', |
| 56 | 56 | 'django_cron', |
| 57 | + #'channels', | |
| 57 | 58 | |
| 58 | 59 | 'amadeus', |
| 59 | 60 | 'users', |
| ... | ... | @@ -64,6 +65,7 @@ INSTALLED_APPS = [ |
| 64 | 65 | 'students_group', |
| 65 | 66 | 'topics', |
| 66 | 67 | 'pendencies', |
| 68 | + 'mural', | |
| 67 | 69 | 'file_link', |
| 68 | 70 | 'links', |
| 69 | 71 | 'webpage', |
| ... | ... | @@ -182,6 +184,13 @@ CRONJOBS = [ |
| 182 | 184 | ('1 */12 * * *', 'notifications.cron.notification_cron') |
| 183 | 185 | ] |
| 184 | 186 | |
| 187 | +CHANNEL_LAYERS = { | |
| 188 | + "default": { | |
| 189 | + "BACKEND": "asgiref.inmemory.ChannelLayer", | |
| 190 | + "ROUTING": "amadeus.routing.channel_routing", | |
| 191 | + }, | |
| 192 | +} | |
| 193 | + | |
| 185 | 194 | #SECURITY |
| 186 | 195 | SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO','https') |
| 187 | 196 | ... | ... |
| ... | ... | @@ -0,0 +1,21 @@ |
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | +# Generated by Django 1.10 on 2017-02-03 19:18 | |
| 3 | +from __future__ import unicode_literals | |
| 4 | + | |
| 5 | +from django.conf import settings | |
| 6 | +from django.db import migrations, models | |
| 7 | + | |
| 8 | + | |
| 9 | +class Migration(migrations.Migration): | |
| 10 | + | |
| 11 | + dependencies = [ | |
| 12 | + ('categories', '0012_auto_20170201_2010'), | |
| 13 | + ] | |
| 14 | + | |
| 15 | + operations = [ | |
| 16 | + migrations.AlterField( | |
| 17 | + model_name='category', | |
| 18 | + name='coordinators', | |
| 19 | + field=models.ManyToManyField(blank=True, related_name='Coordenadores', to=settings.AUTH_USER_MODEL), | |
| 20 | + ), | |
| 21 | + ] | ... | ... |
| ... | ... | @@ -0,0 +1,18 @@ |
| 1 | +from channels import Group | |
| 2 | +from channels.sessions import channel_session | |
| 3 | +from django.http import HttpResponse | |
| 4 | +from channels.handler import AsgiHandler | |
| 5 | + | |
| 6 | +def http_consumer(message): | |
| 7 | + # Make standard HTTP response - access ASGI path attribute directly | |
| 8 | + response = HttpResponse("Hello world! You asked for %s" % message.content['path']) | |
| 9 | + # Encode that response into message format (ASGI) | |
| 10 | + for chunk in AsgiHandler.encode_response(response): | |
| 11 | + message.reply_channel.send(chunk) | |
| 12 | + | |
| 13 | +def ws_message(message): | |
| 14 | + # ASGI WebSocket packet-received and send-packet message types | |
| 15 | + # both have a "text" key for their textual data. | |
| 16 | + message.reply_channel.send({ | |
| 17 | + "text": message.content['text'], | |
| 18 | + }) | |
| 0 | 19 | \ No newline at end of file | ... | ... |
| ... | ... | @@ -0,0 +1,97 @@ |
| 1 | +# -*- coding: utf-8 -*- | |
| 2 | +# Generated by Django 1.10 on 2017-02-03 19:18 | |
| 3 | +from __future__ import unicode_literals | |
| 4 | + | |
| 5 | +from django.conf import settings | |
| 6 | +from django.db import migrations, models | |
| 7 | +import django.db.models.deletion | |
| 8 | +import mural.models | |
| 9 | + | |
| 10 | + | |
| 11 | +class Migration(migrations.Migration): | |
| 12 | + | |
| 13 | + initial = True | |
| 14 | + | |
| 15 | + dependencies = [ | |
| 16 | + migrations.swappable_dependency(settings.AUTH_USER_MODEL), | |
| 17 | + ('topics', '0007_auto_20170123_1911'), | |
| 18 | + ('categories', '0013_auto_20170203_1618'), | |
| 19 | + ('subjects', '0014_auto_20170130_1828'), | |
| 20 | + ] | |
| 21 | + | |
| 22 | + operations = [ | |
| 23 | + migrations.CreateModel( | |
| 24 | + name='Comment', | |
| 25 | + fields=[ | |
| 26 | + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | |
| 27 | + ('comment', models.TextField(blank=True, verbose_name='Comment')), | |
| 28 | + ('image', models.ImageField(blank=True, null=True, upload_to='posts/comments/', validators=[mural.models.validate_img_extension], verbose_name='Image')), | |
| 29 | + ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Create Date')), | |
| 30 | + ('last_update', models.DateTimeField(auto_now=True, verbose_name='Last Update')), | |
| 31 | + ], | |
| 32 | + ), | |
| 33 | + migrations.CreateModel( | |
| 34 | + name='Mural', | |
| 35 | + fields=[ | |
| 36 | + ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | |
| 37 | + ('_my_subclass', models.CharField(max_length=200)), | |
| 38 | + ('action', models.CharField(blank=True, choices=[('comment', 'Comment'), ('help', 'Ask for Help')], max_length=100, verbose_name='Action')), | |
| 39 | + ('post', models.TextField(blank=True, verbose_name='Post')), | |
| 40 | + ('image', models.ImageField(blank=True, null=True, upload_to='posts/', validators=[mural.models.validate_img_extension], verbose_name='Image')), | |
| 41 | + ('create_date', models.DateTimeField(auto_now_add=True, verbose_name='Create Date')), | |
| 42 | + ('last_update', models.DateTimeField(auto_now=True, verbose_name='Last Update')), | |
| 43 | + ], | |
| 44 | + options={ | |
| 45 | + 'abstract': False, | |
| 46 | + }, | |
| 47 | + ), | |
| 48 | + migrations.CreateModel( | |
| 49 | + name='CategoryPost', | |
| 50 | + fields=[ | |
| 51 | + ('mural_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mural.Mural')), | |
| 52 | + ('space', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='post_category', to='categories.Category', verbose_name='Category')), | |
| 53 | + ], | |
| 54 | + options={ | |
| 55 | + 'abstract': False, | |
| 56 | + }, | |
| 57 | + bases=('mural.mural',), | |
| 58 | + ), | |
| 59 | + migrations.CreateModel( | |
| 60 | + name='GeneralPost', | |
| 61 | + fields=[ | |
| 62 | + ('mural_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mural.Mural')), | |
| 63 | + ('space', models.IntegerField(blank=True, default=0, verbose_name='Space')), | |
| 64 | + ], | |
| 65 | + options={ | |
| 66 | + 'abstract': False, | |
| 67 | + }, | |
| 68 | + bases=('mural.mural',), | |
| 69 | + ), | |
| 70 | + migrations.CreateModel( | |
| 71 | + name='SubjectPost', | |
| 72 | + fields=[ | |
| 73 | + ('mural_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='mural.Mural')), | |
| 74 | + ('resource', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='post_resource', to='topics.Resource', verbose_name='Resource')), | |
| 75 | + ('space', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='post_subject', to='subjects.Subject', verbose_name='Subject')), | |
| 76 | + ], | |
| 77 | + options={ | |
| 78 | + 'abstract': False, | |
| 79 | + }, | |
| 80 | + bases=('mural.mural',), | |
| 81 | + ), | |
| 82 | + migrations.AddField( | |
| 83 | + model_name='mural', | |
| 84 | + name='user', | |
| 85 | + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='post_user', to=settings.AUTH_USER_MODEL, verbose_name='User'), | |
| 86 | + ), | |
| 87 | + migrations.AddField( | |
| 88 | + model_name='comment', | |
| 89 | + name='post', | |
| 90 | + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comment_post', to='mural.Mural', verbose_name='Post'), | |
| 91 | + ), | |
| 92 | + migrations.AddField( | |
| 93 | + model_name='comment', | |
| 94 | + name='user', | |
| 95 | + field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='comment_user', to=settings.AUTH_USER_MODEL, verbose_name='User'), | |
| 96 | + ), | |
| 97 | + ] | ... | ... |
| ... | ... | @@ -0,0 +1,42 @@ |
| 1 | +from django.db import models | |
| 2 | +from django.core import validators | |
| 3 | +from django.core.exceptions import ValidationError | |
| 4 | +from django.utils.translation import ugettext_lazy as _ | |
| 5 | + | |
| 6 | +from categories.models import Category | |
| 7 | +from subjects.models import Subject | |
| 8 | +from topics.models import KnowsChild, Resource | |
| 9 | +from users.models import User | |
| 10 | + | |
| 11 | +def validate_img_extension(value): | |
| 12 | + valid_formats = ['image/jpeg','image/x-citrix-jpeg','image/png','image/x-citrix-png','image/x-png'] | |
| 13 | + | |
| 14 | + if hasattr(value.file, 'content_type'): | |
| 15 | + if not value.file.content_type in valid_formats: | |
| 16 | + raise ValidationError(_('File not supported.')) | |
| 17 | + | |
| 18 | +class Mural(KnowsChild): | |
| 19 | + action = models.CharField(_('Action'), max_length = 100, choices = (("comment", _("Comment")), ("help", _("Ask for Help"))), blank = True) | |
| 20 | + post = models.TextField(_('Post'), blank = True) | |
| 21 | + image = models.ImageField(verbose_name = _('Image'), null=True, blank = True, upload_to = 'posts/', validators = [validate_img_extension]) | |
| 22 | + user = models.ForeignKey(User, verbose_name = _('User'), related_name = "post_user", null = True) | |
| 23 | + create_date = models.DateTimeField(_('Create Date'), auto_now_add = True) | |
| 24 | + last_update = models.DateTimeField(_('Last Update'), auto_now = True) | |
| 25 | + | |
| 26 | +class GeneralPost(Mural): | |
| 27 | + space = models.IntegerField(_('Space'), default = 0, blank = True) | |
| 28 | + | |
| 29 | +class CategoryPost(Mural): | |
| 30 | + space = models.ForeignKey(Category, verbose_name = ('Category'), related_name = 'post_category') | |
| 31 | + | |
| 32 | +class SubjectPost(Mural): | |
| 33 | + space = models.ForeignKey(Subject, verbose_name = _('Subject'), related_name = 'post_subject') | |
| 34 | + resource = models.ForeignKey(Resource, verbose_name = _('Resource'), related_name = 'post_resource', null = True) | |
| 35 | + | |
| 36 | +class Comment(models.Model): | |
| 37 | + comment = models.TextField(_('Comment'), blank = True) | |
| 38 | + image = models.ImageField(verbose_name = _('Image'), null=True, blank = True, upload_to = 'posts/comments/', validators = [validate_img_extension]) | |
| 39 | + post = models.ForeignKey(Mural, verbose_name = _('Post'), related_name = 'comment_post') | |
| 40 | + user = models.ForeignKey(User, verbose_name = _('User'), related_name = "comment_user", null = True) | |
| 41 | + create_date = models.DateTimeField(_('Create Date'), auto_now_add = True) | |
| 42 | + last_update = models.DateTimeField(_('Last Update'), auto_now = True) | |
| 0 | 43 | \ No newline at end of file | ... | ... |