Skip to content

Commit

Permalink
Merge pull request #3508 from microsoft/feat/primary-error-message-py…
Browse files Browse the repository at this point in the history
…thon
  • Loading branch information
SilasKenneth authored Oct 17, 2023
2 parents 04d143d + 45abfb5 commit 50404c7
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 1 deletion.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

- Added support for enum query parameter types. [#2490](https://github.com/microsoft/kiota/issues/2490)
- Support for primary error message in PHP [#3276](https://github.com/microsoft/kiota/issues/3276)
- Support for primary error message in Python [#3277](https://github.com/microsoft/kiota/issues/3277)

### Changed

Expand Down
5 changes: 5 additions & 0 deletions src/Kiota.Builder/Refiners/PythonRefiner.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,11 @@ public override Task Refine(CodeNamespace generatedCode, CancellationToken cance
addUsings: true,
includeParentNamespace: true
);
AddPrimaryErrorMessage(generatedCode,
"primary_message",
() => new CodeType { Name = "str", IsNullable = false, IsExternal = true },
true
);
}, cancellationToken);
}

Expand Down
1 change: 0 additions & 1 deletion src/Kiota.Builder/Writers/Python/CodeEnumWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
using System.Linq;

using Kiota.Builder.CodeDOM;
using Kiota.Builder.Extensions;

namespace Kiota.Builder.Writers.Python;
public class CodeEnumWriter : BaseElementWriter<CodeEnum, PythonConventionService>
Expand Down
19 changes: 19 additions & 0 deletions src/Kiota.Builder/Writers/Python/CodePropertyWriter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,25 @@ public override void WriteCodeElement(CodeProperty codeElement, LanguageWriter w
writer.WriteLine($"{conventions.GetAccessModifier(codeElement.Access)}{codeElement.NamePrefix}{codeElement.Name}: {(codeElement.Type.IsNullable ? "Optional[" : string.Empty)}{returnType}{(codeElement.Type.IsNullable ? "]" : string.Empty)} = None");
writer.WriteLine();
break;
case CodePropertyKind.ErrorMessageOverride when parentClass.IsErrorDefinition:
writer.WriteLine("@property");
writer.StartBlock($"def {codeElement.Name}(self) -> {codeElement.Type.Name}:");
conventions.WriteLongDescription(codeElement.Documentation, writer);
if (parentClass.GetPrimaryMessageCodePath(static x => x.Name.ToFirstCharacterLowerCase(),
static x => x.Name.ToSnakeCase()) is string primaryMessageCodePath &&
!string.IsNullOrEmpty(primaryMessageCodePath))
{
var pathWithoutMessage = primaryMessageCodePath.TrimEnd(".message".ToCharArray());
writer.StartBlock($"if self.{pathWithoutMessage} is not None:");
writer.WriteLine(
$"return '' if self.{primaryMessageCodePath} is None else self.{primaryMessageCodePath}");
writer.DecreaseIndent();
writer.WriteLine("return ''");
}
else
writer.WriteLine("return super().message");
writer.DecreaseIndent();
break;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -109,4 +109,31 @@ public void WritesDefaultValuesForProperties()
var result = tw.ToString();
Assert.Contains("= None", result);
}

[Fact]
public void WritePrimaryErrorMessagePropertyOption1()
{
property.Kind = CodePropertyKind.ErrorMessageOverride;
parentClass.IsErrorDefinition = true;
writer.Write(property);
var result = tw.ToString();
Assert.Contains("super().message", result);
}
[Fact]
public void WritePrimaryErrorMessagePropertyOption2()
{
property.Kind = CodePropertyKind.ErrorMessageOverride;
var cls = new CodeClass
{
Name = "MainError",
Documentation = new CodeDocumentation { Description = "Some documentation" }
};
cls.AddProperty(new CodeProperty { Name = "message", Type = new CodeType { Name = "str" }, IsPrimaryErrorMessage = true });
property.Type.Name = "str";
parentClass.AddProperty(new CodeProperty { Name = "error", Type = new CodeType { IsExternal = false, Name = "MainError", TypeDefinition = cls } });
parentClass.IsErrorDefinition = true;
writer.Write(property);
var result = tw.ToString();
Assert.Contains("return '' if self.error.message is None else self.error.message", result);
}
}

0 comments on commit 50404c7

Please sign in to comment.