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,6 +54,7 @@ INSTALLED_APPS = [ | ||
54 | 'session_security', | 54 | 'session_security', |
55 | 'django_crontab', | 55 | 'django_crontab', |
56 | 'django_cron', | 56 | 'django_cron', |
57 | + #'channels', | ||
57 | 58 | ||
58 | 'amadeus', | 59 | 'amadeus', |
59 | 'users', | 60 | 'users', |
@@ -64,6 +65,7 @@ INSTALLED_APPS = [ | @@ -64,6 +65,7 @@ INSTALLED_APPS = [ | ||
64 | 'students_group', | 65 | 'students_group', |
65 | 'topics', | 66 | 'topics', |
66 | 'pendencies', | 67 | 'pendencies', |
68 | + 'mural', | ||
67 | 'file_link', | 69 | 'file_link', |
68 | 'links', | 70 | 'links', |
69 | 'webpage', | 71 | 'webpage', |
@@ -182,6 +184,13 @@ CRONJOBS = [ | @@ -182,6 +184,13 @@ CRONJOBS = [ | ||
182 | ('1 */12 * * *', 'notifications.cron.notification_cron') | 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 | #SECURITY | 194 | #SECURITY |
186 | SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO','https') | 195 | SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO','https') |
187 | 196 |
@@ -0,0 +1,21 @@ | @@ -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 @@ | @@ -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 | \ No newline at end of file | 19 | \ No newline at end of file |
@@ -0,0 +1,97 @@ | @@ -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 @@ | @@ -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 | \ No newline at end of file | 43 | \ No newline at end of file |