aws-cloudformation / cloudformation-cli-python-plugin

The CloudFormation Provider Development Toolkit Python Plugin allows you to autogenerate Python code based on an input schema.
Apache License 2.0
108 stars 47 forks source link

fixed resource reference #98

Closed ammokhov closed 4 years ago

ammokhov commented 4 years ago

Issue #, if available:

Description of changes:

Added resolved type reference. used example from #96 result:


@dataclass
class ResourceModel(BaseModel):
    InstanceId: Optional[str]
    Cloud9InstancePolicy: Optional["_Cloud9InstancePolicy"]

    @classmethod
    def _deserialize(
        cls: Type["_ResourceModel"],
        json_data: Optional[Mapping[str, Any]],
    ) -> Optional["_ResourceModel"]:
        if not json_data:
            return None
        dataclasses = {n: o for n, o in getmembers(sys.modules[__name__]) if isclass(o)}
        recast_object(cls, json_data, dataclasses)
        return cls(
            InstanceId=json_data.get("InstanceId"),
            Cloud9InstancePolicy=Cloud9InstancePolicy._deserialize(json_data.get("Cloud9InstancePolicy")),
        )

# work around possible type aliasing issues when variable has same name as a model
_ResourceModel = ResourceModel

@dataclass
class Cloud9InstancePolicy(BaseModel):
    PolicyName: Optional[str]
    Document: Optional["_PolicyDocument"]

    @classmethod
    def _deserialize(
        cls: Type["_Cloud9InstancePolicy"],
        json_data: Optional[Mapping[str, Any]],
    ) -> Optional["_Cloud9InstancePolicy"]:
        if not json_data:
            return None
        return cls(
            PolicyName=json_data.get("PolicyName"),
            Document=PolicyDocument._deserialize(json_data.get("PolicyDocument")),
        )

# work around possible type aliasing issues when variable has same name as a model
_Cloud9InstancePolicy = Cloud9InstancePolicy

@dataclass
class PolicyDocument(BaseModel):
    Version: Optional[str]
    Statement: Optional[Sequence["_PolicyStatement"]]

    @classmethod
    def _deserialize(
        cls: Type["_PolicyDocument"],
        json_data: Optional[Mapping[str, Any]],
    ) -> Optional["_PolicyDocument"]:
        if not json_data:
            return None
        return cls(
            Version=json_data.get("Version"),
            Statement=deserialize_list(json_data.get("PolicyStatement"), PolicyStatement),
        )

# work around possible type aliasing issues when variable has same name as a model
_PolicyDocument = PolicyDocument

@dataclass
class PolicyStatement(BaseModel):
    Effect: Optional[str]
    Action: Optional[Sequence[str]]
    Resource: Optional[Sequence[str]]

    @classmethod
    def _deserialize(
        cls: Type["_PolicyStatement"],
        json_data: Optional[Mapping[str, Any]],
    ) -> Optional["_PolicyStatement"]:
        if not json_data:
            return None
        return cls(
            Effect=json_data.get("Effect"),
            Action=json_data.get("Action"),
            Resource=json_data.get("Resource"),
        )

# work around possible type aliasing issues when variable has same name as a model
_PolicyStatement = PolicyStatement

By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.