Files
unstract/backend/api_v2/api_key_validator.py
Jaseem Jas ba1df894d2 Python 3.9 to 3.12 (#1231)
* python version updated from 3.9 into 3.12

* x2text-service updated with uv and python version 3.12

* x2text-service docker file updated

* Unstract packages updated with uv

* Runner updated with uv

* Promptservice updated with uv

* Platform service updated with uv

* backend service updated with uv

* root pyproject.toml file updated

* sdk version updated in services

* unstract package modules updated based on sdk version:

* docker file update

* pdm lock workflow modified to support uv

* Docs updated based on uv support

* lock automation updated

* snowflake module version updated into 3.14.0

* tox updated to support UV

* tox updated to support UV

* tox updated with pytest

* tox updated with pytest-md-report

* tox updated with module requirements

* python migration from 3.9 to 3.12

* tox updated with module requirements

* runner updated

* Commit uv.lock changes

* runner updated

* Commit uv.lock changes

* pytest.ini added

* x2text-service docker file updated

* pytest.ini removed

* environment updated to test

* docformatter commented on pre-commit

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* some pre-commit issues ignored

* some pre-commit issues ignored

* some pre-commit issues ignored

* some pre-commit issues ignored

* some pre-commit issues ignored

* pre-commit updates

* un used import removed from platfrom service controller

* tox issue fixed

* tox issue fixed

* docker files updated

* backend dockerfile updated

* open installation issue fixed

* Tools docker file updated with base python version 3.12

* python version updated into min 3.12 in pyproject.toml

* linting issue fixed

* uv version upgraded into 0.6.14

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* migrations excluded from ruff

* added PoethePoet task runner

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* feat: Added poe tasks for services (#1248)

* Added poe tasks for services

* reverted FE change made by mistake

* updated tool-sidecar to uv and python to 3.12.9

* minor updates in pyproject descreption

* feat: platform-service logging improvements (#1255)

feat: Used flask util from core to improve logging in platform-service, added core as a dependency to platform-service:

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fix: Platform-service build issue and numpy issue with Python 3.12 (#1258)

* fix: Platform-service build and numpy issue with Py 3.12

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fix: Removed backend dockerfile install statements for numpy

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>

* minor: Handled scenario when cost is not calculated due to no usage

* minor: Corrected content shown for workflow input

* fix: Minor fixes, used gthread for prompt-service, runner

* Commit uv.lock changes

* Removed unused line in tool dockerfile

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Chandrasekharan M <chandrasekharan@zipstack.com>
Co-authored-by: Chandrasekharan M <117059509+chandrasekharan-zipstack@users.noreply.github.com>
Co-authored-by: ali-zipstack <muhammad.ali@zipstack.com>
2025-04-24 16:07:02 +05:30

63 lines
1.8 KiB
Python

import logging
from functools import wraps
from typing import Any
from rest_framework.request import Request
from api_v2.exceptions import Forbidden
logger = logging.getLogger(__name__)
class BaseAPIKeyValidator:
@classmethod
def validate_api_key(cls, func: Any) -> Any:
"""Decorator that validates the API key.
Sample header:
Authorization: Bearer 123e4567-e89b-12d3-a456-426614174001
Args:
func (Any): Function to wrap for validation
"""
@wraps(func)
def wrapper(self: Any, request: Request, *args: Any, **kwargs: Any) -> Any:
"""Wrapper to validate the inputs and key.
Args:
request (Request): Request context
Raises:
Forbidden: _description_
APINotFound: _description_
Returns:
Any: _description_
"""
authorization_header = request.headers.get("Authorization")
api_key = None
if authorization_header and authorization_header.startswith("Bearer "):
api_key = authorization_header.split(" ")[1]
if not api_key:
raise Forbidden("Missing api key")
cls.validate_parameters(request, **kwargs)
return cls.validate_and_process(
self, request, func, *args, **kwargs, api_key=api_key
)
return wrapper
@staticmethod
def validate_parameters(request: Request, **kwargs: Any) -> None:
"""Validate specific parameters required by subclasses."""
pass
@staticmethod
def validate_and_process(
self: Any, request: Request, func: Any, api_key: str, *args: Any, **kwargs: Any
) -> Any:
"""Process and validate API key with specific logic required by
subclasses.
"""
pass