Skip to content

Commit

Permalink
Merge pull request #101 from oceanprotocol/increase-upload-size
Browse files Browse the repository at this point in the history
Adding error handling and logging
  • Loading branch information
jamiehewitt15 authored Nov 2, 2023
2 parents 6582a36 + f2ba959 commit 86e3869
Show file tree
Hide file tree
Showing 3 changed files with 113 additions and 59 deletions.
6 changes: 6 additions & 0 deletions server/oceandbs/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ class Storage(models.Model):
is_active = models.BooleanField(default=True)

def __str__(self):
print("Storage __str__ method called")
return self.type + " - " + self.description

class Meta:
Expand All @@ -40,6 +41,7 @@ class PaymentMethod(models.Model):
rpcEndpointUrl = models.URLField(max_length=2048, default="https://rpc-mumbai.maticvigil.com/")

def __str__(self):
print("PaymentMethod __str__ method called")
return self.chainId + " - " + str(self.storage)


Expand All @@ -49,6 +51,7 @@ class AcceptedToken(models.Model):
paymentMethod = models.ForeignKey(PaymentMethod, null=True, on_delete=models.CASCADE, related_name="acceptedTokens")

def __str__(self):
print("AcceptedToken __str__ method called")
return str(self.paymentMethod) + " - " + self.title + " - " + self.value


Expand All @@ -59,6 +62,7 @@ class Payment(models.Model):
paymentMethod = models.ForeignKey(PaymentMethod, null=True, on_delete=models.CASCADE, related_name="payments")

def nonce_computation():
print("Payment nonce_computation method called")
return timezone.now() - timezone.timedelta(days=7)

class Quote(models.Model):
Expand All @@ -74,6 +78,7 @@ class Quote(models.Model):
nonce = models.DateTimeField(default=nonce_computation())

def __str__(self):
print("Quote __str__ method called")
return str(self.storage) + " - " + self.tokenAddress

class Meta:
Expand All @@ -87,4 +92,5 @@ class File(models.Model):
length = models.BigIntegerField(default=0)

def __str__(self):
print("File __str__ method called")
return str(self.quote) + " - " + str(self.length)
84 changes: 55 additions & 29 deletions server/oceandbs/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,14 @@ class Meta:
fields = ['chainId', 'acceptedTokens']

def to_representation(self, instance):
representation = super().to_representation(instance)
representation['acceptedTokens'] = [{"title": token.title, "value": token.value} for token in instance.acceptedTokens.all()]
return representation
print("to_representation called in PaymentMethodSerializer")
try:
representation = super().to_representation(instance)
representation['acceptedTokens'] = [{"title": token.title, "value": token.value} for token in instance.acceptedTokens.all()]
return representation
except Exception as e:
print(f"Error in PaymentMethodSerializer to_representation: {e}")
raise e

class PaymentSerializer(serializers.ModelSerializer):
paymentMethod = PaymentMethodSerializer()
Expand Down Expand Up @@ -49,16 +54,24 @@ class Meta:
fields = ['type', 'description', 'url', 'payment']

def create(self, validated_data):
payment_method_data = validated_data.pop('payment')
storage = Storage.objects.create(**validated_data)

for method_data in payment_method_data:
accepted_tokens_data = method_data.pop('acceptedTokens')
method = PaymentMethod.objects.create(storage=storage, **method_data)
for accepted_token_data in accepted_tokens_data:
AcceptedToken.objects.create(paymentMethod=method, **accepted_token_data)

return storage
print("create called in CreateStorageSerializer")
try:
payment_method_data = validated_data.pop('payment')
storage = Storage.objects.create(**validated_data)
print(f"Storage created: {storage}")

for method_data in payment_method_data:
accepted_tokens_data = method_data.pop('acceptedTokens')
method = PaymentMethod.objects.create(storage=storage, **method_data)
print(f"PaymentMethod created: {method}")
for accepted_token_data in accepted_tokens_data:
AcceptedToken.objects.create(paymentMethod=method, **accepted_token_data)
print(f"AcceptedToken created with data: {accepted_token_data}")

return storage
except Exception as e:
print(f"Error in CreateStorageSerializer create: {e}")
raise e

class QuoteSerializer(serializers.ModelSerializer):
payment = PaymentSerializer()
Expand All @@ -69,19 +82,32 @@ class Meta:
fields = ['storage', 'tokenAmount', 'quoteId', 'duration', 'tokenAddress', 'approveAddress', 'status', 'files', 'payment']

def create(self, validated_data):
payment_data = validated_data.pop('payment')
files_data = validated_data.pop('files')
quote = Quote.objects.create(**validated_data)

payment_method_data = payment_data.pop('paymentMethod')
method = PaymentMethod.objects.filter(storage=validated_data['storage'], chainId=payment_method_data['chainId']).first()
payment_data['paymentMethod'] = method
payment = Payment.objects.create(quote=quote, **payment_data)

quote.payment = payment
quote.save()

for file_data in files_data:
File.objects.create(quote=quote, **file_data)

return quote
print("create called in QuoteSerializer")
try:
payment_data = validated_data.pop('payment')
files_data = validated_data.pop('files')
quote = Quote.objects.create(**validated_data)
print(f"Quote created: {quote}")

payment_method_data = payment_data.pop('paymentMethod')
method = PaymentMethod.objects.filter(storage=validated_data['storage'], chainId=payment_method_data['chainId']).first()
if method:
print(f"PaymentMethod found: {method}")
else:
print(f"No PaymentMethod found for chainId: {payment_method_data['chainId']}")

payment_data['paymentMethod'] = method
payment = Payment.objects.create(quote=quote, **payment_data)
print(f"Payment created: {payment}")

quote.payment = payment
quote.save()

for file_data in files_data:
File.objects.create(quote=quote, **file_data)
print(f"File created with data: {file_data}")

return quote
except Exception as e:
print(f"Error in QuoteSerializer create: {e}")
raise e
82 changes: 52 additions & 30 deletions server/oceandbs/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -344,37 +344,59 @@ def post(self, request):
if response is None:
print("No response was obtained from the API call.")

if response and response.status_code == 200:
response_data = json.loads(response.content)

data['storage'] = storage.pk
data['status'] = UPLOAD_CODE[1][0]
data['payment']['paymentMethod'] = {
'chainId': data['payment']['chainId']}
data['payment']['userAddress'] = data['userAddress']

data.update(response_data)

serializer = QuoteSerializer(data=data)
if serializer.is_valid():
quote = serializer.save()
return Response({
'quoteId': quote.quoteId,
'tokenAmount': quote.tokenAmount,
'approveAddress': quote.approveAddress,
'chainId': data['payment']['paymentMethod']['chainId'],
'tokenAddress': quote.tokenAddress
}, status=201)
try:
if response:
print("Response received.")

if response.status_code == 200:
print("Response status code is 200.")

try:
response_data = json.loads(response.content)
print("Response data successfully decoded from JSON.")
except json.JSONDecodeError as e:
print(f"Error decoding JSON: {e}")
return Response({'error': 'Invalid response format'}, status=500)

data['storage'] = storage.pk
data['status'] = UPLOAD_CODE[1][0]
data['payment']['paymentMethod'] = {'chainId': data['payment']['chainId']}
data['payment']['userAddress'] = data['userAddress']
data.update(response_data)

serializer = QuoteSerializer(data=data)
if serializer.is_valid():
print("Serializer is valid.")
try:
quote = serializer.save()
print("Quote saved successfully.")
return Response({
'quoteId': quote.quoteId,
'tokenAmount': quote.tokenAmount,
'approveAddress': quote.approveAddress,
'chainId': data['payment']['paymentMethod']['chainId'],
'tokenAddress': quote.tokenAddress
}, status=201)
except Exception as e:
print(f"Error saving quote: {e}")
return Response({'error': 'Error saving quote'}, status=500)
else:
print("Serializer validation failed.")
print(serializer.errors)
return Response(serializer.errors, status=400)
else:
print(f"Response status code is not 200. Status code: {response.status_code}")
try:
return Response(response.json(), status=400)
except Exception as e:
print(f"Error parsing response: {e}")
return JsonResponse({'error': 'Invalid response format'}, status=500)
else:
return Response(serializer.errors, status=400)
else:
try:
print('response: ', response)
return Response(response, status=400)
except Exception as e:
return JsonResponse({'error': f'An unexpected error occurred: {str(e)}'}, status=500)


print("No response received.")
return JsonResponse({'error': 'No response received'}, status=500)
except Exception as e:
print(f"Unhandled exception: {e}")
return JsonResponse({'error': 'An unexpected error occurred'}, status=500)

# Quote detail endpoint displaying the detail of a quote, no update, no deletion for now.
class QuoteStatusView(APIView):
Expand Down

0 comments on commit 86e3869

Please sign in to comment.