Skip to content

Commit

Permalink
fix comments
Browse files Browse the repository at this point in the history
  • Loading branch information
insani7y committed Aug 6, 2024
1 parent 7024716 commit b7f1f41
Show file tree
Hide file tree
Showing 15 changed files with 141 additions and 136 deletions.
8 changes: 4 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -297,10 +297,10 @@ from microbootstrap.bootstrappers.litestar import BaseBootstrapSettings


class YourSettings(BaseBootstrapSettings):
service_name: str = pydantic.Field(default="micro-service")
service_description: str = pydantic.Field(default="Micro service description")
service_version: str = pydantic.Field(default="1.0.0")
service_static_path: str = pydantic.Field(default="/static")
service_name: str = "micro-service"
service_description: str = "Micro service description"
service_version: str = "1.0.0"
service_static_path: str = "/static"

swagger_path: str = "/docs"
swagger_offline_docs: bool = False
Expand Down
4 changes: 2 additions & 2 deletions microbootstrap/instruments/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ class BaseInstrumentConfig(pydantic.BaseModel):
@dataclasses.dataclass
class Instrument(abc.ABC, typing.Generic[InstrumentConfigT]):
instrument_config: InstrumentConfigT
instrument_name: str = dataclasses.field(init=False)
ready_condition: str = dataclasses.field(init=False)
instrument_name: typing.ClassVar[str]
ready_condition: typing.ClassVar[str]

def configure_instrument(
self,
Expand Down
8 changes: 4 additions & 4 deletions microbootstrap/instruments/logging_instrument.py
Original file line number Diff line number Diff line change
Expand Up @@ -118,14 +118,14 @@ def __call__(self, *args: typing.Any) -> logging.Logger: # noqa: ANN401
class LoggingConfig(BaseInstrumentConfig):
service_debug: bool = True

logging_log_level: int = pydantic.Field(default=logging.INFO)
logging_flush_level: int = pydantic.Field(default=logging.ERROR)
logging_buffer_capacity: int = pydantic.Field(default=10)
logging_log_level: int = logging.INFO
logging_flush_level: int = logging.ERROR
logging_buffer_capacity: int = 10
logging_extra_processors: list[typing.Any] = pydantic.Field(default_factory=list)
logging_unset_handlers: list[str] = pydantic.Field(
default_factory=lambda: ["uvicorn", "uvicorn.access"],
)
logging_exclude_endpoints: list[str] = pydantic.Field(default_factory=lambda: ["/health"])
logging_exclude_endpoints: list[str] = pydantic.Field(default_factory=list)


class LoggingInstrument(Instrument[LoggingConfig]):
Expand Down
4 changes: 2 additions & 2 deletions microbootstrap/instruments/opentelemetry_instrument.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ class OpenTelemetryInstrumentor:


class OpentelemetryConfig(BaseInstrumentConfig):
service_name: str = pydantic.Field(default="micro-service")
service_version: str = pydantic.Field(default="1.0.0")
service_name: str = "micro-service"
service_version: str = "1.0.0"

opentelemetry_container_name: str | None = None
opentelemetry_endpoint: str | None = None
Expand Down
4 changes: 2 additions & 2 deletions microbootstrap/instruments/prometheus_instrument.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@


class PrometheusConfig(BaseInstrumentConfig):
service_name: str = pydantic.Field(default="micro-service")
service_name: str = "micro-service"

prometheus_metrics_path: str = pydantic.Field(default="/metrics")
prometheus_metrics_path: str = "/metrics"
prometheus_additional_params: dict[str, typing.Any] = pydantic.Field(default_factory=dict)


Expand Down
8 changes: 4 additions & 4 deletions microbootstrap/instruments/swagger_instrument.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,10 @@


class SwaggerConfig(BaseInstrumentConfig):
service_name: str = pydantic.Field(default="micro-service")
service_description: str = pydantic.Field(default="Micro service description")
service_version: str = pydantic.Field(default="1.0.0")
service_static_path: str = pydantic.Field(default="/static")
service_name: str = "micro-service"
service_description: str = "Micro service description"
service_version: str = "1.0.0"
service_static_path: str = "/static"

swagger_path: str = "/docs"
swagger_offline_docs: bool = False
Expand Down
9 changes: 4 additions & 5 deletions microbootstrap/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@
import os
import typing

import pydantic
import pydantic_settings

from microbootstrap import CorsConfig, LoggingConfig, OpentelemetryConfig, PrometheusConfig, SentryConfig, SwaggerConfig
Expand All @@ -24,10 +23,10 @@ class BaseBootstrapSettings(
):
service_debug: bool = True
service_environment: str | None = None
service_name: str = pydantic.Field(default="micro-service")
service_description: str = pydantic.Field(default="Micro service description")
service_version: str = pydantic.Field(default="1.0.0")
service_static_path: str = pydantic.Field(default="/static")
service_name: str = "micro-service"
service_description: str = "Micro service description"
service_version: str = "1.0.0"
service_static_path: str = "/static"

server_host: str = "0.0.0.0" # noqa: S104
server_port: int = 8000
Expand Down
18 changes: 12 additions & 6 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,19 @@ authors = ["community-of-python"]
readme = "README.md"
packages = [{ include = "microbootstrap" }]

[tool.poetry.urls]
homepage = "https://github.com/community-of-python/microbootstrap"
repository = "https://github.com/community-of-python/microbootstrap"
documentation = "https://pypi.org/project/microbootstrap/"


[tool.poetry.dependencies]
python = "^3.9"
pydantic-settings = "^2.3.4"
granian = { version = "^1.4.4", extras = ["reload"] }
typing-extensions = "^4.12.2"
rich = "^13.7.1"
eval-type-backport = "^0.2.0"
# for logging boostrap
structlog = "^24.2.0"
# for sentry bootstrap
Expand All @@ -49,16 +58,13 @@ opentelemetry-instrumentation = "^0.46b0"
opentelemetry-instrumentation-asgi = "^0.46b0"
opentelemetry-instrumentation-system-metrics = "^0.46b0"
# optional extras for Litestar
litestar = "^2.9.1"
litestar = { version = "^2.9.1", optional = true }
prometheus-client = { version = "^0.20.0", optional = true }
litestar-offline-docs = "^1.0.1"
litestar-offline-docs = { version = "^1.0.1", optional = true }
# optional extras for FastAPI
fastapi = "^0.111.0"
fastapi = { version = "^0.111.0", optional = true }
prometheus-fastapi-instrumentator = { version = "^6.1.0", optional = true }
opentelemetry-instrumentation-fastapi = { version = "^0.46b0", optional = true }
typing-extensions = "^4.12.2"
rich = "^13.7.1"
eval-type-backport = "^0.2.0"


[tool.poetry.group.dev.dependencies]
Expand Down
12 changes: 6 additions & 6 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,32 +25,32 @@ def default_litestar_app() -> litestar.Litestar:


@pytest.fixture()
def minimum_sentry_config() -> SentryConfig:
def minimal_sentry_config() -> SentryConfig:
return SentryConfig(sentry_dsn="https://[email protected]/0")


@pytest.fixture()
def minimum_logging_config() -> LoggingConfig:
def minimal_logging_config() -> LoggingConfig:
return LoggingConfig(service_debug=False)


@pytest.fixture()
def minimum_prometheus_config() -> PrometheusConfig:
def minimal_prometheus_config() -> PrometheusConfig:
return PrometheusConfig()


@pytest.fixture()
def minimum_swagger_config() -> SwaggerConfig:
def minimal_swagger_config() -> SwaggerConfig:
return SwaggerConfig()


@pytest.fixture()
def minimum_cors_config() -> SwaggerConfig:
def minimal_cors_config() -> SwaggerConfig:
return CorsConfig(cors_allowed_origins=["*"])


@pytest.fixture()
def minimum_opentelemetry_config() -> OpentelemetryConfig:
def minimal_opentelemetry_config() -> OpentelemetryConfig:
return OpentelemetryConfig(
service_name="test-micro-service",
service_version="1.0.0",
Expand Down
18 changes: 9 additions & 9 deletions tests/instruments/test_cors.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,29 @@
from microbootstrap.instruments.cors_instrument import CorsInstrument


def test_cors_is_ready(minimum_cors_config: CorsConfig) -> None:
cors_instrument: typing.Final = CorsInstrument(minimum_cors_config)
def test_cors_is_ready(minimal_cors_config: CorsConfig) -> None:
cors_instrument: typing.Final = CorsInstrument(minimal_cors_config)
assert cors_instrument.is_ready()


def test_cors_bootstrap_is_not_ready(minimum_cors_config: CorsConfig) -> None:
minimum_cors_config.cors_allowed_origins = []
cors_instrument: typing.Final = CorsInstrument(minimum_cors_config)
def test_cors_bootstrap_is_not_ready(minimal_cors_config: CorsConfig) -> None:
minimal_cors_config.cors_allowed_origins = []
cors_instrument: typing.Final = CorsInstrument(minimal_cors_config)
assert not cors_instrument.is_ready()


def test_cors_bootstrap_after(
default_litestar_app: litestar.Litestar,
minimum_cors_config: CorsConfig,
minimal_cors_config: CorsConfig,
) -> None:
cors_instrument: typing.Final = CorsInstrument(minimum_cors_config)
cors_instrument: typing.Final = CorsInstrument(minimal_cors_config)
assert cors_instrument.bootstrap_after(default_litestar_app) == default_litestar_app


def test_cors_teardown(
minimum_cors_config: CorsConfig,
minimal_cors_config: CorsConfig,
) -> None:
cors_instrument: typing.Final = CorsInstrument(minimum_cors_config)
cors_instrument: typing.Final = CorsInstrument(minimal_cors_config)
assert cors_instrument.teardown() is None # type: ignore[func-returns-value]


Expand Down
30 changes: 15 additions & 15 deletions tests/instruments/test_logging.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,43 +13,43 @@
from microbootstrap.instruments.logging_instrument import LoggingInstrument, MemoryLoggerFactory


def test_logging_is_ready(minimum_logging_config: LoggingConfig) -> None:
logging_instrument: typing.Final = LoggingInstrument(minimum_logging_config)
def test_logging_is_ready(minimal_logging_config: LoggingConfig) -> None:
logging_instrument: typing.Final = LoggingInstrument(minimal_logging_config)
assert logging_instrument.is_ready()


def test_logging_bootstrap_is_not_ready(minimum_logging_config: LoggingConfig) -> None:
minimum_logging_config.service_debug = True
logging_instrument: typing.Final = LoggingInstrument(minimum_logging_config)
def test_logging_bootstrap_is_not_ready(minimal_logging_config: LoggingConfig) -> None:
minimal_logging_config.service_debug = True
logging_instrument: typing.Final = LoggingInstrument(minimal_logging_config)
assert logging_instrument.bootstrap_before() == {}


def test_logging_bootstrap_after(
default_litestar_app: litestar.Litestar,
minimum_logging_config: LoggingConfig,
minimal_logging_config: LoggingConfig,
) -> None:
logging_instrument: typing.Final = LoggingInstrument(minimum_logging_config)
logging_instrument: typing.Final = LoggingInstrument(minimal_logging_config)
assert logging_instrument.bootstrap_after(default_litestar_app) == default_litestar_app


def test_logging_teardown(
minimum_logging_config: LoggingConfig,
minimal_logging_config: LoggingConfig,
) -> None:
logging_instrument: typing.Final = LoggingInstrument(minimum_logging_config)
logging_instrument: typing.Final = LoggingInstrument(minimal_logging_config)
assert logging_instrument.teardown() is None # type: ignore[func-returns-value]


def test_litestar_logging_bootstrap(minimum_logging_config: LoggingConfig) -> None:
logging_instrument: typing.Final = LitestarLoggingInstrument(minimum_logging_config)
def test_litestar_logging_bootstrap(minimal_logging_config: LoggingConfig) -> None:
logging_instrument: typing.Final = LitestarLoggingInstrument(minimal_logging_config)
logging_instrument.bootstrap()
bootsrap_result: typing.Final = logging_instrument.bootstrap_before()
assert "middleware" in bootsrap_result
assert isinstance(bootsrap_result["middleware"], list)
assert len(bootsrap_result["middleware"]) == 1


async def test_litestar_logging_bootstrap_working(minimum_logging_config: LoggingConfig) -> None:
logging_instrument: typing.Final = LitestarLoggingInstrument(minimum_logging_config)
async def test_litestar_logging_bootstrap_working(minimal_logging_config: LoggingConfig) -> None:
logging_instrument: typing.Final = LitestarLoggingInstrument(minimal_logging_config)

@litestar.get("/test-handler")
async def error_handler() -> str:
Expand All @@ -66,12 +66,12 @@ async def error_handler() -> str:
await async_client.get("/test-handler")


async def test_litestar_logging_bootstrap_tracer_injection(minimum_logging_config: LoggingConfig) -> None:
async def test_litestar_logging_bootstrap_tracer_injection(minimal_logging_config: LoggingConfig) -> None:
trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)
span_processor = SimpleSpanProcessor(ConsoleSpanExporter())
trace.get_tracer_provider().add_span_processor(span_processor)
logging_instrument: typing.Final = LitestarLoggingInstrument(minimum_logging_config)
logging_instrument: typing.Final = LitestarLoggingInstrument(minimal_logging_config)

@litestar.get("/test-handler")
async def error_handler() -> str:
Expand Down
34 changes: 17 additions & 17 deletions tests/instruments/test_opentelemetry.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,39 +12,39 @@


def test_opentelemetry_is_ready(
minimum_opentelemetry_config: OpentelemetryConfig,
minimal_opentelemetry_config: OpentelemetryConfig,
) -> None:
opentelemetry_instrument: typing.Final = OpentelemetryInstrument(minimum_opentelemetry_config)
opentelemetry_instrument: typing.Final = OpentelemetryInstrument(minimal_opentelemetry_config)
assert opentelemetry_instrument.is_ready()


def test_opentelemetry_bootstrap_is_not_ready(minimum_opentelemetry_config: OpentelemetryConfig) -> None:
minimum_opentelemetry_config.service_name = ""
opentelemetry_instrument: typing.Final = OpentelemetryInstrument(minimum_opentelemetry_config)
def test_opentelemetry_bootstrap_is_not_ready(minimal_opentelemetry_config: OpentelemetryConfig) -> None:
minimal_opentelemetry_config.service_name = ""
opentelemetry_instrument: typing.Final = OpentelemetryInstrument(minimal_opentelemetry_config)
assert not opentelemetry_instrument.is_ready()


def test_opentelemetry_bootstrap_after(
default_litestar_app: litestar.Litestar,
minimum_opentelemetry_config: OpentelemetryConfig,
minimal_opentelemetry_config: OpentelemetryConfig,
) -> None:
opentelemetry_instrument: typing.Final = OpentelemetryInstrument(minimum_opentelemetry_config)
opentelemetry_instrument: typing.Final = OpentelemetryInstrument(minimal_opentelemetry_config)
assert opentelemetry_instrument.bootstrap_after(default_litestar_app) == default_litestar_app


def test_opentelemetry_teardown(
minimum_opentelemetry_config: OpentelemetryConfig,
minimal_opentelemetry_config: OpentelemetryConfig,
) -> None:
opentelemetry_instrument: typing.Final = OpentelemetryInstrument(minimum_opentelemetry_config)
opentelemetry_instrument: typing.Final = OpentelemetryInstrument(minimal_opentelemetry_config)
assert opentelemetry_instrument.teardown() is None # type: ignore[func-returns-value]


def test_litestar_opentelemetry_bootstrap(
minimum_opentelemetry_config: OpentelemetryConfig,
minimal_opentelemetry_config: OpentelemetryConfig,
magic_mock: MagicMock,
) -> None:
minimum_opentelemetry_config.opentelemetry_insrtumentors = [magic_mock]
opentelemetry_instrument: typing.Final = LitetstarOpentelemetryInstrument(minimum_opentelemetry_config)
minimal_opentelemetry_config.opentelemetry_insrtumentors = [magic_mock]
opentelemetry_instrument: typing.Final = LitetstarOpentelemetryInstrument(minimal_opentelemetry_config)

opentelemetry_instrument.bootstrap()
opentelemetry_bootstrap_result: typing.Final = opentelemetry_instrument.bootstrap_before()
Expand All @@ -57,20 +57,20 @@ def test_litestar_opentelemetry_bootstrap(


def test_litestar_opentelemetry_terdown(
minimum_opentelemetry_config: OpentelemetryConfig,
minimal_opentelemetry_config: OpentelemetryConfig,
magic_mock: MagicMock,
) -> None:
minimum_opentelemetry_config.opentelemetry_insrtumentors = [magic_mock]
opentelemetry_instrument: typing.Final = LitetstarOpentelemetryInstrument(minimum_opentelemetry_config)
minimal_opentelemetry_config.opentelemetry_insrtumentors = [magic_mock]
opentelemetry_instrument: typing.Final = LitetstarOpentelemetryInstrument(minimal_opentelemetry_config)

opentelemetry_instrument.teardown()


async def test_litestar_opentelemetry_bootstrap_working(
minimum_opentelemetry_config: OpentelemetryConfig,
minimal_opentelemetry_config: OpentelemetryConfig,
async_mock: AsyncMock,
) -> None:
opentelemetry_instrument: typing.Final = LitetstarOpentelemetryInstrument(minimum_opentelemetry_config)
opentelemetry_instrument: typing.Final = LitetstarOpentelemetryInstrument(minimal_opentelemetry_config)
opentelemetry_instrument.bootstrap()
opentelemetry_bootstrap_result: typing.Final = opentelemetry_instrument.bootstrap_before()

Expand Down
Loading

0 comments on commit b7f1f41

Please sign in to comment.