-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #218 from bounswe/events-with-activitystream
Events with activitystream (resolves #213)
- Loading branch information
Showing
11 changed files
with
148 additions
and
107 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,18 +1,7 @@ | ||
from rest_framework import serializers | ||
from .models import EventPost,Post | ||
""" | ||
class PostSerializer(serializers.ModelSerializer): | ||
class Meta: | ||
model = EventPost | ||
fields = ['date', 'duration', 'sport', 'age_group','player_capacity','spec_capacity'] | ||
""" | ||
class PostSerializer(serializers.ModelSerializer): | ||
class Meta: | ||
model = Post | ||
fields = '__all__' | ||
|
||
from .models import EventPost, Post | ||
|
||
class EventPostSerializer(PostSerializer): | ||
class EventSerializer(serializers.ModelSerializer): | ||
class Meta: | ||
model = EventPost | ||
fields = '__all__' | ||
fields = "__all__" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,9 +1,7 @@ | ||
from django.urls import path | ||
from . import views | ||
from rest_framework.routers import SimpleRouter | ||
|
||
urlpatterns=[ | ||
|
||
path('<int:id>/', views.EventPostView.as_view(), name="EventPost"), | ||
path('all/', views.EventPostViewAll.as_view(), name="EventPostAll"), | ||
path('', views.EventPostPostView.as_view(), name="EventPostPost"), | ||
] | ||
router = SimpleRouter() | ||
router.register(r'posts', views.EventViewSet) | ||
urlpatterns = router.urls |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,56 +1,60 @@ | ||
#from typing import ValuesView | ||
from django.shortcuts import render | ||
from django.http import HttpResponse | ||
from rest_framework.response import Response | ||
from rest_framework.decorators import api_view | ||
from rest_framework import status | ||
|
||
from rest_framework import generics | ||
from .models import EventPost, Post | ||
from .serializers import EventPostSerializer, PostSerializer | ||
from rest_framework.views import APIView | ||
from django.forms.models import model_to_dict | ||
|
||
|
||
|
||
|
||
|
||
class EventPostView(APIView): | ||
|
||
def get(self, request, id): | ||
try: | ||
eventpost = EventPost.objects.get(id=id) | ||
except: | ||
return Response(status=status.HTTP_204_NO_CONTENT) | ||
return Response(EventPostSerializer(eventpost).data) | ||
|
||
class EventPostViewAll(APIView): | ||
|
||
def get(self, request): | ||
try: | ||
eventpost = EventPost.objects.all() | ||
except: | ||
return Response(status=status.HTTP_204_NO_CONTENT) | ||
eventserializer=EventPostSerializer(eventpost,many=True) | ||
|
||
return Response(eventserializer.data) | ||
|
||
|
||
class EventPostPostView(APIView): | ||
|
||
def post(self, request): | ||
serializer = EventPostSerializer(data=request.data) | ||
if serializer.is_valid(): | ||
serializer.save() | ||
return Response(serializer.data, status=status.HTTP_201_CREATED) | ||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST) | ||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
|
||
from .serializers import EventSerializer | ||
from rest_framework_simplejwt.authentication import JWTAuthentication | ||
from django.http import JsonResponse | ||
from rest_framework import status | ||
from rest_framework.response import Response | ||
from rest_framework import viewsets | ||
|
||
|
||
class EventViewSet(viewsets.ModelViewSet): | ||
queryset = EventPost.objects.all() | ||
serializer_class = EventSerializer | ||
JWTauth = JWTAuthentication() | ||
lookup_field = "id" | ||
|
||
def wrap(self, request, data): | ||
response = \ | ||
{"@context": "https://www.w3.org/ns/activitystreams", "summary": str(request.user) + " created an event", | ||
"type": "Create", | ||
"actor": {"type": "Person", "name": str(request.user)}, "object": {"type": "Event", | ||
"name": "A Simple Event", | ||
"postId": data["id"], | ||
"ownerId": data["owner"], | ||
"content": data["content"], | ||
"title": data["title"], | ||
"creationDate": data["creation_date"], | ||
"numberOfClicks": 0, | ||
"location": { | ||
"name": data["location"], | ||
"type": "Place", | ||
"longitude": data["longitude"], | ||
"latitude": data["latitude"], | ||
"units": "m" | ||
}}, "eventDate": data["date"], | ||
"eventSport": data["sport"], "eventMinAge": data["min_age"], "eventMaxAge": data["max_age"], | ||
"eventMinSkillLevel": data["min_skill_level"], "eventMaxSkillLevel": data["max_skill_level"], | ||
"eventPlayerCapacity": data["player_capacity"], "eventSpectatorCapacity": data["spec_capacity"], | ||
"eventApplicants": data["applicants"], "eventPlayers": data["players"]} | ||
|
||
return response | ||
|
||
def authenticate(self): | ||
user, _ = self.JWTauth.authenticate(self.request) | ||
return user.id == self.request.data["owner"] | ||
|
||
def retrieve(self, request, *args, **kwargs): | ||
instance = self.get_object() | ||
serializer = self.get_serializer(instance) | ||
return Response(self.wrap(request, serializer.data)) | ||
|
||
def create(self, request, *args, **kwargs): | ||
if self.authenticate(): | ||
serializer = self.get_serializer(data=request.data) | ||
serializer.is_valid(raise_exception=True) | ||
self.perform_create(serializer) | ||
headers = self.get_success_headers(serializer.data) | ||
return Response(self.wrap(request, serializer.data), status=status.HTTP_201_CREATED, headers=headers) | ||
else: | ||
return JsonResponse(status=401, data={'detail': 'Unauthorized.'}) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,7 +1,8 @@ | ||
from django.urls import path | ||
from . import views | ||
|
||
urlpatterns = [ | ||
path('<str:username>/', views.ProfileView.as_view(), name="ProfileGet"), | ||
path('<str:username>/update', views.ProfileUpdateView.as_view(), name="ProfileUpdate") | ||
] | ||
from rest_framework.routers import SimpleRouter | ||
|
||
router = SimpleRouter() | ||
router.register(r'users', views.ProfileViewSet) | ||
urlpatterns = router.urls |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,35 +1,61 @@ | ||
from django.shortcuts import render | ||
|
||
# Create your views here. | ||
from rest_framework import status | ||
from rest_framework import generics | ||
from rest_framework.response import Response | ||
from authentication.models import User | ||
from .serializers import ProfileSerializer, ProfileUpdateSerializer | ||
from rest_framework import status, permissions | ||
from .serializers import ProfileSerializer | ||
from rest_framework_simplejwt.authentication import JWTAuthentication | ||
from django.http import HttpResponse | ||
|
||
|
||
from django.http import JsonResponse | ||
from rest_framework import viewsets | ||
from rest_framework.response import Response | ||
|
||
|
||
class ProfileView(generics.RetrieveAPIView): | ||
class ProfileViewSet(viewsets.ModelViewSet): | ||
queryset = User.objects.all() | ||
serializer_class = ProfileSerializer | ||
lookup_field = 'username' | ||
|
||
class ProfileUpdateView(generics.RetrieveUpdateAPIView): | ||
queryset = User.objects.all() | ||
serializer_class = ProfileUpdateSerializer | ||
lookup_field = 'username' | ||
JWTauth = JWTAuthentication() | ||
|
||
def authenticate(self): | ||
user, _ = self.JWTauth.authenticate(self.request) | ||
return user.username == self.kwargs['username'] | ||
|
||
def put(self, request, *args, **kwargs): | ||
def update(self, request, *args, **kwargs): | ||
if self.authenticate(): | ||
return self.update(request, *args, **kwargs) | ||
partial = kwargs.pop('partial', False) | ||
instance = self.get_object() | ||
serializer = self.get_serializer(instance, data=request.data, partial=partial) | ||
serializer.is_valid(raise_exception=True) | ||
self.perform_update(serializer) | ||
|
||
if getattr(instance, '_prefetched_objects_cache', None): | ||
# If 'prefetch_related' has been applied to a queryset, we need to | ||
# forcibly invalidate the prefetch cache on the instance. | ||
instance._prefetched_objects_cache = {} | ||
|
||
return Response(serializer.data) | ||
else: | ||
return HttpResponse('Unauthorized', status=401) | ||
return JsonResponse(status=401, data={'detail':'Unauthorized.'}) | ||
|
||
|
||
|
||
# class ProfileView(generics.RetrieveAPIView): | ||
# queryset = User.objects.all() | ||
# serializer_class = ProfileSerializer | ||
# lookup_field = 'username' | ||
# | ||
# class ProfileUpdateView(generics.RetrieveUpdateAPIView): | ||
# queryset = User.objects.all() | ||
# serializer_class = ProfileUpdateSerializer | ||
# lookup_field = 'username' | ||
# JWTauth = JWTAuthentication() | ||
# | ||
# def authenticate(self): | ||
# user, _ = self.JWTauth.authenticate(self.request) | ||
# return user.username == self.kwargs['username'] | ||
# | ||
# def put(self, request, *args, **kwargs): | ||
# if self.authenticate(): | ||
# return self.update(request, *args, **kwargs) | ||
# else: | ||
# return JsonResponse(status=401, data={'detail':'Unauthorized.'}) |