Add site dynamic configs api

remotes/origin/hasaccess
Ivlev Denis 8 years ago
parent d8da3dd7e6
commit 883dfda147
  1. 38
      api/v1/serializers/config.py
  2. 7
      api/v1/urls.py
  3. 22
      api/v1/views.py

@ -0,0 +1,38 @@
from constance import config
from constance.admin import get_values, ConstanceForm
from rest_framework import serializers
from rest_framework.fields import SkipField
from collections import OrderedDict
def _set_constance_value(key, value):
form = ConstanceForm(initial=get_values())
field = form.fields[key]
clean_value = field.clean(field.to_python(value))
setattr(config, key, clean_value)
class ConfigSerializer(serializers.Serializer):
INSTAGRAM_CLIENT_ACCESS_TOKEN = serializers.CharField(required=False)
INSTAGRAM_CLIENT_SECRET = serializers.CharField(required=False)
INSTAGRAM_RESULTS_TAG = serializers.CharField(required=False)
INSTAGRAM_RESULTS_PATH = serializers.CharField(required=False)
SERVICE_COMMISSION = serializers.IntegerField(required=False)
def to_representation(self, instance):
ret = OrderedDict()
fields = self._readable_fields
for field in fields:
attribute = instance.get(field.field_name)
ret[field.field_name] = field.to_representation(attribute)
return ret
def to_internal_value(self, data):
ret = OrderedDict(get_values())
for k, v in data.items():
ret[k] = v
return ret
def update(self, instance, validated_data):
for k, v in validated_data.items():
_set_constance_value(k, v)

@ -8,7 +8,7 @@ from drf_yasg import openapi
from .auth import ObtainToken
from .views import (
AuthorBalanceViewSet,
AuthorBalanceViewSet, ConfigViewSet,
CategoryViewSet, CourseViewSet,
MaterialViewSet, LikeViewSet,
ImageViewSet, TextViewSet,
@ -38,6 +38,8 @@ router.register(r'school-schedules', SchoolScheduleViewSet, base_name='school-sc
router.register(r'users', UserViewSet, base_name='users')
# router.register(r'configs', ConfigViewSet, base_name='configs')
schema_view = get_schema_view(
openapi.Info(
@ -51,9 +53,10 @@ schema_view = get_schema_view(
)
urlpatterns = [
path('api-token-auth/', ObtainToken.as_view(), name='api-token-auth'),
path('configs/', ConfigViewSet.as_view(), name='configs'),
path('swagger(<str:format>.json|.yaml)', schema_view.without_ui(cache_timeout=None), name='schema-json'),
path('swagger/', schema_view.with_ui('swagger', cache_timeout=None), name='schema-swagger-ui'),
path('redoc/', schema_view.with_ui('redoc', cache_timeout=None), name='schema-redoc'),
path('api-token-auth/', ObtainToken.as_view(), name='api-token-auth'),
path('', include((router.urls, 'api-root')), name='api-root'),
]

@ -1,12 +1,16 @@
from constance.admin import get_values
from django.contrib.auth import get_user_model
from rest_framework import status
from rest_framework import viewsets
from rest_framework import views, viewsets
from rest_framework import generics
from rest_framework.decorators import detail_route, list_route
from rest_framework.response import Response
from . import ExtendedModelViewSet
from .serializers.config import ConfigSerializer
from .serializers.course import (
CategorySerializer, LikeSerializer,
CourseSerializer, CourseCreateSerializer,
@ -38,6 +42,7 @@ from apps.content.models import (
)
from apps.payment.models import AuthorBalance
from apps.school.models import SchoolSchedule
User = get_user_model()
@ -309,3 +314,18 @@ class SchoolScheduleViewSet(ExtendedModelViewSet):
queryset = SchoolSchedule.objects.all()
serializer_class = SchoolScheduleSerializer
permission_classes = (IsAdmin,)
class ConfigViewSet(generics.RetrieveUpdateAPIView):
serializer_class = ConfigSerializer
permission_classes = (IsAdmin,)
def retrieve(self, request, *args, **kwargs):
serializer = ConfigSerializer(get_values())
return Response(serializer.data)
def patch(self, request, *args, **kwargs):
serializer = ConfigSerializer(data=request.data)
if serializer.is_valid():
serializer.update(get_values(), serializer.validated_data)
return Response(serializer.data)

Loading…
Cancel
Save