#######################################################################################
# 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.
#######################################################################################
aiohappyeyeballs==2.6.1
    # via aiohttp
aiohttp==3.13.2
    # via -r requirements.in
aiosignal==1.4.0
    # via aiohttp
annotated-types==0.7.0
    # via pydantic
async-timeout==4.0.3
    # via
    #   -r requirements.in
    #   aiohttp
    #   retrying-async
attrs==25.4.0
    # via
    #   aiohttp
    #   glom
bcrypt==5.0.0
    # via paramiko
boltons==25.0.0
    # via
    #   face
    #   glom
cachetools==5.5.2
    # via google-auth
certifi==2025.11.12
    # via
    #   kubernetes
    #   requests
cffi==2.0.0
    # via
    #   cryptography
    #   pynacl
charset-normalizer==3.4.4
    # via
    #   -r requirements.in
    #   requests
checksumdir==1.3.0
    # via -r requirements.in
config-man==0.0.4
    # via -r requirements.in
cryptography==46.0.3
    # via paramiko
dnspython==2.8.0
    # via pymongo
durationpy==0.10
    # via kubernetes
face==24.0.0
    # via glom
fire==0.7.1
    # via randomname
frozenlist==1.8.0
    # via
    #   aiohttp
    #   aiosignal
glom==24.11.0
    # via config-man
google-auth==2.17.3
    # via
    #   -r requirements.in
    #   kubernetes
grpcio==1.76.0
    # via grpcio-tools
grpcio-tools==1.48.2
    # via -r requirements.in
grpclib==0.4.8
    # via -r requirements.in
h2==4.3.0
    # via grpclib
hpack==4.1.0
    # via h2
hyperframe==6.1.0
    # via h2
idna==3.11
    # via
    #   requests
    #   yarl
jinja2==3.1.6
    # via -r requirements.in
jsonpath-ng==1.7.0
    # via -r requirements.in
juju==2.9.44.0
    # via -r requirements.in
jujubundlelib==0.5.7
    # via theblues
kubernetes==33.1.0
    # via
    #   -r requirements.in
    #   juju
macaroonbakery==1.3.4
    # via
    #   juju
    #   theblues
markupsafe==3.0.3
    # via jinja2
motor==3.7.1
    # via -r requirements.in
multidict==6.7.0
    # via
    #   aiohttp
    #   grpclib
    #   yarl
mypy-extensions==1.1.0
    # via typing-inspect
oauthlib==3.3.1
    # via
    #   kubernetes
    #   requests-oauthlib
paramiko==2.12.0
    # via juju
ply==3.11
    # via jsonpath-ng
propcache==0.4.1
    # via
    #   aiohttp
    #   yarl
protobuf==3.20.3
    # via
    #   -r requirements.in
    #   grpcio-tools
    #   macaroonbakery
pyasn1==0.6.1
    # via
    #   -r requirements.in
    #   juju
    #   pyasn1-modules
    #   rsa
pyasn1-modules==0.4.2
    # via google-auth
pycparser==2.23
    # via cffi
pydantic==2.12.5
    # via -r requirements.in
pydantic-core==2.41.5
    # via pydantic
pymacaroons==0.13.0
    # via macaroonbakery
pymongo==4.15.5
    # via motor
pynacl==1.6.1
    # via
    #   macaroonbakery
    #   paramiko
    #   pymacaroons
pyrfc3339==1.1
    # via
    #   juju
    #   macaroonbakery
python-dateutil==2.9.0.post0
    # via kubernetes
pytz==2025.2
    # via pyrfc3339
pyyaml==6.0.3
    # via
    #   -r requirements.in
    #   juju
    #   jujubundlelib
    #   kubernetes
randomname==0.2.1
    # via -r requirements.in
requests==2.32.5
    # via
    #   kubernetes
    #   macaroonbakery
    #   requests-oauthlib
    #   theblues
requests-oauthlib==2.0.0
    # via kubernetes
retrying-async==2.0.0
    # via -r requirements.in
rsa==4.9.1
    # via google-auth
six==1.17.0
    # via
    #   google-auth
    #   kubernetes
    #   macaroonbakery
    #   paramiko
    #   pymacaroons
    #   python-dateutil
termcolor==3.2.0
    # via fire
theblues==0.5.2
    # via juju
toposort==1.10
    # via juju
typing-extensions==4.15.0
    # via
    #   aiosignal
    #   cryptography
    #   grpcio
    #   multidict
    #   pydantic
    #   pydantic-core
    #   typing-inspect
    #   typing-inspection
typing-inspect==0.9.0
    # via juju
typing-inspection==0.4.2
    # via pydantic
urllib3==2.6.1
    # via
    #   -r requirements.in
    #   kubernetes
    #   requests
websocket-client==1.9.0
    # via kubernetes
websockets==15.0.1
    # via juju
yarl==1.22.0
    # via aiohttp

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