# This file was autogenerated by uv via the following command:
#    uv export --format requirements-txt -o requirements.txt --no-hashes
async-timeout==5.0.1 ; python_full_version < '3.11.3'
    # via redis
bcrypt==5.0.0
    # via flask-bcrypt
bidict==0.23.1
    # via python-socketio
blinker==1.9.0
    # via flask
brotli==1.2.0
    # via geventhttpclient
cachetools==6.2.6 ; python_full_version < '3.10'
    # via tutor-tool
cachetools==7.0.1 ; python_full_version >= '3.10'
    # via tutor-tool
certifi==2026.1.4
    # via
    #   geventhttpclient
    #   requests
cffi==2.0.0 ; (implementation_name == 'pypy' and platform_python_implementation != 'CPython') or (implementation_name == 'pypy' and sys_platform != 'win32') or (platform_python_implementation == 'CPython' and sys_platform == 'win32')
    # via
    #   gevent
    #   pyzmq
charset-normalizer==3.4.4
    # via requests
click==8.1.8 ; python_full_version < '3.10'
    # via flask
click==8.2.1 ; python_full_version >= '3.10'
    # via flask
colorama==0.4.6 ; sys_platform == 'win32'
    # via
    #   click
    #   pytest
configargparse==1.7.1
    # via locust
dnspython==2.7.0 ; python_full_version < '3.10'
    # via eventlet
dnspython==2.8.0 ; python_full_version >= '3.10'
    # via eventlet
eventlet==0.40.3
    # via tutor-tool
exceptiongroup==1.3.1 ; python_full_version == '3.10.*'
    # via pytest
flask==3.1.2
    # via
    #   flask-bcrypt
    #   flask-cors
    #   flask-login
    #   flask-socketio
    #   flask-sqlalchemy
    #   flask-wtf
    #   locust
    #   tutor-tool
flask-bcrypt==1.0.1
    # via tutor-tool
flask-cors==6.0.2
    # via locust
flask-login==0.6.3
    # via
    #   locust
    #   tutor-tool
flask-socketio==5.5.1
    # via tutor-tool
flask-sqlalchemy==3.1.1
    # via tutor-tool
flask-wtf==1.2.2
    # via tutor-tool
gevent==25.9.1
    # via
    #   geventhttpclient
    #   locust
geventhttpclient==2.3.7
    # via locust
greenlet==3.2.4
    # via
    #   eventlet
    #   gevent
    #   sqlalchemy
gunicorn==23.0.0
    # via tutor-tool
h11==0.16.0
    # via wsproto
idna==3.11
    # via requests
importlib-metadata==8.7.0 ; python_full_version < '3.10'
    # via
    #   flask
    #   markdown
iniconfig==2.3.0 ; python_full_version >= '3.10'
    # via pytest
itsdangerous==2.2.0
    # via
    #   flask
    #   flask-wtf
jinja2==3.1.6
    # via flask
locust==2.34.0 ; python_full_version < '3.10'
    # via tutor-tool
locust==2.43.3 ; python_full_version >= '3.10'
    # via tutor-tool
markdown==3.9 ; python_full_version < '3.10'
    # via tutor-tool
markdown==3.10.2 ; python_full_version >= '3.10'
    # via tutor-tool
markupsafe==3.0.2
    # via
    #   flask
    #   jinja2
    #   werkzeug
    #   wtforms
msgpack==1.1.2
    # via locust
packaging==25.0
    # via
    #   gunicorn
    #   pytest
pluggy==1.6.0 ; python_full_version >= '3.10'
    # via pytest
psutil==7.2.2
    # via locust
psycopg2-binary==2.9.11
    # via tutor-tool
pycparser==2.23 ; (python_full_version < '3.10' and implementation_name == 'pypy' and platform_python_implementation != 'CPython') or (python_full_version < '3.10' and implementation_name != 'PyPy' and platform_python_implementation == 'CPython' and sys_platform == 'win32') or (python_full_version < '3.10' and implementation_name == 'pypy' and sys_platform != 'win32')
    # via cffi
pycparser==3.0 ; (python_full_version >= '3.10' and implementation_name == 'pypy' and platform_python_implementation != 'CPython') or (python_full_version >= '3.10' and implementation_name != 'PyPy' and platform_python_implementation == 'CPython' and sys_platform == 'win32') or (python_full_version >= '3.10' and implementation_name == 'pypy' and sys_platform != 'win32')
    # via cffi
pygments==2.19.2 ; python_full_version >= '3.10'
    # via pytest
pytest==9.0.2 ; python_full_version >= '3.10'
    # via locust
python-engineio==4.12.2
    # via
    #   locust
    #   python-socketio
python-socketio==5.13.0
    # via
    #   flask-socketio
    #   locust
pytz==2025.2
    # via tutor-tool
pywin32==311 ; sys_platform == 'win32'
    # via locust
pyzmq==27.1.0
    # via locust
redis==7.0.1 ; python_full_version < '3.10'
    # via tutor-tool
redis==7.2.0 ; python_full_version >= '3.10'
    # via tutor-tool
requests==2.32.5
    # via
    #   locust
    #   python-socketio
setuptools==82.0.0 ; python_full_version < '3.10'
    # via
    #   locust
    #   zope-event
simple-websocket==1.1.0
    # via python-engineio
sqlalchemy==2.0.43
    # via flask-sqlalchemy
tomli==2.4.0 ; python_full_version < '3.11'
    # via
    #   locust
    #   pytest
typing-extensions==4.15.0
    # via
    #   exceptiongroup
    #   locust
    #   sqlalchemy
urllib3==2.6.3
    # via
    #   geventhttpclient
    #   requests
websocket-client==1.9.0 ; python_full_version >= '3.10'
    # via python-socketio
werkzeug==3.1.3
    # via
    #   flask
    #   flask-cors
    #   flask-login
    #   locust
wsproto==1.2.0
    # via simple-websocket
wtforms==3.2.1
    # via flask-wtf
xkcdpass==1.20.0
    # via tutor-tool
zipp==3.23.0 ; python_full_version < '3.10'
    # via importlib-metadata
zope-event==6.0 ; python_full_version < '3.10'
    # via gevent
zope-event==6.1 ; python_full_version >= '3.10'
    # via gevent
zope-interface==8.0.1 ; python_full_version < '3.10'
    # via gevent
zope-interface==8.2 ; python_full_version >= '3.10'
    # via gevent
