Commit 78fc91e9c3c568ea3bedcf4a93eb59796c0d0778

Authored by Zambom
1 parent 1938eae6

Adding mural app and models

amadeus/asgi.py 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +import os
  2 +import channels.asgi
  3 +
  4 +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "amadeus.settings")
  5 +channel_layer = channels.asgi.get_channel_layer()
0 6 \ No newline at end of file
... ...
amadeus/routing.py 0 → 100644
... ... @@ -0,0 +1,6 @@
  1 +from channels.routing import route
  2 +from mural.consumers import ws_message
  3 +
  4 +channel_routing = [
  5 + route("websocket.receive", ws_message),
  6 +]
0 7 \ No newline at end of file
... ...
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  
... ...
categories/migrations/0013_auto_20170203_1618.py 0 → 100644
... ... @@ -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 + ]
... ...
mural/__init__.py 0 → 100644
mural/admin.py 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +from django.contrib import admin
  2 +
  3 +# Register your models here.
... ...
mural/apps.py 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +from django.apps import AppConfig
  2 +
  3 +
  4 +class MuralConfig(AppConfig):
  5 + name = 'mural'
... ...
mural/consumers.py 0 → 100644
... ... @@ -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
... ...
mural/forms.py 0 → 100644
mural/migrations/0001_initial.py 0 → 100644
... ... @@ -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 + ]
... ...
mural/migrations/__init__.py 0 → 100644
mural/models.py 0 → 100644
... ... @@ -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
... ...
mural/tests.py 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +from django.test import TestCase
  2 +
  3 +# Create your tests here.
... ...
mural/urls.py 0 → 100644
mural/views.py 0 → 100644
... ... @@ -0,0 +1,3 @@
  1 +from django.shortcuts import render
  2 +
  3 +# Create your views here.
... ...