Skip to content

Commit

Permalink
Merge pull request #362 from jelmer/subcommand
Browse files Browse the repository at this point in the history
Add 'serve' subcommand
  • Loading branch information
jelmer authored Oct 20, 2024
2 parents 4baf98f + 6d8b1c7 commit cc897ef
Show file tree
Hide file tree
Showing 3 changed files with 59 additions and 20 deletions.
6 changes: 3 additions & 3 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,15 +27,15 @@
# Add any Sphinx extension module names here, as strings. They can be
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
# ones.
extensions = []
extensions: list[str] = []

# Add any paths that contain templates here, relative to this directory.
templates_path = ["_templates"]
templates_path: list[str] = ["_templates"]

# List of patterns, relative to source directory, that match files and
# directories to ignore when looking for source files.
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = []
exclude_patterns: list[str] = []


# -- Options for HTML output -------------------------------------------------
Expand Down
50 changes: 46 additions & 4 deletions xandikos/__main__.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,17 +19,59 @@

"""Xandikos command-line handling."""

import argparse
import asyncio
import sys
from . import __version__


def main(argv=None):
# If no subparser is given, default to 'serve'
def set_default_subparser(self, argv, name):
subparser_found = False
for arg in argv:
if arg in ["-h", "--help", "--version"]:
break
else:
for x in self._subparsers._actions:
if not isinstance(x, argparse._SubParsersAction):
continue
for sp_name in x._name_parser_map.keys():
if sp_name in argv:
subparser_found = True
if not subparser_found:
print('No subcommand given, defaulting to "%s"' % name)
argv.insert(0, name)


async def main(argv):
# For now, just invoke xandikos.web
from .web import main
from . import web

parser = argparse.ArgumentParser()

parser.add_argument(
"--version",
action="version",
version="%(prog)s " + ".".join(map(str, __version__)),
)

subparsers = parser.add_subparsers(help="Subcommands", dest="subcommand")
web_parser = subparsers.add_parser(
"serve", usage="%(prog)s -d ROOT-DIR [OPTIONS]", help="Run a Xandikos server"
)
web.add_parser(web_parser)

set_default_subparser(parser, argv, "serve")
args = parser.parse_args(argv)

return asyncio.run(main(argv))
if args.subcommand == "serve":
return await web.main(args, parser)
else:
parser.print_help()
return 1


if __name__ == "__main__":
import sys

sys.exit(main(sys.argv[1:]))
sys.exit(asyncio.run(main(sys.argv[1:])))
23 changes: 10 additions & 13 deletions xandikos/web.py
Original file line number Diff line number Diff line change
Expand Up @@ -1340,19 +1340,9 @@ async def redirect_to_subprefix(request):
web.run_app(app, port=port, host=listen_address, path=socket_path)


async def main(argv=None): # noqa: C901
def add_parser(parser):
import argparse

from xandikos import __version__

parser = argparse.ArgumentParser(usage="%(prog)s -d ROOT-DIR [OPTIONS]")

parser.add_argument(
"--version",
action="version",
version="%(prog)s " + ".".join(map(str, __version__)),
)

access_group = parser.add_argument_group(title="Access Options")
access_group.add_argument(
"--no-detect-systemd",
Expand Down Expand Up @@ -1440,8 +1430,9 @@ async def main(argv=None): # noqa: C901
# and are generally just meant for developers.
parser.add_argument("--paranoid", action="store_true", help=argparse.SUPPRESS)
parser.add_argument("--index-threshold", type=int, help=argparse.SUPPRESS)
options = parser.parse_args(argv)


async def main(options, parser):
if options.dump_dav_xml:
# TODO(jelmer): Find a way to propagate this without abusing
# os.environ.
Expand Down Expand Up @@ -1600,4 +1591,10 @@ async def redirect_to_subprefix(request):
if __name__ == "__main__":
import sys

sys.exit(asyncio.run(main(sys.argv[1:])))
import argparse

parser = argparse.ArgumentParser(usage="%(prog)s [options]")
add_parser(parser)
args = parser.parse_args(sys.argv[1:])

sys.exit(asyncio.run(main(args, parser)))

0 comments on commit cc897ef

Please sign in to comment.