Skip to content

Unable to deserialise a calendar response, due to unexpected types #251

Open
@sammyd

Description

@sammyd

Describe the bug

When trying to retrieve the calendars (or any calendar response) a deserialisation error occurs:

[NoMethodError: undefined method `create_from_discriminator_value' for an instance of Hash](http://localhost:3000/calendars#)

This occurs whilst trying to execute this line, parsing the allowedOnlineMeetingProviders field:

https://github.com/microsoftgraph/msgraph-sdk-ruby/blob/main/lib/models/calendar.rb#L235

Expected behavior

It should parse the API response correctly, and not raise an error.

How to reproduce

  1. Create an authenticated ruby client, with access to presumably a minimum of Calendars.Read.
  2. Execute this:
@calendars = client.me.calendars.get.resume

SDK Version

0.22.2

Latest version known to work for scenario above?

No response

Known Workarounds

I've monkey patched this method to just comment out the offending line for now. It's not an acceptable workaround.

Debug output

Click to expand log

20:50:30 web.1  | NoMethodError (Error during deserialization)
20:50:30 web.1  | Caused by: NoMethodError (Error during deserialization)
20:50:30 web.1  | Caused by: NoMethodError (Error during deserialization)
20:50:30 web.1  | Caused by: NoMethodError (undefined method `create_from_discriminator_value' for an instance of Hash)
20:50:30 web.1  |
20:50:30 web.1  | Information for: NoMethodError (Error during deserialization):
20:50:30 web.1  |
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:99:in `rescue in get_object_value'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:93:in `get_object_value'
20:50:30 web.1  | microsoft_kiota_faraday (0.14.0) lib/microsoft_kiota_faraday/faraday_request_adapter.rb:61:in `block in send_async'
20:50:30 web.1  |
20:50:30 web.1  | Information for cause: NoMethodError (Error during deserialization):
20:50:30 web.1  |
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:99:in `rescue in get_object_value'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:93:in `get_object_value'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:89:in `block in get_collection_of_object_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:85:in `map'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:85:in `get_collection_of_object_values'
20:50:30 web.1  | microsoft_graph (0.22.2) lib/models/calendar_collection_response.rb:34:in `block in get_field_deserializers'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:109:in `block in assign_field_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:104:in `each'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:104:in `assign_field_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:96:in `get_object_value'
20:50:30 web.1  | microsoft_kiota_faraday (0.14.0) lib/microsoft_kiota_faraday/faraday_request_adapter.rb:61:in `block in send_async'
20:50:30 web.1  |
20:50:30 web.1  | Information for cause: NoMethodError (Error during deserialization):
20:50:30 web.1  |
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:99:in `rescue in get_object_value'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:93:in `get_object_value'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:89:in `block in get_collection_of_object_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:85:in `map'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:85:in `get_collection_of_object_values'
20:50:30 web.1  | microsoft_graph (0.22.2) lib/models/calendar.rb:235:in `block in get_field_deserializers'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:109:in `block in assign_field_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:104:in `each'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:104:in `assign_field_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:96:in `get_object_value'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:89:in `block in get_collection_of_object_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:85:in `map'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:85:in `get_collection_of_object_values'
20:50:30 web.1  | microsoft_graph (0.22.2) lib/models/calendar_collection_response.rb:34:in `block in get_field_deserializers'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:109:in `block in assign_field_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:104:in `each'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:104:in `assign_field_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:96:in `get_object_value'
20:50:30 web.1  | microsoft_kiota_faraday (0.14.0) lib/microsoft_kiota_faraday/faraday_request_adapter.rb:61:in `block in send_async'

20:50:30 web.1  | Information for cause: NoMethodError (undefined method `create_from_discriminator_value' for an instance of Hash):
20:50:30 web.1  |
20:50:30 web.1  | microsoft_graph (0.22.2) lib/models/calendar.rb:235:in `block (2 levels) in get_field_deserializers'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:95:in `get_object_value'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:89:in `block in get_collection_of_object_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:85:in `map'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:85:in `get_collection_of_object_values'
20:50:30 web.1  | microsoft_graph (0.22.2) lib/models/calendar.rb:235:in `block in get_field_deserializers'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:109:in `block in assign_field_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:104:in `each'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:104:in `assign_field_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:96:in `get_object_value'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:89:in `block in get_collection_of_object_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:85:in `map'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:85:in `get_collection_of_object_values'
20:50:30 web.1  | microsoft_graph (0.22.2) lib/models/calendar_collection_response.rb:34:in `block in get_field_deserializers'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:109:in `block in assign_field_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:104:in `each'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:104:in `assign_field_values'
20:50:30 web.1  | microsoft_kiota_serialization_json (0.9.1) lib/microsoft_kiota_serialization_json/json_parse_node.rb:96:in `get_object_value'
20:50:30 web.1  | microsoft_kiota_faraday (0.14.0) lib/microsoft_kiota_faraday/faraday_request_adapter.rb:61:in `block in send_async'

Configuration

No response

Other information

I'm reasonably confident that this is occurring because this line:

https://github.com/microsoftgraph/msgraph-sdk-ruby/blob/main/lib/models/calendar.rb#L235

"allowedOnlineMeetingProviders" => lambda {|n| @allowed_online_meeting_providers = n.get_collection_of_object_values(lambda {|pn| MicrosoftGraph::Models::OnlineMeetingProviderType.create_from_discriminator_value(pn) }) },

Is expecting MicrosoftGraph::Models::OnlineMeetingProviderType to be something like a MicrosoftGraph::Models::Entity, but actually, it's just a Hash:

OnlineMeetingProviderType = {
  Unknown: :Unknown,
  SkypeForBusiness: :SkypeForBusiness,
  SkypeForConsumer: :SkypeForConsumer,
  TeamsForBusiness: :TeamsForBusiness,
}

https://github.com/microsoftgraph/msgraph-sdk-ruby/blob/main/lib/models/online_meeting_provider_type.rb

I'm not entirely sure what to do about this, partially because I assume this should actually be a just returning some sort of array of symbols, but more importantly, I believe this gem is auto-generated by Kiota somehow?

I'm happy to put a PR in, but could do with some direction!

Or maybe I'm completely wrong—lemme know!

Metadata

Metadata

Assignees

No one assigned

    Labels

    help wantedStandard GitHub labeltype:bugA broken experience

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions