mirror of
https://github.com/Garmelon/PFERD.git
synced 2023-12-21 10:23:01 +01:00
103 lines
3.1 KiB
Python
103 lines
3.1 KiB
Python
|
import argparse
|
||
|
import configparser
|
||
|
from pathlib import Path
|
||
|
|
||
|
from .parser import BooleanOptionalAction, ParserLoadError, show_value_error
|
||
|
from ..crawl.ilias.file_templates import Links
|
||
|
|
||
|
|
||
|
def configure_common_group_args(group: argparse._ArgumentGroup) -> None:
|
||
|
group.add_argument(
|
||
|
"target",
|
||
|
type=str,
|
||
|
metavar="TARGET",
|
||
|
help="course id, 'desktop', or ILIAS URL to crawl"
|
||
|
)
|
||
|
group.add_argument(
|
||
|
"output",
|
||
|
type=Path,
|
||
|
metavar="OUTPUT",
|
||
|
help="output directory"
|
||
|
)
|
||
|
group.add_argument(
|
||
|
"--username", "-u",
|
||
|
type=str,
|
||
|
metavar="USERNAME",
|
||
|
help="user name for authentication"
|
||
|
)
|
||
|
group.add_argument(
|
||
|
"--keyring",
|
||
|
action=BooleanOptionalAction,
|
||
|
help="use the system keyring to store and retrieve passwords"
|
||
|
)
|
||
|
group.add_argument(
|
||
|
"--credential-file",
|
||
|
type=Path,
|
||
|
metavar="PATH",
|
||
|
help="read username and password from a credential file"
|
||
|
)
|
||
|
group.add_argument(
|
||
|
"--links",
|
||
|
type=show_value_error(Links.from_string),
|
||
|
metavar="OPTION",
|
||
|
help="how to represent external links"
|
||
|
)
|
||
|
group.add_argument(
|
||
|
"--link-redirect-delay",
|
||
|
type=int,
|
||
|
metavar="SECONDS",
|
||
|
help="time before 'fancy' links redirect to to their target (-1 to disable)"
|
||
|
)
|
||
|
group.add_argument(
|
||
|
"--videos",
|
||
|
action=BooleanOptionalAction,
|
||
|
help="crawl and download videos"
|
||
|
)
|
||
|
group.add_argument(
|
||
|
"--forums",
|
||
|
action=BooleanOptionalAction,
|
||
|
help="crawl and download forum posts"
|
||
|
)
|
||
|
group.add_argument(
|
||
|
"--http-timeout", "-t",
|
||
|
type=float,
|
||
|
metavar="SECONDS",
|
||
|
help="timeout for all HTTP requests"
|
||
|
)
|
||
|
|
||
|
|
||
|
def ilias_common_load(
|
||
|
section: configparser.SectionProxy,
|
||
|
args: argparse.Namespace,
|
||
|
parser: configparser.ConfigParser,
|
||
|
) -> None:
|
||
|
section["target"] = str(args.target)
|
||
|
section["output_dir"] = str(args.output)
|
||
|
section["auth"] = "auth:ilias"
|
||
|
if args.links is not None:
|
||
|
section["links"] = str(args.links.value)
|
||
|
if args.link_redirect_delay is not None:
|
||
|
section["link_redirect_delay"] = str(args.link_redirect_delay)
|
||
|
if args.videos is not None:
|
||
|
section["videos"] = "yes" if args.videos else "no"
|
||
|
if args.forums is not None:
|
||
|
section["forums"] = "yes" if args.forums else "no"
|
||
|
if args.http_timeout is not None:
|
||
|
section["http_timeout"] = str(args.http_timeout)
|
||
|
|
||
|
parser["auth:ilias"] = {}
|
||
|
auth_section = parser["auth:ilias"]
|
||
|
if args.credential_file is not None:
|
||
|
if args.username is not None:
|
||
|
raise ParserLoadError("--credential-file and --username can't be used together")
|
||
|
if args.keyring:
|
||
|
raise ParserLoadError("--credential-file and --keyring can't be used together")
|
||
|
auth_section["type"] = "credential-file"
|
||
|
auth_section["path"] = str(args.credential_file)
|
||
|
elif args.keyring:
|
||
|
auth_section["type"] = "keyring"
|
||
|
else:
|
||
|
auth_section["type"] = "simple"
|
||
|
if args.username is not None:
|
||
|
auth_section["username"] = args.username
|