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

Initial implementation of user profile.

parent ccacfdff
No related branches found
No related tags found
2 merge requests!43Esap gateway query,!42Esap gateway rucio
...@@ -36,6 +36,51 @@ class EsapShoppingItemSerializer(serializers.HyperlinkedModelSerializer): ...@@ -36,6 +36,51 @@ class EsapShoppingItemSerializer(serializers.HyperlinkedModelSerializer):
class EsapUserProfileSerializer(serializers.HyperlinkedModelSerializer): class EsapUserProfileSerializer(serializers.HyperlinkedModelSerializer):
shopping_cart = EsapShoppingItemSerializer(
many=True,
# view_name="shopping-items",
read_only=False,
# queryset=EsapShoppingItem.objects.all(),
)
def update(self, instance, validated_data):
# Do not allow the user name to be updated - it is the primary key
_ = validated_data.pop("user_name", None)
for m2m_field in [
"software_repositories",
"compute_resources",
"shopping_cart",
]:
field_data = validated_data.pop(m2m_field, None)
if field_data is not None:
if len(field_data[0]) == 0:
raise RuntimeError(f"WTF! {validated_data}")
field_instances = [
getattr(instance, m2m_field).model.objects.create(
item_data=str(dict(field_datum))
)
for field_datum in field_data
]
getattr(instance, m2m_field).add(*field_instances)
for key, value in validated_data.items():
setattr(instance, key, value)
instance.save()
return instance
def to_internal_value(self, data):
internal_value = super().to_internal_value(data)
for m2m_field in [
"software_repositories",
"compute_resources",
"shopping_cart",
]:
field_data = data.get(m2m_field, None)
if field_data is not None:
internal_value.update({m2m_field: field_data})
return internal_value
class Meta: class Meta:
model = EsapUserProfile model = EsapUserProfile
fields = [ fields = [
......
from rest_framework import viewsets from rest_framework import viewsets
from rest_framework import permissions
from .serializers import * from .serializers import *
from ..models import * from ..models import *
...@@ -10,7 +11,7 @@ class EsapQuerySchemaViewSet(viewsets.ModelViewSet): ...@@ -10,7 +11,7 @@ class EsapQuerySchemaViewSet(viewsets.ModelViewSet):
queryset = EsapQuerySchema.objects.all().order_by("schema_name") queryset = EsapQuerySchema.objects.all().order_by("schema_name")
serializer_class = EsapQuerySchemaSerializer serializer_class = EsapQuerySchemaSerializer
permission_classes = [] permission_classes = [permissions.AllowAny]
class EsapComputeResourceViewSet(viewsets.ModelViewSet): class EsapComputeResourceViewSet(viewsets.ModelViewSet):
...@@ -20,7 +21,7 @@ class EsapComputeResourceViewSet(viewsets.ModelViewSet): ...@@ -20,7 +21,7 @@ class EsapComputeResourceViewSet(viewsets.ModelViewSet):
queryset = EsapComputeResource.objects.all().order_by("resource_name") queryset = EsapComputeResource.objects.all().order_by("resource_name")
serializer_class = EsapComputeResourceSerializer serializer_class = EsapComputeResourceSerializer
permission_classes = [] permission_classes = [permissions.AllowAny]
class EsapSoftwareRepositoryViewSet(viewsets.ModelViewSet): class EsapSoftwareRepositoryViewSet(viewsets.ModelViewSet):
...@@ -30,7 +31,7 @@ class EsapSoftwareRepositoryViewSet(viewsets.ModelViewSet): ...@@ -30,7 +31,7 @@ class EsapSoftwareRepositoryViewSet(viewsets.ModelViewSet):
queryset = EsapSoftwareRepository.objects.all().order_by("repository_name") queryset = EsapSoftwareRepository.objects.all().order_by("repository_name")
serializer_class = EsapSoftwareRepositorySerializer serializer_class = EsapSoftwareRepositorySerializer
permission_classes = [] permission_classes = [permissions.AllowAny]
class EsapShoppingItemViewSet(viewsets.ModelViewSet): class EsapShoppingItemViewSet(viewsets.ModelViewSet):
...@@ -40,7 +41,7 @@ class EsapShoppingItemViewSet(viewsets.ModelViewSet): ...@@ -40,7 +41,7 @@ class EsapShoppingItemViewSet(viewsets.ModelViewSet):
queryset = EsapShoppingItem.objects.all() queryset = EsapShoppingItem.objects.all()
serializer_class = EsapShoppingItemSerializer serializer_class = EsapShoppingItemSerializer
permission_classes = [] permission_classes = [permissions.AllowAny]
class EsapUserProfileViewSet(viewsets.ModelViewSet): class EsapUserProfileViewSet(viewsets.ModelViewSet):
...@@ -50,9 +51,9 @@ class EsapUserProfileViewSet(viewsets.ModelViewSet): ...@@ -50,9 +51,9 @@ class EsapUserProfileViewSet(viewsets.ModelViewSet):
queryset = EsapUserProfile.objects.all().order_by("user_name") queryset = EsapUserProfile.objects.all().order_by("user_name")
serializer_class = EsapUserProfileSerializer serializer_class = EsapUserProfileSerializer
permission_classes = [] permission_classes = [permissions.AllowAny]
def get_queryset(self): # def get_queryset(self):
# Returns nothing if no user_name supplied instead of all # # Returns nothing if no user_name supplied instead of all
user_name = self.request.query_params.get("user_name", None) # user_name = self.request.query_params.get("user_name", None)
return EsapUserProfile.objects.filter(user_name=user_name) # return EsapUserProfile.objects.filter(user_name=user_name)
...@@ -69,7 +69,7 @@ class EsapShoppingItem(models.Model): ...@@ -69,7 +69,7 @@ class EsapShoppingItem(models.Model):
class EsapUserProfile(models.Model): class EsapUserProfile(models.Model):
user_name = models.CharField("Username", max_length=50) user_name = models.CharField("Username", max_length=50, primary_key=True)
full_name = models.CharField("Full Name", max_length=100, null=True) full_name = models.CharField("Full Name", max_length=100, null=True)
user_email = models.EmailField("User Email") user_email = models.EmailField("User Email")
query_schema = models.ForeignKey( query_schema = models.ForeignKey(
...@@ -86,7 +86,7 @@ class EsapUserProfile(models.Model): ...@@ -86,7 +86,7 @@ class EsapUserProfile(models.Model):
to=EsapComputeResource, verbose_name="Compute Resources", blank=True to=EsapComputeResource, verbose_name="Compute Resources", blank=True
) )
shopping_cart = models.ManyToManyField( shopping_cart = models.ManyToManyField(
to=EsapShoppingItem, verbose_name="Shopping Cart", blank=True to=EsapShoppingItem, verbose_name="Shopping Cart", blank=True,
) )
def __unicode__(self): def __unicode__(self):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment