Skip to content

Commit 814ab8b

Browse files
committed
remove loguru and use builtin logging module
1 parent 3e8b9ea commit 814ab8b

File tree

15 files changed

+127
-66
lines changed

15 files changed

+127
-66
lines changed

.github/workflows/test.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ name: Test
22

33
on:
44
push:
5+
branches:
6+
- main
57
pull_request:
68
branches:
79
- main

idom/__init__.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
# package is not installed
88
__version__ = "0.0.0"
99

10+
from . import log
1011
from .client.module import Import, Module, install
1112
from .core import hooks
1213
from .core.component import Component, component
@@ -56,4 +57,5 @@
5657
"widgets",
5758
"client",
5859
"install",
60+
"log",
5961
]

idom/__main__.py

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,4 @@
1-
import sys
2-
3-
from loguru import logger
4-
51
from .cli import main
62

7-
logger.remove(0)
8-
logger.add(sys.stdout, format="{message}", level="INFO")
9-
10-
113
if __name__ == "__main__":
124
main()

idom/_options.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import os
2+
from typing import Any, Callable, Dict, Type
3+
4+
IDOM_DEBUG_MODE = False
5+
6+
7+
def _load_os_environ() -> None:
8+
from_string: Dict[Type[Any], Callable[[Any], Any]] = {
9+
bool: lambda v: bool(int(v)),
10+
}
11+
12+
module = globals()
13+
for name, default in globals().items():
14+
if not name.startswith("_") and name.upper() == name:
15+
value_type = type(default)
16+
value = os.environ.get(name, default)
17+
if value_type in from_string:
18+
value = from_string[value_type](value)
19+
module[name] = value
20+
21+
return None
22+
23+
24+
_load_os_environ()

idom/client/manage.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,19 @@
11
import json
22
import shutil
33
import subprocess
4+
from logging import getLogger
45
from pathlib import Path
56
from tempfile import TemporaryDirectory
67
from typing import List, Sequence, Set, Union
78

8-
from loguru import logger
9-
109
from .utils import (
1110
find_js_module_exports_in_source,
1211
get_package_name,
1312
open_modifiable_json,
1413
)
1514

15+
logger = getLogger(__name__)
16+
1617
APP_DIR = Path(__file__).parent / "app"
1718
BUILD_DIR = APP_DIR / "build"
1819
WEB_MODULES_DIR = BUILD_DIR / "web_modules"
@@ -102,7 +103,7 @@ def build(packages_to_install: Sequence[str], clean_build: bool = False) -> None
102103
snowpack_build = snowpack_config.setdefault("buildOptions", {})
103104
snowpack_build["clean"] = clean_build
104105

105-
logger.info(f"Installing {packages_to_install or 'packages'} ...", debug=True)
106+
logger.info(f"Installing {packages_to_install or 'packages'} ...")
106107
_npm_install(packages_to_install, temp_app_dir)
107108
logger.info("Installed successfully ✅")
108109

idom/core/dispatcher.py

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import abc
22
import asyncio
3+
from logging import getLogger
34
from typing import Any, AsyncIterator, Awaitable, Callable, Dict
45

56
from anyio import create_task_group
@@ -8,6 +9,8 @@
89
from .layout import Layout, LayoutEvent, LayoutUpdate
910
from .utils import HasAsyncResources, async_resource
1011

12+
logger = getLogger(__name__)
13+
1114
SendCoroutine = Callable[[Any], Awaitable[None]]
1215
RecvCoroutine = Callable[[], Awaitable[LayoutEvent]]
1316

@@ -49,12 +52,20 @@ async def run(self, send: SendCoroutine, recv: RecvCoroutine, context: Any) -> N
4952
return None
5053

5154
async def _outgoing_loop(self, send: SendCoroutine, context: Any) -> None:
52-
while True:
53-
await send(await self._outgoing(self.layout, context))
55+
try:
56+
while True:
57+
await send(await self._outgoing(self.layout, context))
58+
except Exception:
59+
logger.info("Failed to send outgoing update", exc_info=True)
60+
raise
5461

5562
async def _incoming_loop(self, recv: RecvCoroutine, context: Any) -> None:
56-
while True:
57-
await self._incoming(self.layout, context, await recv())
63+
try:
64+
while True:
65+
await self._incoming(self.layout, context, await recv())
66+
except Exception:
67+
logger.info("Failed to receive incoming event", exc_info=True)
68+
raise
5869

5970
@abc.abstractmethod
6071
async def _outgoing(self, layout: Layout, context: Any) -> Any:

idom/core/hooks.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import asyncio
2+
from logging import getLogger
23
from threading import get_ident as get_thread_id
34
from typing import (
45
Any,
@@ -17,7 +18,6 @@
1718
overload,
1819
)
1920

20-
from loguru import logger
2121
from typing_extensions import Protocol
2222

2323
from idom.utils import Ref
@@ -33,6 +33,7 @@
3333
"use_memo",
3434
]
3535

36+
logger = getLogger(__name__)
3637

3738
_StateType = TypeVar("_StateType")
3839

idom/core/layout.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import abc
22
import asyncio
33
from functools import wraps
4+
from logging import getLogger
45
from typing import (
56
Any,
67
AsyncIterator,
@@ -16,16 +17,17 @@
1617
)
1718

1819
from jsonpatch import apply_patch, make_patch
19-
from loguru import logger
2020

21-
from idom.options import IDOM_DEBUG
21+
from idom._options import IDOM_DEBUG_MODE
2222

2323
from .component import AbstractComponent
2424
from .events import EventHandler, EventTarget
2525
from .hooks import LifeCycleHook
2626
from .utils import CannotAccessResource, HasAsyncResources, async_resource
2727
from .vdom import validate_serialized_vdom
2828

29+
logger = getLogger(__name__)
30+
2931

3032
class LayoutUpdate(NamedTuple):
3133
"""An object describing an update to a :class:`Layout`"""
@@ -89,16 +91,18 @@ async def dispatch(self, event: LayoutEvent) -> None:
8991
handler = self._event_handlers.get(event.target)
9092
if handler is not None:
9193
await handler(event.data)
94+
else:
95+
logger.info(
96+
f"Ignored event - handler {event.target!r} does not exist or its component unmounted"
97+
)
9298

9399
async def render(self) -> LayoutUpdate:
94100
while True:
95101
component = await self._rendering_queue.get()
96102
if self._has_component_state(component):
97103
return self._create_layout_update(component)
98104

99-
if IDOM_DEBUG:
100-
from loguru import logger
101-
105+
if IDOM_DEBUG_MODE:
102106
_debug_render = render
103107

104108
@wraps(_debug_render)

idom/log.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import logging
2+
import sys
3+
from logging.config import dictConfig
4+
5+
from ._options import IDOM_DEBUG_MODE
6+
7+
root_logger = logging.getLogger("idom")
8+
9+
10+
LOGGING_CONFIG_DEFAULTS = {
11+
"version": 1,
12+
"disable_existing_loggers": False,
13+
"loggers": {
14+
"idom": {
15+
"level": "DEBUG" if IDOM_DEBUG_MODE else "INFO",
16+
"handlers": ["console"],
17+
},
18+
},
19+
"handlers": {
20+
"console": {
21+
"class": "logging.StreamHandler",
22+
"formatter": "generic",
23+
"stream": sys.stdout,
24+
}
25+
},
26+
"formatters": {
27+
"generic": {
28+
"format": "%(asctime)s | %(levelname)s | %(name)s | %(message)s",
29+
"datefmt": r"%Y-%m-%dT%H:%M:%S%z",
30+
"class": "logging.Formatter",
31+
}
32+
},
33+
}
34+
35+
36+
dictConfig(LOGGING_CONFIG_DEFAULTS)

idom/options.py

Lines changed: 0 additions & 25 deletions
This file was deleted.

0 commit comments

Comments
 (0)