docker compose -f docker/docker-compose.yml logs web
WARN[0000] The "SMTP_USER" variable is not set. Defaulting to a blank string.
WARN[0000] The "SMTP_PASSWORD" variable is not set. Defaulting to a blank string.
WARN[0000] The "SMTP_PORT" variable is not set. Defaulting to a blank string.
WARN[0000] The "SMTP_HOST" variable is not set. Defaulting to a blank string.
WARN[0000] The "RECAPTCHA_SECRET" variable is not set. Defaulting to a blank string.
WARN[0000] The "RECAPTCHA_SITE_KEY" variable is not set. Defaulting to a blank string.
WARN[0000] The "GITBUCKET_URL" variable is not set. Defaulting to a blank string.
WARN[0000] The "DATABASE_URL" variable is not set. Defaulting to a blank string.
WARN[0000] /volume1/Docker/geekbrain-portfolio/docker/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion
web-1  | INFO:     Started server process [1]
web-1  | INFO:     Waiting for application startup.
web-1  | INFO:     Application startup complete.
web-1  | INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
web-1  | INFO:     172.19.0.1:39604 - "GET /health HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:43982 - "GET / HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:43982 - "GET /css/style.css HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:43994 - "GET /assets/images/Geekbrain-io.png HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:44004 - "GET /js/main.js HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:43994 - "GET /favicon.ico HTTP/1.1" 404 Not Found
web-1  | INFO:     172.19.0.1:43994 - "GET / HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:43994 - "GET /contact HTTP/1.1" 500 Internal Server Error
web-1  | ERROR:    Exception in ASGI application
web-1  | Traceback (most recent call last):
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
web-1  |     result = await app(  # type: ignore[func-returns-value]
web-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
web-1  |     return await self.app(scope, receive, send)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
web-1  |     await super().__call__(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
web-1  |     await self.middleware_stack(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
web-1  |     await self.app(scope, receive, _send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
web-1  |     await self.app(scope, receive, sender)
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
web-1  |     raise e
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
web-1  |     await route.handle(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
web-1  |     response = await func(request)
web-1  |                ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
web-1  |     raw_response = await run_endpoint_function(
web-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
web-1  |     return await dependant.call(**values)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/routes/contact.py", line 15, in contact_page
web-1  |     settings = get_settings()
web-1  |                ^^^^^^^^^^^^^^
web-1  |   File "/app/app/config.py", line 21, in get_settings
web-1  |     return Settings()
web-1  |            ^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic_settings/main.py", line 71, in __init__
web-1  |     super().__init__(
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic/main.py", line 164, in __init__
web-1  |     __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
web-1  | pydantic_core._pydantic_core.ValidationError: 2 validation errors for Settings
web-1  | smtp_port
web-1  |   Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/int_parsing
web-1  | gitbucket_url
web-1  |   Input should be a valid URL, input is empty [type=url_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/url_parsing
web-1  | INFO:     172.19.0.1:44020 - "GET /about HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:44020 - "GET /projects HTTP/1.1" 500 Internal Server Error
web-1  | ERROR:    Exception in ASGI application
web-1  | Traceback (most recent call last):
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
web-1  |     result = await app(  # type: ignore[func-returns-value]
web-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
web-1  |     return await self.app(scope, receive, send)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
web-1  |     await super().__call__(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
web-1  |     await self.middleware_stack(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
web-1  |     await self.app(scope, receive, _send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
web-1  |     await self.app(scope, receive, sender)
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
web-1  |     raise e
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
web-1  |     await route.handle(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
web-1  |     response = await func(request)
web-1  |                ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
web-1  |     raw_response = await run_endpoint_function(
web-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
web-1  |     return await dependant.call(**values)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/routes/projects.py", line 11, in projects
web-1  |     repos = await fetch_repos()
web-1  |             ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/services/gitbucket.py", line 16, in fetch_repos
web-1  |     settings = get_settings()
web-1  |                ^^^^^^^^^^^^^^
web-1  |   File "/app/app/config.py", line 21, in get_settings
web-1  |     return Settings()
web-1  |            ^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic_settings/main.py", line 71, in __init__
web-1  |     super().__init__(
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic/main.py", line 164, in __init__
web-1  |     __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
web-1  | pydantic_core._pydantic_core.ValidationError: 2 validation errors for Settings
web-1  | smtp_port
web-1  |   Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/int_parsing
web-1  | gitbucket_url
web-1  |   Input should be a valid URL, input is empty [type=url_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/url_parsing
web-1  | INFO:     172.19.0.1:47116 - "GET /robots.txt HTTP/1.1" 404 Not Found
web-1  | INFO:     172.19.0.1:47124 - "GET / HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:47100 - "GET /contact HTTP/1.1" 500 Internal Server Error
web-1  | ERROR:    Exception in ASGI application
web-1  | Traceback (most recent call last):
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
web-1  |     result = await app(  # type: ignore[func-returns-value]
web-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
web-1  |     return await self.app(scope, receive, send)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
web-1  |     await super().__call__(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
web-1  |     await self.middleware_stack(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
web-1  |     await self.app(scope, receive, _send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
web-1  |     await self.app(scope, receive, sender)
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
web-1  |     raise e
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
web-1  |     await route.handle(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
web-1  |     response = await func(request)
web-1  |                ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
web-1  |     raw_response = await run_endpoint_function(
web-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
web-1  |     return await dependant.call(**values)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/routes/contact.py", line 15, in contact_page
web-1  |     settings = get_settings()
web-1  |                ^^^^^^^^^^^^^^
web-1  |   File "/app/app/config.py", line 21, in get_settings
web-1  |     return Settings()
web-1  |            ^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic_settings/main.py", line 71, in __init__
web-1  |     super().__init__(
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic/main.py", line 164, in __init__
web-1  |     __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
web-1  | pydantic_core._pydantic_core.ValidationError: 2 validation errors for Settings
web-1  | smtp_port
web-1  |   Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/int_parsing
web-1  | gitbucket_url
web-1  |   Input should be a valid URL, input is empty [type=url_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/url_parsing
web-1  | INFO:     172.19.0.1:47136 - "GET /about HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:47136 - "GET / HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:54242 - "GET /contact HTTP/1.1" 500 Internal Server Error
web-1  | ERROR:    Exception in ASGI application
web-1  | Traceback (most recent call last):
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
web-1  |     result = await app(  # type: ignore[func-returns-value]
web-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
web-1  |     return await self.app(scope, receive, send)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
web-1  |     await super().__call__(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
web-1  |     await self.middleware_stack(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
web-1  |     await self.app(scope, receive, _send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
web-1  |     await self.app(scope, receive, sender)
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
web-1  |     raise e
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
web-1  |     await route.handle(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
web-1  |     response = await func(request)
web-1  |                ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
web-1  |     raw_response = await run_endpoint_function(
web-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
web-1  |     return await dependant.call(**values)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/routes/contact.py", line 15, in contact_page
web-1  |     settings = get_settings()
web-1  |                ^^^^^^^^^^^^^^
web-1  |   File "/app/app/config.py", line 21, in get_settings
web-1  |     return Settings()
web-1  |            ^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic_settings/main.py", line 71, in __init__
web-1  |     super().__init__(
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic/main.py", line 164, in __init__
web-1  |     __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
web-1  | pydantic_core._pydantic_core.ValidationError: 2 validation errors for Settings
web-1  | smtp_port
web-1  |   Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/int_parsing
web-1  | gitbucket_url
web-1  |   Input should be a valid URL, input is empty [type=url_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/url_parsing
web-1  | INFO:     172.19.0.1:36944 - "GET / HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:36948 - "GET /assets/images/Geekbrain-io.png HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:36950 - "GET /js/main.js HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:36958 - "GET /css/style.css HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:36974 - "GET /favicon.ico HTTP/1.1" 404 Not Found
web-1  | INFO:     172.19.0.1:38008 - "GET /projects HTTP/1.1" 500 Internal Server Error
web-1  | ERROR:    Exception in ASGI application
web-1  | Traceback (most recent call last):
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
web-1  |     result = await app(  # type: ignore[func-returns-value]
web-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
web-1  |     return await self.app(scope, receive, send)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
web-1  |     await super().__call__(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
web-1  |     await self.middleware_stack(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
web-1  |     await self.app(scope, receive, _send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
web-1  |     await self.app(scope, receive, sender)
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
web-1  |     raise e
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
web-1  |     await route.handle(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
web-1  |     response = await func(request)
web-1  |                ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
web-1  |     raw_response = await run_endpoint_function(
web-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
web-1  |     return await dependant.call(**values)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/routes/projects.py", line 11, in projects
web-1  |     repos = await fetch_repos()
web-1  |             ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/services/gitbucket.py", line 16, in fetch_repos
web-1  |     settings = get_settings()
web-1  |                ^^^^^^^^^^^^^^
web-1  |   File "/app/app/config.py", line 21, in get_settings
web-1  |     return Settings()
web-1  |            ^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic_settings/main.py", line 71, in __init__
web-1  |     super().__init__(
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic/main.py", line 164, in __init__
web-1  |     __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
web-1  | pydantic_core._pydantic_core.ValidationError: 2 validation errors for Settings
web-1  | smtp_port
web-1  |   Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/int_parsing
web-1  | gitbucket_url
web-1  |   Input should be a valid URL, input is empty [type=url_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/url_parsing
web-1  | INFO:     172.19.0.1:38012 - "GET / HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:38022 - "GET /about HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:38028 - "GET /projects HTTP/1.1" 500 Internal Server Error
web-1  | ERROR:    Exception in ASGI application
web-1  | Traceback (most recent call last):
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
web-1  |     result = await app(  # type: ignore[func-returns-value]
web-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
web-1  |     return await self.app(scope, receive, send)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
web-1  |     await super().__call__(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
web-1  |     await self.middleware_stack(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
web-1  |     await self.app(scope, receive, _send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
web-1  |     await self.app(scope, receive, sender)
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
web-1  |     raise e
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
web-1  |     await route.handle(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
web-1  |     response = await func(request)
web-1  |                ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
web-1  |     raw_response = await run_endpoint_function(
web-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
web-1  |     return await dependant.call(**values)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/routes/projects.py", line 11, in projects
web-1  |     repos = await fetch_repos()
web-1  |             ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/services/gitbucket.py", line 16, in fetch_repos
web-1  |     settings = get_settings()
web-1  |                ^^^^^^^^^^^^^^
web-1  |   File "/app/app/config.py", line 21, in get_settings
web-1  |     return Settings()
web-1  |            ^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic_settings/main.py", line 71, in __init__
web-1  |     super().__init__(
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic/main.py", line 164, in __init__
web-1  |     __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
web-1  | pydantic_core._pydantic_core.ValidationError: 2 validation errors for Settings
web-1  | smtp_port
web-1  |   Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/int_parsing
web-1  | gitbucket_url
web-1  |   Input should be a valid URL, input is empty [type=url_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/url_parsing
web-1  | INFO:     172.19.0.1:38032 - "GET /contact HTTP/1.1" 500 Internal Server Error
web-1  | ERROR:    Exception in ASGI application
web-1  | Traceback (most recent call last):
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
web-1  |     result = await app(  # type: ignore[func-returns-value]
web-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
web-1  |     return await self.app(scope, receive, send)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
web-1  |     await super().__call__(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
web-1  |     await self.middleware_stack(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
web-1  |     await self.app(scope, receive, _send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
web-1  |     await self.app(scope, receive, sender)
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
web-1  |     raise e
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
web-1  |     await route.handle(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
web-1  |     response = await func(request)
web-1  |                ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
web-1  |     raw_response = await run_endpoint_function(
web-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
web-1  |     return await dependant.call(**values)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/routes/contact.py", line 15, in contact_page
web-1  |     settings = get_settings()
web-1  |                ^^^^^^^^^^^^^^
web-1  |   File "/app/app/config.py", line 21, in get_settings
web-1  |     return Settings()
web-1  |            ^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic_settings/main.py", line 71, in __init__
web-1  |     super().__init__(
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic/main.py", line 164, in __init__
web-1  |     __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
web-1  | pydantic_core._pydantic_core.ValidationError: 2 validation errors for Settings
web-1  | smtp_port
web-1  |   Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/int_parsing
web-1  | gitbucket_url
web-1  |   Input should be a valid URL, input is empty [type=url_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/url_parsing
web-1  | INFO:     Shutting down
web-1  | INFO:     Waiting for application shutdown.
web-1  | INFO:     Application shutdown complete.
web-1  | INFO:     Finished server process [1]
web-1  | INFO:     Started server process [1]
web-1  | INFO:     Waiting for application startup.
web-1  | INFO:     Application startup complete.
web-1  | INFO:     Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
web-1  | INFO:     172.19.0.1:36640 - "GET /about HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:36652 - "GET /about HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:36658 - "GET /about HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:36664 - "GET /about HTTP/1.1" 200 OK
web-1  | INFO:     172.19.0.1:40722 - "GET /projects HTTP/1.1" 500 Internal Server Error
web-1  | ERROR:    Exception in ASGI application
web-1  | Traceback (most recent call last):
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
web-1  |     result = await app(  # type: ignore[func-returns-value]
web-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
web-1  |     return await self.app(scope, receive, send)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
web-1  |     await super().__call__(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
web-1  |     await self.middleware_stack(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
web-1  |     await self.app(scope, receive, _send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
web-1  |     await self.app(scope, receive, sender)
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
web-1  |     raise e
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
web-1  |     await route.handle(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
web-1  |     response = await func(request)
web-1  |                ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
web-1  |     raw_response = await run_endpoint_function(
web-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
web-1  |     return await dependant.call(**values)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/routes/projects.py", line 11, in projects
web-1  |     repos = await fetch_repos()
web-1  |             ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/services/gitbucket.py", line 16, in fetch_repos
web-1  |     settings = get_settings()
web-1  |                ^^^^^^^^^^^^^^
web-1  |   File "/app/app/config.py", line 21, in get_settings
web-1  |     return Settings()
web-1  |            ^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic_settings/main.py", line 71, in __init__
web-1  |     super().__init__(
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic/main.py", line 164, in __init__
web-1  |     __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
web-1  | pydantic_core._pydantic_core.ValidationError: 2 validation errors for Settings
web-1  | smtp_port
web-1  |   Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/int_parsing
web-1  | gitbucket_url
web-1  |   Input should be a valid URL, input is empty [type=url_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/url_parsing
web-1  | INFO:     172.19.0.1:40730 - "GET /contact HTTP/1.1" 500 Internal Server Error
web-1  | ERROR:    Exception in ASGI application
web-1  | Traceback (most recent call last):
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/protocols/http/httptools_impl.py", line 426, in run_asgi
web-1  |     result = await app(  # type: ignore[func-returns-value]
web-1  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/middleware/proxy_headers.py", line 84, in __call__
web-1  |     return await self.app(scope, receive, send)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/applications.py", line 1106, in __call__
web-1  |     await super().__call__(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/applications.py", line 122, in __call__
web-1  |     await self.middleware_stack(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 184, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/errors.py", line 162, in __call__
web-1  |     await self.app(scope, receive, _send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 79, in __call__
web-1  |     raise exc
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/middleware/exceptions.py", line 68, in __call__
web-1  |     await self.app(scope, receive, sender)
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 20, in __call__
web-1  |     raise e
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/middleware/asyncexitstack.py", line 17, in __call__
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 718, in __call__
web-1  |     await route.handle(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 276, in handle
web-1  |     await self.app(scope, receive, send)
web-1  |   File "/usr/local/lib/python3.11/site-packages/starlette/routing.py", line 66, in app
web-1  |     response = await func(request)
web-1  |                ^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 274, in app
web-1  |     raw_response = await run_endpoint_function(
web-1  |                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/fastapi/routing.py", line 191, in run_endpoint_function
web-1  |     return await dependant.call(**values)
web-1  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
web-1  |   File "/app/app/routes/contact.py", line 15, in contact_page
web-1  |     settings = get_settings()
web-1  |                ^^^^^^^^^^^^^^
web-1  |   File "/app/app/config.py", line 21, in get_settings
web-1  |     return Settings()
web-1  |            ^^^^^^^^^^
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic_settings/main.py", line 71, in __init__
web-1  |     super().__init__(
web-1  |   File "/usr/local/lib/python3.11/site-packages/pydantic/main.py", line 164, in __init__
web-1  |     __pydantic_self__.__pydantic_validator__.validate_python(data, self_instance=__pydantic_self__)
web-1  | pydantic_core._pydantic_core.ValidationError: 2 validation errors for Settings
web-1  | smtp_port
web-1  |   Input should be a valid integer, unable to parse string as an integer [type=int_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/int_parsing
web-1  | gitbucket_url
web-1  |   Input should be a valid URL, input is empty [type=url_parsing, input_value='', input_type=str]
web-1  |     For further information visit https://errors.pydantic.dev/2.5/v/url_parsing
