diff --git a/.gitignore b/.gitignore index b41a4ffda..8cd604add 100644 --- a/.gitignore +++ b/.gitignore @@ -63,4 +63,4 @@ web/src/__generated__ Pulumi*.yaml # performance profile files -profiles \ No newline at end of file +profiles diff --git a/api/graphql/filters.py b/api/graphql/filters.py index b4f3c0a91..f73147d1b 100644 --- a/api/graphql/filters.py +++ b/api/graphql/filters.py @@ -89,8 +89,10 @@ def to_internal_filter_mapped(self, f: Callable[[T], Y]) -> GenericFilter[Y]: # issue in strawberry graphql where the usage of generics in input types causes major # slowdowns. # @see https://github.com/strawberry-graphql/strawberry/issues/3544 -@strawberry.input(description='Filter for GraphQL queries') +@strawberry.input(description='String filter for GraphQL queries') class GraphQLFilterStr(GraphQLFilter[str]): + """String filter for GraphQL queries""" + eq: str | None = None in_: list[str] | None = None nin: list[str] | None = None @@ -102,8 +104,10 @@ class GraphQLFilterStr(GraphQLFilter[str]): icontains: str | None = None -@strawberry.input(description='Filter for GraphQL queries') +@strawberry.input(description='Int filter for GraphQL queries') class GraphQLFilterInt(GraphQLFilter[int]): + """Int filter for GraphQL queries""" + eq: int | None = None in_: list[int] | None = None nin: list[int] | None = None @@ -115,8 +119,10 @@ class GraphQLFilterInt(GraphQLFilter[int]): icontains: int | None = None -@strawberry.input(description='Filter for GraphQL queries') +@strawberry.input(description='Bool filter for GraphQL queries') class GraphQLFilterBool(GraphQLFilter[bool]): + """Bool filter for GraphQL queries""" + eq: bool | None = None in_: list[bool] | None = None nin: list[bool] | None = None @@ -128,8 +134,10 @@ class GraphQLFilterBool(GraphQLFilter[bool]): icontains: bool | None = None -@strawberry.input(description='Filter for GraphQL queries') +@strawberry.input(description='Analysis status filter for GraphQL queries') class GraphQLFilterAnalysisStatus(GraphQLFilter[AnalysisStatus]): + """Analysis status filter for GraphQL queries""" + eq: AnalysisStatus | None = None in_: list[AnalysisStatus] | None = None nin: list[AnalysisStatus] | None = None @@ -141,8 +149,10 @@ class GraphQLFilterAnalysisStatus(GraphQLFilter[AnalysisStatus]): icontains: AnalysisStatus | None = None -@strawberry.input(description='Filter for GraphQL queries') +@strawberry.input(description='Datetime filter for GraphQL queries') class GraphQLFilterDatetime(GraphQLFilter[datetime.datetime]): + """Datetime filter for GraphQL queries""" + eq: datetime.datetime | None = None in_: list[datetime.datetime] | None = None nin: list[datetime.datetime] | None = None @@ -154,8 +164,10 @@ class GraphQLFilterDatetime(GraphQLFilter[datetime.datetime]): icontains: datetime.datetime | None = None -@strawberry.input(description='Filter for GraphQL queries') +@strawberry.input(description='Date filter for GraphQL queries') class GraphQLFilterDate(GraphQLFilter[datetime.date]): + """Date filter for GraphQL queries""" + eq: datetime.date | None = None in_: list[datetime.date] | None = None nin: list[datetime.date] | None = None diff --git a/api/server.py b/api/server.py index 611970242..832ca5bb3 100644 --- a/api/server.py +++ b/api/server.py @@ -59,15 +59,16 @@ async def app_lifespan(_: FastAPI): from pyinstrument import Profiler from pyinstrument.renderers.speedscope import SpeedscopeRenderer - @app.middleware("http") + @app.middleware('http') async def profile_request(request: Request, call_next): - profiler = Profiler(async_mode="enabled") + """Middleware to allow profiling of requests to the api""" + profiler = Profiler(async_mode='enabled') profiler.start() resp = await call_next(request) profiler.stop() - text_output = profiler.output_text() if 'text' in PROFILE_REQUESTS_OUTPUT: + text_output = profiler.output_text() print(text_output) timestamp = datetime.datetime.now().replace(microsecond=0).isoformat() diff --git a/docs/installation.md b/docs/installation.md index 712ad964d..cb2290afb 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -429,4 +429,4 @@ If you are working on performance issues it can be handy to generate a report th There are a few different options for outputting profiles which can be specified in the `SM_PROFILE_REQUESTS_OUTPUT` environment variable. The possible values are `text` which will print the profiling results to stdout, `html` which will generate an interactive pyinstrument report, or `json` which will generate a json profiling report which can be dropped into [speedscope](https://www.speedscope.app/) to explore the profile. -You can output multiple report types by specifying the types in a list like: `export SM_PROFILE_REQUESTS_OUTPUT=json,text,html` \ No newline at end of file +You can output multiple report types by specifying the types in a list like: `export SM_PROFILE_REQUESTS_OUTPUT=json,text,html`