мини фиксы
This commit is contained in:
@@ -1,30 +1,39 @@
|
||||
import logging
|
||||
import os
|
||||
import subprocess
|
||||
import sys
|
||||
|
||||
import pydantic
|
||||
from pydantic.fields import Field
|
||||
|
||||
from .console_formatter import ColoredConsoleFormatter
|
||||
from .json_formatter import JSONFormatter
|
||||
|
||||
|
||||
def get_git_commit() -> str:
|
||||
if commit := os.getenv('GIT_COMMIT'):
|
||||
return commit
|
||||
try:
|
||||
return subprocess.check_output(['git', 'rev-parse', '--short', 'HEAD'], text=True).strip()
|
||||
except Exception:
|
||||
return 'unknown'
|
||||
|
||||
|
||||
class LoggerConfig(pydantic.BaseModel):
|
||||
APP_NAME: str
|
||||
APP_VERSION: str = Field(default_factory=get_git_commit)
|
||||
APP_VERSION: str
|
||||
LEVEL: int = logging.INFO
|
||||
PRETTY_CONSOLE: bool = False
|
||||
|
||||
@pydantic.field_validator('APP_VERSION')
|
||||
@classmethod
|
||||
def normalize_app_version(cls, v: str) -> str:
|
||||
parts = v.removeprefix('v').split('.')
|
||||
if len(parts) < 2 or any(not part.isdigit() for part in parts):
|
||||
raise ValueError('APP_VERSION must look like 1.2.0')
|
||||
commit_count = _get_git_commit_count()
|
||||
if not commit_count:
|
||||
return f'v{".".join(parts)}'
|
||||
parts[-1] = commit_count
|
||||
return f'v{".".join(parts)}'
|
||||
|
||||
|
||||
def _get_git_commit_count() -> str | None:
|
||||
commit_count = os.getenv('GIT_COMMIT_COUNT')
|
||||
if commit_count is None:
|
||||
return None
|
||||
normalized = commit_count.strip()
|
||||
return normalized or None
|
||||
|
||||
|
||||
def init(config: LoggerConfig) -> None:
|
||||
root_logger = logging.getLogger()
|
||||
|
||||
Reference in New Issue
Block a user