from django.db import models from sigma_core.importer import load_ressource GroupMember = load_ressource("GroupMember") class AcknowledgmentInvitation(models.Model): """ Modelize an invitation to acknowledge a group. Invitation can be issued both by the invitee and the inviter. Invitation have a short life-time. As soon as someone accepts or declines the invitation, the instance is destroyed. """ #*********************************************************************************************# #** Fields **# #*********************************************************************************************# class Meta: unique_together = (("acknowledged", "acknowledged_by"), ) acknowledged = models.ForeignKey( 'Group', related_name='invitation_to_be_acknowledged') acknowledged_by = models.ForeignKey( 'Group', related_name='invitation_to_acknowledge') """ Represents whether the invitation has been issued by the invitee or the inviter """ issued_by_invitee = models.BooleanField(default=True) """ The date the invitation has been issued """ date = models.DateTimeField(auto_now_add=True) #*********************************************************************************************#
from rest_framework import serializers from sigma_core.importer import load_ressource Event = load_ressource("Event") class EventSerializer(serializers.ModelSerializer): class Meta: model = Event.model exclude = ()
from rest_framework import serializers from sigma_core.importer import load_ressource Publication = load_ressource("Publication") class PublicationSerializer(serializers.ModelSerializer): class Meta: model = Publication.model exclude = ()
from rest_framework import status from rest_framework.decorators import detail_route, list_route from sigma_core.views.sigma_viewset import SigmaViewSet from sigma_core.importer import Sigma, load_ressource User = load_ressource("User") from django.core.mail import send_mail from rest_framework.permissions import AllowAny import random reset_mail = { 'from_email': '*****@*****.**', 'subject': 'Mot de passe Sigma', 'message': u""" Bonjour, Ton mot de passe Sigma a été réinitialisé. C'est maintenant "{password}". Cordialement, L'équipe Sigma. """ } class UserViewSet(SigmaViewSet): serializer_class = User.serializer queryset = User.model.objects.all()
from django.db import models from sigma_core.importer import load_ressource Chat = load_ressource("Chat") class ChatMessage(models.Model): """ Modelize a message in a chat of a group """ #*********************************************************************************************# #** Fields **# #*********************************************************************************************# user = models.ForeignKey('User', related_name='my_chat_messages') chat = models.ForeignKey('Chat', related_name='messages') created_date = models.DateTimeField(auto_now_add=True) message = models.TextFIeld(Defaul="") #*********************************************************************************************# #** Getters **# #*********************************************************************************************# @staticmethod def get_group_chat_messages_qs(group): c_list = Chat.model.objects.get(group=group) return c_list.order_by('created_date')
from rest_framework import serializers from sigma_core.importer import load_ressource ChatMember = load_ressource("ChatMember") class ChatMemberSerializer(serializers.ModelSerializer): """ Basic default serializer for a ChatMember. Include all fields """ class Meta: model = ChatMember.model exclude = ('join_date', )
from django.db import models from sigma_core.importer import load_ressource Participation = load_ressource("Participation") class Event(models.Model): """ This model is used to represent any kind of user's group (friends, coworkers, schools, etc...) """ #*********************************************************************************************# #** Fields **# #*********************************************************************************************# author = models.ForeignKey("User", related_name='created') name = models.CharField(max_length=255) description = models.CharField(max_length=1400) date_start = models.DateTimeField() date_end = models.DateTimeField() place_name = models.CharField(max_length=255) def __str__(self): return self.name #*********************************************************************************************# #** Setters **# #*********************************************************************************************#
from django.db import models from sigma_core.importer import load_ressource SharedPublication = load_ressource("SharedPublication") class Publication(models.Model): """ An abstract publication """ #*********************************************************************************************# #** Fields **# #*********************************************************************************************# group = models.ForeignKey("Group", related_name='publications') date = models.DateTimeField(auto_now_add=True) author = models.ForeignKey("User") title = models.CharField(max_length=144, blank=True) content = models.CharField(max_length=1500) related_event = models.ForeignKey("Event", blank=True, null=True) internal = models.BooleanField(default=True) last_commented = models.DateTimeField(auto_now_add=True) def __str__(self): return self.title #*********************************************************************************************# #** Getters **# #*********************************************************************************************#
from rest_framework import status from rest_framework.decorators import detail_route from sigma_core.views.sigma_viewset import SigmaViewSet from sigma_core.importer import load_ressource ChatMessage = load_ressource("ChatMessage") class ChatMessageViewSet(SigmaViewSet): serializer_class = ChatMessage.serializer queryset = ChatMessage.model.objects.all() #*********************************************************************************************# #** Read actions **# #*********************************************************************************************# #*********************************************************************************************# #** Write actions **# #*********************************************************************************************# def create(self, request): """ REST create action. Used to create an chat member. If succeeded, returns HTTP_201_CREATED with the corresponding ChatMember object. """ return self.handle_action('create', request)
from django.db import models from sigma_core.importer import load_ressource Group = load_ressource("Group") User = load_ressource("User") class GroupMember(models.Model): """ Modelize a membership relation between an User and a Group. A user is a member of a group if and only if the corresponding GroupMember object exists """ #*********************************************************************************************# #** Fields **# #*********************************************************************************************# class Meta: unique_together = (("user", "group"), ) user = models.ForeignKey('User', related_name='memberships') group = models.ForeignKey('Group', related_name='memberships') """ The date the user has been accepting into the group """ created = models.DateTimeField(auto_now_add=True) """ If sets to True, you can't be seen by non-members, regardless of the group's members_visibility setting """ hidden = models.BooleanField(default=False) """ An administrator has all rights, and can change other's rights (including other admins). Admins also have the power to acknowledge or ask for acknowledgment. """ is_administrator = models.BooleanField(default=False) """ The superadministrator must be unique. He is an admin whose rights can't be changed by other admins. """
from django.db import models from sigma_core.importer import load_ressource GroupMember = load_ressource("GroupMember") Publication = load_ressource("Publication") class SharedPublication(models.Model): """ This model is used to represent any kind of user's group (friends, coworkers, schools, etc...) """ #*********************************************************************************************# #** Fields **# #*********************************************************************************************# # Liste des champs de l'objet publication = models.ForeignKey("Publication", related_name='shared') group = models.ForeignKey("Group", related_name='shared_publications') approved = models.BooleanField(default=True) date = models.DateTimeField(auto_now_add=True) def __str__(self): return self.publication.title #*********************************************************************************************# #** Getters **# #*********************************************************************************************# @staticmethod
from rest_framework import status from rest_framework.decorators import detail_route from rest_framework.exceptions import NotFound, PermissionDenied, ValidationError from rest_framework.response import Response from sigma_core.views.sigma_viewset import SigmaViewSet from sigma_core.importer import load_ressource Acknowledgment = load_ressource("Acknowledgment") AcknowledgmentInvitation = load_ressource("AcknowledgmentInvitation") class AcknowledgmentInvitationViewSet(SigmaViewSet): serializer_class = AcknowledgmentInvitation.serializer queryset = AcknowledgmentInvitation.model.objects.all() #*********************************************************************************************# #** Read actions **# #*********************************************************************************************# def retrieve(self, request, pk): """ REST retrieve action. Used to retrieve an invitation. """ return self.handle_action_pk('retrieve', request, pk) #*********************************************************************************************# #** Write actions **# #*********************************************************************************************# def create(self, request):
from rest_framework import serializers from sigma_core.importer import load_ressource Comment = load_ressource("Comment") class CommentSerializer(serializers.ModelSerializer): class Meta: model = Comment.model exclude = ()
from rest_framework import status from rest_framework.decorators import detail_route from sigma_core.views.sigma_viewset import SigmaViewSet from sigma_core.importer import load_ressource GroupField = load_ressource("GroupField") class GroupFieldViewSet(SigmaViewSet): serializer_class = GroupField.serializer queryset = GroupField.model.objects.all() #*********************************************************************************************# #** Read actions **# #*********************************************************************************************# def retrieve(self, request, pk): """ REST retrieve action. Used to retrieve a group_field. """ return self.handle_action_pk('retrieve', request, pk) #*********************************************************************************************# #** Write actions **# #*********************************************************************************************# def create(self, request): """ REST create action. Used to create a Group Field. If succeeded, returns HTTP_201_CREATED with the newly created Group field object.
from django.db import models from django.contrib.auth.models import AbstractBaseUser, BaseUserManager from sigma_core.importer import load_ressource UserConnection = load_ressource("UserConnection") # TODO : Add unique username for frontends URLs # Basic user manager required by Django class UserManager(BaseUserManager): def get_queryset(self): return super().get_queryset() def create_user(self, email, lastname, firstname, password=None): if not email: raise ValueError('Users must have an email address') user = self.model(email=self.normalize_email(email), lastname=lastname, firstname=firstname) user.set_password(password) user.save() return user def create_superuser(self, email, lastname, firstname, password): user = self.create_user(email, lastname, firstname, password) user.is_superuser = True user.is_staff = True user.save() return user
from rest_framework import serializers from sigma_core.importer import load_ressource Search = load_ressource("Search") Group = load_ressource("Group") GroupMember = load_ressource("GroupMember") User = load_ressource("User") class SearchSerializer(serializers.Serializer): """ Basic default serializer for a Search. """ user = User.serializer(many=True) group = Group.serializer(many=True)
from django.db import models from sigma_core.importer import load_ressource GroupMember = load_ressource("GroupMember") Acknowledgment = load_ressource("Acknowledgment") class Group(models.Model): """ This model is used to represent any kind of user's group (friends, coworkers, schools, etc...) """ #*********************************************************************************************# #** Fields **# #*********************************************************************************************# name = models.CharField(max_length=254) description = models.TextField(blank=True) is_protected = models.BooleanField( default=False) # if True, the Group cannot be deleted """ Determine whether one can ask to join the group, or must be invited """ can_anyone_ask = models.BooleanField(default=False) """ Determine whether one can directly join the group, or must send an invitation """ need_validation_to_join = models.BooleanField(default=False) VISIBILITY_PUBLIC = 0 VISIBILITY_NORMAL = 1 VISIBILITY_PRIVATE = 2 POSSIBLE_VISIBILITIES = ( (0, 'Public'), (1, 'Normal'),
from rest_framework import serializers from sigma_core.importer import load_ressource Group = load_ressource("Group") class GroupSerializer(serializers.ModelSerializer): """ Basic default serializer for a Group. Include all fields """ class Meta: model = Group.model fields = ('pk', 'name', 'description', 'is_protected', 'can_anyone_ask', 'need_validation_to_join', 'members_visibility', 'group_visibility')
from rest_framework import status from rest_framework.decorators import detail_route from rest_framework.exceptions import NotFound, PermissionDenied, ValidationError from rest_framework.response import Response from sigma_core.views.sigma_viewset import SigmaViewSet from sigma_core.importer import Sigma, load_ressource GroupInvitation = load_ressource("GroupInvitation") GroupMember = load_ressource("GroupMember") class GroupInvitationViewSet(SigmaViewSet): serializer_class = GroupInvitation.serializer queryset = GroupInvitation.model.objects.all() #*********************************************************************************************# #** Read actions **# #*********************************************************************************************# def list(self, request): """ REST list action. Used to list all of a user's invitation. """ return self.handle_action_list( request, GroupInvitation.model.get_user_invitations_qs) def retrieve(self, request, pk): """ REST retrieve action. Used to retrieve an invitation. """
from rest_framework import serializers from sigma_core.importer import load_ressource GroupInvitation = load_ressource("GroupInvitation") class GroupInvitationSerializer(serializers.ModelSerializer): """ Basic default serializer for an Invitation. Include all fields """ class Meta: model = GroupInvitation.model fields = ('group', 'invitee', 'issued_by_invitee', 'date') required = ('group', 'invitee', 'issued_by_invitee')
from rest_framework import serializers from sigma_core.importer import load_ressource Tag = load_ressource("Tag") class TagSerializer(serializers.ModelSerializer): class Meta: model = Tag.model exclude = ()
from rest_framework import status from rest_framework.decorators import detail_route from sigma_core.views.sigma_viewset import SigmaViewSet from sigma_core.importer import Sigma, load_ressource Group = load_ressource("Group") GroupMember = load_ressource("GroupMember") User = load_ressource("User") Search = load_ressource("Search") AcknowledgmentInvitation = load_ressource("AcknowledgmentInvitation") class SearchViewSet(SigmaViewSet): serializer_class = Search.serializer queryset = Group.model.objects.all() #to avoid errors #*********************************************************************************************# #** Read actions **# #*********************************************************************************************# def list(self, request): """ REST list action. Used to list all groups a user can see. """ word = request.data["string"] group_qs = Group.objects.filter(name__contains=word) user_qs = User.objects.filter(name__contains=word) group_serializer = Group.serializer(group_qs, many=True) user_serializer = User.serializer(user_qs, many=True)
from rest_framework import status from rest_framework.decorators import detail_route from sigma_core.views.sigma_viewset import SigmaViewSet from sigma_core.importer import load_ressource Chat = load_ressource("Chat") ChatMember = load_ressource("ChatMember") ChatMessage = load_ressource("ChatMessage") class ChatViewSet(SigmaViewSet): serializer_class = Chat.serializer queryset = Chat.model.objects.all() #*********************************************************************************************# #** Read actions **# #*********************************************************************************************# def retrieve(self, request, pk): """ REST retrieve action. Used to retrieve a chat. """ return self.handle_action_pk('retrieve', request, pk) @detail_route(methods=['get']) def list_chat_members(self, request, pk): """ REST list action. Used to list the chat members of a chat that contains the user. """ return serialized_response(
from rest_framework import status from rest_framework.decorators import detail_route from rest_framework.exceptions import NotFound, PermissionDenied, ValidationError from rest_framework.response import Response from sigma_core.views.sigma_viewset import SigmaViewSet from sigma_core.importer import Sigma, load_ressource GroupMember = load_ressource("GroupMember") UserConnection = load_ressource("UserConnection") class GroupMemberViewSet(SigmaViewSet): serializer_class = GroupMember.serializer queryset = GroupMember.model.objects.all() #*********************************************************************************************# #** Read actions **# #*********************************************************************************************# def list(self, request): """ REST list action. Used to list all of a user's membership. """ return self.handle_action_list( request, GroupMember.model.get_user_memberships_qs) def retrieve(self, request, pk): """ REST retrieve action. Used to retrieve a membership.
from rest_framework import status from rest_framework.decorators import detail_route from sigma_core.views.sigma_viewset import SigmaViewSet from sigma_core.importer import Sigma, load_ressource GroupFieldValue = load_ressource("GroupFieldValue") class GroupFieldValueViewSet(SigmaViewSet): serializer_class = GroupFieldValue.serializer queryset = GroupFieldValue.model.objects.all() #*********************************************************************************************# #** Read actions **# #*********************************************************************************************# def retrieve(self, request, pk): """ REST retrieve action. Used to retrieve a group field value. """ return self.handle_action_pk('retrieve', request, pk) #*********************************************************************************************# #** Write actions **# #*********************************************************************************************# def create(self, request): """ REST create action. Used to create a Group Field. If succeeded, returns HTTP_201_CREATED with the newly created Group field value object. TODO : create possible only if multiple allowed
from rest_framework import status from rest_framework.decorators import detail_route from sigma_core.views.sigma_viewset import SigmaViewSet from sigma_core.importer import load_ressource Publication = load_ressource("Publication") SharedPublication = load_ressource("SharedPublication") Group = load_ressource("Group") class SharedPublicationViewSet(SigmaViewSet): serializer_class = SharedPublication.serializer queryset = SharedPublication.model.objects.all() #*********************************************************************************************# #** Read actions **# #*********************************************************************************************# def list(self, request): return self.handle_action_list( request, SharedPublication.model.get_publications_user) def retrieve(self, request, pk): """ REST retrieve action. Used to retrieve a chat. """ return self.handle_action_pk('retrieve', request, pk) @detail_route(methods=['get']) def list_publications_group(self, request, pk):