Below are the screenshots of my environment variables in Truenas and the log file. It seems to be failing on line 22 of the until.py (expecting a string value)
Log file:
{\rtf1\ansi\ansicpg1252\cocoartf2870
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\froman\fcharset0 Times-Roman;}
{\colortbl;\red255\green255\blue255;\red0\green0\blue0;}
{*\expandedcolortbl;;\cssrgb\c0\c0\c0;}
\margl1440\margr1440\vieww19860\viewh16500\viewkind0
\deftab720
\pard\pardeftab720\partightenfactor0
\f0\fs24 \cf0 \expnd0\expndtw0\kerning0
\outl0\strokewidth0 \strokec2 2026-05-20 15:35:20.078208+00:00 2026-05-20T15:35:20.078208572Z
2026-05-20 15:35:20.078272+00:00 (main.py:7): Gtk-CRITICAL **: 11:35:20.078: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed
2026-05-20 15:35:20.690733+00:00 /app/src/gramps_webapi/app.py:91: UserWarning: Setting the SECRET_KEY config option via the SECRET_KEY environment variable is deprecated and will stop working in the future. Please use GRAMPSWEB_SECRET_KEY instead.
2026-05-20 15:35:20.690792+00:00 warnings.warn(
2026-05-20 15:35:21.468989+00:00 INFO [alembic.runtime.migration] Context impl SQLiteImpl.
2026-05-20 15:35:21.469025+00:00 INFO [alembic.runtime.migration] Will assume non-transactional DDL.
2026-05-20 15:35:22.163685+00:00 [2026-05-20 11:35:22 -0400] [17] [INFO] Starting gunicorn 26.0.0
2026-05-20 15:35:22.163889+00:00 [2026-05-20 11:35:22 -0400] [17] [INFO] Listening at: http://0.0.0.0:5000 (17)
2026-05-20 15:35:22.163942+00:00 [2026-05-20 11:35:22 -0400] [17] [INFO] Using worker: sync
2026-05-20 15:35:22.165966+00:00 [2026-05-20 11:35:22 -0400] [18] [INFO] Booting worker with pid: 18
2026-05-20 15:35:22.188821+00:00 [2026-05-20 11:35:22 -0400] [19] [INFO] Booting worker with pid: 19
2026-05-20 15:35:22.210030+00:00 [2026-05-20 11:35:22 -0400] [20] [INFO] Booting worker with pid: 20
2026-05-20 15:35:22.231978+00:00 [2026-05-20 11:35:22 -0400] [21] [INFO] Booting worker with pid: 21
2026-05-20 15:35:22.324013+00:00 [2026-05-20 11:35:22 -0400] [22] [INFO] Booting worker with pid: 22
2026-05-20 15:35:22.333033+00:00 [2026-05-20 11:35:22 -0400] [23] [INFO] Booting worker with pid: 23
2026-05-20 15:35:22.424070+00:00 [2026-05-20 11:35:22 -0400] [24] [INFO] Booting worker with pid: 24
2026-05-20 15:35:22.437299+00:00 [2026-05-20 11:35:22 -0400] [25] [INFO] Booting worker with pid: 25
2026-05-20 15:35:22.759246+00:00 [2026-05-20 11:35:22 -0400] [17] [INFO] Control socket listening at /root/.gunicorn/gunicorn.ctl
2026-05-20 15:35:26.332161+00:00 2026-05-20T15:35:26.332161430Z
2026-05-20 15:35:26.332197+00:00 (gunicorn:19): Gtk-CRITICAL **: 11:35:26.332: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed
2026-05-20 15:35:27.618487+00:00 2026-05-20T15:35:27.618487244Z
2026-05-20 15:35:27.618521+00:00 (gunicorn:24): Gtk-CRITICAL **: 11:35:27.618: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed
2026-05-20 15:35:28.256042+00:00 2026-05-20T15:35:28.256042092Z
2026-05-20 15:35:28.256089+00:00 (gunicorn:21): Gtk-CRITICAL **: 11:35:28.253: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed
2026-05-20 15:35:28.877578+00:00 2026-05-20T15:35:28.877578951Z
2026-05-20 15:35:28.877608+00:00 (gunicorn:18): Gtk-CRITICAL **: 11:35:28.877: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed
2026-05-20 15:35:29.161833+00:00 /venv/lib/python3.13/site-packages/gramps_webapi/app.py:91: UserWarning: Setting the SECRET_KEY config option via the SECRET_KEY environment variable is deprecated and will stop working in the future. Please use GRAMPSWEB_SECRET_KEY instead.
2026-05-20 15:35:29.161861+00:00 warnings.warn(
2026-05-20 15:35:29.668865+00:00 /venv/lib/python3.13/site-packages/gramps_webapi/app.py:91: UserWarning: Setting the SECRET_KEY config option via the SECRET_KEY environment variable is deprecated and will stop working in the future. Please use GRAMPSWEB_SECRET_KEY instead.
2026-05-20 15:35:29.668917+00:00 warnings.warn(
2026-05-20 15:35:29.731956+00:00 2026-05-20T15:35:29.731956138Z
2026-05-20 15:35:29.731988+00:00 (gunicorn:23): Gtk-CRITICAL **: 11:35:29.726: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed
2026-05-20 15:35:29.736208+00:00 /venv/lib/python3.13/site-packages/gramps_webapi/app.py:91: UserWarning: Setting the SECRET_KEY config option via the SECRET_KEY environment variable is deprecated and will stop working in the future. Please use GRAMPSWEB_SECRET_KEY instead.
2026-05-20 15:35:29.736241+00:00 warnings.warn(
2026-05-20 15:35:29.768035+00:00 2026-05-20T15:35:29.768035033Z
2026-05-20 15:35:29.768075+00:00 (gunicorn:25): Gtk-CRITICAL **: 11:35:29.767: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed
2026-05-20 15:35:29.936020+00:00 2026-05-20T15:35:29.936020736Z
2026-05-20 15:35:29.936058+00:00 (gunicorn:20): Gtk-CRITICAL **: 11:35:29.933: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed
2026-05-20 15:35:30.677104+00:00 2026-05-20T15:35:30.677104815Z
2026-05-20 15:35:30.677144+00:00 (gunicorn:22): Gtk-CRITICAL **: 11:35:30.677: gtk_icon_theme_get_for_screen: assertion ‘GDK_IS_SCREEN (screen)’ failed
2026-05-20 15:35:30.834952+00:00 /venv/lib/python3.13/site-packages/gramps_webapi/app.py:91: UserWarning: Setting the SECRET_KEY config option via the SECRET_KEY environment variable is deprecated and will stop working in the future. Please use GRAMPSWEB_SECRET_KEY instead.
2026-05-20 15:35:30.834988+00:00 warnings.warn(
2026-05-20 15:35:31.223977+00:00 /venv/lib/python3.13/site-packages/gramps_webapi/app.py:91: UserWarning: Setting the SECRET_KEY config option via the SECRET_KEY environment variable is deprecated and will stop working in the future. Please use GRAMPSWEB_SECRET_KEY instead.
2026-05-20 15:35:31.224018+00:00 warnings.warn(
2026-05-20 15:35:31.225192+00:00 /venv/lib/python3.13/site-packages/gramps_webapi/app.py:91: UserWarning: Setting the SECRET_KEY config option via the SECRET_KEY environment variable is deprecated and will stop working in the future. Please use GRAMPSWEB_SECRET_KEY instead.
2026-05-20 15:35:31.225216+00:00 warnings.warn(
2026-05-20 15:35:31.563730+00:00 /venv/lib/python3.13/site-packages/gramps_webapi/app.py:91: UserWarning: Setting the SECRET_KEY config option via the SECRET_KEY environment variable is deprecated and will stop working in the future. Please use GRAMPSWEB_SECRET_KEY instead.
2026-05-20 15:35:31.563774+00:00 warnings.warn(
2026-05-20 15:35:31.773611+00:00 /venv/lib/python3.13/site-packages/gramps_webapi/app.py:91: UserWarning: Setting the SECRET_KEY config option via the SECRET_KEY environment variable is deprecated and will stop working in the future. Please use GRAMPSWEB_SECRET_KEY instead.
2026-05-20 15:35:31.773652+00:00 warnings.warn(
2026-05-20 15:35:46.401016+00:00 [2026-05-20 11:35:46 -0400] [18] [ERROR] Error handling request POST /api/token/create_owner/
2026-05-20 15:35:46.401066+00:00 Traceback (most recent call last):
2026-05-20 15:35:46.401080+00:00 File “/venv/lib/python3.13/site-packages/gunicorn/workers/sync.py”, line 141, in handle
2026-05-20 15:35:46.401107+00:00 self.handle_request(listener, req, client, addr)
2026-05-20 15:35:46.401119+00:00 ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-05-20 15:35:46.401129+00:00 File “/venv/lib/python3.13/site-packages/gunicorn/workers/sync.py”, line 184, in handle_request
2026-05-20 15:35:46.401146+00:00 respiter = self.wsgi(environ, resp.start_response)
2026-05-20 15:35:46.401157+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 1536, in call
2026-05-20 15:35:46.401168+00:00 return self.wsgi_app(environ, start_response)
2026-05-20 15:35:46.401178+00:00 ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
2026-05-20 15:35:46.401193+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 1514, in wsgi_app
2026-05-20 15:35:46.401205+00:00 response = self.handle_exception(e)
2026-05-20 15:35:46.401215+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 1511, in wsgi_app
2026-05-20 15:35:46.401225+00:00 response = self.full_dispatch_request()
2026-05-20 15:35:46.401240+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 919, in full_dispatch_request
2026-05-20 15:35:46.401252+00:00 rv = self.handle_user_exception(e)
2026-05-20 15:35:46.401262+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 917, in full_dispatch_request
2026-05-20 15:35:46.401278+00:00 rv = self.dispatch_request()
2026-05-20 15:35:46.401289+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 902, in dispatch_request
2026-05-20 15:35:46.401300+00:00 return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
2026-05-20 15:35:46.401310+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
2026-05-20 15:35:46.401325+00:00 File “/venv/lib/python3.13/site-packages/flask/views.py”, line 110, in view
2026-05-20 15:35:46.401337+00:00 return current_app.ensure_sync(self.dispatch_request)(**kwargs) # type: ignore[no-any-return]
2026-05-20 15:35:46.401347+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
2026-05-20 15:35:46.401362+00:00 File “/venv/lib/python3.13/site-packages/gramps_webapi/api/resources/init.py”, line 51, in dispatch_request
2026-05-20 15:35:46.401374+00:00 return current_app.ensure_sync(meth)(*args, **kwargs)
2026-05-20 15:35:46.401384+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
2026-05-20 15:35:46.401393+00:00 File “/venv/lib/python3.13/site-packages/flask_limiter/_limits.py”, line 326, in __inner
2026-05-20 15:35:46.401410+00:00 return cast(R, flask.current_app.ensure_sync(obj)(*a, **k))
2026-05-20 15:35:46.401422+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
2026-05-20 15:35:46.401432+00:00 File “/venv/lib/python3.13/site-packages/flask_smorest/response.py”, line 89, in wrapper
2026-05-20 15:35:46.401449+00:00 current_app.ensure_sync(func)(*args, **kwargs)
2026-05-20 15:35:46.401460+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
2026-05-20 15:35:46.401470+00:00 File “/venv/lib/python3.13/site-packages/webargs/core.py”, line 652, in wrapper
2026-05-20 15:35:46.401480+00:00 return func(*args, **kwargs)
2026-05-20 15:35:46.401497+00:00 File “/venv/lib/python3.13/site-packages/flask_smorest/arguments.py”, line 85, in wrapper
2026-05-20 15:35:46.401509+00:00 return current_app.ensure_sync(func)(*f_args, **f_kwargs)
2026-05-20 15:35:46.401519+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
2026-05-20 15:35:46.401529+00:00 File “/venv/lib/python3.13/site-packages/gramps_webapi/api/resources/token.py”, line 229, in post
2026-05-20 15:35:46.401545+00:00 token = create_access_token(identity=“owner”, additional_claims=claims)
2026-05-20 15:35:46.401556+00:00 File “/venv/lib/python3.13/site-packages/flask_jwt_extended/utils.py”, line 174, in create_access_token
2026-05-20 15:35:46.401567+00:00 return jwt_manager._encode_jwt_from_config(
2026-05-20 15:35:46.401582+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
2026-05-20 15:35:46.401593+00:00 claims=additional_claims,
2026-05-20 15:35:46.401605+00:00 ^^^^^^^^^^^^^^^^^^^^^^^^^
2026-05-20 15:35:46.401615+00:00 …<4 lines>…
2026-05-20 15:35:46.401626+00:00 token_type=“access”,
2026-05-20 15:35:46.401642+00:00 ^^^^^^^^^^^^^^^^^^^^
2026-05-20 15:35:46.401653+00:00 )
2026-05-20 15:35:46.401663+00:00 ^
2026-05-20 15:35:46.401673+00:00 File “/venv/lib/python3.13/site-packages/flask_jwt_extended/jwt_manager.py”, line 515, in _encode_jwt_from_config
2026-05-20 15:35:46.401683+00:00 return _encode_jwt(
2026-05-20 15:35:46.401699+00:00 algorithm=config.algorithm,
2026-05-20 15:35:46.401710+00:00 …<12 lines>…
2026-05-20 15:35:46.401720+00:00 nbf=config.encode_nbf,
2026-05-20 15:35:46.401731+00:00 )
2026-05-20 15:35:46.401741+00:00 File “/venv/lib/python3.13/site-packages/flask_jwt_extended/tokens.py”, line 69, in _encode_jwt
2026-05-20 15:35:46.401757+00:00 return jwt.encode(
2026-05-20 15:35:46.401768+00:00 ~~~~~~~~~~^
2026-05-20 15:35:46.401778+00:00 token_data,
2026-05-20 15:35:46.401788+00:00 ^^^^^^^^^^^
2026-05-20 15:35:46.401797+00:00 …<3 lines>…
2026-05-20 15:35:46.401814+00:00 headers=header_overrides,
2026-05-20 15:35:46.401825+00:00 ^^^^^^^^^^^^^^^^^^^^^^^^^
2026-05-20 15:35:46.401835+00:00 )
2026-05-20 15:35:46.401845+00:00 ^
2026-05-20 15:35:46.401855+00:00 File “/venv/lib/python3.13/site-packages/jwt/api_jwt.py”, line 147, in encode
2026-05-20 15:35:46.401877+00:00 return self._jws.encode(
2026-05-20 15:35:46.401888+00:00 ~~~~~~~~~~~~~~~~^
2026-05-20 15:35:46.401898+00:00 json_payload,
2026-05-20 15:35:46.401908+00:00 ^^^^^^^^^^^^^
2026-05-20 15:35:46.401919+00:00 …<4 lines>…
2026-05-20 15:35:46.401937+00:00 sort_headers=sort_headers,
2026-05-20 15:35:46.401949+00:00 ^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-05-20 15:35:46.401959+00:00 )
2026-05-20 15:35:46.401968+00:00 ^
2026-05-20 15:35:46.401978+00:00 File “/venv/lib/python3.13/site-packages/jwt/api_jws.py”, line 190, in encode
2026-05-20 15:35:46.401995+00:00 key = alg_obj.prepare_key(key)
2026-05-20 15:35:46.402007+00:00 File “/venv/lib/python3.13/site-packages/jwt/algorithms.py”, line 326, in prepare_key
2026-05-20 15:35:46.402017+00:00 key_bytes = force_bytes(key)
2026-05-20 15:35:46.402027+00:00 File “/venv/lib/python3.13/site-packages/jwt/utils.py”, line 22, in force_bytes
2026-05-20 15:35:46.402044+00:00 raise TypeError(“Expected a string value”)
2026-05-20 15:35:46.402055+00:00 TypeError: Expected a string value
2026-05-20 17:03:54.277204+00:00 [2026-05-20 13:03:54 -0400] [19] [ERROR] Error handling request POST /api/token/create_owner/
2026-05-20 17:03:54.277268+00:00 Traceback (most recent call last):
2026-05-20 17:03:54.277309+00:00 File “/venv/lib/python3.13/site-packages/gunicorn/workers/sync.py”, line 141, in handle
2026-05-20 17:03:54.277325+00:00 self.handle_request(listener, req, client, addr)
2026-05-20 17:03:54.277338+00:00 ~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-05-20 17:03:54.277369+00:00 File “/venv/lib/python3.13/site-packages/gunicorn/workers/sync.py”, line 184, in handle_request
2026-05-20 17:03:54.277392+00:00 respiter = self.wsgi(environ, resp.start_response)
2026-05-20 17:03:54.277406+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 1536, in call
2026-05-20 17:03:54.277427+00:00 return self.wsgi_app(environ, start_response)
2026-05-20 17:03:54.277440+00:00 ~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
2026-05-20 17:03:54.277462+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 1514, in wsgi_app
2026-05-20 17:03:54.277476+00:00 response = self.handle_exception(e)
2026-05-20 17:03:54.277489+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 1511, in wsgi_app
2026-05-20 17:03:54.277511+00:00 response = self.full_dispatch_request()
2026-05-20 17:03:54.277525+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 919, in full_dispatch_request
2026-05-20 17:03:54.277537+00:00 rv = self.handle_user_exception(e)
2026-05-20 17:03:54.277549+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 917, in full_dispatch_request
2026-05-20 17:03:54.277570+00:00 rv = self.dispatch_request()
2026-05-20 17:03:54.277584+00:00 File “/venv/lib/python3.13/site-packages/flask/app.py”, line 902, in dispatch_request
2026-05-20 17:03:54.277597+00:00 return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
2026-05-20 17:03:54.277610+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
2026-05-20 17:03:54.277631+00:00 File “/venv/lib/python3.13/site-packages/flask/views.py”, line 110, in view
2026-05-20 17:03:54.277644+00:00 return current_app.ensure_sync(self.dispatch_request)(**kwargs) # type: ignore[no-any-return]
2026-05-20 17:03:54.277657+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^
2026-05-20 17:03:54.277678+00:00 File “/venv/lib/python3.13/site-packages/gramps_webapi/api/resources/init.py”, line 51, in dispatch_request
2026-05-20 17:03:54.277692+00:00 return current_app.ensure_sync(meth)(*args, **kwargs)
2026-05-20 17:03:54.277705+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
2026-05-20 17:03:54.277718+00:00 File “/venv/lib/python3.13/site-packages/flask_limiter/_limits.py”, line 326, in __inner
2026-05-20 17:03:54.277740+00:00 return cast(R, flask.current_app.ensure_sync(obj)(*a, **k))
2026-05-20 17:03:54.277754+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
2026-05-20 17:03:54.277767+00:00 File “/venv/lib/python3.13/site-packages/flask_smorest/response.py”, line 89, in wrapper
2026-05-20 17:03:54.277788+00:00 current_app.ensure_sync(func)(*args, **kwargs)
2026-05-20 17:03:54.277802+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
2026-05-20 17:03:54.277814+00:00 File “/venv/lib/python3.13/site-packages/webargs/core.py”, line 652, in wrapper
2026-05-20 17:03:54.277827+00:00 return func(*args, **kwargs)
2026-05-20 17:03:54.277848+00:00 File “/venv/lib/python3.13/site-packages/flask_smorest/arguments.py”, line 85, in wrapper
2026-05-20 17:03:54.277862+00:00 return current_app.ensure_sync(func)(*f_args, **f_kwargs)
2026-05-20 17:03:54.277874+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^
2026-05-20 17:03:54.277886+00:00 File “/venv/lib/python3.13/site-packages/gramps_webapi/api/resources/token.py”, line 229, in post
2026-05-20 17:03:54.277907+00:00 token = create_access_token(identity=“owner”, additional_claims=claims)
2026-05-20 17:03:54.277921+00:00 File “/venv/lib/python3.13/site-packages/flask_jwt_extended/utils.py”, line 174, in create_access_token
2026-05-20 17:03:54.277934+00:00 return jwt_manager._encode_jwt_from_config(
2026-05-20 17:03:54.277955+00:00 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
2026-05-20 17:03:54.277969+00:00 claims=additional_claims,
2026-05-20 17:03:54.277981+00:00 ^^^^^^^^^^^^^^^^^^^^^^^^^
2026-05-20 17:03:54.277993+00:00 …<4 lines>…
2026-05-20 17:03:54.278006+00:00 token_type=“access”,
2026-05-20 17:03:54.278031+00:00 ^^^^^^^^^^^^^^^^^^^^
2026-05-20 17:03:54.278045+00:00 )
2026-05-20 17:03:54.278058+00:00 ^
2026-05-20 17:03:54.278070+00:00 File “/venv/lib/python3.13/site-packages/flask_jwt_extended/jwt_manager.py”, line 515, in _encode_jwt_from_config
2026-05-20 17:03:54.278093+00:00 return _encode_jwt(
2026-05-20 17:03:54.278107+00:00 algorithm=config.algorithm,
2026-05-20 17:03:54.278120+00:00 …<12 lines>…
2026-05-20 17:03:54.278132+00:00 nbf=config.encode_nbf,
2026-05-20 17:03:54.278145+00:00 )
2026-05-20 17:03:54.278157+00:00 File “/venv/lib/python3.13/site-packages/flask_jwt_extended/tokens.py”, line 69, in _encode_jwt
2026-05-20 17:03:54.278179+00:00 return jwt.encode(
2026-05-20 17:03:54.278193+00:00 ~~~~~~~~~~^
2026-05-20 17:03:54.278206+00:00 token_data,
2026-05-20 17:03:54.278218+00:00 ^^^^^^^^^^^
2026-05-20 17:03:54.278239+00:00 …<3 lines>…
2026-05-20 17:03:54.278253+00:00 headers=header_overrides,
2026-05-20 17:03:54.278265+00:00 ^^^^^^^^^^^^^^^^^^^^^^^^^
2026-05-20 17:03:54.278278+00:00 )
2026-05-20 17:03:54.278290+00:00 ^
2026-05-20 17:03:54.278302+00:00 File “/venv/lib/python3.13/site-packages/jwt/api_jwt.py”, line 147, in encode
2026-05-20 17:03:54.278324+00:00 return self._jws.encode(
2026-05-20 17:03:54.278337+00:00 ~~~~~~~~~~~~~~~~^
2026-05-20 17:03:54.278350+00:00 json_payload,
2026-05-20 17:03:54.278362+00:00 ^^^^^^^^^^^^^
2026-05-20 17:03:54.278374+00:00 …<4 lines>…
2026-05-20 17:03:54.278395+00:00 sort_headers=sort_headers,
2026-05-20 17:03:54.278409+00:00 ^^^^^^^^^^^^^^^^^^^^^^^^^^
2026-05-20 17:03:54.278422+00:00 )
2026-05-20 17:03:54.278434+00:00 ^
2026-05-20 17:03:54.278446+00:00 File “/venv/lib/python3.13/site-packages/jwt/api_jws.py”, line 190, in encode
2026-05-20 17:03:54.278469+00:00 key = alg_obj.prepare_key(key)
2026-05-20 17:03:54.278483+00:00 File “/venv/lib/python3.13/site-packages/jwt/algorithms.py”, line 326, in prepare_key
2026-05-20 17:03:54.278496+00:00 key_bytes = force_bytes(key)
2026-05-20 17:03:54.278508+00:00 File “/venv/lib/python3.13/site-packages/jwt/utils.py”, line 22, in force_bytes
2026-05-20 17:03:54.278530+00:00 raise TypeError(“Expected a string value”)
2026-05-20 17:03:54.278545+00:00 TypeError: Expected a string value
}