#######################################################################################
# Copyright ETSI Contributors and Others.
#
# 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.
#######################################################################################
argcomplete==3.6.2
    # via yq
attrs==25.3.0
    # via
    #   jsonschema
    #   referencing
autopage==0.5.2
    # via cliff
bcrypt==4.3.0
    # via paramiko
bitarray==3.4.3
    # via -r requirements.in
certifi==2025.6.15
    # via requests
cffi==1.17.1
    # via
    #   cryptography
    #   pynacl
charset-normalizer==3.4.2
    # via requests
cliff==4.10.0
    # via
    #   osc-lib
    #   python-openstackclient
cmd2==2.6.1
    # via cliff
cryptography==45.0.4
    # via
    #   openstacksdk
    #   paramiko
    #   python-openstackclient
debtcollector==3.0.0
    # via
    #   oslo-config
    #   oslo-utils
    #   python-keystoneclient
decorator==5.2.1
    # via
    #   dogpile-cache
    #   jsonpath-rw
    #   openstacksdk
dogpile-cache==1.4.0
    # via openstacksdk
enum34==1.1.10
    # via pyangbind
haikunator==2.1.0
    # via -r requirements.in
idna==3.10
    # via requests
iso8601==2.1.0
    # via
    #   keystoneauth1
    #   openstacksdk
    #   oslo-utils
    #   python-openstackclient
jmespath==1.0.1
    # via openstacksdk
jsonpatch==1.33
    # via openstacksdk
jsonpath-ng==1.7.0
    # via robotframework-jsonlibrary
jsonpath-rw==1.4.0
    # via jsonpath-rw-ext
jsonpath-rw-ext==1.2.2
    # via robotframework-jsonvalidator
jsonpointer==3.0.0
    # via jsonpatch
jsonschema==4.24.0
    # via
    #   robotframework-jsonlibrary
    #   robotframework-jsonvalidator
jsonschema-specifications==2025.4.1
    # via jsonschema
keystoneauth1==5.11.1
    # via
    #   openstacksdk
    #   osc-lib
    #   python-cinderclient
    #   python-keystoneclient
lxml==5.4.0
    # via
    #   pyang
    #   pyangbind
msgpack==1.1.1
    # via oslo-serialization
netaddr==1.3.0
    # via
    #   oslo-config
    #   oslo-utils
objectpath==0.6.1
    # via robotframework-jsonvalidator
openstacksdk==4.6.0
    # via
    #   osc-lib
    #   python-openstackclient
os-service-types==1.7.0
    # via
    #   keystoneauth1
    #   openstacksdk
osc-lib==4.0.2
    # via python-openstackclient
oslo-config==9.8.0
    # via python-keystoneclient
oslo-i18n==6.5.1
    # via
    #   osc-lib
    #   oslo-config
    #   oslo-utils
    #   python-cinderclient
    #   python-keystoneclient
    #   python-openstackclient
oslo-serialization==5.7.0
    # via python-keystoneclient
oslo-utils==9.0.0
    # via
    #   osc-lib
    #   oslo-serialization
    #   python-cinderclient
    #   python-keystoneclient
packaging==25.0
    # via
    #   oslo-utils
    #   python-keystoneclient
paramiko==3.5.1
    # via
    #   robotframework-sshlibrary
    #   scp
pbr==6.1.1
    # via
    #   jsonpath-rw-ext
    #   keystoneauth1
    #   openstacksdk
    #   os-service-types
    #   osc-lib
    #   oslo-i18n
    #   oslo-utils
    #   python-cinderclient
    #   python-keystoneclient
    #   python-openstackclient
    #   stevedore
platformdirs==4.3.8
    # via openstacksdk
ply==3.11
    # via
    #   jsonpath-ng
    #   jsonpath-rw
prettytable==3.16.0
    # via
    #   cliff
    #   python-cinderclient
psutil==7.0.0
    # via
    #   openstacksdk
    #   oslo-utils
pyang==2.6.1
    # via pyangbind
pyangbind==0.8.6
    # via -r requirements.in
pycparser==2.22
    # via cffi
pyjsonselect==0.2.2
    # via robotframework-jsonvalidator
pynacl==1.5.0
    # via paramiko
pyparsing==3.2.3
    # via oslo-utils
pyperclip==1.9.0
    # via cmd2
python-cinderclient==9.7.0
    # via python-openstackclient
python-keystoneclient==5.6.0
    # via python-openstackclient
python-openstackclient==8.1.0
    # via -r requirements.in
pyyaml==6.0.2
    # via
    #   -r requirements.in
    #   cliff
    #   openstacksdk
    #   oslo-config
    #   oslo-utils
    #   robotframework-yamllibrary
    #   yq
referencing==0.36.2
    # via
    #   jsonschema
    #   jsonschema-specifications
regex==2024.11.6
    # via
    #   -r requirements.in
    #   pyangbind
requests==2.32.4
    # via
    #   -r requirements.in
    #   keystoneauth1
    #   osc-lib
    #   oslo-config
    #   python-cinderclient
    #   python-keystoneclient
    #   python-openstackclient
    #   robotframework-requests
requestsexceptions==1.4.0
    # via openstacksdk
rfc3986==2.0.0
    # via oslo-config
robotframework==7.3.1
    # via
    #   -r requirements.in
    #   robotframework-jsonlibrary
    #   robotframework-jsonvalidator
    #   robotframework-requests
    #   robotframework-sshlibrary
robotframework-jsonlibrary==0.5
    # via -r requirements.in
robotframework-jsonvalidator==2.0.0
    # via -r requirements.in
robotframework-requests==0.9.7
    # via -r requirements.in
robotframework-sshlibrary==3.8.0
    # via -r requirements.in
robotframework-yamllibrary==0.2.8
    # via -r requirements.in
rpds-py==0.25.1
    # via
    #   jsonschema
    #   referencing
scp==0.15.0
    # via robotframework-sshlibrary
six==1.17.0
    # via jsonpath-rw
stevedore==5.4.1
    # via
    #   cliff
    #   dogpile-cache
    #   keystoneauth1
    #   osc-lib
    #   oslo-config
    #   python-cinderclient
    #   python-keystoneclient
    #   python-openstackclient
tomlkit==0.13.3
    # via yq
typing-extensions==4.14.0
    # via
    #   dogpile-cache
    #   keystoneauth1
    #   openstacksdk
    #   referencing
tzdata==2025.2
    # via
    #   oslo-serialization
    #   oslo-utils
urllib3==2.5.0
    # via requests
verboselogs==1.7
    # via -r requirements.in
wcwidth==0.2.13
    # via
    #   cmd2
    #   prettytable
wrapt==1.17.2
    # via debtcollector
xmltodict==0.14.2
    # via yq
yq==3.4.3
    # via -r requirements.in

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