Skip to content

Commit

Permalink
rename api to graphql_api
Browse files Browse the repository at this point in the history
  • Loading branch information
Nina Bernick committed Jul 25, 2024
1 parent cd6a272 commit 54c0c0e
Show file tree
Hide file tree
Showing 29 changed files with 88 additions and 88 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -249,7 +249,7 @@ pyrightconfig.json
.env.localdev

# Codegen on test app
test_app/api/*
test_app/graphql_api/*
test_app/database/*
test_app/cerbos/*
test_app/support/*
Expand Down
2 changes: 1 addition & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ repos:
rev: "v1.10.0"
hooks:
- id: mypy
exclude: "platformics/thirdparty|platformics/api/relay"
exclude: "platformics/thirdparty|platformics/graphql_api/relay"
additional_dependencies: ["types-PyYAML", "types-dateparser", "types-requests"]
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.5.0
Expand Down
12 changes: 6 additions & 6 deletions platformics/codegen/generator.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@

DIR_CODEGEN = [
"support",
"api/types",
"api/helpers",
"graphql_api/types",
"graphql_api/helpers",
"database/models",
"database/migrations",
"database/migrations/versions",
Expand Down Expand Up @@ -106,8 +106,8 @@ def generate_entity_import_files(
"database/models/__init__.py",
"database/migrations/env.py",
"database/migrations/script.py.mako",
"api/queries.py",
"api/mutations.py",
"graphql_api/queries.py",
"graphql_api/mutations.py",
]
classes = view.entities
for filename in import_templates:
Expand Down Expand Up @@ -156,7 +156,7 @@ def generate(schemafile: str, output_prefix: str, render_files: bool, template_o
)
generate_entity_subclass_files(
output_prefix,
"api/types/class_name.py",
"graphql_api/types/class_name.py",
environment,
wrapped_view,
render_files=render_files,
Expand Down Expand Up @@ -184,7 +184,7 @@ def generate(schemafile: str, output_prefix: str, render_files: bool, template_o
)
generate_entity_subclass_files(
output_prefix,
"api/helpers/class_name.py",
"graphql_api/helpers/class_name.py",
environment,
wrapped_view,
render_files=render_files,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Define GraphQL types and helper functions for supporting GROUPBY queries.

Auto-gereanted by running 'make codegen'. Do not edit.
Make changes to the template codegen/templates/api/groupby_helpers.py.j2 instead.
Make changes to the template codegen/templates/graphql_api/groupby_helpers.py.j2 instead.
"""
{% set related_fields = cls.related_fields | unique(attribute='related_class.name') | list %}
{% set ignored_fields = ["File", "Entity", cls.name] %}
Expand All @@ -23,7 +23,7 @@ from support.enums import

{%- for field in cls.related_fields %}
{%- if field.related_class.name not in ignored_fields and not field.multivalued and not field.is_virtual_relationship %}
from api.helpers.{{ field.related_class.snake_name }} import {{ field.related_class.name }}GroupByOptions, build_{{ field.related_class.snake_name }}_groupby_output
from graphql_api.helpers.{{ field.related_class.snake_name }} import {{ field.related_class.name }}GroupByOptions, build_{{ field.related_class.snake_name }}_groupby_output
{%- endif %}
{%- endfor %}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@
GraphQL mutations for files and entities

Auto-generated by running 'make codegen'. Do not edit.
Make changes to the template codegen/templates/api/mutations.py.j2 instead.
Make changes to the template codegen/templates/graphql_api/mutations.py.j2 instead.
"""

import strawberry
from typing import Sequence
{%- if render_files %}
from platformics.api.files import File, create_file, upload_file, upload_temporary_file, mark_upload_complete, concatenate_files, SignedURL, MultipartUploadResponse
from platformics.graphql_api.files import File, create_file, upload_file, upload_temporary_file, mark_upload_complete, concatenate_files, SignedURL, MultipartUploadResponse
{%- endif %}

{%- for class in classes %}
from api.types.{{ class.snake_name }} import {{ class.name }}, {%- if class.create_fields %}create_{{ class.snake_name }}, {%- endif %}{%- if class.mutable_fields %}update_{{ class.snake_name }}, {%- endif %}delete_{{ class.snake_name }}
from graphql_api.types.{{ class.snake_name }} import {{ class.name }}, {%- if class.create_fields %}create_{{ class.snake_name }}, {%- endif %}{%- if class.mutable_fields %}update_{{ class.snake_name }}, {%- endif %}delete_{{ class.snake_name }}
{%- endfor %}

@strawberry.type
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@
Supported GraphQL queries for files and entities

Auto-generated by running 'make codegen'. Do not edit.
Make changes to the template codegen/templates/api/queries.py.j2 instead.
Make changes to the template codegen/templates/graphql_api/queries.py.j2 instead.
"""

import strawberry
from platformics.api import relay
from platformics.graphql_api import relay
from typing import Sequence, List
{%- if render_files %}
from platformics.api.files import File, resolve_files
from platformics.graphql_api.files import File, resolve_files
{%- endif %}
{%- for class in classes %}
from api.types.{{ class.snake_name }} import {{ class.name }}, resolve_{{ class.plural_snake_name }}, {{ class.name }}Aggregate, resolve_{{ class.plural_snake_name }}_aggregate
from graphql_api.types.{{ class.snake_name }} import {{ class.name }}, resolve_{{ class.plural_snake_name }}, {{ class.name }}Aggregate, resolve_{{ class.plural_snake_name }}_aggregate
{%- endfor %}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
GraphQL type for {{cls.name}}

Auto-generated by running 'make codegen'. Do not edit.
Make changes to the template codegen/templates/api/types/class_name.py.j2 instead.
Make changes to the template codegen/templates/graphql_api/types/class_name.py.j2 instead.
"""

# ruff: noqa: E501 Line too long
Expand All @@ -17,35 +17,35 @@ import platformics.database.models as base_db
import database.models as db
import strawberry
import datetime
from platformics.api.core.query_builder import get_db_rows, get_aggregate_db_rows
from platformics.graphql_api.core.query_builder import get_db_rows, get_aggregate_db_rows
{%- if cls.create_fields %}
from validators.{{cls.snake_name}} import {{cls.name}}CreateInputValidator
{%- endif %}
{%- if cls.mutable_fields %}
from validators.{{cls.snake_name}} import {{cls.name}}UpdateInputValidator
{%- endif %}
{%- if render_files %}
from platformics.api.files import File, FileWhereClause
from platformics.graphql_api.files import File, FileWhereClause
{%- endif %}
from api.helpers.{{ cls.snake_name }} import {{ cls.name }}GroupByOptions, build_{{ cls.snake_name }}_groupby_output
from platformics.api.types.entities import EntityInterface
from graphql_api.helpers.{{ cls.snake_name }} import {{ cls.name }}GroupByOptions, build_{{ cls.snake_name }}_groupby_output
from platformics.graphql_api.types.entities import EntityInterface
{%- for related_field in related_fields %}
{%- if related_field.related_class.name not in ignored_fields and related_field.multivalued %}
from api.types.{{related_field.related_class.snake_name}} import ({{related_field.related_class.name}}Aggregate, format_{{related_field.related_class.snake_name}}_aggregate_output)
from graphql_api.types.{{related_field.related_class.snake_name}} import ({{related_field.related_class.name}}Aggregate, format_{{related_field.related_class.snake_name}}_aggregate_output)
{%- endif %}
{%- endfor %}
from cerbos.sdk.client import CerbosClient
from cerbos.sdk.model import Principal, Resource
from fastapi import Depends
from platformics.api.core.errors import PlatformicsError
from platformics.api.core.deps import get_cerbos_client, get_db_session, require_auth_principal, is_system_user
from platformics.api.core.query_input_types import aggregator_map, orderBy, EnumComparators, DatetimeComparators, IntComparators, FloatComparators, StrComparators, UUIDComparators, BoolComparators
from platformics.api.core.strawberry_extensions import DependencyExtension
from platformics.graphql_api.core.errors import PlatformicsError
from platformics.graphql_api.core.deps import get_cerbos_client, get_db_session, require_auth_principal, is_system_user
from platformics.graphql_api.core.query_input_types import aggregator_map, orderBy, EnumComparators, DatetimeComparators, IntComparators, FloatComparators, StrComparators, UUIDComparators, BoolComparators
from platformics.graphql_api.core.strawberry_extensions import DependencyExtension
from platformics.security.authorization import CerbosAction, get_resource_query
from sqlalchemy import inspect
from sqlalchemy.engine.row import RowMapping
from sqlalchemy.ext.asyncio import AsyncSession
from platformics.api import relay
from platformics.graphql_api import relay
from strawberry.field import StrawberryField
from strawberry.types import Info
from support.limit_offset import LimitOffsetClause
Expand All @@ -68,7 +68,7 @@ T = typing.TypeVar("T")
if TYPE_CHECKING:
{%- for related_field in related_fields %}
{%- if related_field.related_class.name not in ignored_fields %}
from api.types.{{related_field.related_class.snake_name}} import ({{related_field.related_class.name}}OrderByClause, {{related_field.related_class.name}}WhereClause, {{related_field.related_class.name}})
from graphql_api.types.{{related_field.related_class.snake_name}} import ({{related_field.related_class.name}}OrderByClause, {{related_field.related_class.name}}WhereClause, {{related_field.related_class.name}})
{%- endif %}
{%- endfor %}
pass
Expand All @@ -94,22 +94,22 @@ These are batching functions for loading related objects to avoid N+1 queries.
{%- if related_field.inverse and related_field.related_class.name not in ignored_fields %}
{%- if related_field.multivalued %}
@relay.connection(
relay.ListConnection[Annotated["{{ related_field.type }}", strawberry.lazy("api.types.{{ related_field.related_class.snake_name }}")]] # type:ignore
relay.ListConnection[Annotated["{{ related_field.type }}", strawberry.lazy("graphql_api.types.{{ related_field.related_class.snake_name }}")]] # type:ignore
)
async def load_{{ related_field.related_class.snake_name }}_rows(
root: "{{ cls.name }}",
info: Info,
where: Annotated["{{ related_field.type }}WhereClause", strawberry.lazy("api.types.{{ related_field.related_class.snake_name }}")] | None = None,
order_by: Optional[list[Annotated["{{ related_field.type }}OrderByClause", strawberry.lazy("api.types.{{ related_field.related_class.snake_name }}")]]] = [],
) -> Sequence[Annotated["{{ related_field.type }}", strawberry.lazy("api.types.{{ related_field.related_class.snake_name }}")]]:
where: Annotated["{{ related_field.type }}WhereClause", strawberry.lazy("graphql_api.types.{{ related_field.related_class.snake_name }}")] | None = None,
order_by: Optional[list[Annotated["{{ related_field.type }}OrderByClause", strawberry.lazy("graphql_api.types.{{ related_field.related_class.snake_name }}")]]] = [],
) -> Sequence[Annotated["{{ related_field.type }}", strawberry.lazy("graphql_api.types.{{ related_field.related_class.snake_name }}")]]:
{%- else %}
@strawberry.field
async def load_{{ related_field.related_class.snake_name }}_rows(
root: "{{ cls.name }}",
info: Info,
where: Annotated["{{ related_field.type }}WhereClause", strawberry.lazy("api.types.{{ related_field.related_class.snake_name }}")] | None = None,
order_by: Optional[list[Annotated["{{ related_field.type }}OrderByClause", strawberry.lazy("api.types.{{ related_field.related_class.snake_name }}")]]] = [],
) -> Optional[Annotated["{{ related_field.type }}", strawberry.lazy("api.types.{{ related_field.related_class.snake_name }}")]]:
where: Annotated["{{ related_field.type }}WhereClause", strawberry.lazy("graphql_api.types.{{ related_field.related_class.snake_name }}")] | None = None,
order_by: Optional[list[Annotated["{{ related_field.type }}OrderByClause", strawberry.lazy("graphql_api.types.{{ related_field.related_class.snake_name }}")]]] = [],
) -> Optional[Annotated["{{ related_field.type }}", strawberry.lazy("graphql_api.types.{{ related_field.related_class.snake_name }}")]]:
{%- endif %}
dataloader = info.context["sqlalchemy_loader"]
mapper = inspect(db.{{ cls.name }})
Expand All @@ -132,8 +132,8 @@ async def load_{{ related_field.related_class.snake_name }}_rows(
async def load_{{ related_field.related_class.snake_name }}_aggregate_rows(
root: "{{ cls.name }}",
info: Info,
where: Annotated["{{ related_field.type }}WhereClause", strawberry.lazy("api.types.{{ related_field.related_class.snake_name }}")] | None = None,
) -> Optional[Annotated["{{ related_field.related_class.name }}Aggregate", strawberry.lazy("api.types.{{ related_field.related_class.snake_name }}")]]:
where: Annotated["{{ related_field.type }}WhereClause", strawberry.lazy("graphql_api.types.{{ related_field.related_class.snake_name }}")] | None = None,
) -> Optional[Annotated["{{ related_field.related_class.name }}Aggregate", strawberry.lazy("graphql_api.types.{{ related_field.related_class.snake_name }}")]]:
selections = info.selected_fields[0].selections[0].selections
dataloader = info.context["sqlalchemy_loader"]
mapper = inspect(db.{{ cls.name }})
Expand All @@ -159,8 +159,8 @@ def load_files_from(attr_name: str) -> Callable:
async def load_files(
root: "{{ cls.name }}",
info: Info,
where: Annotated["FileWhereClause", strawberry.lazy("platformics.api.files")] | None = None,
) -> Optional[Annotated["File", strawberry.lazy("platformics.api.files")]]:
where: Annotated["FileWhereClause", strawberry.lazy("platformics.graphql_api.files")] | None = None,
) -> Optional[Annotated["File", strawberry.lazy("platformics.graphql_api.files")]]:
"""
Given a list of {{ cls.name }} IDs for a certain file type, return related Files
"""
Expand Down Expand Up @@ -208,7 +208,7 @@ class {{ cls.name }}WhereClause(TypedDict):
{%- elif attr.type == "date" %}
{{ attr.name }}: Optional[DatetimeComparators] | None
{%- elif attr.inverse %}
{{ attr.name }}: Optional[Annotated["{{ attr.type }}WhereClause", strawberry.lazy("api.types.{{ attr.related_class.snake_name }}")]] | None
{{ attr.name }}: Optional[Annotated["{{ attr.type }}WhereClause", strawberry.lazy("graphql_api.types.{{ attr.related_class.snake_name }}")]] | None
{%- elif attr.type == cls.name %}
{{ attr.name }}_id: Optional[UUIDComparators] | None
{%- endif %}
Expand All @@ -222,7 +222,7 @@ class {{ cls.name }}OrderByClause(TypedDict):
{%- for attr in cls.visible_fields %}
{%- if attr.type != "File" and not attr.multivalued %}
{%- if attr.inverse %}
{{ attr.name }}: Optional[Annotated["{{ attr.type }}OrderByClause", strawberry.lazy("api.types.{{ attr.related_class.snake_name }}")]] | None
{{ attr.name }}: Optional[Annotated["{{ attr.type }}OrderByClause", strawberry.lazy("graphql_api.types.{{ attr.related_class.snake_name }}")]] | None
{%- else %}
{{ attr.name }}: Optional[orderBy] | None
{%- endif %}
Expand Down Expand Up @@ -260,13 +260,13 @@ class {{ cls.name }}(EntityInterface):
{{ attr.name }}: {{ getType("datetime.datetime", attr.required) }}
{%- elif attr.type == "File" %}
{{ attr.name }}_id: Optional[strawberry.ID]
{{ attr.name }}: Optional[Annotated["File", strawberry.lazy("platformics.api.files")]] = load_files_from("{{ attr.name }}") # type: ignore
{{ attr.name }}: Optional[Annotated["File", strawberry.lazy("platformics.graphql_api.files")]] = load_files_from("{{ attr.name }}") # type: ignore
{%- elif attr.type == cls.name %}
{{ attr.name }}_id: Optional[strawberry.ID]
{%- elif attr.inverse %}
{{ attr.name }}: {{ "Sequence" if attr.multivalued else "Optional" }}[Annotated["{{ attr.type }}", strawberry.lazy("api.types.{{ attr.related_class.snake_name }}")]] = load_{{ attr.related_class.snake_name }}_rows # type:ignore
{{ attr.name }}: {{ "Sequence" if attr.multivalued else "Optional" }}[Annotated["{{ attr.type }}", strawberry.lazy("graphql_api.types.{{ attr.related_class.snake_name }}")]] = load_{{ attr.related_class.snake_name }}_rows # type:ignore
{%- if attr.multivalued %}
{{ attr.name }}_aggregate : Optional[Annotated["{{ attr.related_class.name }}Aggregate", strawberry.lazy("api.types.{{ attr.related_class.snake_name }}")]] = load_{{ attr.related_class.snake_name }}_aggregate_rows # type:ignore
{{ attr.name }}_aggregate : Optional[Annotated["{{ attr.related_class.name }}Aggregate", strawberry.lazy("graphql_api.types.{{ attr.related_class.snake_name }}")]] = load_{{ attr.related_class.snake_name }}_aggregate_rows # type:ignore
{%- endif %}
{%- endif %}
{%- endfor %}
Expand Down Expand Up @@ -420,7 +420,7 @@ async def resolve_{{ cls.plural_snake_name }}(
limit_offset: Optional[LimitOffsetClause] = None,
) -> typing.Sequence[{{ cls.name }}]:
"""
Resolve {{ cls.name }} objects. Used for queries (see api/queries.py).
Resolve {{ cls.name }} objects. Used for queries (see graphql_api/queries.py).
"""
limit = limit_offset["limit"] if limit_offset and "limit" in limit_offset else None
offset = limit_offset["offset"] if limit_offset and "offset" in limit_offset else None
Expand Down Expand Up @@ -483,7 +483,7 @@ async def resolve_{{ cls.plural_snake_name }}_aggregate(
# TODO: add support for groupby, limit/offset
) -> {{ cls.name }}Aggregate:
"""
Aggregate values for {{ cls.name }} objects. Used for queries (see api/queries.py).
Aggregate values for {{ cls.name }} objects. Used for queries (see graphql_api/queries.py).
"""
# Get the selected aggregate functions and columns to operate on, and groupby options if any were provided.
# TODO: not sure why selected_fields is a list
Expand All @@ -509,7 +509,7 @@ async def create_{{ cls.snake_name }}(
is_system_user: bool = Depends(is_system_user),
) -> db.{{ cls.name }}:
"""
Create a new {{ cls.name }} object. Used for mutations (see api/mutations.py).
Create a new {{ cls.name }} object. Used for mutations (see graphql_api/mutations.py).
"""
validated = {{cls.name}}CreateInputValidator(**input.__dict__)
params = validated.model_dump()
Expand Down Expand Up @@ -569,7 +569,7 @@ async def update_{{ cls.snake_name }}(
is_system_user: bool = Depends(is_system_user),
) -> Sequence[db.{{ cls.name }}]:
"""
Update {{ cls.name }} objects. Used for mutations (see api/mutations.py).
Update {{ cls.name }} objects. Used for mutations (see graphql_api/mutations.py).
"""
validated = {{cls.name}}UpdateInputValidator(**input.__dict__)
params = validated.model_dump()
Expand Down Expand Up @@ -642,7 +642,7 @@ async def delete_{{ cls.snake_name }}(
principal: Principal = Depends(require_auth_principal),
) -> Sequence[db.{{ cls.name }}]:
"""
Delete {{ cls.name }} objects. Used for mutations (see api/mutations.py).
Delete {{ cls.name }} objects. Used for mutations (see graphql_api/mutations.py).
"""
# Fetch entities for deletion, if we have access to them
entities = await get_db_rows(db.{{ cls.name }}, session, cerbos_client, principal, where, [], CerbosAction.DELETE)
Expand Down
2 changes: 1 addition & 1 deletion platformics/database/models/file.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,7 @@ def set_s3_client(s3_client: S3Client) -> None:
entity_field_name: Mapped[str] = mapped_column(String, nullable=False)
entity: Mapped[Entity] = relationship(Entity, foreign_keys=entity_id)

# TODO: Changes here need to be reflected in api/files.py
# TODO: Changes here need to be reflected in graphql_api/files.py
status: Mapped[FileStatus] = mapped_column(Enum(FileStatus, native_enum=False), nullable=False)
protocol: Mapped[FileAccessProtocol] = mapped_column(Enum(FileAccessProtocol, native_enum=False), nullable=False)
namespace: Mapped[str] = mapped_column(String, nullable=False)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
from sqlalchemy.ext.asyncio import AsyncSession
from starlette.requests import Request

from platformics.api.core.error_handler import PlatformicsError
from platformics.graphql_api.core.error_handler import PlatformicsError
from platformics.database.connect import AsyncDB, init_async_db
from platformics.security.token_auth import get_token_claims
from platformics.settings import APISettings
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
from pydantic import ValidationError
from strawberry.extensions.base_extension import SchemaExtension

from platformics.api.core.errors import PlatformicsError
from platformics.graphql_api.core.errors import PlatformicsError


class ExceptionHandler(ABC):
Expand Down
File renamed without changes.
Loading

0 comments on commit 54c0c0e

Please sign in to comment.