Skip to content
Snippets Groups Projects
Commit ae202ddf authored by Hugh Dickinson's avatar Hugh Dickinson
Browse files

Implemented DB model and query views for accounts app.

parent 8628341d
No related branches found
No related tags found
3 merge requests!41Esap gateway query,!39Esap gateway zooniverse,!38Esap gateway zooniverse
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",
]
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))]
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)
......@@ -13,19 +13,21 @@ class AccountsRouter:
"""
Writes always go to 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 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
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
from django.shortcuts import render
# Create your views here.
......@@ -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')
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'
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment