diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 07de2db..c0d054c 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,10 +1,18 @@ repos: -- repo: https://github.com/astral-sh/ruff-pre-commit - # Ruff version. - rev: v0.12.7 - hooks: - # Run the linter. - - id: ruff-check - args: [ --fix ] - # Run the formatter. - - id: ruff-format \ No newline at end of file + - repo: https://github.com/astral-sh/ruff-pre-commit + # Ruff version. + rev: v0.12.7 + hooks: + # Run the linter. + - id: ruff-check + args: [ --fix ] + # Run the formatter. + - id: ruff-format + - repo: https://github.com/astral-sh/uv-pre-commit + rev: 0.8.22 + hooks: + - id: uv-export + args: ["--no-hashes", "--no-dev", "-o", "requirements.txt"] + - id: uv-export + name: Export dev requirements + args: ["--no-hashes", "-o", "requirements-dev.txt"] diff --git a/requirements-dev.txt b/requirements-dev.txt new file mode 100644 index 0000000..fd65cd8 --- /dev/null +++ b/requirements-dev.txt @@ -0,0 +1,261 @@ +# This file was autogenerated by uv via the following command: +# uv export --no-hashes -o requirements-dev.txt +-e . +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # mcp + # sse-starlette + # starlette +attrs==25.3.0 + # via + # cyclopts + # jsonschema + # referencing +authlib==1.6.1 + # via fastmcp +certifi==2025.8.3 + # via + # httpcore + # httpx + # requests +cffi==1.17.1 ; platform_python_implementation != 'PyPy' + # via cryptography +cfgv==3.4.0 + # via pre-commit +charset-normalizer==3.4.2 + # via requests +click==8.2.1 ; sys_platform != 'emscripten' + # via uvicorn +colorama==0.4.6 ; sys_platform == 'win32' + # via click +cryptography==45.0.5 + # via + # authlib + # openstacksdk +cyclopts==3.22.5 + # via fastmcp +decorator==5.2.1 + # via + # dogpile-cache + # openstacksdk +distlib==0.4.0 + # via virtualenv +dnspython==2.7.0 + # via email-validator +docstring-parser==0.17.0 ; python_full_version < '4' + # via cyclopts +docutils==0.22 + # via rich-rst +dogpile-cache==1.4.0 + # via openstacksdk +email-validator==2.2.0 + # via pydantic +exceptiongroup==1.3.0 + # via + # anyio + # fastmcp +fastmcp==2.11.3 + # via python-openstackmcp-server +filelock==3.18.0 + # via virtualenv +h11==0.16.0 + # via + # httpcore + # uvicorn +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # fastmcp + # mcp +httpx-sse==0.4.1 + # via mcp +identify==2.6.12 + # via pre-commit +idna==3.10 + # via + # anyio + # email-validator + # httpx + # requests +iso8601==2.1.0 + # via + # keystoneauth1 + # openstacksdk +isodate==0.7.2 + # via openapi-core +jmespath==1.0.1 + # via openstacksdk +jsonpatch==1.33 + # via openstacksdk +jsonpointer==3.0.0 + # via jsonpatch +jsonschema==4.25.0 + # via + # mcp + # openapi-core + # openapi-schema-validator + # openapi-spec-validator +jsonschema-path==0.3.4 + # via + # openapi-core + # openapi-spec-validator +jsonschema-specifications==2025.4.1 + # via + # jsonschema + # openapi-schema-validator +keystoneauth1==5.11.1 + # via openstacksdk +lazy-object-proxy==1.11.0 + # via openapi-spec-validator +markdown-it-py==3.0.0 + # via rich +markupsafe==3.0.2 + # via werkzeug +mcp==1.13.0 + # via fastmcp +mdurl==0.1.2 + # via markdown-it-py +more-itertools==10.7.0 + # via openapi-core +nodeenv==1.9.1 + # via pre-commit +openapi-core==0.19.5 + # via fastmcp +openapi-pydantic==0.5.1 + # via fastmcp +openapi-schema-validator==0.6.3 + # via + # openapi-core + # openapi-spec-validator +openapi-spec-validator==0.7.2 + # via openapi-core +openstacksdk==4.6.0 + # via python-openstackmcp-server +os-service-types==1.8.0 + # via + # keystoneauth1 + # openstacksdk +packaging==25.0 + # via setuptools-scm +parse==1.20.2 + # via openapi-core +pathable==0.4.4 + # via jsonschema-path +pbr==6.1.1 + # via + # keystoneauth1 + # openstacksdk + # os-service-types + # stevedore +platformdirs==4.3.8 + # via + # openstacksdk + # virtualenv +pre-commit==4.2.0 +psutil==7.0.0 + # via openstacksdk +pycparser==2.22 ; platform_python_implementation != 'PyPy' + # via cffi +pydantic==2.11.7 + # via + # fastmcp + # mcp + # openapi-pydantic + # pydantic-settings + # python-openstackmcp-server +pydantic-core==2.33.2 + # via pydantic +pydantic-settings==2.10.1 + # via mcp +pygments==2.19.2 + # via rich +pyperclip==1.9.0 + # via fastmcp +python-dotenv==1.1.1 + # via + # fastmcp + # pydantic-settings +python-multipart==0.0.20 + # via mcp +pywin32==311 ; sys_platform == 'win32' + # via mcp +pyyaml==6.0.2 + # via + # jsonschema-path + # openstacksdk + # pre-commit +referencing==0.36.2 + # via + # jsonschema + # jsonschema-path + # jsonschema-specifications +requests==2.32.4 + # via + # jsonschema-path + # keystoneauth1 +requestsexceptions==1.4.0 + # via openstacksdk +rfc3339-validator==0.1.4 + # via openapi-schema-validator +rich==14.1.0 + # via + # cyclopts + # fastmcp + # rich-rst +rich-rst==1.3.1 + # via cyclopts +rpds-py==0.26.0 + # via + # jsonschema + # referencing +ruff==0.12.7 +setuptools==80.9.0 + # via + # pbr + # setuptools-scm +setuptools-scm==9.2.0 +six==1.17.0 + # via rfc3339-validator +sniffio==1.3.1 + # via anyio +sse-starlette==3.0.2 + # via mcp +starlette==0.47.2 + # via mcp +stevedore==5.4.1 + # via + # dogpile-cache + # keystoneauth1 +tomli==2.2.1 ; python_full_version < '3.11' + # via setuptools-scm +typing-extensions==4.14.1 + # via + # anyio + # cyclopts + # dogpile-cache + # exceptiongroup + # keystoneauth1 + # openapi-core + # openstacksdk + # pydantic + # pydantic-core + # referencing + # starlette + # typing-inspection + # uvicorn +typing-inspection==0.4.1 + # via + # pydantic + # pydantic-settings +urllib3==2.5.0 + # via requests +uvicorn==0.35.0 ; sys_platform != 'emscripten' + # via mcp +virtualenv==20.33.0 + # via pre-commit +werkzeug==3.1.1 + # via openapi-core diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a05d158 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,237 @@ +# This file was autogenerated by uv via the following command: +# uv export --no-hashes --no-dev -o requirements.txt +-e . +annotated-types==0.7.0 + # via pydantic +anyio==4.9.0 + # via + # httpx + # mcp + # sse-starlette + # starlette +attrs==25.3.0 + # via + # cyclopts + # jsonschema + # referencing +authlib==1.6.1 + # via fastmcp +certifi==2025.8.3 + # via + # httpcore + # httpx + # requests +cffi==1.17.1 ; platform_python_implementation != 'PyPy' + # via cryptography +charset-normalizer==3.4.2 + # via requests +click==8.2.1 ; sys_platform != 'emscripten' + # via uvicorn +colorama==0.4.6 ; sys_platform == 'win32' + # via click +cryptography==45.0.5 + # via + # authlib + # openstacksdk +cyclopts==3.22.5 + # via fastmcp +decorator==5.2.1 + # via + # dogpile-cache + # openstacksdk +dnspython==2.7.0 + # via email-validator +docstring-parser==0.17.0 ; python_full_version < '4' + # via cyclopts +docutils==0.22 + # via rich-rst +dogpile-cache==1.4.0 + # via openstacksdk +email-validator==2.2.0 + # via pydantic +exceptiongroup==1.3.0 + # via + # anyio + # fastmcp +fastmcp==2.11.3 + # via python-openstackmcp-server +h11==0.16.0 + # via + # httpcore + # uvicorn +httpcore==1.0.9 + # via httpx +httpx==0.28.1 + # via + # fastmcp + # mcp +httpx-sse==0.4.1 + # via mcp +idna==3.10 + # via + # anyio + # email-validator + # httpx + # requests +iso8601==2.1.0 + # via + # keystoneauth1 + # openstacksdk +isodate==0.7.2 + # via openapi-core +jmespath==1.0.1 + # via openstacksdk +jsonpatch==1.33 + # via openstacksdk +jsonpointer==3.0.0 + # via jsonpatch +jsonschema==4.25.0 + # via + # mcp + # openapi-core + # openapi-schema-validator + # openapi-spec-validator +jsonschema-path==0.3.4 + # via + # openapi-core + # openapi-spec-validator +jsonschema-specifications==2025.4.1 + # via + # jsonschema + # openapi-schema-validator +keystoneauth1==5.11.1 + # via openstacksdk +lazy-object-proxy==1.11.0 + # via openapi-spec-validator +markdown-it-py==3.0.0 + # via rich +markupsafe==3.0.2 + # via werkzeug +mcp==1.13.0 + # via fastmcp +mdurl==0.1.2 + # via markdown-it-py +more-itertools==10.7.0 + # via openapi-core +openapi-core==0.19.5 + # via fastmcp +openapi-pydantic==0.5.1 + # via fastmcp +openapi-schema-validator==0.6.3 + # via + # openapi-core + # openapi-spec-validator +openapi-spec-validator==0.7.2 + # via openapi-core +openstacksdk==4.6.0 + # via python-openstackmcp-server +os-service-types==1.8.0 + # via + # keystoneauth1 + # openstacksdk +parse==1.20.2 + # via openapi-core +pathable==0.4.4 + # via jsonschema-path +pbr==6.1.1 + # via + # keystoneauth1 + # openstacksdk + # os-service-types + # stevedore +platformdirs==4.3.8 + # via openstacksdk +psutil==7.0.0 + # via openstacksdk +pycparser==2.22 ; platform_python_implementation != 'PyPy' + # via cffi +pydantic==2.11.7 + # via + # fastmcp + # mcp + # openapi-pydantic + # pydantic-settings + # python-openstackmcp-server +pydantic-core==2.33.2 + # via pydantic +pydantic-settings==2.10.1 + # via mcp +pygments==2.19.2 + # via rich +pyperclip==1.9.0 + # via fastmcp +python-dotenv==1.1.1 + # via + # fastmcp + # pydantic-settings +python-multipart==0.0.20 + # via mcp +pywin32==311 ; sys_platform == 'win32' + # via mcp +pyyaml==6.0.2 + # via + # jsonschema-path + # openstacksdk +referencing==0.36.2 + # via + # jsonschema + # jsonschema-path + # jsonschema-specifications +requests==2.32.4 + # via + # jsonschema-path + # keystoneauth1 +requestsexceptions==1.4.0 + # via openstacksdk +rfc3339-validator==0.1.4 + # via openapi-schema-validator +rich==14.1.0 + # via + # cyclopts + # fastmcp + # rich-rst +rich-rst==1.3.1 + # via cyclopts +rpds-py==0.26.0 + # via + # jsonschema + # referencing +setuptools==80.9.0 + # via pbr +six==1.17.0 + # via rfc3339-validator +sniffio==1.3.1 + # via anyio +sse-starlette==3.0.2 + # via mcp +starlette==0.47.2 + # via mcp +stevedore==5.4.1 + # via + # dogpile-cache + # keystoneauth1 +typing-extensions==4.14.1 + # via + # anyio + # cyclopts + # dogpile-cache + # exceptiongroup + # keystoneauth1 + # openapi-core + # openstacksdk + # pydantic + # pydantic-core + # referencing + # starlette + # typing-inspection + # uvicorn +typing-inspection==0.4.1 + # via + # pydantic + # pydantic-settings +urllib3==2.5.0 + # via requests +uvicorn==0.35.0 ; sys_platform != 'emscripten' + # via mcp +werkzeug==3.1.1 + # via openapi-core