Skip to content

Commit d6df081

Browse files
committed
fixed codestyle
1 parent dacf8c7 commit d6df081

File tree

8 files changed

+56
-30
lines changed

8 files changed

+56
-30
lines changed

docs/database/insert_delete_modify.md

+6
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,12 @@ With `db.add` you can insert Date into the Database
77
```python
88
from fastapi_framework.database import db
99

10+
1011
class MyModel(db.Base):
1112
# The Model Code
1213
pass
1314

15+
1416
async def main():
1517
obj: MyModel = MyModel(x=1)
1618
await db.add(obj)
@@ -23,10 +25,12 @@ With `db.delete` you can delete Data from your Database
2325
```python
2426
from fastapi_framework.database import db, select
2527

28+
2629
class MyModel(db.Base):
2730
# The Model Code
2831
pass
2932

33+
3034
async def main():
3135
model: MyModel = await select(MyModel).filter_by(x=1)
3236
await db.delete(model)
@@ -39,10 +43,12 @@ You can modify Data in your Database by change the Model Class Attribute
3943
```python
4044
from fastapi_framework.database import db, select
4145

46+
4247
class MyModel(db.Base):
4348
# The Model Code
4449
pass
4550

51+
4652
async def main():
4753
model: MyModel = await select(MyModel).filter_by(x=1)
4854
model.x = 1

docs/database/query.md

+19-6
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ from fastapi_framework.database import select, filter_by
1010
```python
1111
from fastapi_framework.database import db, select
1212

13+
1314
class MyModel(db.Base):
1415
# The Model Code
1516
pass
1617

18+
1719
async def main():
18-
query = select(MyModel) # Selects all from the MyModel table
20+
query = select(MyModel) # Selects all from the MyModel table
1921
```
2022

2123
## Filter By
@@ -25,12 +27,14 @@ async def main():
2527
```python
2628
from fastapi_framework.database import db, select, filter_by
2729

30+
2831
class MyModel(db.Base):
2932
# The Model Code
3033
pass
3134

35+
3236
async def main():
33-
query = filter_by(MyModel, id=1) # Selects all from the MyModel table where id is 1
37+
query = filter_by(MyModel, id=1) # Selects all from the MyModel table where id is 1
3438
# Same here:
3539
query = select(MyModel).filter_by(id=1)
3640
```
@@ -45,27 +49,32 @@ Could be `None`
4549
```python
4650
from fastapi_framework.database import db, select
4751

52+
4853
class MyModel(db.Base):
4954
# The Model Code
5055
pass
5156

57+
5258
async def main():
53-
query = select(MyModel) # Your Query
59+
query = select(MyModel) # Your Query
5460
result: MyModel = await db.first(query)
5561
```
5662

5763
### Get All Element
5864
Returns all results for the query.
5965
Could be `[]`
66+
6067
```python
6168
from fastapi_framework.database import db, select
6269

70+
6371
class MyModel(db.Base):
6472
# The Model Code
6573
pass
6674

75+
6776
async def main():
68-
query = select(MyModel) # Your Query
77+
query = select(MyModel) # Your Query
6978
result: list[MyModel] = await db.all(query)
7079
```
7180

@@ -76,12 +85,14 @@ Checks if data for this query exists
7685
```python
7786
from fastapi_framework.database import db, select
7887

88+
7989
class MyModel(db.Base):
8090
# The Model Code
8191
pass
8292

93+
8394
async def main():
84-
query = select(MyModel) # Your Query
95+
query = select(MyModel) # Your Query
8596
exists: bool = await db.exists(query)
8697
```
8798

@@ -92,12 +103,14 @@ Returns count of matching rows for the query
92103
```python
93104
from fastapi_framework.database import db, select
94105

106+
95107
class MyModel(db.Base):
96108
# The Model Code
97109
pass
98110

111+
99112
async def main():
100-
query = select(MyModel) # Your Query
113+
query = select(MyModel) # Your Query
101114
count: int = await db.count(query)
102115
```
103116

fastapi_framework/config.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -97,15 +97,15 @@ def __new__(mcs, name, bases, dct):
9797
if config_key in config.keys():
9898
type_hint = config_entries[key].type_hint
9999
if type_hint:
100-
value = type_hint(config[config_key]) if config[config_key] is not None else None
100+
cfg_value = type_hint(config[config_key]) if config[config_key] is not None else None
101101
else:
102-
value = config[config_key]
102+
cfg_value = config[config_key]
103103
for middleware in config_entries[key].middlewares:
104-
value = middleware(value)
105-
setattr(config_class, key, value)
104+
cfg_value = middleware(cfg_value)
105+
setattr(config_class, key, cfg_value)
106106
else:
107-
value = config_entries[config_key].default_value
108-
setattr(config_class, key, value)
107+
cfg_value = config_entries[config_key].default_value
108+
setattr(config_class, key, cfg_value)
109109

110110
return config_class
111111

fastapi_framework/database.py

+14-11
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from os import getenv
2-
from typing import TypeVar, Dict
2+
from typing import TypeVar, Dict, Type, TypeAlias
33

44
from dotenv import load_dotenv
55
from sqlalchemy.engine import URL
6-
from sqlalchemy.ext.asyncio import create_async_engine, AsyncEngine, AsyncSession
6+
from sqlalchemy.ext.asyncio import create_async_engine, AsyncEngine, AsyncSession, async_sessionmaker
77
from sqlalchemy.future import select as sa_select
8-
from sqlalchemy.orm import DeclarativeMeta, declarative_base, sessionmaker
8+
from sqlalchemy.orm import DeclarativeMeta, declarative_base, sessionmaker, DeclarativeBase
99
from sqlalchemy.pool import NullPool
1010
from sqlalchemy.sql import Executable
1111
from sqlalchemy.sql.expression import exists as sa_exists, delete as sa_delete, Delete
@@ -40,26 +40,30 @@ def delete(table) -> Delete:
4040
return sa_delete(table)
4141

4242

43+
class Base(DeclarativeBase):
44+
pass
45+
46+
4347
class DB:
4448
"""An async SQLAlchemy ORM wrapper"""
4549

46-
Base: DeclarativeMeta
4750
_engine: AsyncEngine
4851
_session: AsyncSession
4952

50-
def __init__(self, driver: str, options: Dict = {"pool_size": 20, "max_overflow": 20}, **kwargs):
51-
url: str = URL.create(drivername=driver, **kwargs)
53+
def __init__(self, driver: str, options=None, **kwargs):
54+
if options is None:
55+
options = {"pool_size": 20, "max_overflow": 20}
56+
url = URL.create(drivername=driver, **kwargs)
5257
self._engine = create_async_engine(url, echo=True, pool_pre_ping=True, pool_recycle=300, **options)
53-
self.Base = declarative_base()
54-
self._session: AsyncSession = sessionmaker(self._engine, expire_on_commit=False, class_=AsyncSession)()
58+
self._session = async_sessionmaker(self._engine, expire_on_commit=False)()
5559

5660
async def create_tables(self):
5761
"""Creates all Model Tables"""
5862
async with self._engine.begin() as conn:
59-
await conn.run_sync(self.Base.metadata.create_all)
63+
await conn.run_sync(Base.metadata.create_all)
6064

6165
async def add(self, obj: T) -> T:
62-
"""Adds an Row to the Database"""
66+
"""Adds a Row to the Database"""
6367
self._session.add(obj)
6468
return obj
6569

@@ -153,4 +157,3 @@ async def __call__(self) -> DB:
153157

154158

155159
database_dependency: DatabaseDependency = DatabaseDependency()
156-
Base: DeclarativeMeta = database_dependency.db.Base

fastapi_framework/rate_limit.py

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ async def default_callback(headers: Dict):
1515

1616
async def default_get_uuid(request: Request) -> str:
1717
"""Default getter for UUID working with Users IP"""
18+
if request.client is None:
19+
return "unknown-ip"
1820
return f"{request.client.host}"
1921

2022

fastapi_framework/session.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def __init__(
6868
self.session_expire = session_expire
6969

7070
async def _middleware(request: Request, call_next: RequestResponseEndpoint) -> Response:
71-
result: Union[Request, Coroutine] = middleware(self, request, call_next)
71+
result: Union[Response, Coroutine] = middleware(self, request, call_next)
7272
if isinstance(result, Coroutine):
7373
return await result
7474
return result

fastapi_framework/settings.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from os import getenv
22
from typing import Union, Optional
33

4-
from sqlalchemy import Column, String
4+
from sqlalchemy import String
5+
from sqlalchemy.orm import Mapped, mapped_column
56

67
from .redis import redis_dependency, Redis
78
from .database import database_dependency, DB, select, Base
@@ -11,8 +12,8 @@
1112

1213
class SettingsModel(Base):
1314
__tablename__ = "settings"
14-
key: Union[str, Column] = Column(String(255), primary_key=True, unique=True)
15-
value: Union[str, Column] = Column(String())
15+
key: Mapped[str] = mapped_column(String(255), primary_key=True, unique=True)
16+
value: Mapped[str] = mapped_column(String())
1617

1718
@staticmethod
1819
async def create(key: str, value: Union[str, int, float, bool], db: DB) -> "SettingsModel":

tests/test_database.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from fastapi import HTTPException, FastAPI, Depends
77
from pydantic import BaseModel, constr, conint
88
from sqlalchemy import Column, String, Integer
9+
from sqlalchemy.orm import mapped_column, Mapped
910

1011
from fastapi_framework.database import (
1112
select,
@@ -27,8 +28,8 @@
2728

2829
class User(Base):
2930
__tablename__ = "users"
30-
id: Union[Column, int] = Column(Integer, primary_key=True)
31-
name: Union[Column, str] = Column(String(255), unique=True)
31+
id: Mapped[int] = mapped_column(Integer, primary_key=True)
32+
name: Mapped[str] = mapped_column(String(255), unique=True)
3233

3334
@staticmethod
3435
async def create(name: str) -> "User":
@@ -48,7 +49,7 @@ class PydanticUser(BaseModel):
4849

4950
@app.get("/users")
5051
async def get_users(db: DB = Depends(database_dependency)) -> List[PydanticUser]:
51-
return list(map(User.to_pydantic_user, await db.all(select(User))))
52+
return [user.to_pydantic_user() for user in await db.all(select(User))]
5253

5354

5455
@app.get("/users/{name}")

0 commit comments

Comments
 (0)