From 3fdc657cf5073284c45b69778600bbd4644d5a5a Mon Sep 17 00:00:00 2001 From: Shem Ogumbe Date: Thu, 24 Oct 2024 16:25:45 +0300 Subject: [PATCH] Remove stringify from primitive types (#5616) * Remove stringify from primitive types * clean up code * revert changes in launch.json file * Updated changelog" * move changelog to unrealeased * update method writer tests * update code format * update code format * remove unused parameter * update unit tests * updete tests * fix unit test * update unit tests * fix integration tests * update get factory for enums * update uni test for enums * update uni test for enums * Update CHANGELOG.md Co-authored-by: Andrew Omondi * update method to internal * Update tests/Kiota.Builder.Tests/Writers/Python/CodeMethodWriterTests.cs Co-authored-by: Andrew Omondi * Update CHANGELOG.md Co-authored-by: Andrew Omondi * remove uused vars * docs: removes duplicated changelog entry --------- Co-authored-by: Andrew Omondi Co-authored-by: Vincent Biret --- .vscode/launch.json | 40 +++++++++++++++---- CHANGELOG.md | 3 ++ .../Writers/Python/CodeMethodWriter.cs | 7 ++-- .../Writers/Python/CodeMethodWriterTests.cs | 27 ++++++++++++- 4 files changed, 65 insertions(+), 12 deletions(-) diff --git a/.vscode/launch.json b/.vscode/launch.json index 6e77c8004f..f4bcd561b3 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -196,7 +196,10 @@ "request": "launch", "preLaunchTask": "build", "program": "${workspaceFolder}/src/kiota/bin/Debug/net8.0/kiota.dll", - "args": ["search", "microsoft"], + "args": [ + "search", + "microsoft" + ], "cwd": "${workspaceFolder}/src/kiota", "console": "internalConsole", "stopAtEntry": false @@ -207,7 +210,10 @@ "request": "launch", "preLaunchTask": "build", "program": "${workspaceFolder}/src/kiota/bin/Debug/net8.0/kiota.dll", - "args": ["search", "test"], + "args": [ + "search", + "test" + ], "cwd": "${workspaceFolder}/src/kiota", "console": "internalConsole", "stopAtEntry": false @@ -249,7 +255,11 @@ "request": "launch", "preLaunchTask": "build", "program": "${workspaceFolder}/src/kiota/bin/Debug/net8.0/kiota.dll", - "args": ["info", "-l", "CSharp"], + "args": [ + "info", + "-l", + "CSharp" + ], "cwd": "${workspaceFolder}/src/kiota", "console": "internalConsole", "stopAtEntry": false @@ -260,7 +270,11 @@ "request": "launch", "preLaunchTask": "build", "program": "${workspaceFolder}/src/kiota/bin/Debug/net8.0/kiota.dll", - "args": ["update", "-o", "${workspaceFolder}/samples"], + "args": [ + "update", + "-o", + "${workspaceFolder}/samples" + ], "cwd": "${workspaceFolder}/src/kiota", "console": "internalConsole", "stopAtEntry": false @@ -271,7 +285,10 @@ "request": "launch", "preLaunchTask": "build", "program": "${workspaceFolder}/src/kiota/bin/Debug/net8.0/kiota.dll", - "args": ["workspace", "migrate"], + "args": [ + "workspace", + "migrate" + ], "cwd": "${workspaceFolder}/samples/msgraph-mail/dotnet", "console": "internalConsole", "stopAtEntry": false, @@ -285,7 +302,10 @@ "request": "launch", "preLaunchTask": "build", "program": "${workspaceFolder}/src/kiota/bin/Debug/net8.0/kiota.dll", - "args": ["client", "generate"], + "args": [ + "client", + "generate" + ], "cwd": "${workspaceFolder}/samples/msgraph-mail/dotnet", "console": "internalConsole", "stopAtEntry": false, @@ -349,7 +369,11 @@ "request": "launch", "preLaunchTask": "build", "program": "${workspaceFolder}/src/kiota/bin/Debug/net8.0/kiota.dll", - "args": ["login", "github", "device"], + "args": [ + "login", + "github", + "device" + ], "cwd": "${workspaceFolder}/src/kiota", "console": "internalConsole", "stopAtEntry": false @@ -361,4 +385,4 @@ "processId": "${command:pickProcess}" } ] -} +} \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 7327f1b128..171110e1f6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added ### Changed +- Fixed python generation client serailization failure str being quoted as "str" +- Fixed Issue with primitive values being stringified in python python. [#5417](https://github.com/microsoft/kiota/issues/5417) - Fixed an issue where multipart request content would be ignored if other unstructured content was present in the description. [#5638](https://github.com/microsoft/kiota/issues/5638) - Fixed an issue where when generating Go code the deserializer for unions was using `CodeClass` as a filter and not `CodeInterface`. [#4844](https://github.com/microsoft/kiota/issues/4844) @@ -32,6 +34,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Fixed cyclic dependencies in generated Go code. [#2834](https://github.com/microsoft/kiota/issues/2834) - Fixed a bug where default output folder is created on plugin edit and generate commands. [#5510](https://github.com/microsoft/kiota/issues/5429) - Changed GeneratedCode attribute applied when generating CSharp to only include the major version of Kiota. [#5489](https://github.com/microsoft/kiota/issues/5489) + - Fixed generating CSharp client displays clean hint regardless of whether --clean-output is already passed [#5576](https://github.com/microsoft/kiota/issues/5576) ## [1.19.0] - 2024-10-03 diff --git a/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs b/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs index 4cf7b7fc80..3b391cdb8f 100644 --- a/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs +++ b/src/Kiota.Builder/Writers/Python/CodeMethodWriter.cs @@ -583,7 +583,7 @@ private void WriteRequestExecutorBody(CodeMethod codeElement, RequestParams requ var isStream = conventions.StreamTypeName.Equals(returnType, StringComparison.OrdinalIgnoreCase); var returnTypeWithoutCollectionSymbol = GetReturnTypeWithoutCollectionSymbol(codeElement, returnType); var genericTypeForSendMethod = GetSendRequestMethodName(isVoid, isStream, codeElement.ReturnType.IsCollection, returnTypeWithoutCollectionSymbol, isEnum); - var newFactoryParameter = GetTypeFactory(isVoid, isStream, returnTypeWithoutCollectionSymbol, isEnum); + var newFactoryParameter = GetTypeFactory(isVoid, isStream, isEnum, returnTypeWithoutCollectionSymbol); var errorMappingVarName = NoneKeyword; if (codeElement.ErrorMappings.Any()) { @@ -809,10 +809,11 @@ private string GetSerializationMethodName(CodeTypeBase propType) _ => "write_object_value", }; } - private string GetTypeFactory(bool isVoid, bool isStream, string returnType, bool isEnum) + internal string GetTypeFactory(bool isVoid, bool isStream, bool isEnum, string returnType) { if (isVoid) return string.Empty; - if (isStream || conventions.IsPrimitiveType(returnType) || isEnum) return $" \"{returnType}\","; + if (isStream || isEnum) return $" \"{returnType}\","; + if (conventions.IsPrimitiveType(returnType)) return $" {returnType},"; return $" {returnType},"; } private string GetSendRequestMethodName(bool isVoid, bool isStream, bool isCollection, string returnType, diff --git a/tests/Kiota.Builder.Tests/Writers/Python/CodeMethodWriterTests.cs b/tests/Kiota.Builder.Tests/Writers/Python/CodeMethodWriterTests.cs index b1ac6b73c2..ae6d75a3bc 100644 --- a/tests/Kiota.Builder.Tests/Writers/Python/CodeMethodWriterTests.cs +++ b/tests/Kiota.Builder.Tests/Writers/Python/CodeMethodWriterTests.cs @@ -1,11 +1,11 @@ using System; using System.IO; using System.Linq; - using Kiota.Builder.CodeDOM; using Kiota.Builder.Extensions; using Kiota.Builder.Writers; using Kiota.Builder.Writers.Python; +using Moq; using Xunit; namespace Kiota.Builder.Tests.Writers.Python; @@ -25,12 +25,15 @@ public sealed class CodeMethodWriterTests : IDisposable private const string MethodDescription = "some description"; private const string ParamDescription = "some parameter description"; private const string ParamName = "param_name"; + + public CodeMethodWriterTests() { writer = LanguageWriter.GetLanguageWriter(GenerationLanguage.Python, DefaultPath, DefaultName); tw = new StringWriter(); writer.SetTextWriter(tw); root = CodeNamespace.InitRootNamespace(); + } private void setup(bool withInheritance = false) { @@ -791,6 +794,7 @@ public void WritesInheritedDeSerializerBody() Assert.Contains("return fields", result); Assert.DoesNotContain("defined_in_parent", result, StringComparison.OrdinalIgnoreCase); } + [Fact] public void WritesUnionDeSerializerBody() { @@ -815,6 +819,27 @@ public void WritesUnionDeSerializerBody() Assert.Contains("return self.complex_type1_value.get_field_deserializers()", result); Assert.Contains("return {}", result); } + [Theory] + [InlineData(true, false, false, "string", "")] + [InlineData(false, true, false, "Stream", " \"Stream\",")] + [InlineData(false, false, true, "SomeEnum", " \"SomeEnum\",")] + [InlineData(false, false, false, "int", " int,")] + [InlineData(false, false, false, "CustomType", " CustomType,")] + public void GetTypeFactory_ReturnsCorrectString(bool isVoid, bool isStream, bool isEnum, string returnType, string expected) + { + var mockConventionService = new Mock(); + + var codeMethodWriter = new CodeMethodWriter( + mockConventionService.Object, + "TestNamespace", + false // usesBackingStore + ); + + var result = codeMethodWriter.GetTypeFactory(isVoid, isStream, isEnum, returnType); + + + Assert.Equal(expected, result); + } [Fact] public void WritesIntersectionDeSerializerBody() {