# 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.


aiohttp==3.6.2
    # via -r requirements.in
async-timeout==3.0.1
    # via aiohttp
attrs==21.4.0
    # via
    #   aiohttp
    #   jsonschema
certifi==2022.6.15
    # via requests
chardet==3.0.4
    # via aiohttp
charset-normalizer==2.0.12
    # via requests
cheroot==8.6.0
    # via cherrypy
cherrypy==18.6.1
    # via -r requirements.in
debtcollector==2.5.0
    # via
    #   oslo-config
    #   oslo-utils
    #   python-keystoneclient
deepdiff==5.8.1
    # via -r requirements.in
idna==3.3
    # via
    #   requests
    #   yarl
importlib-resources==5.8.0
    # via
    #   jaraco-text
    #   jsonschema
iso8601==1.0.2
    # via
    #   keystoneauth1
    #   oslo-utils
jaraco-classes==3.2.1
    # via jaraco-collections
jaraco-collections==3.5.1
    # via cherrypy
jaraco-context==4.1.1
    # via jaraco-text
jaraco-functools==3.5.0
    # via
    #   cheroot
    #   jaraco-text
    #   tempora
jaraco-text==3.8.0
    # via jaraco-collections
jsonschema==4.6.0
    # via -r requirements.in
keystoneauth1==4.6.0
    # via python-keystoneclient
more-itertools==8.13.0
    # via
    #   cheroot
    #   cherrypy
    #   jaraco-classes
    #   jaraco-functools
msgpack==1.0.4
    # via oslo-serialization
multidict==4.7.6
    # via
    #   aiohttp
    #   yarl
netaddr==0.8.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==8.8.0
    # via python-keystoneclient
oslo-i18n==5.1.0
    # via
    #   oslo-config
    #   oslo-utils
    #   python-keystoneclient
oslo-serialization==4.3.0
    # via python-keystoneclient
oslo-utils==6.0.0
    # via
    #   oslo-serialization
    #   python-keystoneclient
packaging==21.3
    # via
    #   oslo-utils
    #   python-keystoneclient
pbr==5.9.0
    # via
    #   keystoneauth1
    #   os-service-types
    #   oslo-i18n
    #   oslo-serialization
    #   python-keystoneclient
    #   stevedore
portend==3.1.0
    # via cherrypy
pyparsing==3.0.9
    # via
    #   oslo-utils
    #   packaging
pyrsistent==0.18.1
    # via jsonschema
python-keystoneclient==4.5.0
    # via -r requirements.in
pytz==2022.1
    # via
    #   oslo-serialization
    #   oslo-utils
    #   tempora
pyyaml==5.4.1
    # via
    #   -r requirements.in
    #   oslo-config
requests==2.28.0
    # via
    #   -r requirements.in
    #   keystoneauth1
    #   oslo-config
    #   python-keystoneclient
rfc3986==2.0.0
    # via oslo-config
six==1.16.0
    # via
    #   cheroot
    #   keystoneauth1
    #   python-keystoneclient
    #   tacacs-plus
stevedore==3.5.0
    # via
    #   keystoneauth1
    #   oslo-config
    #   python-keystoneclient
tacacs-plus==2.6
    # via -r requirements.in
tempora==5.0.1
    # via portend
urllib3==1.26.9
    # via requests
wrapt==1.14.1
    # via debtcollector
yarl==1.7.2
    # via aiohttp
zc-lockfile==2.0
    # via cherrypy
zipp==3.8.0
    # via importlib-resources

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