Source code for betty.extension.nginx
"""Integrate Betty with `nginx <https://nginx.org/>`_."""
from collections.abc import Sequence
from pathlib import Path
from click import Command
from betty.app.extension import ConfigurableExtension, UserFacingExtension
from betty.cli import CommandProvider
from betty.extension.nginx.artifact import (
generate_configuration_file,
generate_dockerfile_file,
)
from betty.extension.nginx.cli import _serve
from betty.extension.nginx.config import NginxConfiguration
from betty.extension.nginx.gui import _NginxGuiWidget
from betty.generate import Generator, GenerationContext
from betty.gui import GuiBuilder
from betty.locale import Str
from betty.serve import ServerProvider, Server
[docs]
class Nginx(
ConfigurableExtension[NginxConfiguration],
UserFacingExtension,
Generator,
ServerProvider,
GuiBuilder,
CommandProvider,
):
[docs]
@classmethod
def label(cls) -> Str:
return Str.plain("Nginx")
[docs]
@classmethod
def description(cls) -> Str:
return Str._(
'Generate <a href="">nginx</a> configuration for your site, as well as a <code>Dockerfile</code> to build a <a href="https://www.docker.com/">Docker</a> container around it.'
)
[docs]
@classmethod
def default_configuration(cls) -> NginxConfiguration:
return NginxConfiguration()
@property
def servers(self) -> Sequence[Server]:
from betty.extension.nginx.serve import DockerizedNginxServer
if DockerizedNginxServer.is_available():
return [DockerizedNginxServer(self._app)]
return []
[docs]
async def generate(self, job_context: GenerationContext) -> None:
await generate_configuration_file(self._app)
await generate_dockerfile_file(self._app)
[docs]
@classmethod
def assets_directory_path(cls) -> Path | None:
return Path(__file__).parent / "assets"
@property
def https(self) -> bool:
if self._configuration.https is None:
return self._app.project.configuration.base_url.startswith("https")
return self._configuration.https
@property
def www_directory_path(self) -> str:
return self._configuration.www_directory_path or str(
self._app.project.configuration.www_directory_path
)
[docs]
def gui_build(self) -> _NginxGuiWidget:
return _NginxGuiWidget(self._app, self._configuration)
@property
def commands(self) -> dict[str, Command]:
return {
"serve-nginx-docker": _serve,
}