chores: updates-and-linters (#1868)

* switch to ruff

* add ruff

* run ruff --fix

* update ruff

* resolve ruff errors

* drop isort from CI

* fix decorator order
This commit is contained in:
Hayden
2022-11-30 20:20:28 -09:00
committed by GitHub
parent fd0e02a5c6
commit 82dc586bac
62 changed files with 362 additions and 536 deletions

View File

@@ -1,3 +1 @@
from typing import Optional
NoneFloat = Optional[float]
NoneFloat = float | None

View File

@@ -1,5 +1,4 @@
from datetime import datetime
from typing import Optional
from pydantic import BaseModel
@@ -20,9 +19,9 @@ class ImportJob(BackupOptions):
class CreateBackup(BaseModel):
tag: Optional[str]
tag: str | None
options: BackupOptions
templates: Optional[list[str]]
templates: list[str] | None
class BackupFile(BaseModel):

View File

@@ -1,16 +1,14 @@
from typing import Optional
from pydantic.main import BaseModel
class ImportBase(BaseModel):
name: str
status: bool
exception: Optional[str]
exception: str | None
class RecipeImport(ImportBase):
slug: Optional[str]
slug: str | None
class CommentImport(ImportBase):

View File

@@ -1,5 +1,3 @@
from typing import Optional
from pydantic import validator
from slugify import slugify
@@ -10,7 +8,7 @@ from ..recipe.recipe_category import RecipeCategoryResponse
class CustomPageBase(MealieModel):
name: str
slug: Optional[str]
slug: str | None
position: int
categories: list[RecipeCategoryResponse] = []

View File

@@ -1,5 +1,3 @@
from typing import Optional
from pydantic import UUID4
from mealie.schema._mealie import MealieModel
@@ -10,4 +8,4 @@ from .group_preferences import UpdateGroupPreferences
class GroupAdminUpdate(MealieModel):
id: UUID4
name: str
preferences: Optional[UpdateGroupPreferences] = None
preferences: UpdateGroupPreferences | None = None

View File

@@ -1,5 +1,4 @@
from datetime import date
from typing import Optional
from pydantic import validator
@@ -7,16 +6,16 @@ from mealie.schema._mealie import MealieModel
class MealIn(MealieModel):
slug: Optional[str]
name: Optional[str]
description: Optional[str]
slug: str | None
name: str | None
description: str | None
class Config:
orm_mode = True
class MealDayIn(MealieModel):
date: Optional[date]
date: date | None
meals: list[MealIn]
class Config:
@@ -48,7 +47,7 @@ class MealPlanIn(MealieModel):
class MealPlanOut(MealPlanIn):
id: int
shopping_list: Optional[int]
shopping_list: int | None
class Config:
orm_mode = True

View File

@@ -1,6 +1,5 @@
from datetime import date
from enum import Enum
from typing import Optional
from uuid import UUID
from pydantic import validator
@@ -27,7 +26,7 @@ class CreatePlanEntry(MealieModel):
entry_type: PlanEntryType = PlanEntryType.breakfast
title: str = ""
text: str = ""
recipe_id: Optional[UUID]
recipe_id: UUID | None
@validator("recipe_id", always=True)
@classmethod
@@ -51,7 +50,7 @@ class SavePlanEntry(CreatePlanEntry):
class ReadPlanEntry(UpdatePlanEntry):
recipe: Optional[RecipeSummary]
recipe: RecipeSummary | None
class Config:
orm_mode = True

View File

@@ -1,5 +1,3 @@
from typing import Optional
from pydantic.utils import GetterDict
from mealie.db.models.group.shopping_list import ShoppingList
@@ -7,7 +5,7 @@ from mealie.schema._mealie import MealieModel
class ListItem(MealieModel):
title: Optional[str]
title: str | None
text: str = ""
quantity: int = 1
checked: bool = False
@@ -18,7 +16,7 @@ class ListItem(MealieModel):
class ShoppingListIn(MealieModel):
name: str
group: Optional[str]
group: str | None
items: list[ListItem]

View File

@@ -1,12 +1,10 @@
from typing import Optional
from mealie.schema._mealie import MealieModel
class RecipeAsset(MealieModel):
name: str
icon: str
file_name: Optional[str]
file_name: str | None
class Config:
orm_mode = True

View File

@@ -65,7 +65,7 @@ class RecipeTagResponse(RecipeCategoryResponse):
pass
from mealie.schema.recipe.recipe import RecipeSummary
from mealie.schema.recipe.recipe import RecipeSummary # noqa: E402
RecipeCategoryResponse.update_forward_refs()
RecipeTagResponse.update_forward_refs()

View File

@@ -1,5 +1,4 @@
from datetime import datetime
from typing import Optional
from pydantic import UUID4
@@ -9,7 +8,7 @@ from mealie.schema.response.pagination import PaginationBase
class UserBase(MealieModel):
id: UUID4
username: Optional[str]
username: str | None
admin: bool
class Config:

View File

@@ -1,16 +1,14 @@
from typing import Optional
from mealie.schema._mealie import MealieModel
class Nutrition(MealieModel):
calories: Optional[str]
fat_content: Optional[str]
protein_content: Optional[str]
carbohydrate_content: Optional[str]
fiber_content: Optional[str]
sodium_content: Optional[str]
sugar_content: Optional[str]
calories: str | None
fat_content: str | None
protein_content: str | None
carbohydrate_content: str | None
fiber_content: str | None
sodium_content: str | None
sugar_content: str | None
class Config:
orm_mode = True

View File

@@ -1,4 +1,3 @@
from typing import Optional
from uuid import UUID, uuid4
from pydantic import UUID4, Field
@@ -11,15 +10,15 @@ class IngredientReferences(MealieModel):
A list of ingredient references.
"""
reference_id: Optional[UUID4]
reference_id: UUID4 | None
class Config:
orm_mode = True
class RecipeStep(MealieModel):
id: Optional[UUID] = Field(default_factory=uuid4)
title: Optional[str] = ""
id: UUID | None = Field(default_factory=uuid4)
title: str | None = ""
text: str
ingredient_references: list[IngredientReferences] = []

View File

@@ -1,5 +1,3 @@
import typing
from pydantic import UUID4
from mealie.schema._mealie import MealieModel
@@ -23,7 +21,7 @@ class RecipeToolOut(RecipeToolCreate):
class RecipeToolResponse(RecipeToolOut):
recipes: typing.List["Recipe"] = []
recipes: list["Recipe"] = []
class Config:
orm_mode = True

View File

@@ -62,7 +62,14 @@ class QueryFilter:
self.filter_components = QueryFilter._parse_base_components_into_filter_components(base_components)
def __repr__(self) -> str:
return f'<<{" ".join([str(component.value if isinstance(component, LogicalOperator) else component) for component in self.filter_components])}>>'
joined = " ".join(
[
str(component.value if isinstance(component, LogicalOperator) else component)
for component in self.filter_components
],
)
return f"<<{joined}>>"
def filter_query(self, query: Query, model: type[Model]) -> Query:
segments: list[str] = []
@@ -76,8 +83,9 @@ class QueryFilter:
segments.append(component.value)
continue
# for some reason typing doesn't like the lsep and rsep literals, so we explicitly mark this as a filter component instead
# cast doesn't actually do anything at runtime
# for some reason typing doesn't like the lsep and rsep literals, so
# we explicitly mark this as a filter component instead cast doesn't
# actually do anything at runtime
component = cast(QueryFilterComponent, component)
if not hasattr(model, component.attribute_name):

View File

@@ -1,5 +1,3 @@
from typing import Optional
from pydantic import BaseModel
from mealie.schema._mealie import MealieModel
@@ -8,10 +6,10 @@ from mealie.schema._mealie import MealieModel
class ErrorResponse(BaseModel):
message: str
error: bool = True
exception: Optional[str] = None
exception: str | None = None
@classmethod
def respond(cls, message: str, exception: Optional[str] = None) -> dict:
def respond(cls, message: str, exception: str | None = None) -> dict:
"""
This method is an helper to create an object and convert to a dictionary
in the same call, for use while providing details to a HTTPException

View File

@@ -1,5 +1,3 @@
from typing import Optional
from pydantic import UUID4, BaseModel
from pydantic.types import constr
@@ -12,8 +10,8 @@ class Token(BaseModel):
class TokenData(BaseModel):
user_id: Optional[UUID4]
username: Optional[constr(to_lower=True, strip_whitespace=True)] = None # type: ignore
user_id: UUID4 | None
username: constr(to_lower=True, strip_whitespace=True) | None = None # type: ignore
class UnlockResults(MealieModel):

View File

@@ -1,6 +1,6 @@
from datetime import datetime, timedelta
from pathlib import Path
from typing import Any, Optional
from typing import Any
from uuid import UUID
from pydantic import UUID4, Field, validator
@@ -62,13 +62,13 @@ class GroupBase(MealieModel):
class UserBase(MealieModel):
username: Optional[str]
full_name: Optional[str] = None
username: str | None
full_name: str | None = None
email: constr(to_lower=True, strip_whitespace=True) # type: ignore
admin: bool = False
group: Optional[str]
group: str | None
advanced: bool = False
favorite_recipes: Optional[list[str]] = []
favorite_recipes: list[str] | None = []
can_invite: bool = False
can_manage: bool = False
@@ -103,9 +103,9 @@ class UserOut(UserBase):
id: UUID4
group: str
group_id: UUID4
tokens: Optional[list[LongLiveTokenOut]]
tokens: list[LongLiveTokenOut] | None
cache_key: str
favorite_recipes: Optional[list[str]] = []
favorite_recipes: list[str] | None = []
class Config:
orm_mode = True
@@ -171,14 +171,14 @@ class PrivateUser(UserOut):
class UpdateGroup(GroupBase):
id: UUID4
name: str
categories: Optional[list[CategoryBase]] = []
categories: list[CategoryBase] | None = []
webhooks: list[Any] = []
class GroupInDB(UpdateGroup):
users: Optional[list[UserOut]]
preferences: Optional[ReadGroupPreferences] = None
users: list[UserOut] | None
preferences: ReadGroupPreferences | None = None
class Config:
orm_mode = True