add system infos to output when in loglevel debug (#1567)

This commit is contained in:
Thomas Brandého 2023-08-18 22:00:49 +02:00 committed by GitHub
parent 2613b865f2
commit f771894077
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 124 additions and 130 deletions

119
poetry.lock generated
View File

@ -1,10 +1,9 @@
# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. # This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand.
[[package]] [[package]]
name = "alembic" name = "alembic"
version = "1.11.1" version = "1.11.1"
description = "A database migration tool for SQLAlchemy." description = "A database migration tool for SQLAlchemy."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -26,7 +25,6 @@ tz = ["python-dateutil"]
name = "anyio" name = "anyio"
version = "3.7.1" version = "3.7.1"
description = "High level compatibility layer for multiple asynchronous event loop implementations" description = "High level compatibility layer for multiple asynchronous event loop implementations"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -49,7 +47,6 @@ trio = ["trio (<0.22)"]
name = "async-timeout" name = "async-timeout"
version = "4.0.2" version = "4.0.2"
description = "Timeout context manager for asyncio programs" description = "Timeout context manager for asyncio programs"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -64,7 +61,6 @@ typing-extensions = {version = ">=3.6.5", markers = "python_version < \"3.8\""}
name = "asynctest" name = "asynctest"
version = "0.13.0" version = "0.13.0"
description = "Enhance the standard unittest package with features for testing asyncio libraries" description = "Enhance the standard unittest package with features for testing asyncio libraries"
category = "dev"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@ -76,7 +72,6 @@ files = [
name = "attrs" name = "attrs"
version = "23.1.0" version = "23.1.0"
description = "Classes Without Boilerplate" description = "Classes Without Boilerplate"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -98,7 +93,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte
name = "bidict" name = "bidict"
version = "0.22.1" version = "0.22.1"
description = "The bidirectional mapping library for Python." description = "The bidirectional mapping library for Python."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -115,7 +109,6 @@ test = ["hypothesis", "pytest", "pytest-benchmark[histogram]", "pytest-cov", "py
name = "black" name = "black"
version = "22.12.0" version = "22.12.0"
description = "The uncompromising code formatter." description = "The uncompromising code formatter."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -152,7 +145,6 @@ uvloop = ["uvloop (>=0.15.2)"]
name = "certifi" name = "certifi"
version = "2023.7.22" version = "2023.7.22"
description = "Python package for providing Mozilla's CA Bundle." description = "Python package for providing Mozilla's CA Bundle."
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -164,7 +156,6 @@ files = [
name = "cffi" name = "cffi"
version = "1.15.1" version = "1.15.1"
description = "Foreign Function Interface for Python calling C code." description = "Foreign Function Interface for Python calling C code."
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -241,7 +232,6 @@ pycparser = "*"
name = "cfgv" name = "cfgv"
version = "3.3.1" version = "3.3.1"
description = "Validate configuration and produce human readable error messages." description = "Validate configuration and produce human readable error messages."
category = "dev"
optional = false optional = false
python-versions = ">=3.6.1" python-versions = ">=3.6.1"
files = [ files = [
@ -253,7 +243,6 @@ files = [
name = "click" name = "click"
version = "8.1.6" version = "8.1.6"
description = "Composable command line interface toolkit" description = "Composable command line interface toolkit"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -269,7 +258,6 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
name = "cloudpickle" name = "cloudpickle"
version = "2.2.1" version = "2.2.1"
description = "Extended pickling support for Python objects" description = "Extended pickling support for Python objects"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -281,7 +269,6 @@ files = [
name = "colorama" name = "colorama"
version = "0.4.6" version = "0.4.6"
description = "Cross-platform colored terminal text." description = "Cross-platform colored terminal text."
category = "main"
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7"
files = [ files = [
@ -293,7 +280,6 @@ files = [
name = "coverage" name = "coverage"
version = "7.2.7" version = "7.2.7"
description = "Code coverage measurement for Python" description = "Code coverage measurement for Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -369,7 +355,6 @@ toml = ["tomli"]
name = "darglint" name = "darglint"
version = "1.8.1" version = "1.8.1"
description = "A utility for ensuring Google-style docstrings stay up to date with the source code." description = "A utility for ensuring Google-style docstrings stay up to date with the source code."
category = "dev"
optional = false optional = false
python-versions = ">=3.6,<4.0" python-versions = ">=3.6,<4.0"
files = [ files = [
@ -381,7 +366,6 @@ files = [
name = "distlib" name = "distlib"
version = "0.3.7" version = "0.3.7"
description = "Distribution utilities" description = "Distribution utilities"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -389,11 +373,21 @@ files = [
{file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"}, {file = "distlib-0.3.7.tar.gz", hash = "sha256:9dafe54b34a028eafd95039d5e5d4851a13734540f1331060d31c9916e7147a8"},
] ]
[[package]]
name = "distro"
version = "1.8.0"
description = "Distro - an OS platform information API"
optional = false
python-versions = ">=3.6"
files = [
{file = "distro-1.8.0-py3-none-any.whl", hash = "sha256:99522ca3e365cac527b44bde033f64c6945d90eb9f769703caaec52b09bbd3ff"},
{file = "distro-1.8.0.tar.gz", hash = "sha256:02e111d1dc6a50abb8eed6bf31c3e48ed8b0830d1ea2a1b78c61765c2513fdd8"},
]
[[package]] [[package]]
name = "exceptiongroup" name = "exceptiongroup"
version = "1.1.2" version = "1.1.2"
description = "Backport of PEP 654 (exception groups)" description = "Backport of PEP 654 (exception groups)"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -408,7 +402,6 @@ test = ["pytest (>=6)"]
name = "fastapi" name = "fastapi"
version = "0.96.1" version = "0.96.1"
description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -430,7 +423,6 @@ test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==23.1.0)", "coverage[toml] (>=6
name = "filelock" name = "filelock"
version = "3.12.2" version = "3.12.2"
description = "A platform independent file lock." description = "A platform independent file lock."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -446,7 +438,6 @@ testing = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "diff-cover (>=7.5)", "p
name = "greenlet" name = "greenlet"
version = "2.0.2" version = "2.0.2"
description = "Lightweight in-process concurrent programming" description = "Lightweight in-process concurrent programming"
category = "main"
optional = false optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*" python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*"
files = [ files = [
@ -520,7 +511,6 @@ test = ["objgraph", "psutil"]
name = "gunicorn" name = "gunicorn"
version = "20.1.0" version = "20.1.0"
description = "WSGI HTTP Server for UNIX" description = "WSGI HTTP Server for UNIX"
category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@ -541,7 +531,6 @@ tornado = ["tornado (>=0.2)"]
name = "h11" name = "h11"
version = "0.14.0" version = "0.14.0"
description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -556,7 +545,6 @@ typing-extensions = {version = "*", markers = "python_version < \"3.8\""}
name = "httpcore" name = "httpcore"
version = "0.17.3" version = "0.17.3"
description = "A minimal low-level HTTP client." description = "A minimal low-level HTTP client."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -568,17 +556,16 @@ files = [
anyio = ">=3.0,<5.0" anyio = ">=3.0,<5.0"
certifi = "*" certifi = "*"
h11 = ">=0.13,<0.15" h11 = ">=0.13,<0.15"
sniffio = ">=1.0.0,<2.0.0" sniffio = "==1.*"
[package.extras] [package.extras]
http2 = ["h2 (>=3,<5)"] http2 = ["h2 (>=3,<5)"]
socks = ["socksio (>=1.0.0,<2.0.0)"] socks = ["socksio (==1.*)"]
[[package]] [[package]]
name = "httpx" name = "httpx"
version = "0.24.1" version = "0.24.1"
description = "The next generation HTTP client." description = "The next generation HTTP client."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -594,15 +581,14 @@ sniffio = "*"
[package.extras] [package.extras]
brotli = ["brotli", "brotlicffi"] brotli = ["brotli", "brotlicffi"]
cli = ["click (>=8.0.0,<9.0.0)", "pygments (>=2.0.0,<3.0.0)", "rich (>=10,<14)"] cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"]
http2 = ["h2 (>=3,<5)"] http2 = ["h2 (>=3,<5)"]
socks = ["socksio (>=1.0.0,<2.0.0)"] socks = ["socksio (==1.*)"]
[[package]] [[package]]
name = "identify" name = "identify"
version = "2.5.26" version = "2.5.26"
description = "File identification library for Python" description = "File identification library for Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -617,7 +603,6 @@ license = ["ukkonen"]
name = "idna" name = "idna"
version = "3.4" version = "3.4"
description = "Internationalized Domain Names in Applications (IDNA)" description = "Internationalized Domain Names in Applications (IDNA)"
category = "main"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@ -629,7 +614,6 @@ files = [
name = "importlib-metadata" name = "importlib-metadata"
version = "6.7.0" version = "6.7.0"
description = "Read metadata from Python packages" description = "Read metadata from Python packages"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -650,7 +634,6 @@ testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs
name = "importlib-resources" name = "importlib-resources"
version = "5.12.0" version = "5.12.0"
description = "Read resources from Python packages" description = "Read resources from Python packages"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -669,7 +652,6 @@ testing = ["flake8 (<5)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-chec
name = "iniconfig" name = "iniconfig"
version = "2.0.0" version = "2.0.0"
description = "brain-dead simple config-ini parsing" description = "brain-dead simple config-ini parsing"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -681,7 +663,6 @@ files = [
name = "jinja2" name = "jinja2"
version = "3.1.2" version = "3.1.2"
description = "A very fast and expressive template engine." description = "A very fast and expressive template engine."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -699,7 +680,6 @@ i18n = ["Babel (>=2.7)"]
name = "mako" name = "mako"
version = "1.2.4" version = "1.2.4"
description = "A super-fast templating language that borrows the best ideas from the existing templating languages." description = "A super-fast templating language that borrows the best ideas from the existing templating languages."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -720,7 +700,6 @@ testing = ["pytest"]
name = "markdown-it-py" name = "markdown-it-py"
version = "2.2.0" version = "2.2.0"
description = "Python port of markdown-it. Markdown parsing, done right!" description = "Python port of markdown-it. Markdown parsing, done right!"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -746,7 +725,6 @@ testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"]
name = "markupsafe" name = "markupsafe"
version = "2.1.3" version = "2.1.3"
description = "Safely add untrusted strings to HTML/XML markup." description = "Safely add untrusted strings to HTML/XML markup."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -806,7 +784,6 @@ files = [
name = "mdurl" name = "mdurl"
version = "0.1.2" version = "0.1.2"
description = "Markdown URL utilities" description = "Markdown URL utilities"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -818,7 +795,6 @@ files = [
name = "mypy-extensions" name = "mypy-extensions"
version = "1.0.0" version = "1.0.0"
description = "Type system extensions for programs checked with the mypy type checker." description = "Type system extensions for programs checked with the mypy type checker."
category = "dev"
optional = false optional = false
python-versions = ">=3.5" python-versions = ">=3.5"
files = [ files = [
@ -830,7 +806,6 @@ files = [
name = "nodeenv" name = "nodeenv"
version = "1.8.0" version = "1.8.0"
description = "Node.js virtual environment builder" description = "Node.js virtual environment builder"
category = "dev"
optional = false optional = false
python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*"
files = [ files = [
@ -845,7 +820,6 @@ setuptools = "*"
name = "numpy" name = "numpy"
version = "1.21.6" version = "1.21.6"
description = "NumPy is the fundamental package for array computing with Python." description = "NumPy is the fundamental package for array computing with Python."
category = "dev"
optional = false optional = false
python-versions = ">=3.7,<3.11" python-versions = ">=3.7,<3.11"
files = [ files = [
@ -886,7 +860,6 @@ files = [
name = "numpy" name = "numpy"
version = "1.24.4" version = "1.24.4"
description = "Fundamental package for array computing in Python" description = "Fundamental package for array computing in Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -924,7 +897,6 @@ files = [
name = "numpy" name = "numpy"
version = "1.25.2" version = "1.25.2"
description = "Fundamental package for array computing in Python" description = "Fundamental package for array computing in Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.9" python-versions = ">=3.9"
files = [ files = [
@ -959,7 +931,6 @@ files = [
name = "outcome" name = "outcome"
version = "1.2.0" version = "1.2.0"
description = "Capture the outcome of Python function calls." description = "Capture the outcome of Python function calls."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -974,7 +945,6 @@ attrs = ">=19.2.0"
name = "packaging" name = "packaging"
version = "23.1" version = "23.1"
description = "Core utilities for Python packages" description = "Core utilities for Python packages"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -986,7 +956,6 @@ files = [
name = "pandas" name = "pandas"
version = "1.1.5" version = "1.1.5"
description = "Powerful data structures for data analysis, time series, and statistics" description = "Powerful data structures for data analysis, time series, and statistics"
category = "dev"
optional = false optional = false
python-versions = ">=3.6.1" python-versions = ">=3.6.1"
files = [ files = [
@ -1028,7 +997,6 @@ test = ["hypothesis (>=3.58)", "pytest (>=4.0.2)", "pytest-xdist"]
name = "pandas" name = "pandas"
version = "1.5.3" version = "1.5.3"
description = "Powerful data structures for data analysis, time series, and statistics" description = "Powerful data structures for data analysis, time series, and statistics"
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1077,7 +1045,6 @@ test = ["hypothesis (>=5.5.3)", "pytest (>=6.0)", "pytest-xdist (>=1.31)"]
name = "pathspec" name = "pathspec"
version = "0.11.2" version = "0.11.2"
description = "Utility library for gitignore style pattern matching of file paths." description = "Utility library for gitignore style pattern matching of file paths."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1089,7 +1056,6 @@ files = [
name = "platformdirs" name = "platformdirs"
version = "3.10.0" version = "3.10.0"
description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1108,7 +1074,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co
name = "plotly" name = "plotly"
version = "5.15.0" version = "5.15.0"
description = "An open-source, interactive data visualization library for Python" description = "An open-source, interactive data visualization library for Python"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -1124,7 +1089,6 @@ tenacity = ">=6.2.0"
name = "pluggy" name = "pluggy"
version = "1.2.0" version = "1.2.0"
description = "plugin and hook calling mechanisms for python" description = "plugin and hook calling mechanisms for python"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1143,7 +1107,6 @@ testing = ["pytest", "pytest-benchmark"]
name = "pre-commit" name = "pre-commit"
version = "3.3.3" version = "3.3.3"
description = "A framework for managing and maintaining multi-language pre-commit hooks." description = "A framework for managing and maintaining multi-language pre-commit hooks."
category = "dev"
optional = false optional = false
python-versions = ">=3.8" python-versions = ">=3.8"
files = [ files = [
@ -1162,7 +1125,6 @@ virtualenv = ">=20.10.0"
name = "psutil" name = "psutil"
version = "5.9.5" version = "5.9.5"
description = "Cross-platform lib for process and system monitoring in Python." description = "Cross-platform lib for process and system monitoring in Python."
category = "main"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [ files = [
@ -1189,7 +1151,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"]
name = "pycparser" name = "pycparser"
version = "2.21" version = "2.21"
description = "C parser in Python" description = "C parser in Python"
category = "dev"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [ files = [
@ -1201,7 +1162,6 @@ files = [
name = "pydantic" name = "pydantic"
version = "1.10.12" version = "1.10.12"
description = "Data validation and settings management using python type hints" description = "Data validation and settings management using python type hints"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1254,7 +1214,6 @@ email = ["email-validator (>=1.0.3)"]
name = "pygments" name = "pygments"
version = "2.15.1" version = "2.15.1"
description = "Pygments is a syntax highlighting package written in Python." description = "Pygments is a syntax highlighting package written in Python."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1269,7 +1228,6 @@ plugins = ["importlib-metadata"]
name = "pyright" name = "pyright"
version = "1.1.318" version = "1.1.318"
description = "Command line wrapper for pyright" description = "Command line wrapper for pyright"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1289,7 +1247,6 @@ dev = ["twine (>=3.4.1)"]
name = "pysocks" name = "pysocks"
version = "1.7.1" version = "1.7.1"
description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information."
category = "dev"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
files = [ files = [
@ -1302,7 +1259,6 @@ files = [
name = "pytest" name = "pytest"
version = "7.4.0" version = "7.4.0"
description = "pytest: simple powerful testing with Python" description = "pytest: simple powerful testing with Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1326,7 +1282,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no
name = "pytest-asyncio" name = "pytest-asyncio"
version = "0.20.3" version = "0.20.3"
description = "Pytest support for asyncio" description = "Pytest support for asyncio"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1346,7 +1301,6 @@ testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy
name = "pytest-cov" name = "pytest-cov"
version = "4.1.0" version = "4.1.0"
description = "Pytest plugin for measuring coverage." description = "Pytest plugin for measuring coverage."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1365,7 +1319,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtuale
name = "pytest-mock" name = "pytest-mock"
version = "3.11.1" version = "3.11.1"
description = "Thin-wrapper around the mock package for easier use with pytest" description = "Thin-wrapper around the mock package for easier use with pytest"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1383,7 +1336,6 @@ dev = ["pre-commit", "pytest-asyncio", "tox"]
name = "python-dateutil" name = "python-dateutil"
version = "2.8.2" version = "2.8.2"
description = "Extensions to the standard Python datetime module" description = "Extensions to the standard Python datetime module"
category = "dev"
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7"
files = [ files = [
@ -1398,7 +1350,6 @@ six = ">=1.5"
name = "python-dotenv" name = "python-dotenv"
version = "0.13.0" version = "0.13.0"
description = "Add .env support to your django/flask apps in development and deployments" description = "Add .env support to your django/flask apps in development and deployments"
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -1413,7 +1364,6 @@ cli = ["click (>=5.0)"]
name = "python-engineio" name = "python-engineio"
version = "4.5.1" version = "4.5.1"
description = "Engine.IO server and client for Python" description = "Engine.IO server and client for Python"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -1430,7 +1380,6 @@ docs = ["sphinx"]
name = "python-multipart" name = "python-multipart"
version = "0.0.5" version = "0.0.5"
description = "A streaming multipart parser for Python" description = "A streaming multipart parser for Python"
category = "main"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -1444,7 +1393,6 @@ six = ">=1.4.0"
name = "python-socketio" name = "python-socketio"
version = "5.8.0" version = "5.8.0"
description = "Socket.IO server and client for Python" description = "Socket.IO server and client for Python"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -1464,7 +1412,6 @@ client = ["requests (>=2.21.0)", "websocket-client (>=0.54.0)"]
name = "pytz" name = "pytz"
version = "2023.3" version = "2023.3"
description = "World timezone definitions, modern and historical" description = "World timezone definitions, modern and historical"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -1476,7 +1423,6 @@ files = [
name = "pyyaml" name = "pyyaml"
version = "6.0.1" version = "6.0.1"
description = "YAML parser and emitter for Python" description = "YAML parser and emitter for Python"
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -1526,7 +1472,6 @@ files = [
name = "redis" name = "redis"
version = "4.6.0" version = "4.6.0"
description = "Python client for Redis database and key-value store" description = "Python client for Redis database and key-value store"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1547,7 +1492,6 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"
name = "rich" name = "rich"
version = "13.5.1" version = "13.5.1"
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
category = "main"
optional = false optional = false
python-versions = ">=3.7.0" python-versions = ">=3.7.0"
files = [ files = [
@ -1567,7 +1511,6 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"]
name = "ruff" name = "ruff"
version = "0.0.244" version = "0.0.244"
description = "An extremely fast Python linter, written in Rust." description = "An extremely fast Python linter, written in Rust."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1593,7 +1536,6 @@ files = [
name = "selenium" name = "selenium"
version = "4.10.0" version = "4.10.0"
description = "" description = ""
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1611,7 +1553,6 @@ urllib3 = {version = ">=1.26,<3", extras = ["socks"]}
name = "setuptools" name = "setuptools"
version = "68.0.0" version = "68.0.0"
description = "Easily download, build, install, upgrade, and uninstall Python packages" description = "Easily download, build, install, upgrade, and uninstall Python packages"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1628,7 +1569,6 @@ testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (
name = "six" name = "six"
version = "1.16.0" version = "1.16.0"
description = "Python 2 and 3 compatibility utilities" description = "Python 2 and 3 compatibility utilities"
category = "main"
optional = false optional = false
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*"
files = [ files = [
@ -1640,7 +1580,6 @@ files = [
name = "sniffio" name = "sniffio"
version = "1.3.0" version = "1.3.0"
description = "Sniff out which async library your code is running under" description = "Sniff out which async library your code is running under"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1652,7 +1591,6 @@ files = [
name = "sortedcontainers" name = "sortedcontainers"
version = "2.4.0" version = "2.4.0"
description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set"
category = "dev"
optional = false optional = false
python-versions = "*" python-versions = "*"
files = [ files = [
@ -1664,7 +1602,6 @@ files = [
name = "sqlalchemy" name = "sqlalchemy"
version = "1.4.41" version = "1.4.41"
description = "Database Abstraction Library" description = "Database Abstraction Library"
category = "main"
optional = false optional = false
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
files = [ files = [
@ -1712,7 +1649,7 @@ files = [
] ]
[package.dependencies] [package.dependencies]
greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and platform_machine == \"aarch64\" or python_version >= \"3\" and platform_machine == \"ppc64le\" or python_version >= \"3\" and platform_machine == \"x86_64\" or python_version >= \"3\" and platform_machine == \"amd64\" or python_version >= \"3\" and platform_machine == \"AMD64\" or python_version >= \"3\" and platform_machine == \"win32\" or python_version >= \"3\" and platform_machine == \"WIN32\""} greenlet = {version = "!=0.4.17", markers = "python_version >= \"3\" and (platform_machine == \"win32\" or platform_machine == \"WIN32\" or platform_machine == \"AMD64\" or platform_machine == \"amd64\" or platform_machine == \"x86_64\" or platform_machine == \"ppc64le\" or platform_machine == \"aarch64\")"}
importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} importlib-metadata = {version = "*", markers = "python_version < \"3.8\""}
[package.extras] [package.extras]
@ -1740,7 +1677,6 @@ sqlcipher = ["sqlcipher3-binary"]
name = "sqlalchemy2-stubs" name = "sqlalchemy2-stubs"
version = "0.0.2a35" version = "0.0.2a35"
description = "Typing Stubs for SQLAlchemy 1.4" description = "Typing Stubs for SQLAlchemy 1.4"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -1755,7 +1691,6 @@ typing-extensions = ">=3.7.4"
name = "sqlmodel" name = "sqlmodel"
version = "0.0.8" version = "0.0.8"
description = "SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness." description = "SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness."
category = "main"
optional = false optional = false
python-versions = ">=3.6.1,<4.0.0" python-versions = ">=3.6.1,<4.0.0"
files = [ files = [
@ -1772,7 +1707,6 @@ sqlalchemy2-stubs = "*"
name = "starlette" name = "starlette"
version = "0.27.0" version = "0.27.0"
description = "The little ASGI library that shines." description = "The little ASGI library that shines."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1791,7 +1725,6 @@ full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart", "pyyam
name = "starlette-admin" name = "starlette-admin"
version = "0.9.0" version = "0.9.0"
description = "Fast, beautiful and extensible administrative interface framework for Starlette/FastApi applications" description = "Fast, beautiful and extensible administrative interface framework for Starlette/FastApi applications"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1814,7 +1747,6 @@ test = ["aiomysql (>=0.1.1,<0.2.0)", "aiosqlite (>=0.17.0,<0.20.0)", "arrow (>=1
name = "tenacity" name = "tenacity"
version = "8.2.2" version = "8.2.2"
description = "Retry code until it succeeds" description = "Retry code until it succeeds"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -1829,7 +1761,6 @@ doc = ["reno", "sphinx", "tornado (>=4.5)"]
name = "toml" name = "toml"
version = "0.10.2" version = "0.10.2"
description = "Python Library for Tom's Obvious, Minimal Language" description = "Python Library for Tom's Obvious, Minimal Language"
category = "dev"
optional = false optional = false
python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*"
files = [ files = [
@ -1841,7 +1772,6 @@ files = [
name = "tomli" name = "tomli"
version = "2.0.1" version = "2.0.1"
description = "A lil' TOML parser" description = "A lil' TOML parser"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1853,7 +1783,6 @@ files = [
name = "trio" name = "trio"
version = "0.22.2" version = "0.22.2"
description = "A friendly Python library for async concurrency and I/O" description = "A friendly Python library for async concurrency and I/O"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1874,7 +1803,6 @@ sortedcontainers = "*"
name = "trio-websocket" name = "trio-websocket"
version = "0.10.3" version = "0.10.3"
description = "WebSocket library for Trio" description = "WebSocket library for Trio"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1891,7 +1819,6 @@ wsproto = ">=0.14"
name = "typed-ast" name = "typed-ast"
version = "1.5.5" version = "1.5.5"
description = "a fork of Python 2 and 3 ast modules with type comment support" description = "a fork of Python 2 and 3 ast modules with type comment support"
category = "dev"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -1942,7 +1869,6 @@ files = [
name = "typer" name = "typer"
version = "0.4.2" version = "0.4.2"
description = "Typer, build great CLIs. Easy to code. Based on Python type hints." description = "Typer, build great CLIs. Easy to code. Based on Python type hints."
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -1963,7 +1889,6 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=5.2,<6.0)", "isort (>=5.0.6,<6.
name = "typing-extensions" name = "typing-extensions"
version = "4.7.1" version = "4.7.1"
description = "Backported and Experimental Type Hints for Python 3.7+" description = "Backported and Experimental Type Hints for Python 3.7+"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1975,7 +1900,6 @@ files = [
name = "urllib3" name = "urllib3"
version = "2.0.4" version = "2.0.4"
description = "HTTP library with thread-safe connection pooling, file post, and more." description = "HTTP library with thread-safe connection pooling, file post, and more."
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -1996,7 +1920,6 @@ zstd = ["zstandard (>=0.18.0)"]
name = "uvicorn" name = "uvicorn"
version = "0.20.0" version = "0.20.0"
description = "The lightning-fast ASGI server." description = "The lightning-fast ASGI server."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2016,7 +1939,6 @@ standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)",
name = "virtualenv" name = "virtualenv"
version = "20.24.2" version = "20.24.2"
description = "Virtual Python Environment builder" description = "Virtual Python Environment builder"
category = "dev"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2037,7 +1959,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess
name = "watchdog" name = "watchdog"
version = "2.3.1" version = "2.3.1"
description = "Filesystem events monitoring" description = "Filesystem events monitoring"
category = "main"
optional = false optional = false
python-versions = ">=3.6" python-versions = ">=3.6"
files = [ files = [
@ -2078,7 +1999,6 @@ watchmedo = ["PyYAML (>=3.10)"]
name = "watchfiles" name = "watchfiles"
version = "0.19.0" version = "0.19.0"
description = "Simple, modern and high performance file watching and code reload in python." description = "Simple, modern and high performance file watching and code reload in python."
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2113,7 +2033,6 @@ anyio = ">=3.0.0"
name = "websockets" name = "websockets"
version = "10.4" version = "10.4"
description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2192,7 +2111,6 @@ files = [
name = "wsproto" name = "wsproto"
version = "1.2.0" version = "1.2.0"
description = "WebSockets state-machine based protocol implementation" description = "WebSockets state-machine based protocol implementation"
category = "dev"
optional = false optional = false
python-versions = ">=3.7.0" python-versions = ">=3.7.0"
files = [ files = [
@ -2207,7 +2125,6 @@ h11 = ">=0.9.0,<1"
name = "zipp" name = "zipp"
version = "3.15.0" version = "3.15.0"
description = "Backport of pathlib-compatible object wrapper for zip files" description = "Backport of pathlib-compatible object wrapper for zip files"
category = "main"
optional = false optional = false
python-versions = ">=3.7" python-versions = ">=3.7"
files = [ files = [
@ -2222,4 +2139,4 @@ testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more
[metadata] [metadata]
lock-version = "2.0" lock-version = "2.0"
python-versions = "^3.7" python-versions = "^3.7"
content-hash = "ba03a445b7e59587264636a98b52595e020ae58570ac79b0fb1b9564c9769c59" content-hash = "7ba5a63b5a857eaa7e48c4addedd829727d6a074b60a1430e52ea7530547686a"

View File

@ -47,6 +47,7 @@ python-dotenv = "^0.13.0"
importlib-metadata = {version = "^6.7.0", python = ">=3.7, <3.8"} importlib-metadata = {version = "^6.7.0", python = ">=3.7, <3.8"}
alembic = "^1.11.1" alembic = "^1.11.1"
platformdirs = "^3.10.0" platformdirs = "^3.10.0"
distro = {version = "^1.8.0", platform = "linux"}
[tool.poetry.group.dev.dependencies] [tool.poetry.group.dev.dependencies]
pytest = "^7.1.2" pytest = "^7.1.2"

View File

@ -61,6 +61,9 @@ def init(
# Set the log level. # Set the log level.
console.set_log_level(loglevel) console.set_log_level(loglevel)
# Show system info
exec.output_system_info()
# Get the app name. # Get the app name.
app_name = prerequisites.get_default_app_name() if name is None else name app_name = prerequisites.get_default_app_name() if name is None else name
console.rule(f"[bold]Initializing {app_name}") console.rule(f"[bold]Initializing {app_name}")
@ -108,6 +111,9 @@ def run(
# Set the log level. # Set the log level.
console.set_log_level(loglevel) console.set_log_level(loglevel)
# Show system info
exec.output_system_info()
# Set ports as os env variables to take precedence over config and # Set ports as os env variables to take precedence over config and
# .env variables(if override_os_envs flag in config is set to False). # .env variables(if override_os_envs flag in config is set to False).
build.set_os_env( build.set_os_env(
@ -190,6 +196,9 @@ def deploy(
# Set the log level. # Set the log level.
console.set_log_level(loglevel) console.set_log_level(loglevel)
# Show system info
exec.output_system_info()
# Get the app config. # Get the app config.
config = get_config() config = get_config()
@ -239,6 +248,9 @@ def export(
# Set the log level. # Set the log level.
console.set_log_level(loglevel) console.set_log_level(loglevel)
# Show system info
exec.output_system_info()
# Check that the app is initialized. # Check that the app is initialized.
prerequisites.check_initialized(frontend=frontend) prerequisites.check_initialized(frontend=frontend)

View File

@ -3,11 +3,13 @@
from __future__ import annotations from __future__ import annotations
import os import os
import platform
import sys
from pathlib import Path from pathlib import Path
from reflex import constants from reflex import constants
from reflex.config import get_config from reflex.config import get_config
from reflex.utils import console, prerequisites, processes from reflex.utils import console, path_ops, prerequisites, processes
from reflex.utils.watch import AssetFolderWatch from reflex.utils.watch import AssetFolderWatch
@ -154,3 +156,50 @@ def run_backend_prod(
str(num_workers), str(num_workers),
] ]
processes.new_process(command, run=True, show_logs=True) processes.new_process(command, run=True, show_logs=True)
def output_system_info():
"""Show system informations if the loglevel is in DEBUG."""
if console.LOG_LEVEL > constants.LogLevel.DEBUG:
return
console.rule(f"System Info")
dependencies = [
f"[Reflex {constants.VERSION} with Python {platform.python_version()} (PATH: {sys.executable})]",
f"[Node {prerequisites.get_node_version()} (Expected: {constants.NODE_VERSION}) (PATH:{constants.NODE_PATH})]",
]
system = platform.system()
if system != "Windows":
dependencies.extend(
[
f"[NVM {constants.NVM_VERSION} (Expected: {constants.NVM_VERSION}) (PATH: {constants.NVM_PATH})]",
f"[Bun {prerequisites.get_bun_version()} (Expected: {constants.BUN_VERSION}) (PATH: {constants.BUN_PATH})]",
],
)
else:
dependencies.append(
f"[FNM {constants.FNM_VERSION} (Expected: {constants.FNM_VERSION}) (PATH: {constants.FNM_EXE})]",
)
if system == "Linux":
import distro # type: ignore
os_version = distro.name(pretty=True)
else:
os_version = platform.version()
dependencies.append(f"[OS {platform.system()} {os_version}]")
for dep in dependencies:
console.debug(f"{dep}")
console.debug(
f"Using package installer at: {prerequisites.get_install_package_manager()}"
)
console.debug(f"Using package executer at: {prerequisites.get_package_manager()}")
if system != "Windows":
console.debug(f"Unzip path: {path_ops.which('unzip')}")
# exit()

View File

@ -31,20 +31,30 @@ def check_node_version() -> bool:
Returns: Returns:
Whether the version of Node.js is valid. Whether the version of Node.js is valid.
""" """
try: current_version = get_node_version()
# Run the node -v command and capture the output. if current_version:
result = processes.new_process([constants.NODE_PATH, "-v"], run=True) # Compare the version numbers
except FileNotFoundError: return (
current_version >= version.parse(constants.NODE_VERSION_MIN)
if constants.IS_WINDOWS
else current_version == version.parse(constants.NODE_VERSION)
)
else:
return False return False
# The output will be in the form "vX.Y.Z", but version.parse() can handle it
current_version = version.parse(result.stdout) # type: ignore def get_node_version() -> Optional[version.Version]:
# Compare the version numbers """Get the version of node.
return (
current_version >= version.parse(constants.NODE_VERSION_MIN) Returns:
if constants.IS_WINDOWS The version of node.
else current_version == version.parse(constants.NODE_VERSION) """
) try:
result = processes.new_process([constants.NODE_PATH, "-v"], run=True)
# The output will be in the form "vX.Y.Z", but version.parse() can handle it
return version.parse(result.stdout) # type: ignore
except FileNotFoundError:
return None
def get_bun_version() -> Optional[version.Version]: def get_bun_version() -> Optional[version.Version]:
@ -61,21 +71,6 @@ def get_bun_version() -> Optional[version.Version]:
return None return None
def get_windows_package_manager() -> str:
"""Get the package manager for windows.
Returns:
The path to the package manager for windows.
Raises:
FileNotFoundError: If bun or npm is not installed.
"""
npm_path = path_ops.which("npm")
if npm_path is None:
raise FileNotFoundError("Reflex requires npm to be installed on Windows.")
return npm_path
def get_install_package_manager() -> str: def get_install_package_manager() -> str:
"""Get the package manager executable for installation. """Get the package manager executable for installation.
currently on unix systems, bun is used for installation only. currently on unix systems, bun is used for installation only.

View File

@ -9,7 +9,14 @@ from packaging import version
from reflex import Env, constants from reflex import Env, constants
from reflex.base import Base from reflex.base import Base
from reflex.utils import build, format, imports, prerequisites, types from reflex.utils import (
build,
format,
imports,
prerequisites,
types,
)
from reflex.utils import exec as utils_exec
from reflex.vars import Var from reflex.vars import Var
@ -599,3 +606,16 @@ def test_create_reflex_dir(mocker, is_windows):
prerequisites.initialize_frontend_dependencies() prerequisites.initialize_frontend_dependencies()
assert create_cmd.called assert create_cmd.called
def test_output_system_info(mocker):
"""Make sure reflex does not crash dumping system info.
Args:
mocker: Pytest mocker object.
This test makes no assertions about the output, other than it executes
without crashing.
"""
mocker.patch("reflex.utils.console.LOG_LEVEL", constants.LogLevel.DEBUG)
utils_exec.output_system_info()