# Copyright 2018 Telefonica S.A.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#    http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
# implied.
# See the License for the specific language governing permissions and
# limitations under the License.


aiohappyeyeballs==2.3.4
    # via aiohttp
aiohttp==3.10.1
    # via -r requirements.in
aiosignal==1.3.1
    # via aiohttp
async-timeout==4.0.3
    # via aiohttp
attrs==24.2.0
    # via
    #   aiohttp
    #   jsonschema
    #   referencing
autocommand==2.2.2
    # via jaraco-text
backports-tarfile==1.2.0
    # via jaraco-context
cefevent==0.5.6
    # via -r requirements.in
certifi==2024.7.4
    # via requests
charset-normalizer==3.3.2
    # via requests
cheroot==10.0.1
    # via cherrypy
cherrypy==18.10.0
    # via -r requirements.in
debtcollector==3.0.0
    # via
    #   oslo-config
    #   oslo-utils
    #   python-keystoneclient
deepdiff==7.0.1
    # via -r requirements.in
frozenlist==1.4.1
    # via
    #   aiohttp
    #   aiosignal
idna==3.7
    # via
    #   requests
    #   yarl
iso8601==2.1.0
    # via
    #   keystoneauth1
    #   oslo-utils
jaraco-collections==5.0.1
    # via cherrypy
jaraco-context==5.3.0
    # via jaraco-text
jaraco-functools==4.0.2
    # via
    #   cheroot
    #   jaraco-text
    #   tempora
jaraco-text==4.0.0
    # via jaraco-collections
jsonschema==4.23.0
    # via -r requirements.in
jsonschema-specifications==2023.12.1
    # via jsonschema
keystoneauth1==5.7.0
    # via python-keystoneclient
more-itertools==10.3.0
    # via
    #   cheroot
    #   cherrypy
    #   jaraco-functools
    #   jaraco-text
msgpack==1.0.8
    # via oslo-serialization
multidict==6.0.5
    # via
    #   aiohttp
    #   yarl
netaddr==1.3.0
    # via
    #   oslo-config
    #   oslo-utils
netifaces==0.11.0
    # via oslo-utils
ordered-set==4.1.0
    # via deepdiff
os-service-types==1.7.0
    # via keystoneauth1
oslo-config==9.5.0
    # via python-keystoneclient
oslo-i18n==6.3.0
    # via
    #   oslo-config
    #   oslo-utils
    #   python-keystoneclient
oslo-serialization==5.4.0
    # via python-keystoneclient
oslo-utils==7.2.0
    # via
    #   oslo-serialization
    #   python-keystoneclient
packaging==24.1
    # via
    #   oslo-utils
    #   python-keystoneclient
pbr==6.0.0
    # via
    #   keystoneauth1
    #   os-service-types
    #   oslo-i18n
    #   oslo-serialization
    #   python-keystoneclient
    #   stevedore
portend==3.2.0
    # via cherrypy
pyparsing==3.1.2
    # via oslo-utils
pyrage==1.1.2
    # via -r requirements.in
python-dateutil==2.9.0.post0
    # via tempora
python-keystoneclient==5.4.0
    # via -r requirements.in
pyyaml==6.0.2
    # via
    #   -r requirements.in
    #   oslo-config
    #   oslo-utils
referencing==0.35.1
    # via
    #   jsonschema
    #   jsonschema-specifications
requests==2.32.3
    # via
    #   -r requirements.in
    #   keystoneauth1
    #   oslo-config
    #   python-keystoneclient
rfc3986==2.0.0
    # via oslo-config
rpds-py==0.20.0
    # via
    #   jsonschema
    #   referencing
six==1.16.0
    # via
    #   python-dateutil
    #   tacacs-plus
stevedore==5.2.0
    # via
    #   keystoneauth1
    #   oslo-config
    #   python-keystoneclient
tacacs-plus==2.6
    # via -r requirements.in
tempora==5.7.0
    # via portend
tzdata==2024.1
    # via
    #   oslo-serialization
    #   oslo-utils
urllib3==2.2.2
    # via requests
wrapt==1.16.0
    # via debtcollector
yarl==1.9.4
    # via aiohttp
zc-lockfile==3.0.post1
    # via cherrypy

# The following packages are considered to be unsafe in a requirements file:
# setuptools
