Skip to content
Snippets Groups Projects
Commit fb4d66e0 authored by Thibaud Duquennoy's avatar Thibaud Duquennoy
Browse files

Add PATCH to Access-Control-Allow-Methods and add a new field (LDPUrlField)

feature: add field to represent ids of resources (#56)
update: PATCH method include in Access-Control-Allow-Methods (#72)
parent 9b84c80c
No related branches found
No related tags found
1 merge request!25Url id field
Pipeline #756 failed with stage
in 1 minute and 22 seconds
from django.db import models
from rest_framework import fields
class IdURLField (fields.URLField):
def to_representation(self, value):
str = super(IdURLField, self).to_representation(value)
return {'@id': str}
class LDPUrlField (models.URLField):
pass
from django.conf import settings from django.conf import settings
from django.db import models from django.db import models
from django.urls import get_resolver from django.urls import get_resolver
from rest_framework import fields
class Model(models.Model): class Model(models.Model):
...@@ -70,13 +69,6 @@ class Model(models.Model): ...@@ -70,13 +69,6 @@ class Model(models.Model):
path = "{}/".format(path) path = "{}/".format(path)
return path return path
class LDPUrlField (fields.URLField):
def to_representation(self, value):
str = super(LDPUrlField, self).to_representation(value)
return {'@id': str}
class LDPSource(models.Model): class LDPSource(models.Model):
container = models.URLField() container = models.URLField()
federation = models.CharField(max_length=255) federation = models.CharField(max_length=255)
......
...@@ -11,7 +11,7 @@ from rest_framework.exceptions import ValidationError ...@@ -11,7 +11,7 @@ from rest_framework.exceptions import ValidationError
from rest_framework.fields import SkipField, empty from rest_framework.fields import SkipField, empty
from rest_framework.fields import get_error_detail, set_value from rest_framework.fields import get_error_detail, set_value
from rest_framework.relations import HyperlinkedRelatedField, ManyRelatedField, MANY_RELATION_KWARGS from rest_framework.relations import HyperlinkedRelatedField, ManyRelatedField, MANY_RELATION_KWARGS
from rest_framework.serializers import HyperlinkedModelSerializer, ListSerializer from rest_framework.serializers import HyperlinkedModelSerializer, ListSerializer, ModelSerializer
from rest_framework.settings import api_settings from rest_framework.settings import api_settings
from rest_framework.utils.field_mapping import get_nested_relation_kwargs from rest_framework.utils.field_mapping import get_nested_relation_kwargs
from rest_framework.utils.serializer_helpers import ReturnDict from rest_framework.utils.serializer_helpers import ReturnDict
...@@ -22,8 +22,7 @@ from rest_framework.serializers import HyperlinkedModelSerializer, ListSerialize ...@@ -22,8 +22,7 @@ from rest_framework.serializers import HyperlinkedModelSerializer, ListSerialize
from rest_framework.utils.field_mapping import get_nested_relation_kwargs from rest_framework.utils.field_mapping import get_nested_relation_kwargs
from rest_framework.utils.serializer_helpers import ReturnDict from rest_framework.utils.serializer_helpers import ReturnDict
from django.db import models as django_models from djangoldp.fields import LDPUrlField, IdURLField
from djangoldp import models
class LDListMixin: class LDListMixin:
def to_internal_value(self, data): def to_internal_value(self, data):
...@@ -169,7 +168,7 @@ class LDPSerializer(HyperlinkedModelSerializer): ...@@ -169,7 +168,7 @@ class LDPSerializer(HyperlinkedModelSerializer):
url_field_name = "@id" url_field_name = "@id"
serializer_related_field = JsonLdRelatedField serializer_related_field = JsonLdRelatedField
serializer_url_field = JsonLdIdentityField serializer_url_field = JsonLdIdentityField
ModelSerializer.serializer_field_mapping [django_models.URLField] = models.LDPUrlField ModelSerializer.serializer_field_mapping [LDPUrlField] = IdURLField
@property @property
......
...@@ -32,9 +32,16 @@ class TestUserPermissions(TestCase): ...@@ -32,9 +32,16 @@ class TestUserPermissions(TestCase):
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 201)
def test_request_options_update_with_user(self): def test_request_options_update_with_user(self):
request = self.factory.options('/job-offers/') request = self.factory.options('/job-offers/' + str(self.job.pk) + "/")
request.user = self.user request.user = self.user
my_view = LDPViewSet.as_view({'options': 'update'}, model=JobOffer, nested_fields=["skills"], my_view = LDPViewSet.as_view({'options': 'update'}, model=JobOffer, nested_fields=["skills"],
permission_classes=[AnonymousReadOnly]) permission_classes=[AnonymousReadOnly])
response = my_view(request) response = my_view(request, pk=self.job.pk)
self.assertEqual(response.status_code, 201) self.assertEqual(response.status_code, 200)
def test_request_patch_with_user(self):
request = self.factory.patch('/job-offers/' + str(self.job.pk) + "/")
request.user = self.user
my_view = LDPViewSet.as_view({'patch': 'partial_update'}, model=JobOffer, nested_fields=["skills"])
response = my_view(request, pk=self.job.pk)
self.assertEqual(response.status_code, 200)
\ No newline at end of file
...@@ -134,7 +134,7 @@ class LDPViewSet(LDPViewSetGenerator): ...@@ -134,7 +134,7 @@ class LDPViewSet(LDPViewSetGenerator):
def dispatch(self, request, *args, **kwargs): def dispatch(self, request, *args, **kwargs):
response = super(LDPViewSet, self).dispatch(request, *args, **kwargs) response = super(LDPViewSet, self).dispatch(request, *args, **kwargs)
response["Access-Control-Allow-Origin"] = request.META.get('HTTP_ORIGIN') response["Access-Control-Allow-Origin"] = request.META.get('HTTP_ORIGIN')
response["Access-Control-Allow-Methods"] = "POST,PUT" response["Access-Control-Allow-Methods"] = "POST,PUT, PATCH"
response["Access-Control-Allow-Headers"] = "Content-Type, if-match" response["Access-Control-Allow-Headers"] = "Content-Type, if-match"
response["Access-Control-Allow-Credentials"] = 'true' response["Access-Control-Allow-Credentials"] = 'true'
response["Accept-Post"] = "application/ld+json" response["Accept-Post"] = "application/ld+json"
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment