Skip to content

TypeError: Secondary flag is not valid for non-boolean flag. #341

Description

@CarlosSuporteISP

Deployment Type

Docker

Version

v2.0.4

Steps to Reproduce

PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm

Server: Docker Engine - Community
Engine:
Version: 28.4.0

Client: Docker Engine - Community
Version: 28.4.0

Docker Compose version v2.39.4

mkdir /etc/hyperglass
cd /opt
git clone https://github.com/thatmattlove/hyperglass.git --depth=1
cd /opt/hyperglass

cp /opt/hyperglass/.samples/sample_devices.yaml /etc/hyperglass/devices.yaml
cd /opt/hyperglass
docker compose up

Expected Behavior

Standard system execution to test before starting, even with systemctl initialization, it still gives an error.
The IP and port for access should appear, but they don't.

Observed Behavior

hyperglass-1 | /usr/local/lib/python3.12/site-packages/paramiko/pkey.py:100: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.
hyperglass-1 | "cipher": algorithms.TripleDES,
hyperglass-1 | /usr/local/lib/python3.12/site-packages/paramiko/transport.py:259: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.
hyperglass-1 | "class": algorithms.TripleDES,
hyperglass-1 | ╭───────────────────── Traceback (most recent call last) ──────────────────────╮
hyperglass-1 | │ in _run_module_as_main:198 │
hyperglass-1 | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
hyperglass-1 | │ │ alter_argv = True │ │
hyperglass-1 | │ │ code = <code object at 0x7f14c7ef14d0, file │ │
hyperglass-1 | │ │ "/opt/hyperglass/hyperglass/console.py", line 1> │ │
hyperglass-1 | │ │ main_globals = { │ │
hyperglass-1 | │ │ │ 'name': 'main', │ │
hyperglass-1 | │ │ │ 'doc': 'hyperglass CLI management tool.', │ │
hyperglass-1 | │ │ │ 'package': 'hyperglass', │ │
hyperglass-1 | │ │ │ 'loader': │ │
hyperglass-1 | │ │ <_frozen_importlib_external.SourceFileLoader object at │ │
hyperglass-1 | │ │ 0x7f14c7f44f80>, │ │
hyperglass-1 | │ │ │ 'spec': ModuleSpec(name='hyperglass.console', │ │
hyperglass-1 | │ │ loader=<_frozen_importlib_external.SourceFileLoader │ │
hyperglass-1 | │ │ object at 0x7f14c7f44f80>, │ │
hyperglass-1 | │ │ origin='/opt/hyperglass/hyperglass/console.py'), │ │
hyperglass-1 | │ │ │ 'annotations': {}, │ │
hyperglass-1 | │ │ │ 'builtins': <module 'builtins' (built-in)>, │ │
hyperglass-1 | │ │ │ 'file': '/opt/hyperglass/hyperglass/console.py', │ │
hyperglass-1 | │ │ │ 'cached': │ │
hyperglass-1 | │ │ '/opt/hyperglass/hyperglass/pycache/console.cpython-… │ │
hyperglass-1 | │ │ │ 'run': <function run at 0x7f14c7f039c0> │ │
hyperglass-1 | │ │ } │ │
hyperglass-1 | │ │ mod_name = 'hyperglass.console' │ │
hyperglass-1 | │ │ mod_spec = ModuleSpec(name='hyperglass.console', │ │
hyperglass-1 | │ │ loader=<_frozen_importlib_external.SourceFileLoader │ │
hyperglass-1 | │ │ object at 0x7f14c7f44f80>, │ │
hyperglass-1 | │ │ origin='/opt/hyperglass/hyperglass/console.py') │ │
hyperglass-1 | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
hyperglass-1 | │ in _run_code:88 │
hyperglass-1 | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
hyperglass-1 | │ │ cached = '/opt/hyperglass/hyperglass/pycache/console.cpython-… │ │
hyperglass-1 | │ │ code = <code object at 0x7f14c7ef14d0, file │ │
hyperglass-1 | │ │ "/opt/hyperglass/hyperglass/console.py", line 1> │ │
hyperglass-1 | │ │ fname = '/opt/hyperglass/hyperglass/console.py' │ │
hyperglass-1 | │ │ init_globals = None │ │
hyperglass-1 | │ │ loader = <_frozen_importlib_external.SourceFileLoader object at │ │
hyperglass-1 | │ │ 0x7f14c7f44f80> │ │
hyperglass-1 | │ │ mod_name = 'main' │ │
hyperglass-1 | │ │ mod_spec = ModuleSpec(name='hyperglass.console', │ │
hyperglass-1 | │ │ loader=<_frozen_importlib_external.SourceFileLoader │ │
hyperglass-1 | │ │ object at 0x7f14c7f44f80>, │ │
hyperglass-1 | │ │ origin='/opt/hyperglass/hyperglass/console.py') │ │
hyperglass-1 | │ │ pkg_name = 'hyperglass' │ │
hyperglass-1 | │ │ run_globals = { │ │
hyperglass-1 | │ │ │ 'name': 'main', │ │
hyperglass-1 | │ │ │ 'doc': 'hyperglass CLI management tool.', │ │
hyperglass-1 | │ │ │ 'package': 'hyperglass', │ │
hyperglass-1 | │ │ │ 'loader': │ │
hyperglass-1 | │ │ <_frozen_importlib_external.SourceFileLoader object at │ │
hyperglass-1 | │ │ 0x7f14c7f44f80>, │ │
hyperglass-1 | │ │ │ 'spec': ModuleSpec(name='hyperglass.console', │ │
hyperglass-1 | │ │ loader=<_frozen_importlib_external.SourceFileLoader │ │
hyperglass-1 | │ │ object at 0x7f14c7f44f80>, │ │
hyperglass-1 | │ │ origin='/opt/hyperglass/hyperglass/console.py'), │ │
hyperglass-1 | │ │ │ 'annotations': {}, │ │
hyperglass-1 | │ │ │ 'builtins': <module 'builtins' (built-in)>, │ │
hyperglass-1 | │ │ │ 'file': '/opt/hyperglass/hyperglass/console.py', │ │
hyperglass-1 | │ │ │ 'cached': │ │
hyperglass-1 | │ │ '/opt/hyperglass/hyperglass/pycache/console.cpython-… │ │
hyperglass-1 | │ │ │ 'run': <function run at 0x7f14c7f039c0> │ │
hyperglass-1 | │ │ } │ │
hyperglass-1 | │ │ script_name = None │ │
hyperglass-1 | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
hyperglass-1 | │ │
hyperglass-1 | │ /opt/hyperglass/hyperglass/console.py:8 in │
hyperglass-1 | │ │
hyperglass-1 | │ 5 from .cli import run │
hyperglass-1 | │ 6 │
hyperglass-1 | │ 7 if name == "main": │
hyperglass-1 | │ ❱ 8 │ run() │
hyperglass-1 | │ 9 │
hyperglass-1 | │ │
hyperglass-1 | │ /opt/hyperglass/hyperglass/cli/main.py:29 in run │
hyperglass-1 | │ │
hyperglass-1 | │ 26 │
hyperglass-1 | │ 27 def run(): │
hyperglass-1 | │ 28 │ """Run the hyperglass CLI.""" │
hyperglass-1 | │ ❱ 29 │ return typer.run(cli()) │
hyperglass-1 | │ 30 │
hyperglass-1 | │ 31 │
hyperglass-1 | │ 32 @cli.callback(name="version") │
hyperglass-1 | │ │
hyperglass-1 | │ /usr/local/lib/python3.12/site-packages/typer/main.py:328 in call │
hyperglass-1 | │ │
hyperglass-1 | │ /usr/local/lib/python3.12/site-packages/typer/main.py:311 in call │
hyperglass-1 | │ │
hyperglass-1 | │ /usr/local/lib/python3.12/site-packages/typer/main.py:350 in get_command │
hyperglass-1 | │ │
hyperglass-1 | │ /usr/local/lib/python3.12/site-packages/typer/main.py:332 in get_group │
hyperglass-1 | │ │
hyperglass-1 | │ /usr/local/lib/python3.12/site-packages/typer/main.py:483 in │
hyperglass-1 | │ get_group_from_info │
hyperglass-1 | │ │
hyperglass-1 | │ /usr/local/lib/python3.12/site-packages/typer/main.py:577 in │
hyperglass-1 | │ get_command_from_info │
hyperglass-1 | │ │
hyperglass-1 | │ /usr/local/lib/python3.12/site-packages/typer/main.py:553 in │
hyperglass-1 | │ get_params_convertors_ctx_param_name_from_function │
hyperglass-1 | │ │
hyperglass-1 | │ /usr/local/lib/python3.12/site-packages/typer/main.py:877 in get_click_param │
hyperglass-1 | │ │
hyperglass-1 | │ /usr/local/lib/python3.12/site-packages/typer/core.py:498 in init │
hyperglass-1 | │ │
hyperglass-1 | │ /usr/local/lib/python3.12/site-packages/click/core.py:2793 in init │
hyperglass-1 | ╰──────────────────────────────────────────────────────────────────────────────╯
hyperglass-1 | TypeError: Secondary flag is not valid for non-boolean flag.
hyperglass-1 exited with code 1

Configuration

org_name: MyOrg
site_title: "MyOrg Looking Glass"
site_description: "MyOrg Looking Glass"
request_timeout: 300
logging:
  directory: /var/log/hyperglass/
messages:
    general: The test did not complete successfully
    request_timeout: The test did not complete successfully.

Devices

routers:
  - name: myrouter.net
    address: w.x.y.z
    credential:
      username: username
      password: pass
    port: 22
    platform: junos
    attrs:
      source4: e.f.g.h
      source6: "JJ:KK:LL::NN"

Logs

hyperglass-1  | /usr/local/lib/python3.12/site-packages/paramiko/pkey.py:100: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.
hyperglass-1  |   "cipher": algorithms.TripleDES,
hyperglass-1  | /usr/local/lib/python3.12/site-packages/paramiko/transport.py:259: CryptographyDeprecationWarning: TripleDES has been moved to cryptography.hazmat.decrepit.ciphers.algorithms.TripleDES and will be removed from cryptography.hazmat.primitives.ciphers.algorithms in 48.0.0.
hyperglass-1  |   "class": algorithms.TripleDES,
hyperglass-1  | ╭───────────────────── Traceback (most recent call last) ──────────────────────╮
hyperglass-1  | │ in _run_module_as_main:198                                                   │
hyperglass-1  | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
hyperglass-1  | │ │   alter_argv = True                                                      │ │
hyperglass-1  | │ │         code = <code object <module> at 0x7f14c7ef14d0, file             │ │
hyperglass-1  | │ │                "/opt/hyperglass/hyperglass/console.py", line 1>          │ │
hyperglass-1  | │ │ main_globals = {                                                         │ │
hyperglass-1  | │ │                │   '__name__': '__main__',                               │ │
hyperglass-1  | │ │                │   '__doc__': 'hyperglass CLI management tool.',         │ │
hyperglass-1  | │ │                │   '__package__': 'hyperglass',                          │ │
hyperglass-1  | │ │                │   '__loader__':                                         │ │
hyperglass-1  | │ │                <_frozen_importlib_external.SourceFileLoader object at    │ │
hyperglass-1  | │ │                0x7f14c7f44f80>,                                          │ │
hyperglass-1  | │ │                │   '__spec__': ModuleSpec(name='hyperglass.console',     │ │
hyperglass-1  | │ │                loader=<_frozen_importlib_external.SourceFileLoader       │ │
hyperglass-1  | │ │                object at 0x7f14c7f44f80>,                                │ │
hyperglass-1  | │ │                origin='/opt/hyperglass/hyperglass/console.py'),          │ │
hyperglass-1  | │ │                │   '__annotations__': {},                                │ │
hyperglass-1  | │ │                │   '__builtins__': <module 'builtins' (built-in)>,       │ │
hyperglass-1  | │ │                │   '__file__': '/opt/hyperglass/hyperglass/console.py',  │ │
hyperglass-1  | │ │                │   '__cached__':                                         │ │
hyperglass-1  | │ │                '/opt/hyperglass/hyperglass/__pycache__/console.cpython-… │ │
hyperglass-1  | │ │                │   'run': <function run at 0x7f14c7f039c0>               │ │
hyperglass-1  | │ │                }                                                         │ │
hyperglass-1  | │ │     mod_name = 'hyperglass.console'                                      │ │
hyperglass-1  | │ │     mod_spec = ModuleSpec(name='hyperglass.console',                     │ │
hyperglass-1  | │ │                loader=<_frozen_importlib_external.SourceFileLoader       │ │
hyperglass-1  | │ │                object at 0x7f14c7f44f80>,                                │ │
hyperglass-1  | │ │                origin='/opt/hyperglass/hyperglass/console.py')           │ │
hyperglass-1  | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
hyperglass-1  | │ in _run_code:88                                                              │
hyperglass-1  | │ ╭───────────────────────────────── locals ─────────────────────────────────╮ │
hyperglass-1  | │ │       cached = '/opt/hyperglass/hyperglass/__pycache__/console.cpython-… │ │
hyperglass-1  | │ │         code = <code object <module> at 0x7f14c7ef14d0, file             │ │
hyperglass-1  | │ │                "/opt/hyperglass/hyperglass/console.py", line 1>          │ │
hyperglass-1  | │ │        fname = '/opt/hyperglass/hyperglass/console.py'                   │ │
hyperglass-1  | │ │ init_globals = None                                                      │ │
hyperglass-1  | │ │       loader = <_frozen_importlib_external.SourceFileLoader object at    │ │
hyperglass-1  | │ │                0x7f14c7f44f80>                                           │ │
hyperglass-1  | │ │     mod_name = '__main__'                                                │ │
hyperglass-1  | │ │     mod_spec = ModuleSpec(name='hyperglass.console',                     │ │
hyperglass-1  | │ │                loader=<_frozen_importlib_external.SourceFileLoader       │ │
hyperglass-1  | │ │                object at 0x7f14c7f44f80>,                                │ │
hyperglass-1  | │ │                origin='/opt/hyperglass/hyperglass/console.py')           │ │
hyperglass-1  | │ │     pkg_name = 'hyperglass'                                              │ │
hyperglass-1  | │ │  run_globals = {                                                         │ │
hyperglass-1  | │ │                │   '__name__': '__main__',                               │ │
hyperglass-1  | │ │                │   '__doc__': 'hyperglass CLI management tool.',         │ │
hyperglass-1  | │ │                │   '__package__': 'hyperglass',                          │ │
hyperglass-1  | │ │                │   '__loader__':                                         │ │
hyperglass-1  | │ │                <_frozen_importlib_external.SourceFileLoader object at    │ │
hyperglass-1  | │ │                0x7f14c7f44f80>,                                          │ │
hyperglass-1  | │ │                │   '__spec__': ModuleSpec(name='hyperglass.console',     │ │
hyperglass-1  | │ │                loader=<_frozen_importlib_external.SourceFileLoader       │ │
hyperglass-1  | │ │                object at 0x7f14c7f44f80>,                                │ │
hyperglass-1  | │ │                origin='/opt/hyperglass/hyperglass/console.py'),          │ │
hyperglass-1  | │ │                │   '__annotations__': {},                                │ │
hyperglass-1  | │ │                │   '__builtins__': <module 'builtins' (built-in)>,       │ │
hyperglass-1  | │ │                │   '__file__': '/opt/hyperglass/hyperglass/console.py',  │ │
hyperglass-1  | │ │                │   '__cached__':                                         │ │
hyperglass-1  | │ │                '/opt/hyperglass/hyperglass/__pycache__/console.cpython-… │ │
hyperglass-1  | │ │                │   'run': <function run at 0x7f14c7f039c0>               │ │
hyperglass-1  | │ │                }                                                         │ │
hyperglass-1  | │ │  script_name = None                                                      │ │
hyperglass-1  | │ ╰──────────────────────────────────────────────────────────────────────────╯ │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /opt/hyperglass/hyperglass/console.py:8 in <module>                          │
hyperglass-1  | │                                                                              │
hyperglass-1  | │   5 from .cli import run                                                     │
hyperglass-1  | │   6                                                                          │
hyperglass-1  | │   7 if __name__ == "__main__":                                               │
hyperglass-1  | │ ❱ 8 │   run()                                                                │
hyperglass-1  | │   9                                                                          │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /opt/hyperglass/hyperglass/cli/main.py:29 in run                             │
hyperglass-1  | │                                                                              │
hyperglass-1  | │    26                                                                        │
hyperglass-1  | │    27 def run():                                                             │
hyperglass-1  | │    28 │   """Run the hyperglass CLI."""                                      │
hyperglass-1  | │ ❱  29 │   return typer.run(cli())                                            │
hyperglass-1  | │    30                                                                        │
hyperglass-1  | │    31                                                                        │
hyperglass-1  | │    32 @cli.callback(name="version")                                          │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /usr/local/lib/python3.12/site-packages/typer/main.py:328 in __call__        │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /usr/local/lib/python3.12/site-packages/typer/main.py:311 in __call__        │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /usr/local/lib/python3.12/site-packages/typer/main.py:350 in get_command     │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /usr/local/lib/python3.12/site-packages/typer/main.py:332 in get_group       │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /usr/local/lib/python3.12/site-packages/typer/main.py:483 in                 │
hyperglass-1  | │ get_group_from_info                                                          │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /usr/local/lib/python3.12/site-packages/typer/main.py:577 in                 │
hyperglass-1  | │ get_command_from_info                                                        │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /usr/local/lib/python3.12/site-packages/typer/main.py:553 in                 │
hyperglass-1  | │ get_params_convertors_ctx_param_name_from_function                           │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /usr/local/lib/python3.12/site-packages/typer/main.py:877 in get_click_param │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /usr/local/lib/python3.12/site-packages/typer/core.py:498 in __init__        │
hyperglass-1  | │                                                                              │
hyperglass-1  | │ /usr/local/lib/python3.12/site-packages/click/core.py:2793 in __init__       │
hyperglass-1  | ╰──────────────────────────────────────────────────────────────────────────────╯
hyperglass-1  | TypeError: Secondary flag is not valid for non-boolean flag.
hyperglass-1 exited with code 1

Activity

  1. CarlosSuporteISP commented on Sep 24, 2025

    @CarlosSuporteISP
    Author

    I managed to get it running on Python 3.13. I'm going to prepare it here and request a package update request. It was resolved, so I've already updated everything, but I'm still testing everything.

  2. CarlosSuporteISP commented on Sep 25, 2025

    @CarlosSuporteISP
    Author

    Just one detail: I also updated the Docker version to 3.13-alpine and updated several packages.

    #340 bug fix

    I only tested with Docker and Docker Compose - I didn't test manual installation. I tested only in a Python container, but with docker compose up, both the official hyperglass project version and my fork work normally.

    Modified files (in case you don't want to use my fork):

    /hyperglass/Dockerfile
    
    /opt/hyperglass/compose.yaml
    
    /opt/hyperglass/requirements-dev.lock
    
    /opt/hyperglass/requirements.lock
    
    /opt/hyperglass/poetry.lock
    
    /opt/hyperglass/pyproject.toml
    
    /opt/hyperglass/requirements-dev.lock
    
  3. CarlosSuporteISP commented on Sep 25, 2025

    @CarlosSuporteISP
    Author

    ok click 8.3 is the culprit here - I cant find exactly where the issue resides but using click 8.1.7 and typer 0.9.0 works perfectly
    explanation of @WilhelmZA

  4. added 2 commits that reference this issue on Apr 30, 2026
    a7c6820
    c000d7d
  5. renatoornelas commented on Jun 26, 2026

    @renatoornelas

    I can confirm that using the next line on supplied Dockerfile fixes the issue:

    RUN pip3 install -e . && pip install --no-cache-dir --force-reinstall 'click==8.1.7' 'typer==0.9.0'

  6. added a commit that references this issue on Jun 28, 2026
    2aadb27
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions