omarryhan/aiogoogle

double validator fails for int

Closed this issue · 4 comments

krsch commented

When trying to use Classroom API I get the following error: 1 isn't valid. Expected a value that meets the following criteria: Double type. My code is

works = await aiogoogle.as_user(
            classroom.courses.courseWork.list(courseId=str(courseId)),
            full_res=True)

Hmm, can you try and pass validate=False and see if it works. If it doesn't, try passing 1.0 instead of just 1. Actually, can you try both and let me know how it goes?

In the validation code, Aiogoogle checks if a value is double by doing isinstance(value, float). And as per Google's documentation, a double value should be of float type.

Screenshot_20201204-105139__01.jpg

https://developers.google.com/discovery/v1/type-format

https://en.m.wikipedia.org/wiki/Double-precision_floating-point_format

I just noticed, you're passing the course ID as a string. Not sure what the original type is, but if it's a float value, you should leave it as it is. If it's an int you should type cast it to be float i.e. float(courseId)

krsch commented

I forgot to mention, that validator fails for server response, not for my data. And the problem is with maxPoints field, not courseId. Passing validate=False solves this problem.

I see. I should probably turn the validation functionality off for responses. I turned it on for responses just to test how well my validation code works. Turns out, many of the types are not followed properly by Google. Even request types, I once encountered an invalid validation pattern, I wasn't sure how to handle that.

Anyway, thanks for raising this issue. I'll be releasing a new version in the next couple of mins.