Add the ability to specify a lang parameter
This commit is contained in:
parent
961d42e3e2
commit
a871b6017d
|
@ -1,5 +1,14 @@
|
|||
# Jetforce Changelog
|
||||
|
||||
### Unreleased
|
||||
|
||||
#### Features
|
||||
|
||||
- Added a ``--default-lang`` command line argument to the static file server.
|
||||
This setting will define a language parameter that will be attached to the
|
||||
meta for all text/gemini responses. For example, ``--default-lang=en`` will
|
||||
set the response meta to ``"text/gemini; lang=en"``.
|
||||
|
||||
### v0.3.2
|
||||
|
||||
#### Bugfixes
|
||||
|
|
|
@ -92,6 +92,13 @@ group.add_argument(
|
|||
dest="index_file",
|
||||
)
|
||||
|
||||
group.add_argument(
|
||||
"--default-lang",
|
||||
help="A lang parameter that will be indicated in the response meta",
|
||||
default=None,
|
||||
dest="default_lang",
|
||||
)
|
||||
|
||||
|
||||
def main():
|
||||
args = parser.parse_args()
|
||||
|
@ -99,6 +106,7 @@ def main():
|
|||
root_directory=args.root_directory,
|
||||
index_file=args.index_file,
|
||||
cgi_directory=args.cgi_directory,
|
||||
default_lang=args.default_lang,
|
||||
)
|
||||
server = GeminiServer(
|
||||
app=app,
|
||||
|
|
|
@ -28,12 +28,14 @@ class StaticDirectoryApplication(JetforceApplication):
|
|||
root_directory: str = "/var/gemini",
|
||||
index_file: str = "index.gmi",
|
||||
cgi_directory: str = "cgi-bin",
|
||||
default_lang: typing.Optional[str] = None,
|
||||
):
|
||||
super().__init__()
|
||||
self.routes.append((RoutePattern(), self.serve_static_file))
|
||||
|
||||
self.root = pathlib.Path(root_directory).resolve(strict=True)
|
||||
self.cgi_directory = cgi_directory.strip("/") + "/"
|
||||
self.default_lang = default_lang
|
||||
|
||||
self.index_file = index_file
|
||||
self.mimetypes = mimetypes.MimeTypes()
|
||||
|
@ -99,6 +101,7 @@ class StaticDirectoryApplication(JetforceApplication):
|
|||
|
||||
if filesystem_path.is_file():
|
||||
mimetype = self.guess_mimetype(filesystem_path.name)
|
||||
mimetype = self.add_extra_parameters(mimetype)
|
||||
generator = self.load_file(filesystem_path)
|
||||
return Response(Status.SUCCESS, mimetype, generator)
|
||||
|
||||
|
@ -111,11 +114,13 @@ class StaticDirectoryApplication(JetforceApplication):
|
|||
|
||||
index_file = filesystem_path / self.index_file
|
||||
if index_file.exists():
|
||||
mimetype = self.add_extra_parameters("text/gemini")
|
||||
generator = self.load_file(index_file)
|
||||
return Response(Status.SUCCESS, "text/gemini", generator)
|
||||
return Response(Status.SUCCESS, mimetype, generator)
|
||||
|
||||
mimetype = self.add_extra_parameters("text/gemini")
|
||||
generator = self.list_directory(url_path, filesystem_path)
|
||||
return Response(Status.SUCCESS, "text/gemini", generator)
|
||||
return Response(Status.SUCCESS, mimetype, generator)
|
||||
|
||||
else:
|
||||
return Response(Status.NOT_FOUND, "Not Found")
|
||||
|
@ -191,6 +196,15 @@ class StaticDirectoryApplication(JetforceApplication):
|
|||
else:
|
||||
return mime or "text/plain"
|
||||
|
||||
def add_extra_parameters(self, meta: str) -> str:
|
||||
"""
|
||||
Attach extra parameters to the response meta string.
|
||||
"""
|
||||
if self.default_lang is not None:
|
||||
if meta.startswith("text/gemini"):
|
||||
meta += f"; lang={self.default_lang}"
|
||||
return meta
|
||||
|
||||
def default_callback(self, request: Request, **_) -> Response:
|
||||
"""
|
||||
Since the StaticDirectoryApplication only serves gemini URLs, return
|
||||
|
|
Loading…
Reference in New Issue