diff --git a/esap/accounts/api/serializers.py b/esap/accounts/api/serializers.py index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..61995e373634d8ad6e36160544febf0b4ff5757d 100644 --- a/esap/accounts/api/serializers.py +++ b/esap/accounts/api/serializers.py @@ -0,0 +1,49 @@ +from rest_framework import serializers + +from ..models import * + + +class EsapQuerySchemaSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = EsapQuerySchema + fields = ["schema_name"] + + +class EsapComputeResourceSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = EsapComputeResource + fields = [ + "resource_name", + "resource_type", + "resource_url", # 'resource_metadata' + ] + + +class EsapSoftwareRepositorySerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = EsapSoftwareRepository + fields = [ + "repository_name", + "repository_type", + "repository_url", #'repository_metadata' + ] + + +class EsapShoppingItemSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = EsapShoppingItem + fields = ["item_data"] + + +class EsapUserProfileSerializer(serializers.HyperlinkedModelSerializer): + class Meta: + model = EsapUserProfile + fields = [ + "user_name", + "full_name", + "user_email", + "query_schema", + "software_repositories", + "compute_resources", + "shopping_cart", + ] diff --git a/esap/accounts/api/urls.py b/esap/accounts/api/urls.py index 7eab22293e65ab75106a8118fc26d5211dce79fd..1145dd1baaafd67509000a6a6f884c58eb4ab6aa 100644 --- a/esap/accounts/api/urls.py +++ b/esap/accounts/api/urls.py @@ -1,9 +1,12 @@ -from django.urls import path -from knox import views as knox_views -from .views import LoginView +from django.urls import include, path +from rest_framework import routers +from . import views -urlpatterns = [ - path(r'login/', LoginView.as_view(), name='knox_login'), - path(r'logout/', knox_views.LogoutView.as_view(), name='knox_logout'), - path(r'logoutall/', knox_views.LogoutAllView.as_view(), name='knox_logoutall'), -] \ No newline at end of file +router = routers.DefaultRouter() +router.register(r"query-schemas", views.EsapQuerySchemaViewSet) +router.register(r"compute-resources", views.EsapComputeResourceViewSet) +router.register(r"software-repositories", views.EsapSoftwareRepositoryViewSet) +router.register(r"shopping-items", views.EsapShoppingItemViewSet) +router.register(r"user-profiles", views.EsapUserProfileViewSet) + +urlpatterns = [path("", include(router.urls))] diff --git a/esap/accounts/api/views.py b/esap/accounts/api/views.py index 65ab8611f4e1feb1c9a26c8d47cc32e28fdbddf3..b25e4583c6e97c19683853da852c3f7fbaff48fe 100644 --- a/esap/accounts/api/views.py +++ b/esap/accounts/api/views.py @@ -1,15 +1,52 @@ -from django.contrib.auth import login +from rest_framework import viewsets +from .serializers import * +from ..models import * -from rest_framework import permissions -from rest_framework.authtoken.serializers import AuthTokenSerializer -from knox.views import LoginView as KnoxLoginView -class LoginView(KnoxLoginView): - permission_classes = (permissions.AllowAny,) +class EsapQuerySchemaViewSet(viewsets.ModelViewSet): + """ + API endpoint that allows EsapQuerySchemas to be viewed or edited. + """ - def post(self, request, format=None): - serializer = AuthTokenSerializer(data=request.data) - serializer.is_valid(raise_exception=True) - user = serializer.validated_data['user'] - login(request, user) - return super(LoginView, self).post(request, format=None) + queryset = EsapQuerySchema.objects.all().order_by("schema_name") + serializer_class = EsapQuerySchemaSerializer + + +class EsapComputeResourceViewSet(viewsets.ModelViewSet): + """ + API endpoint that allows EsapComputeResources to be viewed or edited. + """ + + queryset = EsapComputeResource.objects.all().order_by("resource_name") + serializer_class = EsapComputeResourceSerializer + + +class EsapSoftwareRepositoryViewSet(viewsets.ModelViewSet): + """ + API endpoint that allows EsapSoftwareRepositorys to be viewed or edited. + """ + + queryset = EsapSoftwareRepository.objects.all().order_by("repository_name") + serializer_class = EsapSoftwareRepositorySerializer + + +class EsapShoppingItemViewSet(viewsets.ModelViewSet): + """ + API endpoint that allows EsapShoppingItems to be viewed or edited. + """ + + queryset = EsapShoppingItem.objects.all() + serializer_class = EsapShoppingItemSerializer + + +class EsapUserProfileViewSet(viewsets.ModelViewSet): + """ + API endpoint that allows EsapUserProfiles to be viewed or edited. + """ + + queryset = EsapUserProfile.objects.all().order_by("user_name") + serializer_class = EsapUserProfileSerializer + + def get_queryset(self): + user_name = self.request.query_params.get("user_name", None) + return EsapUserProfile.objects.filter(user_name=user_name) diff --git a/esap/accounts/database_router.py b/esap/accounts/database_router.py index 41a96afed554bbdd17cc83937871b62f27859e8c..6366e1ecf40a40aa8a0c28c3154603c2bde8dd0d 100644 --- a/esap/accounts/database_router.py +++ b/esap/accounts/database_router.py @@ -13,19 +13,21 @@ class AccountsRouter: """ Writes always go to accounts. """ - return 'accounts' + if model._meta.app_label in self.route_app_labels: + return 'accounts' + def allow_relation(self, obj1, obj2, **hints): """ - Allow relations if a model in the accounts apps is - involved. + Allow relations if a both involved models are in the accounts + app. """ if ( - obj1._meta.app_label in self.route_app_labels or - obj2._meta.app_label in self.route_app_labels + obj1._state.db in self.route_app_labels and + obj2._state.db in self.route_app_labels ): - return True - return None + return True + return False def allow_migrate(self, db, app_label, model_name=None, **hints): """ @@ -34,4 +36,4 @@ class AccountsRouter: """ if app_label in self.route_app_labels: return db == 'accounts' - return None + return False diff --git a/esap/accounts/urls.py b/esap/accounts/urls.py deleted file mode 100644 index a5254c8f57841133976faf891460067db5360b2d..0000000000000000000000000000000000000000 --- a/esap/accounts/urls.py +++ /dev/null @@ -1,9 +0,0 @@ -from django.urls import path -from django.contrib.auth.views import LoginView -from django.contrib.auth.views import LogoutView - -urlpatterns = [ - path('login/', LoginView.as_view(), name='django_login'), - path('logout/', LogoutView.as_view(), name='django_logout'), - -] \ No newline at end of file diff --git a/esap/accounts/views.py b/esap/accounts/views.py deleted file mode 100644 index 91ea44a218fbd2f408430959283f0419c921093e..0000000000000000000000000000000000000000 --- a/esap/accounts/views.py +++ /dev/null @@ -1,3 +0,0 @@ -from django.shortcuts import render - -# Create your views here. diff --git a/esap/esap/settings/statics.py b/esap/esap/settings/statics.py index 8504abe207693f5c0e51b04286cb611ce58531e8..5635e5de1add810dc84bbd7426e87051ebaec04a 100644 --- a/esap/esap/settings/statics.py +++ b/esap/esap/settings/statics.py @@ -15,6 +15,7 @@ DEBUG = False INSTALLED_APPS = [ 'query', + 'accounts', 'django.contrib.staticfiles', ] @@ -23,4 +24,3 @@ INSTALLED_APPS = [ STATIC_URL = '/static/' STATIC_ROOT = os.path.join(BASE_DIR, 'static') - diff --git a/esap/query/database_router.py b/esap/query/database_router.py index 309667b332837a4e3e01c61932758da66d7e2b39..a975528a2b2627a1b02fbad69ef62b19f7711e0f 100644 --- a/esap/query/database_router.py +++ b/esap/query/database_router.py @@ -1,15 +1,15 @@ class QueryRouter: route_app_labels = {'query', 'auth', 'contenttypes', 'sessions', 'admin'} + custom_router_app_labels = {'ida', 'rucio', 'accounts', 'staging'} def db_for_read(self, model, **hints): - if model._meta.app_label in self.route_app_labels: -# return 'query' + if model._meta.app_label not in self.custom_router_app_labels: return 'default' def db_for_write(self, model, **hints): -# return 'query' - return 'default' + if model._meta.app_label not in self.custom_router_app_labels: + return 'default' def allow_relation(self, obj1, obj2, **hints): """ @@ -29,6 +29,5 @@ class QueryRouter: 'query' database. """ if app_label in self.route_app_labels: -# return db == 'query' return db == 'default' - return None \ No newline at end of file + return None