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 | ... | ... |