wagtail-grapple


Namewagtail-grapple JSON
Version 0.17.1 PyPI version JSON
download
home_pagehttps://github.com/torchbox/wagtail-grapple
SummaryA Django app that speeds up and simplifies implementing a GraphQL endpoint!
upload_time2022-08-24 10:34:19
maintainerDan Braghis
docs_urlNone
authorNathan Horrigan
requires_python>=3.7
license
keywords wagtail django graphene graphql
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            <p align="center">
  <a href="https://github.com/torchbox/wagtail-grapple">
    <img src="https://github.com/torchbox/wagtail-grapple/raw/main/.github/wagtail-grapple.svg?sanitize=true" alt="A red g with a grapple hook" width="80" height="80">
  </a>
</p>

# Wagtail Grapple

[![Build status](https://github.com/torchbox/wagtail-grapple/actions/workflows/ci.yml/badge.svg)](https://github.com/torchbox/wagtail-grapple/actions)
[![PyPi](https://img.shields.io/pypi/v/wagtail-grapple.svg)](https://pypi.org/project/wagtail-grapple/)
[![black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)

A library to build GraphQL endpoints easily so you can grapple your Wagtail data from anywhere!

[Explore the docs ยป](https://wagtail-grapple.readthedocs.io/en/latest/) ยท
[Report Bug](https://github.com/torchbox/wagtail-grapple/issues) ยท
[Request Feature](https://github.com/torchbox/wagtail-grapple/issues)

## About The Project

![GraphQL Preview Demo](docs/demo.gif)

There is a range of GraphQL packages for Python and specifically Django.
However, getting these packages to work out of the box with an existing infrastructure
without errors isn't as easy to come by.

The purpose of Grapple is to be able to build GraphQL endpoints on a model by model
basis as quickly as possible. The setup and configuration have been designed
to be as simple but also provide the best features;
No complex serializers need to be written - just add a `graphql_fields` list
to your model and away you go (although if you want to go deeper you can!).

### Features

-   Easily create GraphQL types by adding a small annotation in your models.
-   Supports traditional Wagtail models:
    -   Pages (including Streamfield & Orderables)
    -   Snippets
    -   Images
    -   Documents
    -   Media
    -   Settings
    -   Redirects
    -   Search (on all models)
-   Custom Image & Document model support
-   Pagination support
-   Middleware support
-   Advanced headless preview functionality built using GraphQL Subscriptions to enable Page previews on any device!

### Built With

This library is an abstraction upon and relies heavily on Graphene & Graphene Django.
We also use Django Channels and the Potrace image library.

-   [Graphene](https://github.com/graphql-python/graphene)
-   [Graphene Django](https://github.com/graphql-python/graphene)
-   [Potrace](https://github.com/skyrpex/potrace)
-   [Django Channels](https://github.com/django/channels) when installed with `wagtail_grapple[channels]`

## Getting Started

Getting Grapple installed is designed to be as simple as possible!

### Prerequisites

```
Django  >= 3.0, <4.0
Wagtail >= 2.15, <4.1
```

### Installation

```bash
pip install wagtail_grapple
```

Add the following to the `INSTALLED_APPS` list in your Wagtail settings file:

```python
INSTALLED_APPS = [
    # ...
    "grapple",
    "graphene_django",
    # ...
]
```

For GraphQL Subscriptions with Django Channels, run `pip install wagtail_grapple[channels]` and add
`channels` to installed apps:

```python
INSTALLED_APPS = [
    # ...
    "grapple",
    "graphene_django",
    "channels",
    # ...
]
```

Add the following to the bottom of the same settings file, where each key is the app you want to this library to scan and the value is the prefix you want to give to GraphQL types (you can usually leave this blank):

```python
# Grapple config:
GRAPHENE = {"SCHEMA": "grapple.schema.schema"}
GRAPPLE = {
    "APPS": ["home"],
}
```

Add the GraphQL URLs to your `urls.py`:

```python
from grapple import urls as grapple_urls

# ...
urlpatterns = [
    # ...
    path("api/", include(grapple_urls)),
    # ...
]
```

Done! Now you can proceed onto configuring your models to generate GraphQL types that adopt their structure :tada:
_Your GraphQL endpoint is available at [http://localhost:8000/api/graphql/](http://localhost:8000/api/graphql/)_

## Usage

Here is a GraphQL model configuration for the default page from the Wagtail docs:

```python
# ...
from grapple.models import GraphQLString, GraphQLStreamfield


class BlogPage(Page):
    author = models.CharField(max_length=255)
    date = models.DateField("Post date")
    body = StreamField(
        [
            ("heading", blocks.CharBlock(classname="full title")),
            ("paragraph", blocks.RichTextBlock()),
            ("image", ImageChooserBlock()),
        ]
    )

    content_panels = Page.content_panels + [
        FieldPanel("author"),
        FieldPanel("date"),
        StreamFieldPanel("body"),
    ]

    # Note these fields below:
    graphql_fields = [
        GraphQLString("heading"),
        GraphQLString("date"),
        GraphQLString("author"),
        GraphQLStreamfield("body"),
    ]
```

_For more examples, please refer to the [Documentation](https://wagtail-grapple.readthedocs.io/en/latest/)_

## Contributing

Contributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.

1. Fork the Project
2. Create your Feature Branch (`git checkout -b feature/amazing-feature`)
3. Commit your Changes (`git commit -m 'Add some amazing feature'`)
4. Push to the Branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

### Local development

-   In the python environment of your choice, navigate to `/example`
-   Run `pip install -r requirements.txt`
-   Run `./manage.py migrate`
-   Run server `./manage.py runserver`
-   Run tests `./manage.py test`

## Compatibility

Wagtail Grapple supports:

-   Django >= 3.0, < 4.0
-   Python 3.7, 3.8, 3.9, and 3.10
-   Wagtail >= 2.15, < 4.0

## License

Distributed under the MIT License. See `LICENSE` for more information.

<!-- ACKNOWLEDGEMENTS -->

## Inspired by

-   [@tr11](https://github.com/tr11)
-   [@tmkn](https://github.com/tmkn)

## Contributors โœจ

Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
<!-- markdownlint-disable -->
<table>
  <tr>
    <td align="center"><a href="https://github.com/NathHorrigan"><img src="https://avatars3.githubusercontent.com/u/13197111?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Nathan Horrigan</b></sub></a><br /><a href="https://github.com/torchbox/wagtail-grapple/commits?author=NathHorrigan" title="Code">๐Ÿ’ป</a> <a href="https://github.com/torchbox/wagtail-grapple/issues?q=author%3ANathHorrigan" title="Bug reports">๐Ÿ›</a> <a href="https://github.com/torchbox/wagtail-grapple/commits?author=NathHorrigan" title="Documentation">๐Ÿ“–</a> <a href="#infra-NathHorrigan" title="Infrastructure (Hosting, Build-Tools, etc)">๐Ÿš‡</a> <a href="#maintenance-NathHorrigan" title="Maintenance">๐Ÿšง</a></td>
    <td align="center"><a href="https://github.com/jafacakes2011"><img src="https://avatars3.githubusercontent.com/u/4086447?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Cameron Lamb</b></sub></a><br /><a href="https://github.com/torchbox/wagtail-grapple/commits?author=jafacakes2011" title="Code">๐Ÿ’ป</a> <a href="https://github.com/torchbox/wagtail-grapple/issues?q=author%3Ajafacakes2011" title="Bug reports">๐Ÿ›</a> <a href="https://github.com/torchbox/wagtail-grapple/commits?author=jafacakes2011" title="Documentation">๐Ÿ“–</a> <a href="#infra-jafacakes2011" title="Infrastructure (Hosting, Build-Tools, etc)">๐Ÿš‡</a> <a href="#maintenance-jafacakes2011" title="Maintenance">๐Ÿšง</a></td>
    <td align="center"><a href="https://zerolab.org/"><img src="https://avatars0.githubusercontent.com/u/31622?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dan Braghis</b></sub></a><br /><a href="https://github.com/torchbox/wagtail-grapple/commits?author=zerolab" title="Code">๐Ÿ’ป</a> <a href="https://github.com/torchbox/wagtail-grapple/issues?q=author%3Azerolab" title="Bug reports">๐Ÿ›</a> <a href="https://github.com/torchbox/wagtail-grapple/commits?author=zerolab" title="Documentation">๐Ÿ“–</a> <a href="#infra-zerolab" title="Infrastructure (Hosting, Build-Tools, etc)">๐Ÿš‡</a> <a href="#maintenance-zerolab" title="Maintenance">๐Ÿšง</a></td>
    <td align="center"><a href="https://github.com/ruisaraiva19"><img src="https://avatars2.githubusercontent.com/u/7356098?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Rui Saraiva</b></sub></a><br /><a href="https://github.com/torchbox/wagtail-grapple/commits?author=ruisaraiva19" title="Code">๐Ÿ’ป</a> <a href="https://github.com/torchbox/wagtail-grapple/issues?q=author%3Aruisaraiva19" title="Bug reports">๐Ÿ›</a> <a href="https://github.com/torchbox/wagtail-grapple/commits?author=ruisaraiva19" title="Documentation">๐Ÿ“–</a> <a href="#infra-ruisaraiva19" title="Infrastructure (Hosting, Build-Tools, etc)">๐Ÿš‡</a> <a href="#maintenance-ruisaraiva19" title="Maintenance">๐Ÿšง</a></td>
    <td align="center"><a href="https://github.com/tbrlpld"><img src="https://avatars1.githubusercontent.com/u/24797493?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tibor</b></sub></a><br /><a href="https://github.com/torchbox/wagtail-grapple/commits?author=tbrlpld" title="Code">๐Ÿ’ป</a> <a href="https://github.com/torchbox/wagtail-grapple/issues?q=author%3Atbrlpld" title="Bug reports">๐Ÿ›</a> <a href="https://github.com/torchbox/wagtail-grapple/commits?author=tbrlpld" title="Documentation">๐Ÿ“–</a></td>
    <td align="center"><a href="https://github.com/timmysmalls"><img src="https://avatars2.githubusercontent.com/u/48223453?v=4?s=100" width="100px;" alt=""/><br /><sub><b>timmysmalls</b></sub></a><br /><a href="https://github.com/torchbox/wagtail-grapple/commits?author=timmysmalls" title="Code">๐Ÿ’ป</a> <a href="https://github.com/torchbox/wagtail-grapple/issues?q=author%3Atimmysmalls" title="Bug reports">๐Ÿ›</a></td>
    <td align="center"><a href="https://wagtail.io/"><img src="https://avatars0.githubusercontent.com/u/15543?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Tom Dyson</b></sub></a><br /><a href="https://github.com/torchbox/wagtail-grapple/commits?author=tomdyson" title="Code">๐Ÿ’ป</a> <a href="https://github.com/torchbox/wagtail-grapple/commits?author=tomdyson" title="Documentation">๐Ÿ“–</a></td>
  </tr>
  <tr>
    <td align="center"><a href="https://fabien.cool/"><img src="https://avatars1.githubusercontent.com/u/1702255?v=4?s=100" width="100px;" alt=""/><br /><sub><b>fabienheureux</b></sub></a><br /><a href="https://github.com/torchbox/wagtail-grapple/commits?author=fabienheureux" title="Code">๐Ÿ’ป</a> <a href="https://github.com/torchbox/wagtail-grapple/issues?q=author%3Afabienheureux" title="Bug reports">๐Ÿ›</a> <a href="https://github.com/torchbox/wagtail-grapple/commits?author=fabienheureux" title="Documentation">๐Ÿ“–</a></td>
  </tr>
</table>

<!-- markdownlint-restore -->
<!-- prettier-ignore-end -->

<!-- ALL-CONTRIBUTORS-LIST:END -->

This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!



            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/torchbox/wagtail-grapple",
    "name": "wagtail-grapple",
    "maintainer": "Dan Braghis",
    "docs_url": null,
    "requires_python": ">=3.7",
    "maintainer_email": "dan.braghis@torchbox.com",
    "keywords": "wagtail,django,graphene,graphql",
    "author": "Nathan Horrigan",
    "author_email": "hello@torchbox.com",
    "download_url": "https://files.pythonhosted.org/packages/f3/ac/3047c2601f86ed996229320a635f4b746dfbd37de0c9886a56a5b6f505d1/wagtail-grapple-0.17.1.tar.gz",
    "platform": null,
    "description": "<p align=\"center\">\n  <a href=\"https://github.com/torchbox/wagtail-grapple\">\n    <img src=\"https://github.com/torchbox/wagtail-grapple/raw/main/.github/wagtail-grapple.svg?sanitize=true\" alt=\"A red g with a grapple hook\" width=\"80\" height=\"80\">\n  </a>\n</p>\n\n# Wagtail Grapple\n\n[![Build status](https://github.com/torchbox/wagtail-grapple/actions/workflows/ci.yml/badge.svg)](https://github.com/torchbox/wagtail-grapple/actions)\n[![PyPi](https://img.shields.io/pypi/v/wagtail-grapple.svg)](https://pypi.org/project/wagtail-grapple/)\n[![black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n[![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)\n\nA library to build GraphQL endpoints easily so you can grapple your Wagtail data from anywhere!\n\n[Explore the docs \u00bb](https://wagtail-grapple.readthedocs.io/en/latest/) \u00b7\n[Report Bug](https://github.com/torchbox/wagtail-grapple/issues) \u00b7\n[Request Feature](https://github.com/torchbox/wagtail-grapple/issues)\n\n## About The Project\n\n![GraphQL Preview Demo](docs/demo.gif)\n\nThere is a range of GraphQL packages for Python and specifically Django.\nHowever, getting these packages to work out of the box with an existing infrastructure\nwithout errors isn't as easy to come by.\n\nThe purpose of Grapple is to be able to build GraphQL endpoints on a model by model\nbasis as quickly as possible. The setup and configuration have been designed\nto be as simple but also provide the best features;\nNo complex serializers need to be written - just add a `graphql_fields` list\nto your model and away you go (although if you want to go deeper you can!).\n\n### Features\n\n-   Easily create GraphQL types by adding a small annotation in your models.\n-   Supports traditional Wagtail models:\n    -   Pages (including Streamfield & Orderables)\n    -   Snippets\n    -   Images\n    -   Documents\n    -   Media\n    -   Settings\n    -   Redirects\n    -   Search (on all models)\n-   Custom Image & Document model support\n-   Pagination support\n-   Middleware support\n-   Advanced headless preview functionality built using GraphQL Subscriptions to enable Page previews on any device!\n\n### Built With\n\nThis library is an abstraction upon and relies heavily on Graphene & Graphene Django.\nWe also use Django Channels and the Potrace image library.\n\n-   [Graphene](https://github.com/graphql-python/graphene)\n-   [Graphene Django](https://github.com/graphql-python/graphene)\n-   [Potrace](https://github.com/skyrpex/potrace)\n-   [Django Channels](https://github.com/django/channels) when installed with `wagtail_grapple[channels]`\n\n## Getting Started\n\nGetting Grapple installed is designed to be as simple as possible!\n\n### Prerequisites\n\n```\nDjango  >= 3.0, <4.0\nWagtail >= 2.15, <4.1\n```\n\n### Installation\n\n```bash\npip install wagtail_grapple\n```\n\nAdd the following to the `INSTALLED_APPS` list in your Wagtail settings file:\n\n```python\nINSTALLED_APPS = [\n    # ...\n    \"grapple\",\n    \"graphene_django\",\n    # ...\n]\n```\n\nFor GraphQL Subscriptions with Django Channels, run `pip install wagtail_grapple[channels]` and add\n`channels` to installed apps:\n\n```python\nINSTALLED_APPS = [\n    # ...\n    \"grapple\",\n    \"graphene_django\",\n    \"channels\",\n    # ...\n]\n```\n\nAdd the following to the bottom of the same settings file, where each key is the app you want to this library to scan and the value is the prefix you want to give to GraphQL types (you can usually leave this blank):\n\n```python\n# Grapple config:\nGRAPHENE = {\"SCHEMA\": \"grapple.schema.schema\"}\nGRAPPLE = {\n    \"APPS\": [\"home\"],\n}\n```\n\nAdd the GraphQL URLs to your `urls.py`:\n\n```python\nfrom grapple import urls as grapple_urls\n\n# ...\nurlpatterns = [\n    # ...\n    path(\"api/\", include(grapple_urls)),\n    # ...\n]\n```\n\nDone! Now you can proceed onto configuring your models to generate GraphQL types that adopt their structure :tada:\n_Your GraphQL endpoint is available at [http://localhost:8000/api/graphql/](http://localhost:8000/api/graphql/)_\n\n## Usage\n\nHere is a GraphQL model configuration for the default page from the Wagtail docs:\n\n```python\n# ...\nfrom grapple.models import GraphQLString, GraphQLStreamfield\n\n\nclass BlogPage(Page):\n    author = models.CharField(max_length=255)\n    date = models.DateField(\"Post date\")\n    body = StreamField(\n        [\n            (\"heading\", blocks.CharBlock(classname=\"full title\")),\n            (\"paragraph\", blocks.RichTextBlock()),\n            (\"image\", ImageChooserBlock()),\n        ]\n    )\n\n    content_panels = Page.content_panels + [\n        FieldPanel(\"author\"),\n        FieldPanel(\"date\"),\n        StreamFieldPanel(\"body\"),\n    ]\n\n    # Note these fields below:\n    graphql_fields = [\n        GraphQLString(\"heading\"),\n        GraphQLString(\"date\"),\n        GraphQLString(\"author\"),\n        GraphQLStreamfield(\"body\"),\n    ]\n```\n\n_For more examples, please refer to the [Documentation](https://wagtail-grapple.readthedocs.io/en/latest/)_\n\n## Contributing\n\nContributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/amazing-feature`)\n3. Commit your Changes (`git commit -m 'Add some amazing feature'`)\n4. Push to the Branch (`git push origin feature/amazing-feature`)\n5. Open a Pull Request\n\n### Local development\n\n-   In the python environment of your choice, navigate to `/example`\n-   Run `pip install -r requirements.txt`\n-   Run `./manage.py migrate`\n-   Run server `./manage.py runserver`\n-   Run tests `./manage.py test`\n\n## Compatibility\n\nWagtail Grapple supports:\n\n-   Django >= 3.0, < 4.0\n-   Python 3.7, 3.8, 3.9, and 3.10\n-   Wagtail >= 2.15, < 4.0\n\n## License\n\nDistributed under the MIT License. See `LICENSE` for more information.\n\n<!-- ACKNOWLEDGEMENTS -->\n\n## Inspired by\n\n-   [@tr11](https://github.com/tr11)\n-   [@tmkn](https://github.com/tmkn)\n\n## Contributors \u2728\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->\n<!-- prettier-ignore-start -->\n<!-- markdownlint-disable -->\n<table>\n  <tr>\n    <td align=\"center\"><a href=\"https://github.com/NathHorrigan\"><img src=\"https://avatars3.githubusercontent.com/u/13197111?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Nathan Horrigan</b></sub></a><br /><a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=NathHorrigan\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/torchbox/wagtail-grapple/issues?q=author%3ANathHorrigan\" title=\"Bug reports\">\ud83d\udc1b</a> <a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=NathHorrigan\" title=\"Documentation\">\ud83d\udcd6</a> <a href=\"#infra-NathHorrigan\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">\ud83d\ude87</a> <a href=\"#maintenance-NathHorrigan\" title=\"Maintenance\">\ud83d\udea7</a></td>\n    <td align=\"center\"><a href=\"https://github.com/jafacakes2011\"><img src=\"https://avatars3.githubusercontent.com/u/4086447?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Cameron Lamb</b></sub></a><br /><a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=jafacakes2011\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/torchbox/wagtail-grapple/issues?q=author%3Ajafacakes2011\" title=\"Bug reports\">\ud83d\udc1b</a> <a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=jafacakes2011\" title=\"Documentation\">\ud83d\udcd6</a> <a href=\"#infra-jafacakes2011\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">\ud83d\ude87</a> <a href=\"#maintenance-jafacakes2011\" title=\"Maintenance\">\ud83d\udea7</a></td>\n    <td align=\"center\"><a href=\"https://zerolab.org/\"><img src=\"https://avatars0.githubusercontent.com/u/31622?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Dan Braghis</b></sub></a><br /><a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=zerolab\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/torchbox/wagtail-grapple/issues?q=author%3Azerolab\" title=\"Bug reports\">\ud83d\udc1b</a> <a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=zerolab\" title=\"Documentation\">\ud83d\udcd6</a> <a href=\"#infra-zerolab\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">\ud83d\ude87</a> <a href=\"#maintenance-zerolab\" title=\"Maintenance\">\ud83d\udea7</a></td>\n    <td align=\"center\"><a href=\"https://github.com/ruisaraiva19\"><img src=\"https://avatars2.githubusercontent.com/u/7356098?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Rui Saraiva</b></sub></a><br /><a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=ruisaraiva19\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/torchbox/wagtail-grapple/issues?q=author%3Aruisaraiva19\" title=\"Bug reports\">\ud83d\udc1b</a> <a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=ruisaraiva19\" title=\"Documentation\">\ud83d\udcd6</a> <a href=\"#infra-ruisaraiva19\" title=\"Infrastructure (Hosting, Build-Tools, etc)\">\ud83d\ude87</a> <a href=\"#maintenance-ruisaraiva19\" title=\"Maintenance\">\ud83d\udea7</a></td>\n    <td align=\"center\"><a href=\"https://github.com/tbrlpld\"><img src=\"https://avatars1.githubusercontent.com/u/24797493?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Tibor</b></sub></a><br /><a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=tbrlpld\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/torchbox/wagtail-grapple/issues?q=author%3Atbrlpld\" title=\"Bug reports\">\ud83d\udc1b</a> <a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=tbrlpld\" title=\"Documentation\">\ud83d\udcd6</a></td>\n    <td align=\"center\"><a href=\"https://github.com/timmysmalls\"><img src=\"https://avatars2.githubusercontent.com/u/48223453?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>timmysmalls</b></sub></a><br /><a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=timmysmalls\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/torchbox/wagtail-grapple/issues?q=author%3Atimmysmalls\" title=\"Bug reports\">\ud83d\udc1b</a></td>\n    <td align=\"center\"><a href=\"https://wagtail.io/\"><img src=\"https://avatars0.githubusercontent.com/u/15543?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>Tom Dyson</b></sub></a><br /><a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=tomdyson\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=tomdyson\" title=\"Documentation\">\ud83d\udcd6</a></td>\n  </tr>\n  <tr>\n    <td align=\"center\"><a href=\"https://fabien.cool/\"><img src=\"https://avatars1.githubusercontent.com/u/1702255?v=4?s=100\" width=\"100px;\" alt=\"\"/><br /><sub><b>fabienheureux</b></sub></a><br /><a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=fabienheureux\" title=\"Code\">\ud83d\udcbb</a> <a href=\"https://github.com/torchbox/wagtail-grapple/issues?q=author%3Afabienheureux\" title=\"Bug reports\">\ud83d\udc1b</a> <a href=\"https://github.com/torchbox/wagtail-grapple/commits?author=fabienheureux\" title=\"Documentation\">\ud83d\udcd6</a></td>\n  </tr>\n</table>\n\n<!-- markdownlint-restore -->\n<!-- prettier-ignore-end -->\n\n<!-- ALL-CONTRIBUTORS-LIST:END -->\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n\n\n",
    "bugtrack_url": null,
    "license": "",
    "summary": "A Django app that speeds up and simplifies implementing a GraphQL endpoint!",
    "version": "0.17.1",
    "split_keywords": [
        "wagtail",
        "django",
        "graphene",
        "graphql"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "md5": "4cd8212233b401c906ddf9c333372b38",
                "sha256": "e3326bcf5255bae34b555da6cde39a1d1d0eb5e94750e18697d51be174a48e6d"
            },
            "downloads": -1,
            "filename": "wagtail_grapple-0.17.1-py2.py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "4cd8212233b401c906ddf9c333372b38",
            "packagetype": "bdist_wheel",
            "python_version": "py2.py3",
            "requires_python": ">=3.7",
            "size": 44066,
            "upload_time": "2022-08-24T10:34:17",
            "upload_time_iso_8601": "2022-08-24T10:34:17.803703Z",
            "url": "https://files.pythonhosted.org/packages/c7/ee/a81670ae798412a2ad98bde7897ff8e5fd37993f97f119491f75aa629707/wagtail_grapple-0.17.1-py2.py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "md5": "e2da7539a027512c02952d1ce5fa41b7",
                "sha256": "382b5affa8cb8ac7f969b7676c7622af646c9038f09ef8d7171c75bad84b5e63"
            },
            "downloads": -1,
            "filename": "wagtail-grapple-0.17.1.tar.gz",
            "has_sig": false,
            "md5_digest": "e2da7539a027512c02952d1ce5fa41b7",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.7",
            "size": 42474,
            "upload_time": "2022-08-24T10:34:19",
            "upload_time_iso_8601": "2022-08-24T10:34:19.192949Z",
            "url": "https://files.pythonhosted.org/packages/f3/ac/3047c2601f86ed996229320a635f4b746dfbd37de0c9886a56a5b6f505d1/wagtail-grapple-0.17.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2022-08-24 10:34:19",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "github_user": "torchbox",
    "github_project": "wagtail-grapple",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "wagtail-grapple"
}
        
Elapsed time: 0.40976s