Skip to content

Commit f94651a

Browse files
committed
feat: add AppMetaclass & background sleep
1 parent 1617998 commit f94651a

File tree

4 files changed

+45
-12
lines changed

4 files changed

+45
-12
lines changed

examples/service/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,11 @@
3333
"level": "DEBUG",
3434
"propagate": False,
3535
},
36+
"examples.service.routers.basic": {
37+
"handlers": ["console"],
38+
"level": "DEBUG",
39+
"propagate": False,
40+
},
3641
}
3742
})
3843

examples/service/models/demo/demo_meta.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
44

55
class DemoMetaclass(AppMetaclass):
66

7-
@property
8-
def ro_conn(self):
7+
def get_ro_conn(self):
98
return Tortoise.get_connection("demo_ro")
109

11-
@property
12-
def rw_conn(self):
10+
def get_rw_conn(self):
1311
return Tortoise.get_connection("demo_rw")

examples/service/routers/basic.py

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,34 @@
1-
from fastapi import APIRouter
1+
from asyncio import sleep
2+
import logging
3+
from time import perf_counter
4+
5+
from fastapi import APIRouter, BackgroundTasks
26

37
router = APIRouter()
8+
logger = logging.getLogger(__name__)
49

510

611
@router.get("/ping")
7-
async def pong():
12+
async def ping():
813
return {"ping": "pong"}
14+
15+
16+
@router.get("/background/sleep")
17+
async def bg_sleep(
18+
bg_tasks: BackgroundTasks,
19+
):
20+
t0 = perf_counter()
21+
# This sleep represents time-consuming procedure
22+
await sleep(1)
23+
24+
t1 = perf_counter()
25+
async def my_sleep(sec):
26+
await sleep(sec)
27+
logger.debug(f"slept {sec} sec")
28+
bg_tasks.add_task(my_sleep, 1)
29+
bg_tasks.add_task(my_sleep, 1.5)
30+
bg_tasks.add_task(my_sleep, 2)
31+
32+
t2 = perf_counter()
33+
logger.debug(f"{1000 * (t1 - t0):.3f} ms, {1000 * (t2 - t0):.3f} ms")
34+
return "done"

fastapi_esql/orm/base_app.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,22 @@
1-
from abc import abstractproperty
1+
from abc import ABCMeta
22

33

4-
class AppMetaclass(type):
4+
class AppMetaclass(ABCMeta):
55

6-
@abstractproperty
6+
@property
77
def ro_conn(self):
88
"""
99
return Tortoise.get_connection("ro_conn")
1010
"""
11-
raise NotImplementedError(f"{self.__class__.__name__}`s property method 'ro_conn' was not implemented!")
11+
if not getattr(self, "get_ro_conn", None):
12+
raise NotImplementedError(f"Method get_ro_conn() was not implemented by {self.__class__.__name__}!")
13+
return self.get_ro_conn()
1214

13-
@abstractproperty
15+
@property
1416
def rw_conn(self):
1517
"""
1618
return Tortoise.get_connection("rw_conn")
1719
"""
18-
raise NotImplementedError(f"{self.__class__.__name__}`s property method 'rw_conn' was not implemented!")
20+
if not getattr(self, "get_rw_conn", None):
21+
raise NotImplementedError(f"Method get_rw_conn() was not implemented by {self.__class__.__name__}!")
22+
return self.get_rw_conn()

0 commit comments

Comments
 (0)