Skip to content

Commit

Permalink
Refactor: Attribute.class used instead of helper methods in PythonSer… (
Browse files Browse the repository at this point in the history
#1475)

* Refactor: Attribute.class used instead of helper methods in PythonServerAttributeUtils

Helper methods in PythonServerAttributeUtils have been deprecated in favor of using Attribute.class directly

Co-authored-by: Matteo Bigoi <[email protected]>

* Smithy Python: PyException removed from enum

Smithy enums do not have ErrorTrait so there is no need to check and generate code for pyo3::exceptions::PyException

Co-authored-by: Fahad Zubair <[email protected]>
Co-authored-by: Matteo Bigoi <[email protected]>
  • Loading branch information
3 people authored Jun 21, 2022
1 parent a91b813 commit a3c7902
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 49 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,11 @@ package software.amazon.smithy.rust.codegen.server.python.smithy.generators
import software.amazon.smithy.model.Model
import software.amazon.smithy.model.shapes.StringShape
import software.amazon.smithy.model.traits.EnumTrait
import software.amazon.smithy.rust.codegen.rustlang.Attribute
import software.amazon.smithy.rust.codegen.rustlang.RustWriter
import software.amazon.smithy.rust.codegen.rustlang.asType
import software.amazon.smithy.rust.codegen.rustlang.rust
import software.amazon.smithy.rust.codegen.server.python.smithy.PythonServerCargoDependency
import software.amazon.smithy.rust.codegen.server.smithy.generators.ServerEnumGenerator
import software.amazon.smithy.rust.codegen.smithy.RuntimeConfig
import software.amazon.smithy.rust.codegen.smithy.RustSymbolProvider
Expand All @@ -28,19 +31,26 @@ class PythonServerEnumGenerator(
runtimeConfig: RuntimeConfig,
) : ServerEnumGenerator(model, symbolProvider, writer, shape, enumTrait, runtimeConfig) {

private val pyo3Symbols = listOf(PythonServerCargoDependency.PyO3.asType())

override fun render() {
writer.renderPyClass(shape)
renderPyClass()
super.render()
renderPyO3Methods()
}

private fun renderPyClass() {
Attribute.Custom("pyo3::pyclass", symbols = pyo3Symbols).render(writer)
}

override fun renderFromForStr() {
writer.renderPyClass(shape)
renderPyClass()
super.renderFromForStr()
}

private fun renderPyO3Methods() {
writer.renderPyMethods()
Attribute.Custom("pyo3::pymethods", symbols = pyo3Symbols).render(writer)

writer.rust(
"""
impl $enumName {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,15 @@ import software.amazon.smithy.model.Model
import software.amazon.smithy.model.shapes.MemberShape
import software.amazon.smithy.model.shapes.StructureShape
import software.amazon.smithy.model.traits.ErrorTrait
import software.amazon.smithy.rust.codegen.rustlang.Attribute
import software.amazon.smithy.rust.codegen.rustlang.RustWriter
import software.amazon.smithy.rust.codegen.rustlang.Writable
import software.amazon.smithy.rust.codegen.rustlang.asType
import software.amazon.smithy.rust.codegen.rustlang.render
import software.amazon.smithy.rust.codegen.rustlang.rust
import software.amazon.smithy.rust.codegen.rustlang.rustTemplate
import software.amazon.smithy.rust.codegen.rustlang.writable
import software.amazon.smithy.rust.codegen.server.python.smithy.PythonServerCargoDependency
import software.amazon.smithy.rust.codegen.smithy.RustSymbolProvider
import software.amazon.smithy.rust.codegen.smithy.generators.StructureGenerator
import software.amazon.smithy.rust.codegen.smithy.rustType
Expand All @@ -33,20 +36,25 @@ open class PythonServerStructureGenerator(
private val shape: StructureShape
) : StructureGenerator(model, symbolProvider, writer, shape) {

private val pyo3Symbols = listOf(PythonServerCargoDependency.PyO3.asType())

override fun renderStructure() {
writer.renderPyClass(shape)
if (shape.hasTrait<ErrorTrait>())
Attribute.Custom("pyo3::pyclass(extends = pyo3::exceptions::PyException)", symbols = pyo3Symbols).render(writer)
else
Attribute.Custom("pyo3::pyclass", symbols = pyo3Symbols).render(writer)
super.renderStructure()
renderPyO3Methods()
}

override fun renderStructureMember(writer: RustWriter, member: MemberShape, memberName: String, memberSymbol: Symbol) {
writer.renderPyGetterSetter()
Attribute.Custom("pyo3(get, set)", symbols = pyo3Symbols).render(writer)
super.renderStructureMember(writer, member, memberName, memberSymbol)
}

private fun renderPyO3Methods() {
if (shape.hasTrait<ErrorTrait>() || accessorMembers.isNotEmpty()) {
writer.renderPyMethods()
Attribute.Custom("pyo3::pymethods", symbols = pyo3Symbols).render(writer)
writer.rustTemplate(
"""
impl $name {
Expand Down

0 comments on commit a3c7902

Please sign in to comment.