
Security News
MCP Community Begins Work on Official MCP Metaregistry
The MCP community is launching an official registry to standardize AI tool discovery and let agents dynamically find and install MCP servers.
django-graphql-persist
Advanced tools
|Pypi| |Wheel| |Build Status| |Codecov| |Code Climate|
Persisted queries for Django GraphQL
_
.. _Django GraphQL: https://github.com/graphql-python/graphene-django
Install last stable version from Pypi.
.. code:: sh
pip install django-graphql-persist
Include the PersistMiddleware
middleware in your MIDDLEWARE settings:
.. code:: python
MIDDLEWARE = [
...
'graphql_persist.middleware.PersistMiddleware',
...
]
Django-graphql-persist searches for documents directories in a number of places, depending on your DEFAULT_LOADER_CLASSES
variable.
By default, Django-graphql-persist uses these document loaders:
Loads documents from Django apps on the filesystem. For each app in INSTALLED_APPS
, the loader looks for a documents/
subdirectory defined by APP_DOCUMENT_DIR
variable.
Loads documents from the filesystem, according to DOCUMENTS_DIRS
variable.
Loads documents from urls, according to DOCUMENTS_DIRS
.
.. code:: python
GRAPHQL_PERSIST = {
'DOCUMENTS_DIRS': [
'/app/documents', # FilesystemLoader
'https:// ... /documents', # URLLoader
],
}
Cached Loader
By default, the document system reads your documents every time they're rendered.
Configure the CachedEngine
engine for caching documents.
.. code:: python
GRAPHQL_PERSIST = {
'DEFAULT_LOADER_ENGINE_CLASS': [
graphql_persist.loaders.CachedEngine',
],
}
You can split schemas into separate files...
documents/fragments.graphql
.. code::
fragment userFields on UserType {
id
email
}
and define Pythonic imports prefixed with #
.
documents/GetViewer.graphql
.. code::
# from fragments import userFields
{
viewer {
...userFields
}
}
Persisted Query by id
.. code:: json
{
"id": "GetViewer",
"variables": {}
}
documents/users.graphql
.. code::
# from fragments import userFields
query GetViewer {
viewer {
...userFields
}
}
query GetUsers($last: Int!) {
users(last: $last) {
...userFields
}
}
Persisted Query by id
and operationName
.. code:: json
{
"id": "users",
"operationName": "GetUsers",
"variables": {
"last": 2
}
}
The versioning scheme is defined by the DEFAULT_VERSIONING_CLASS
setting variable.
.. code:: python
GRAPHQL_PERSIST = {
'DEFAULT_VERSIONING_CLASS': 'graphql_persist.versioning.AcceptHeaderVersioning'
}
This is the full list of versioning classes.
+--------------------------+-------------------------------------+
| DEFAULT_VERSIONING_CLASS | Example |
+==========================+=====================================+
| AcceptHeaderVersioning | application/json; version=v1
|
+--------------------------+-------------------------------------+
| VendorTreeVersioning | application/vnd.example.v1+json
|
+--------------------------+-------------------------------------+
| QueryParameterVersioning | ?version=v1
|
+--------------------------+-------------------------------------+
| HostNameVersioning | v1.example.com
|
+--------------------------+-------------------------------------+
Configure the versioning scheme and storage the GraphQL documents according to the version.
👇 Example
.. code::
POST /graphql HTTP/1.1
Accept: application/json; version=v1.full
{
"id": "GetViewer",
"variables": {}
}
.. code::
documents/
|
├── v1/
│ ├── full/
│ | └── GetViewer.graphql 👈
│ └── basic/
| | └── GetViewer.graphql
| └── fragments/
| └── users.graphql
└── v2/
└── full/
└── basic/
👉 documents/v1/full/GetViewer.graphql
.. code::
# from ..fragments.users import userFields
{
viewer {
...userFields
}
}
Here's a list of settings available in Django-graphql-persist and their default values.
DOCUMENTS_DIRS
::
List of directories or urls searched for GraphQL SDL definitions
Default: ()
CACHE_NAME
::
Cache key name `CACHES[name]` to cache the queries results
Default: 'default'
QUERY_KEY_HANDLER
::
A custom function `f(query_id, request)` to generate the persisted query keys
Default: 'graphql_persist.query.query_key_handler'
DEFAULT_VERSIONING_CLASS
::
A versioning class to determine the `request.version` attribute
Default: None
DEFAULT_LOADER_ENGINE_CLASS
::
Class that takes a list of template loaders and attempts to load templates from them in order
Default: 'graphql_persist.loaders.Engine'
Note: Set variable to 'graphql_persist.loaders.CachedEngine' for caching documents
DEFAULT_LOADER_CLASSES
::
A list of loader classes to import documents from a particular source
Default: (
'graphql_persist.loaders.AppDirectoriesLoader',
'graphql_persist.loaders.FilesystemLoader',
'graphql_persist.loaders.URLLoader',
)
APP_DOCUMENT_DIR
::
Subdirectory of installed applications for searches documents
Default: 'documents'
DOCUMENTS_EXT
::
GraphQL document file extension
Default: '.graphql'
DEFAULT_RENDERER_CLASSES
::
A list of renderer classes that may be used when returning a persisted query response
Default: ()
.. |Pypi| image:: https://img.shields.io/pypi/v/django-graphql-persist.svg :target: https://pypi.python.org/pypi/django-graphql-persist
.. |Wheel| image:: https://img.shields.io/pypi/wheel/django-graphql-persist.svg :target: https://pypi.python.org/pypi/django-graphql-persist
.. |Build Status| image:: https://travis-ci.org/flavors/django-graphql-persist.svg?branch=master :target: https://travis-ci.org/flavors/django-graphql-persist
.. |Codecov| image:: https://img.shields.io/codecov/c/github/flavors/django-graphql-persist.svg :target: https://codecov.io/gh/flavors/django-graphql-persist
.. |Code Climate| image:: https://api.codeclimate.com/v1/badges/46eaf45a95441d5470a4/maintainability :target: https://codeclimate.com/github/flavors/django-graphql-persist
FAQs
Persisted queries for Django GraphQL
We found that django-graphql-persist demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
The MCP community is launching an official registry to standardize AI tool discovery and let agents dynamically find and install MCP servers.
Research
Security News
Socket uncovers an npm Trojan stealing crypto wallets and BullX credentials via obfuscated code and Telegram exfiltration.
Research
Security News
Malicious npm packages posing as developer tools target macOS Cursor IDE users, stealing credentials and modifying files to gain persistent backdoor access.