diff --git a/qenerate/plugins/pydantic_v1/mapper.py b/qenerate/plugins/pydantic_v1/mapper.py index d671514..380975f 100644 --- a/qenerate/plugins/pydantic_v1/mapper.py +++ b/qenerate/plugins/pydantic_v1/mapper.py @@ -39,7 +39,7 @@ def graphql_primitive_to_python(graphql_type: GraphQLOutputType) -> str: "Int": "int", "Float": "float", "Boolean": "bool", - "DateTime": "DateTime", + "DateTime": "datetime", "JSON": "Json", } return mapping.get(str(graphql_type), str(graphql_type)) diff --git a/qenerate/plugins/pydantic_v1/plugin.py b/qenerate/plugins/pydantic_v1/plugin.py index 3d115fc..5480431 100644 --- a/qenerate/plugins/pydantic_v1/plugin.py +++ b/qenerate/plugins/pydantic_v1/plugin.py @@ -49,6 +49,7 @@ IMPORTS = ( "from collections.abc import Callable # noqa: F401 # pylint: disable=W0611\n" + "from datetime import datetime # noqa: F401 # pylint: disable=W0611\n" "from enum import Enum # noqa: F401 # pylint: disable=W0611\n" "from typing import ( # noqa: F401 # pylint: disable=W0611\n" f"{INDENT}Any,\n" diff --git a/tests/generator/definitions/enums/github_invitations.gql b/tests/generator/definitions/github/invitations_enum.gql similarity index 100% rename from tests/generator/definitions/enums/github_invitations.gql rename to tests/generator/definitions/github/invitations_enum.gql diff --git a/tests/generator/definitions/github/issues_datetime.gql b/tests/generator/definitions/github/issues_datetime.gql new file mode 100644 index 0000000..209701d --- /dev/null +++ b/tests/generator/definitions/github/issues_datetime.gql @@ -0,0 +1,9 @@ +query IssuesDate { + repository(name: "qenerate", owner: "app-sre") { + issues(first: 10) { + nodes { + createdAt + } + } + } +} diff --git a/tests/generator/expected/pydantic_v1/complex_queries/enumerate_collisions.py.txt b/tests/generator/expected/pydantic_v1/complex_queries/enumerate_collisions.py.txt index 08da3b2..3170813 100644 --- a/tests/generator/expected/pydantic_v1/complex_queries/enumerate_collisions.py.txt +++ b/tests/generator/expected/pydantic_v1/complex_queries/enumerate_collisions.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/complex_queries/ocp_with_inline_fragments.py.txt b/tests/generator/expected/pydantic_v1/complex_queries/ocp_with_inline_fragments.py.txt index c67555b..5c03405 100644 --- a/tests/generator/expected/pydantic_v1/complex_queries/ocp_with_inline_fragments.py.txt +++ b/tests/generator/expected/pydantic_v1/complex_queries/ocp_with_inline_fragments.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/complex_queries/saas_humongous.py.txt b/tests/generator/expected/pydantic_v1/complex_queries/saas_humongous.py.txt index e265f55..4a12efa 100644 --- a/tests/generator/expected/pydantic_v1/complex_queries/saas_humongous.py.txt +++ b/tests/generator/expected/pydantic_v1/complex_queries/saas_humongous.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/complex_queries_with_fragments/saas_with_multiple_fragment_references.py.txt b/tests/generator/expected/pydantic_v1/complex_queries_with_fragments/saas_with_multiple_fragment_references.py.txt index 741b7a6..8d7f61c 100644 --- a/tests/generator/expected/pydantic_v1/complex_queries_with_fragments/saas_with_multiple_fragment_references.py.txt +++ b/tests/generator/expected/pydantic_v1/complex_queries_with_fragments/saas_with_multiple_fragment_references.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/complex_queries_with_fragments/vault_secret_fragment.py.txt b/tests/generator/expected/pydantic_v1/complex_queries_with_fragments/vault_secret_fragment.py.txt index ce12f3e..a6a3c4d 100644 --- a/tests/generator/expected/pydantic_v1/complex_queries_with_fragments/vault_secret_fragment.py.txt +++ b/tests/generator/expected/pydantic_v1/complex_queries_with_fragments/vault_secret_fragment.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/fragments/multiple_nested_fragments.py.txt b/tests/generator/expected/pydantic_v1/fragments/multiple_nested_fragments.py.txt index ce27a3e..c4147dd 100644 --- a/tests/generator/expected/pydantic_v1/fragments/multiple_nested_fragments.py.txt +++ b/tests/generator/expected/pydantic_v1/fragments/multiple_nested_fragments.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/fragments/nested_fragment.py.txt b/tests/generator/expected/pydantic_v1/fragments/nested_fragment.py.txt index 2ef2801..63e385f 100644 --- a/tests/generator/expected/pydantic_v1/fragments/nested_fragment.py.txt +++ b/tests/generator/expected/pydantic_v1/fragments/nested_fragment.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/fragments/nested_layers.py.txt b/tests/generator/expected/pydantic_v1/fragments/nested_layers.py.txt index a7d6870..3ccfcef 100644 --- a/tests/generator/expected/pydantic_v1/fragments/nested_layers.py.txt +++ b/tests/generator/expected/pydantic_v1/fragments/nested_layers.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/fragments/simple_fragment.py.txt b/tests/generator/expected/pydantic_v1/fragments/simple_fragment.py.txt index ce12f3e..a6a3c4d 100644 --- a/tests/generator/expected/pydantic_v1/fragments/simple_fragment.py.txt +++ b/tests/generator/expected/pydantic_v1/fragments/simple_fragment.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/enums/github_invitations.py.txt b/tests/generator/expected/pydantic_v1/github/invitations_enum.py.txt similarity index 97% rename from tests/generator/expected/pydantic_v1/enums/github_invitations.py.txt rename to tests/generator/expected/pydantic_v1/github/invitations_enum.py.txt index 0599727..2213a76 100644 --- a/tests/generator/expected/pydantic_v1/enums/github_invitations.py.txt +++ b/tests/generator/expected/pydantic_v1/github/invitations_enum.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/github/issues_datetime.py.txt b/tests/generator/expected/pydantic_v1/github/issues_datetime.py.txt new file mode 100644 index 0000000..a576112 --- /dev/null +++ b/tests/generator/expected/pydantic_v1/github/issues_datetime.py.txt @@ -0,0 +1,83 @@ +""" +Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! +""" +from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 +from enum import Enum # noqa: F401 # pylint: disable=W0611 +from typing import ( # noqa: F401 # pylint: disable=W0611 + Any, + Optional, + Union, +) + +from pydantic import ( # noqa: F401 # pylint: disable=W0611 + BaseModel, + Extra, + Field, + Json, +) + + +DEFINITION = """ +query IssuesDate { + repository(name: "qenerate", owner: "app-sre") { + issues(first: 10) { + nodes { + createdAt + } + } + } +} + +""" + + +class Issue(BaseModel): + created_at: datetime = Field(..., alias="createdAt") + + class Config: + smart_union = True + extra = Extra.forbid + + +class IssueConnection(BaseModel): + nodes: Optional[list[Optional[Issue]]] = Field(..., alias="nodes") + + class Config: + smart_union = True + extra = Extra.forbid + + +class Repository(BaseModel): + issues: IssueConnection = Field(..., alias="issues") + + class Config: + smart_union = True + extra = Extra.forbid + + +class IssuesDateQueryData(BaseModel): + repository: Optional[Repository] = Field(..., alias="repository") + + class Config: + smart_union = True + extra = Extra.forbid + + +def query(query_func: Callable, **kwargs: Any) -> IssuesDateQueryData: + """ + This is a convenience function which queries and parses the data into + concrete types. It should be compatible with most GQL clients. + You do not have to use it to consume the generated data classes. + Alternatively, you can also mime and alternate the behavior + of this function in the caller. + + Parameters: + query_func (Callable): Function which queries your GQL Server + kwargs: optional arguments that will be passed to the query function + + Returns: + IssuesDateQueryData: queried data parsed into generated classes + """ + raw_data: dict[Any, Any] = query_func(DEFINITION, **kwargs) + return IssuesDateQueryData(**raw_data) diff --git a/tests/generator/expected/pydantic_v1/simple_queries/difficult_attribute_name.py.txt b/tests/generator/expected/pydantic_v1/simple_queries/difficult_attribute_name.py.txt index 01de0e2..3e32995 100644 --- a/tests/generator/expected/pydantic_v1/simple_queries/difficult_attribute_name.py.txt +++ b/tests/generator/expected/pydantic_v1/simple_queries/difficult_attribute_name.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/simple_queries/difficult_attribute_name_2.py.txt b/tests/generator/expected/pydantic_v1/simple_queries/difficult_attribute_name_2.py.txt index e88f047..e08b5f0 100644 --- a/tests/generator/expected/pydantic_v1/simple_queries/difficult_attribute_name_2.py.txt +++ b/tests/generator/expected/pydantic_v1/simple_queries/difficult_attribute_name_2.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/simple_queries/saas_file_json.py.txt b/tests/generator/expected/pydantic_v1/simple_queries/saas_file_json.py.txt index 8b73734..a8e4adc 100644 --- a/tests/generator/expected/pydantic_v1/simple_queries/saas_file_json.py.txt +++ b/tests/generator/expected/pydantic_v1/simple_queries/saas_file_json.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/simple_queries/saas_file_reduced.py.txt b/tests/generator/expected/pydantic_v1/simple_queries/saas_file_reduced.py.txt index 13d636b..1684502 100644 --- a/tests/generator/expected/pydantic_v1/simple_queries/saas_file_reduced.py.txt +++ b/tests/generator/expected/pydantic_v1/simple_queries/saas_file_reduced.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/simple_queries/saas_file_simple.py.txt b/tests/generator/expected/pydantic_v1/simple_queries/saas_file_simple.py.txt index fe26e57..61f065c 100644 --- a/tests/generator/expected/pydantic_v1/simple_queries/saas_file_simple.py.txt +++ b/tests/generator/expected/pydantic_v1/simple_queries/saas_file_simple.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query.py.txt b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query.py.txt index a3b8b10..d8d2e0d 100644 --- a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query.py.txt +++ b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query_multiple.py.txt b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query_multiple.py.txt index 2161c55..a9baaca 100644 --- a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query_multiple.py.txt +++ b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query_multiple.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query_partial.py.txt b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query_partial.py.txt index fe70be2..1d640ab 100644 --- a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query_partial.py.txt +++ b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/ocp_query_partial.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_fragment.py.txt b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_fragment.py.txt index ce12f3e..a6a3c4d 100644 --- a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_fragment.py.txt +++ b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_fragment.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_partial_fragment.py.txt b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_partial_fragment.py.txt index 4f2bd3a..0d5b4a9 100644 --- a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_partial_fragment.py.txt +++ b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_partial_fragment.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_version_fragment.py.txt b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_version_fragment.py.txt index eaf69b6..6388f24 100644 --- a/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_version_fragment.py.txt +++ b/tests/generator/expected/pydantic_v1/simple_queries_with_fragments/vault_secret_version_fragment.py.txt @@ -2,6 +2,7 @@ Generated by qenerate plugin=pydantic_v1. DO NOT MODIFY MANUALLY! """ from collections.abc import Callable # noqa: F401 # pylint: disable=W0611 +from datetime import datetime # noqa: F401 # pylint: disable=W0611 from enum import Enum # noqa: F401 # pylint: disable=W0611 from typing import ( # noqa: F401 # pylint: disable=W0611 Any, diff --git a/tests/plugins/test_generate.py b/tests/plugins/test_generate.py index e829524..68d56f0 100644 --- a/tests/plugins/test_generate.py +++ b/tests/plugins/test_generate.py @@ -88,10 +88,11 @@ class Schema(Enum): Schema.APP_INTERFACE, ], [ - "enums", + "github", {}, { - "github_invitations": GQLDefinitionType.QUERY, + "invitations_enum": GQLDefinitionType.QUERY, + "issues_datetime": GQLDefinitionType.QUERY, }, {}, Schema.GITHUB,