From 57ef36f44c5bfc3453edda7be44bf168b06d8a15 Mon Sep 17 00:00:00 2001 From: samwelkanda Date: Wed, 25 May 2022 17:59:38 +0300 Subject: [PATCH] Simplify deserializers in generated code --- src/Kiota.Builder/Refiners/PythonRefiner.cs | 6 +++++- src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs | 8 +++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/Kiota.Builder/Refiners/PythonRefiner.cs b/src/Kiota.Builder/Refiners/PythonRefiner.cs index 6f9b0db727..051649e1e0 100644 --- a/src/Kiota.Builder/Refiners/PythonRefiner.cs +++ b/src/Kiota.Builder/Refiners/PythonRefiner.cs @@ -16,7 +16,7 @@ public override void Refine(CodeNamespace generatedCode) CorrectCoreTypesForBackingStore(generatedCode, "BackingStoreFactorySingleton.__instance.create_backing_store()"); AddPropertiesAndMethodTypesImports(generatedCode, true, true, true); AddParsableImplementsForModelClasses(generatedCode, "Parsable"); - ReplaceBinaryByNativeType(generatedCode, "bytes",null, true); + ReplaceBinaryByNativeType(generatedCode, "bytes",null); ReplaceReservedNames(generatedCode, new PythonReservedNamesProvider(), x => $"{x}_escaped"); AddGetterAndSetterMethods(generatedCode, new() { @@ -47,6 +47,9 @@ public override void Refine(CodeNamespace generatedCode) "ApiError", "kiota.abstractions" ); + AddQueryParameterMapperMethod( + generatedCode + ); } private const string AbstractionsPackageName = "kiota.abstractions"; @@ -103,6 +106,7 @@ private static void CorrectMethodType(CodeMethod currentMethod) { if(currentMethod.IsOfKind(CodeMethodKind.RequestExecutor)) currentMethod.Parameters.Where(x => x.IsOfKind(CodeParameterKind.ResponseHandler) && x.Type.Name.StartsWith("i", StringComparison.OrdinalIgnoreCase)).ToList().ForEach(x => x.Type.Name = x.Type.Name[1..]); currentMethod.Parameters.Where(x => x.IsOfKind(CodeParameterKind.Options)).ToList().ForEach(x => x.Type.Name = "List[RequestOption]"); + currentMethod.Parameters.Where(x => x.IsOfKind(CodeParameterKind.QueryParameter)).ToList().ForEach(x => { x.Type.Name = "GetQueryParameters"; x.Type.ActionOf = false; }); currentMethod.Parameters.Where(x => x.IsOfKind(CodeParameterKind.Headers)).ToList().ForEach(x => { x.Type.Name = "Dict[str, str]"; x.Type.ActionOf = false; }); } else if(currentMethod.IsOfKind(CodeMethodKind.Serializer)) diff --git a/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs b/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs index ed17a45158..c07615bdf0 100644 --- a/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs @@ -202,7 +202,7 @@ private void WriteDeserializerBody(CodeMethod codeElement, CodeClass parentClass writer.WriteLine("return {"); writer.IncreaseIndent(); foreach(var otherProp in parentClass.GetPropertiesOfKind(CodePropertyKind.Custom)) { - writer.WriteLine($"\"{otherProp.SerializationName ?? otherProp.Name.ToSnakeCase()}\": lambda o,n : o.set_{otherProp.Name.ToSnakeCase()}(n.{GetDeserializationMethodName(otherProp.Type)}),"); + writer.WriteLine($"\"{otherProp.SerializationName ?? otherProp.Name.ToSnakeCase()}\": lambda n : self.set_{otherProp.Name.ToSnakeCase()}(n.{GetDeserializationMethodName(otherProp.Type)}),"); } writer.DecreaseIndent(); writer.WriteLine($"}}{(inherits? $".update(super().{codeElement.Name.ToSnakeCase()}())": string.Empty)}"); @@ -262,10 +262,16 @@ private void WriteRequestGeneratorBody(CodeMethod codeElement, RequestParams req $"{RequestInfoVarName}.path_parameters = {GetPropertyCall(urlTemplateParamsProperty, "''")}", $"{RequestInfoVarName}.http_method = HttpMethod.{codeElement.HttpMethod.ToString().ToUpperInvariant()}"); if(requestParams.headers != null) { + writer.WriteLine($"if {requestParams.headers.Name}:"); + writer.IncreaseIndent(); writer.WriteLine($"{RequestInfoVarName}.headers = {requestParams.headers.Name.ToSnakeCase()}"); + writer.DecreaseIndent(); } if(requestParams.queryString != null){ + writer.WriteLine($"if {requestParams.queryString.Name}:"); + writer.IncreaseIndent(); writer.WriteLine($"{RequestInfoVarName}.set_query_string_parameters_from_raw_object({requestParams.queryString.Name.ToSnakeCase()})"); + writer.DecreaseIndent(); } if(requestParams.requestBody != null) { if(requestParams.requestBody.Type.Name.Equals(localConventions.StreamTypeName, StringComparison.OrdinalIgnoreCase))