Skip to content

Commit

Permalink
Add support for INIT_API_FN
Browse files Browse the repository at this point in the history
  • Loading branch information
pamella committed Jun 19, 2024
1 parent 31e86b5 commit 0dd9beb
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 13 deletions.
30 changes: 17 additions & 13 deletions django_ai_assistant/api/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,26 +16,30 @@
ThreadSchema,
ThreadSchemaIn,
)
from django_ai_assistant.conf import app_settings
from django_ai_assistant.exceptions import AIUserNotAllowedError
from django_ai_assistant.helpers import use_cases
from django_ai_assistant.models import Message, Thread


class API(NinjaAPI):
# Force "operationId" to be like "django_ai_assistant_delete_thread"
def get_openapi_operation_id(self, operation: Operation) -> str:
name = operation.view_func.__name__
return (package_name + "_" + name).replace(".", "_")
def init_api():
class API(NinjaAPI):
# Force "operationId" to be like "django_ai_assistant_delete_thread"
def get_openapi_operation_id(self, operation: Operation) -> str:
name = operation.view_func.__name__
return (package_name + "_" + name).replace(".", "_")

return API(
title=package_name,
version=version,
urls_namespace="django_ai_assistant",
# Add auth to all endpoints
auth=django_auth,
csrf=True,
)


api = API(
title=package_name,
version=version,
urls_namespace="django_ai_assistant",
# Add auth to all endpoints
auth=django_auth,
csrf=True,
)
api = app_settings.call_fn("INIT_API_FN")


@api.exception_handler(AIUserNotAllowedError)
Expand Down
1 change: 1 addition & 0 deletions django_ai_assistant/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@


DEFAULTS = {
"INIT_API_FN": "django_ai_assistant.api.views.init_api",
"CAN_CREATE_THREAD_FN": "django_ai_assistant.permissions.allow_all",
"CAN_VIEW_THREAD_FN": "django_ai_assistant.permissions.owns_thread",
"CAN_UPDATE_THREAD_FN": "django_ai_assistant.permissions.owns_thread",
Expand Down
25 changes: 25 additions & 0 deletions docs/tutorial.md
Original file line number Diff line number Diff line change
Expand Up @@ -243,6 +243,31 @@ urlpatterns = [
The built-in API supports retrieval of Assistants info, as well as CRUD for Threads and Messages.
It has a OpenAPI schema that you can explore at `ai-assistant/docs/`.


#### Configuring the API

The built-in API is implemented using [Django Ninja](https://django-ninja.dev/reference/api/). By default, it is initialized with the following setting:

```python title="myproject/settings.py"
AI_ASSISTANT_INIT_API_FN = "django_ai_assistant.api.views.init_api"
```

You can override this setting in your Django project's `settings.py` to customize the API, such as using a different authentication method or modifying other configurations.

The method signature for `AI_ASSISTANT_INIT_API_FN` is as follows:

```python
from ninja import NinjaAPI


def init_api():
return NinjaAPI(
...
)
```

By providing your own implementation of init_api, you can tailor the API setup to better fit your project's requirements.

### Configuring permissions

The API uses the helpers from the `django_ai_assistant.use_cases` module, which have permission checks
Expand Down
1 change: 1 addition & 0 deletions example/example/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -157,6 +157,7 @@

# django-ai-assistant

AI_ASSISTANT_INIT_API_FN = "django_ai_assistant.api.views.init_api"
AI_ASSISTANT_CAN_CREATE_THREAD_FN = "django_ai_assistant.permissions.allow_all"
AI_ASSISTANT_CAN_VIEW_THREAD_FN = "django_ai_assistant.permissions.owns_thread"
AI_ASSISTANT_CAN_UPDATE_THREAD_FN = "django_ai_assistant.permissions.owns_thread"
Expand Down
1 change: 1 addition & 0 deletions tests/settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@
# django-ai-assistant

# NOTE: set a OPENAI_API_KEY on .env.tests file at root when updating the VCRs.
AI_ASSISTANT_INIT_API_FN = "django_ai_assistant.api.views.init_api"
AI_ASSISTANT_CAN_CREATE_THREAD_FN = "django_ai_assistant.permissions.allow_all"
AI_ASSISTANT_CAN_VIEW_THREAD_FN = "django_ai_assistant.permissions.owns_thread"
AI_ASSISTANT_CAN_UPDATE_THREAD_FN = "django_ai_assistant.permissions.owns_thread"
Expand Down

0 comments on commit 0dd9beb

Please sign in to comment.