palantir / conjure-python-client

Python client and JSON encoders for use with generated Conjure clients
Apache License 2.0
7 stars 20 forks source link

ConjureDecoder does not throw when array passed as object #155

Open DHerls opened 9 months ago

DHerls commented 9 months ago

What happened?

For the following conjure spec:

types:
  definitions:
    default-package: com.company.product
    objects:

      Recipe:
        fields:
          name: RecipeName
          steps: StringList

      StringList:
        fields:
          items:
            type: list<string>
            safety: safe

      RecipeName:
        alias: string
        safety: safe

services:
  RecipeBookService:
    name: Recipe Book
    package: com.company.product
    base-path: /recipes
    endpoints:
      createRecipe:
        http: POST /
        args:
          createRecipeRequest:
            param-type: body
            type: Recipe

With the following python code

from conjure_python_client import ConjureDecoder, ConjureEncoder

decoder = ConjureDecoder()
incorrect = decoder.decode({"name": "test", "steps": ["test"]}, Recipe)
print(incorrect)

I get the following output:

Recipe(name='test', steps=StringList(items=[]))

So there was a silent failure that inserted a blank object and a blank array

What did you want to happen?

An error should be thrown, same as if you tried to decode a string type as an int.

I would expect an error to be thrown since this is an incorrect type provided