""" Utility functions around parsing arguments. """ from argparse import ArgumentParser def arguments(): """ Creates and returns the arg parser for Potato on the command line. """ parser = ArgumentParser() parser.set_defaults(show_path=False, show_similarity=False) parser.add_argument( "mode", choices=['start', 'migrate', 'reset-password', 'codebook'], help="set the mode when potato is used, currently supporting: start, migrate, reset-password, codebook", default="start", ) parser.add_argument("config_file") parser.add_argument( "-p", "--port", action="store", type=int, dest="port", help="The port to run on", default=None, ) parser.add_argument( "-v", "--verbose", action="store_true", help="Report verbose output", default=False ) parser.add_argument( "--debug", action="store_true", help="Launch in debug mode with no login", default=False ) parser.add_argument( "--debug-log", action="store", type=str, dest="debug_log", choices=['all', 'ui', 'server', 'none'], help="Control debug logging: 'all' (UI and server), 'ui' (frontend only), 'server' (backend only), 'none' (disable)", default=None, ) parser.add_argument( "--debug-phase", action="store", type=str, dest="debug_phase", help="Skip directly to a specific phase (e.g., 'annotation', 'poststudy') or page name. Requires --debug flag.", default=None, ) parser.add_argument( "--veryVerbose", action="store_true", dest="very_verbose", help="Report very verbose output", default=False, ) parser.add_argument( "--with-custom-js", action="store_true", dest="customjs", help="Use a custom js module served from vite." ) parser.add_argument( "--custom-js-hostname", action="store", type=str, dest="customjs_hostname", help="custom hostname for potato.js serving", default=None, ) parser.add_argument( "--require-password", action="store", type=lambda x: str(x).lower() == 'true', dest="require_password", help="Whether to require password authentication (true/false). If not specified, uses config file value.", default=None, ) parser.add_argument( "--persist-sessions", action="store_true", dest="persist_sessions", help="Enable session persistence between server restarts (default: False)", default=False, ) # SSL arguments (from master branch) parser.add_argument( "--ssl-cert", action="store", type=str, dest="ssl_cert", help="custom ssl cert location (should end in .pem)", default=None ) parser.add_argument( "--ssl-key", action="store", type=str, dest="ssl_key", help="custom ssl key location (should end in .pem)", default=None ) # Migration-specific arguments parser.add_argument( "--to-v2", action="store_true", dest="to_v2", help="[migrate mode] Migrate configuration to v2 format", default=False, ) parser.add_argument( "--output", "-o", dest="output_file", help="[migrate mode] Output file path (default: print to stdout)", default=None, ) parser.add_argument( "--in-place", "-i", action="store_true", dest="in_place", help="[migrate mode] Modify the config file in place", default=False, ) parser.add_argument( "--dry-run", action="store_true", dest="dry_run", help="[migrate mode] Show what changes would be made without applying them", default=False, ) parser.add_argument( "--quiet", "-q", action="store_true", dest="quiet", help="[migrate mode] Suppress informational output", default=False, ) # Password reset arguments parser.add_argument( "--username", action="store", type=str, dest="username", help="[reset-password mode] Username to reset password for", default=None, ) return parser.parse_args()