Skip to content

Consider switching to argparse for nicer command line handling and helpΒ #44

@manics

Description

@manics

Proposed change

Switch from tornado.options to argparse (or traitlets, though argparse is easier for a small utility like this) for handling command line arguments

Alternative options

Do nothing

Who would use this feature?

Anyone wanting a nice help message. Currently it looks like this

Usage: /opt/conda/envs/test/bin/jupyterhub-idle-culler [OPTIONS]

Options:

  --help                           show this help information

/opt/conda/envs/test/lib/python3.9/site-packages/jupyterhub_idle_culler/__init__.py options:

  --api-page-size                  Number of users to request per page, when
                                   using JupyterHub 2.0's paginated user list
                                   API. Default: user the server-side default
                                   configured page size. (default 0)
  --concurrency                    Limit the number of concurrent requests made
                                   to the Hub.  Deleting a lot of users at the
                                   same time can slow down the Hub, so limit
                                   the number of API requests we have
                                   outstanding at any given time. (default 10)
  --cull-admin-users               Whether admin users should be culled (only
                                   if --cull-users=true). (default True)
  --cull-every                     The interval (in seconds) for checking for
                                   idle servers to cull. (default 0)
  --cull-users                     Cull users in addition to servers.  This is
                                   for use in temporary-user cases such as
                                   tmpnb. (default False)
  --internal-certs-location        The location of generated internal-ssl
                                   certificates (only needed with --ssl-
                                   enabled=true). (default internal-ssl)
  --max-age                        The maximum age (in seconds) of servers that
                                   should be culled even if they are active.
                                   (default 0)
  --remove-named-servers           Remove named servers in addition to stopping
                                   them.  This is useful for a BinderHub that
                                   uses authentication and named servers.
                                   (default False)
  --ssl-enabled                    Whether the Jupyter API endpoint has TLS
                                   enabled. (default False)
  --timeout                        The idle timeout (in seconds). (default 600)
  --url                            The JupyterHub API URL.

/opt/conda/envs/test/lib/python3.9/site-packages/tornado/log.py options:

  --log-file-max-size              max size of log files before rollover
                                   (default 100000000)
  --log-file-num-backups           number of log files to keep (default 10)
  --log-file-prefix=PATH           Path prefix for log files. Note that if you
                                   are running multiple tornado processes,
                                   log_file_prefix must be different for each
                                   of them (e.g. include the port number)
  --log-rotate-interval            The interval value of timed rotating
                                   (default 1)
  --log-rotate-mode                The mode of rotating files(time or size)
                                   (default size)
  --log-rotate-when                specify the type of TimedRotatingFileHandler
                                   interval other options:('S', 'M', 'H', 'D',
                                   'W0'-'W6') (default midnight)
  --log-to-stderr                  Send log output to stderr (colorized if
                                   possible). By default use stderr if
                                   --log_file_prefix is not set and no other
                                   logging is configured.
  --logging=debug|info|warning|error|none 
                                   Set the Python log level. If 'none', tornado
                                   won't touch the logging configuration.
                                   (default info)

Problems include:

  • The help message is interrupted by a path to a source file e.g. /opt/conda/envs/test/lib/python3.9/site-packages/jupyterhub_idle_culler/__init__.py
  • It's not clear to a new user how to use boolean options. E.g. can they be used as flags (--cull-users instead of --cull-users=true), what values can they take (is it just true/false, or are other values like 0/1 accepted)
  • It's not immediately obvious that = is required (--url http://localhost/ is invalid)
  • /opt/conda/envs/test/lib/python3.9/site-packages/tornado/log.py options are arguably irrelevant

(Optional): Suggest a solution

Use argparse instead. Boolean options would be implemented as choices=["true","false"] instead of a flag for compatibility.

Get rid of the logging options? This would be a breaking change though.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions