<h1 align="center">Graphene-Django-CRUDDALS</h1>
<div align="center">
π©π½βπ» π π¨π½βπ»
**Framework for trivial code, easy and fast to learn and use.**
Turn your Django-models into a complete GraphQL API with all CRUD operations
[![PyPI](https://img.shields.io/pypi/v/graphene-django-cruddals?style=flat-&color=00559c&label=pypi&logo=python&logoColor=white)](https://pypi.org/project/graphene-django-cruddals/)
[![GitHub License](https://img.shields.io/github/license/juanjcardona13/graphene_django_cruddals?color=4c1)](https://github.com/juanjcardona13/graphene_django_cruddals/blob/main/LICENSE)
[![Codecov](https://img.shields.io/codecov/c/gh/juanjcardona13/graphene_django_cruddals)](https://app.codecov.io/gh/juanjcardona13/graphene_django_cruddals)
[![Documentation Status](https://readthedocs.org/projects/graphene-django-cruddals/badge/?version=latest)](https://graphene-django-cruddals.readthedocs.io/en/latest/?badge=latest)
![CRUDDALS Gif](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExem14OGIwMXU5c3h0NTlndnp5M2t6dWc1aGZsY2s3YWZ0cGtzNmRmNCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/lRweacGyr3Q9n48duZ/giphy.gif)
**[Docs](https://graphene-django-cruddals.readthedocs.io/en/latest/)**
<sub>Built with β€οΈ by [Juan J Cardona](https://github.com/juanjcardona13) and [contributors](https://github.com/juanjcardona13/graphene_django_cruddals/graphs/contributors)
</sub>
</div>
## π Table of Contents
1. π [Getting started](#getting-started)
2. π©βπ» [Usage](#usage)
3. π [Features](#features)
4. π [Documentation](#documentation)
5. π [License](#license)
6. β€οΈ [Contributing](#contributing)
7. π [Contact](#contact)
8. π [Acknowledgements](#acknowledgements)
9. πΊοΈ [Roadmap](#roadmap)
## <a name="getting-started">π Getting started</a>
### Prerequisites
To install this project you need to have a Django project already set up. If you don't have one, you can follow the [official Django tutorial](https://docs.djangoproject.com/en/3.2/intro/tutorial01/).
### Installation
You can install this package using pip:
```bash
pip install graphene-django-cruddals
```
## <a name="usage">π©βπ» Usage</a>
To use it, simply create a new class that inherits "`DjangoModelCruddals`"
Suppose we have the following models.
```python
from django.db import models
class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')
class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)
```
Then we can create a complete CRUD+DALS for the models `Question` with the following code
```python
class CruddalsQuestion(DjangoModelCruddals):
class Meta:
model = Question
```
Now you can use the `schema` that was generated for you,
```python
schema = CruddalsQuestion.Schema
```
or use in your existing schema root `Query` and `Mutation`
```python
class Query(
# ... your others queries
CruddalsQuestion.Query,
graphene.ObjectType,
):
pass
class Mutation(
# ... your others mutations
CruddalsQuestion.Mutation,
graphene.ObjectType,
):
pass
schema = graphene.Schema( query=Query, mutation=Mutation, )
```
your schema will have the following queries and mutations
<details>
<summary>Click to see the generated schema</summary>
```graphql
# Queries
type Query {
readQuestion(where: FilterQuestionInput!): QuestionType
searchQuestions(where: FilterQuestionInput, orderBy: OrderByQuestionInput, paginated: PaginationConfigInput): QuestionPaginatedType
listQuestions: [QuestionType!]
}
# Mutations
type Mutation {
createQuestions(input: [CreateQuestionInput!]): CreateQuestionsPayload
updateQuestions(input: [UpdateQuestionInput!]): UpdateQuestionsPayload
activateQuestions(where: FilterQuestionInput!): ActivateQuestionsPayload
deactivateQuestions(where: FilterQuestionInput!): DeactivateQuestionsPayload
deleteQuestions(where: FilterQuestionInput!): DeleteQuestionsPayload
}
# Inputs
# - From the model: Question
input CreateQuestionInput {
questionText: String!
pubDate: DateTime!
}
input UpdateQuestionInput {
id: ID!
questionText: String
pubDate: DateTime
}
input FilterQuestionInput {
id: IDFilter
questionText: StringFilter
pubDate: DateTimeFilter
AND: [FilterQuestionInput]
OR: [FilterQuestionInput]
NOT: FilterQuestionInput
}
input OrderByQuestionInput {
id: OrderEnum
questionText: OrderStringEnum
pubDate: OrderEnum
}
# - Filters
input IDFilter {
exact: ID
iexact: ID
gt: ID
gte: ID
lt: ID
lte: ID
in: [ID]
contains: ID
icontains: ID
startswith: ID
istartswith: ID
endswith: ID
iendswith: ID
range: [ID]
isnull: Boolean
regex: String
iregex: String
containedBy: ID
}
input StringFilter {
exact: String
iexact: String
gt: String
gte: String
lt: String
lte: String
in: [String]
contains: String
icontains: String
startswith: String
istartswith: String
endswith: String
iendswith: String
range: [String]
isnull: Boolean
regex: String
iregex: String
}
input DateTimeFilter {
exact: DateTime
iexact: DateTime
gt: DateTime
gte: DateTime
lt: DateTime
lte: DateTime
in: [DateTime]
contains: DateTime
icontains: DateTime
startswith: DateTime
istartswith: DateTime
endswith: DateTime
iendswith: DateTime
range: [DateTime]
isnull: Boolean
regex: String
iregex: String
year: DateTime
month: DateTime
day: DateTime
weekDay: DateTime
isoWeekDay: DateTime
week: DateTime
isoYear: DateTime
quarter: DateTime
containedBy: DateTime
hour: DateTime
minute: DateTime
second: DateTime
date: DateTime
time: DateTime
}
# - Pagination
input PaginationConfigInput {
page: Int = 1
itemsPerPage: IntOrAll = "All"
}
# Types
# - From the model: Question
type QuestionType {
id: ID
questionText: String!
pubDate: DateTime!
}
type QuestionPaginatedType implements PaginationInterface {
total: Int
page: Int
pages: Int
hasNext: Boolean
hasPrev: Boolean
indexStart: Int
indexEnd: Int
objects: [QuestionType!]
}
# - Payload the mutations
type CreateQuestionsPayload {
objects: [QuestionType]
errorsReport: [ErrorCollectionType]
}
type UpdateQuestionsPayload {
objects: [QuestionType]
errorsReport: [ErrorCollectionType]
}
type ActivateQuestionsPayload {
objects: [QuestionType]
errorsReport: [ErrorCollectionType]
}
type DeactivateQuestionsPayload {
objects: [QuestionType]
errorsReport: [ErrorCollectionType]
}
type DeleteQuestionsPayload {
objects: [QuestionType]
errorsReport: [ErrorCollectionType]
success: Boolean
}
# - Error
type ErrorCollectionType {
objectPosition: String
errors: [ErrorType]
}
type ErrorType {
field: String!
messages: [String!]!
}
# Interfaces
interface PaginationInterface {
total: Int
page: Int
pages: Int
hasNext: Boolean
hasPrev: Boolean
indexStart: Int
indexEnd: Int
}
# Scalars
"""
The `DateTime` scalar type represents a DateTime
value as specified by
[iso8601](https://en.wikipedia.org/wiki/ISO_8601).
"""
scalar DateTime
"""The page size can be int or 'All'"""
scalar IntOrAll
# Enums
enum OrderEnum {
ASC
DESC
}
enum OrderStringEnum {
ASC
DESC
IASC
IDESC
}
```
</details>
ππ₯³ Now you can use and test in Graphiql πππ
## <a name="features">π Features</a>
| Status | Description |
| :----: | ----------- |
| β
| Done |
| γ°οΈ | In progress |
| β | Not started |
| Feature | Status | Comments |
| -----------------------------------------------------------------------| :-----------------: | :-----------------------------------: |
| Generate `ObjectType` from Django model | β
| Pending for documentation |
| Generate `InputObjectType` from Django model | β
| Pending for documentation |
| Generate `Fields` from Django model | β
| Pending for documentation |
| Generate `InputFields` from Django model | β
| Pending for documentation |
| Generate `Arguments` from Django model | β
| Pending for documentation |
| Generate `Mutations` from Django model | β
| Pending for documentation |
| Generate `Queries` from Django model | β
| Pending for documentation |
| Generate `resolvers` from Django model | β
| Pending for documentation |
| Generate `Create` operation for a Django model | β
| Pending for documentation |
| Generate `Read` operation for a Django model | β
| Pending for documentation |
| Generate `Update` operation for a Django model | β
| Pending for documentation |
| Generate `Delete` operation for a Django model | β
| Pending for documentation |
| Generate `Deactivate` operation for a Django model | β
| Pending for documentation |
| Generate `Activate` operation for a Django model | β
| Pending for documentation |
| Generate `List` operation for a Django model | β
| Pending for documentation |
| Generate `Search` operation for a Django model | β
| Pending for documentation |
| Generate each operation, all to be performed `massively` | β
| Pending for documentation |
| Handle `null` and `blank` attribute of Django model | β
| Pending for documentation |
| Handle `editable` attribute of Django model | β
| Pending for documentation |
| Handle `help_text` attribute of Django model | β
| Pending for documentation |
| Handle `default` attribute of Django model | β
| Pending for documentation |
| Handle `choices` attribute of Django model | β
| Pending for documentation |
| Handle `OneToOneField` field of Django model | β
| Pending for documentation |
| Handle `OneToOneRel` field of Django model | β
| Pending for documentation |
| Handle `ManyToManyField` field of Django model | β
| Pending for documentation |
| Handle `ManyToManyRel` field of Django model | β
| Pending for documentation |
| Handle `ForeignKey` field of Django model | β
| Pending for documentation |
| Handle `ManyToOneRel` field of Django model | β
| Pending for documentation |
| Handle `GenericForeignKey` field of Django model | β
| Pending for documentation |
| Handle `GenericRel` field of Django model | β
| Pending for documentation |
| Handle `FileField` and `ImageField` fields of Django Model | β
| Pending for documentation |
| Handle `JSONField` field of Django model | β
| Pending for documentation |
| Allowing nested mutations at any depth level | β
| Pending for documentation |
| Allowing nested queries at any depth level | β
| Pending for documentation |
| Handle pagination of query results | β
| Pending for documentation |
| Handle sorting of query results | β
| Pending for documentation |
| Handle advanced search | β
| Pending for documentation |
| Handle advanced search with `AND` operator | β
| Pending for documentation |
| Handle advanced search with `OR` operator | β
| Pending for documentation |
| Handle advanced search with `NOT` operator | β
| Pending for documentation |
| Handle advanced search with `relational fields` operator | β
| Pending for documentation |
| Providing a friendly and comprehensive list of errors | β
| Pending for documentation |
| Allow use the ObjectTypes generated from the models | β
| Pending for documentation |
| Allow customizing the `ObjectType` generated by CRUDDALS | β
| Pending for documentation |
| Allow customizing the `InputObjectType` generated by CRUDDALS | β
| Pending for documentation |
| Allow customizing the `Fields` generated by CRUDDALS | β
| Pending for documentation |
| Allow customizing the `InputFields` generated by CRUDDALS | β
| Pending for documentation |
| Allow customizing the `Arguments` generated by CRUDDALS | β
| Pending for documentation |
| Allow customizing the `Mutations` generated by CRUDDALS | β
| Pending for documentation |
| Allow customizing the `Queries` generated by CRUDDALS | β
| Pending for documentation |
| Allow customizing the `resolvers` generated by CRUDDALS | β
| Pending for documentation |
| Generate all operations at the `model`, `app`, or `project` **level** | β
| Pending for documentation |
| Files for consuming the GraphQL API with any JavaScript client | β
| Pending for documentation |
| File with the queries and mutations for with GraphiQL | β
| Pending for documentation |
| File with the entire GraphQL schema generated | β
| Pending for documentation |
| Handle transactions in mutations | β | Pending for documentation |
| Handle directives in queries and mutations | β | Pending for documentation |
| Handle subscriptions | β | Pending for documentation |
| Optimized queries and mutations | β | Pending for documentation |
| Generate Types for TypeScript | β | Pending for documentation |
| Generate validators for Zod, Yup, others | β | Pending for documentation |
## <a name="documentation">π Documentation</a>
You can find the full documentation [here](https://graphene-django-cruddals.readthedocs.io/en/latest/), please keep in mind that this is a work in progress.
## <a name="license">π License</a>
Distributed under the MIT License. See [LICENSE](https://github.com/juanjcardona13/graphene_django_cruddals/blob/main/LICENSE) for more information.
## <a name="contributing">β€οΈ Contributing</a>
Contributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. For more information, please read the [CONTRIBUTING.md](https://github.com/juanjcardona13/graphene_django_cruddals/blob/main/CONTRIBUTING.md)
## <a name="contact">π Contact</a>
- [Email](mailto:juanjcardona13@gmail.com)
- [LinkedIn](https://www.linkedin.com/in/juanjcardona/)
- [GitHub](https://github.com/juanjcardona13)
## <a name="acknowledgements">π Acknowledgements</a>
- [Python](https://www.python.org/)
- [Django](https://www.djangoproject.com/)
- [Graphene Django](https://docs.graphene-python.org/projects/django/en/latest/)
- [Graphene Django CRUD](https://github.com/djipidi/graphene_django_crud)
- [Readme Template 1](https://www.makeareadme.com)
- [Readme Template 2](https://gist.github.com/PurpleBooth/109311bb0361f32d87a2)
- and many others
## <a name="roadmap">πΊοΈ Roadmap</a>
- [ ] Finish documentation
- [ ] Add more examples
- [ ] Add more features
- [x] Add tests
- [ ] Add localization
- [ ] Add SEO
- [ ] Add analytics
- [ ] Make social marketing
- [ ] Add monitoring
- [ ] Add logging
- [ ] Add CI/CD
- [ ] Add collaboration
- [ ] Add communication
- [ ] Add networking
Raw data
{
"_id": null,
"home_page": "https://github.com/juanjcardona13/graphene_django_cruddals",
"name": "graphene-django-cruddals",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "api graphql crud graphene graphene-django cruddals",
"author": "Juan J Cardona",
"author_email": "juanjcardona13@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/03/c9/905c099241bece7ad50e17377223b9b8dab75181c15768885248b6d7a7a6/graphene_django_cruddals-0.1.4.tar.gz",
"platform": "any",
"description": "\n\n<h1 align=\"center\">Graphene-Django-CRUDDALS</h1>\n<div align=\"center\">\n\n\ud83d\udc69\ud83c\udffd\u200d\ud83d\udcbb \ud83d\ude80 \ud83d\udc68\ud83c\udffd\u200d\ud83d\udcbb \n**Framework for trivial code, easy and fast to learn and use.** \nTurn your Django-models into a complete GraphQL API with all CRUD operations \n\n[![PyPI](https://img.shields.io/pypi/v/graphene-django-cruddals?style=flat-&color=00559c&label=pypi&logo=python&logoColor=white)](https://pypi.org/project/graphene-django-cruddals/)\n[![GitHub License](https://img.shields.io/github/license/juanjcardona13/graphene_django_cruddals?color=4c1)](https://github.com/juanjcardona13/graphene_django_cruddals/blob/main/LICENSE)\n[![Codecov](https://img.shields.io/codecov/c/gh/juanjcardona13/graphene_django_cruddals)](https://app.codecov.io/gh/juanjcardona13/graphene_django_cruddals)\n[![Documentation Status](https://readthedocs.org/projects/graphene-django-cruddals/badge/?version=latest)](https://graphene-django-cruddals.readthedocs.io/en/latest/?badge=latest)\n\n![CRUDDALS Gif](https://media.giphy.com/media/v1.Y2lkPTc5MGI3NjExem14OGIwMXU5c3h0NTlndnp5M2t6dWc1aGZsY2s3YWZ0cGtzNmRmNCZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw/lRweacGyr3Q9n48duZ/giphy.gif) \n\n**[Docs](https://graphene-django-cruddals.readthedocs.io/en/latest/)**\n\n<sub>Built with \u2764\ufe0e by [Juan J Cardona](https://github.com/juanjcardona13) and [contributors](https://github.com/juanjcardona13/graphene_django_cruddals/graphs/contributors) \n</sub>\n\n\n</div>\n\n## \ud83d\udccb Table of Contents\n\n1. \ud83d\ude80 [Getting started](#getting-started)\n2. \ud83d\udc69\u200d\ud83d\udcbb [Usage](#usage)\n3. \ud83c\udf81 [Features](#features)\n4. \ud83d\udcda [Documentation](#documentation)\n5. \ud83d\udcdc [License](#license)\n6. \u2764\ufe0f [Contributing](#contributing)\n7. \ud83d\udcde [Contact](#contact)\n8. \ud83d\ude4f [Acknowledgements](#acknowledgements)\n9. \ud83d\uddfa\ufe0f [Roadmap](#roadmap)\n\n\n## <a name=\"getting-started\">\ud83d\ude80 Getting started</a>\n\n### Prerequisites\n\nTo install this project you need to have a Django project already set up. If you don't have one, you can follow the [official Django tutorial](https://docs.djangoproject.com/en/3.2/intro/tutorial01/).\n\n### Installation\n\nYou can install this package using pip:\n\n```bash\npip install graphene-django-cruddals\n```\n\n## <a name=\"usage\">\ud83d\udc69\u200d\ud83d\udcbb Usage</a> \n\nTo use it, simply create a new class that inherits \"`DjangoModelCruddals`\"\nSuppose we have the following models.\n\n```python\nfrom django.db import models\n\n\nclass Question(models.Model):\n question_text = models.CharField(max_length=200)\n pub_date = models.DateTimeField('date published')\n\n\nclass Choice(models.Model):\n question = models.ForeignKey(Question, on_delete=models.CASCADE)\n choice_text = models.CharField(max_length=200)\n votes = models.IntegerField(default=0)\n```\n\nThen we can create a complete CRUD+DALS for the models `Question` with the following code\n\n```python\nclass CruddalsQuestion(DjangoModelCruddals):\n class Meta:\n model = Question\n```\n\nNow you can use the `schema` that was generated for you,\n\n```python\nschema = CruddalsQuestion.Schema\n```\n\nor use in your existing schema root `Query` and `Mutation`\n\n```python\nclass Query(\n # ... your others queries\n CruddalsQuestion.Query,\n graphene.ObjectType,\n):\n pass\n\n\nclass Mutation(\n # ... your others mutations\n CruddalsQuestion.Mutation,\n graphene.ObjectType,\n):\n pass\n\n\nschema = graphene.Schema( query=Query, mutation=Mutation, )\n```\n\nyour schema will have the following queries and mutations\n\n<details>\n<summary>Click to see the generated schema</summary>\n\n```graphql\n# Queries\ntype Query {\n readQuestion(where: FilterQuestionInput!): QuestionType\n searchQuestions(where: FilterQuestionInput, orderBy: OrderByQuestionInput, paginated: PaginationConfigInput): QuestionPaginatedType\n listQuestions: [QuestionType!]\n}\n\n# Mutations\ntype Mutation {\n createQuestions(input: [CreateQuestionInput!]): CreateQuestionsPayload\n updateQuestions(input: [UpdateQuestionInput!]): UpdateQuestionsPayload\n activateQuestions(where: FilterQuestionInput!): ActivateQuestionsPayload\n deactivateQuestions(where: FilterQuestionInput!): DeactivateQuestionsPayload\n deleteQuestions(where: FilterQuestionInput!): DeleteQuestionsPayload\n}\n\n\n# Inputs\n# - From the model: Question\ninput CreateQuestionInput {\n questionText: String!\n pubDate: DateTime!\n}\ninput UpdateQuestionInput {\n id: ID!\n questionText: String\n pubDate: DateTime\n}\ninput FilterQuestionInput {\n id: IDFilter\n questionText: StringFilter\n pubDate: DateTimeFilter\n AND: [FilterQuestionInput]\n OR: [FilterQuestionInput]\n NOT: FilterQuestionInput\n}\ninput OrderByQuestionInput {\n id: OrderEnum\n questionText: OrderStringEnum\n pubDate: OrderEnum\n}\n# - Filters\ninput IDFilter {\n exact: ID\n iexact: ID\n gt: ID\n gte: ID\n lt: ID\n lte: ID\n in: [ID]\n contains: ID\n icontains: ID\n startswith: ID\n istartswith: ID\n endswith: ID\n iendswith: ID\n range: [ID]\n isnull: Boolean\n regex: String\n iregex: String\n containedBy: ID\n}\ninput StringFilter {\n exact: String\n iexact: String\n gt: String\n gte: String\n lt: String\n lte: String\n in: [String]\n contains: String\n icontains: String\n startswith: String\n istartswith: String\n endswith: String\n iendswith: String\n range: [String]\n isnull: Boolean\n regex: String\n iregex: String\n}\ninput DateTimeFilter {\n exact: DateTime\n iexact: DateTime\n gt: DateTime\n gte: DateTime\n lt: DateTime\n lte: DateTime\n in: [DateTime]\n contains: DateTime\n icontains: DateTime\n startswith: DateTime\n istartswith: DateTime\n endswith: DateTime\n iendswith: DateTime\n range: [DateTime]\n isnull: Boolean\n regex: String\n iregex: String\n year: DateTime\n month: DateTime\n day: DateTime\n weekDay: DateTime\n isoWeekDay: DateTime\n week: DateTime\n isoYear: DateTime\n quarter: DateTime\n containedBy: DateTime\n hour: DateTime\n minute: DateTime\n second: DateTime\n date: DateTime\n time: DateTime\n}\n# - Pagination\ninput PaginationConfigInput {\n page: Int = 1\n itemsPerPage: IntOrAll = \"All\"\n}\n\n\n\n# Types\n# - From the model: Question\ntype QuestionType {\n id: ID\n questionText: String!\n pubDate: DateTime!\n}\ntype QuestionPaginatedType implements PaginationInterface {\n total: Int\n page: Int\n pages: Int\n hasNext: Boolean\n hasPrev: Boolean\n indexStart: Int\n indexEnd: Int\n objects: [QuestionType!]\n}\n# - Payload the mutations\ntype CreateQuestionsPayload {\n objects: [QuestionType]\n errorsReport: [ErrorCollectionType]\n}\ntype UpdateQuestionsPayload {\n objects: [QuestionType]\n errorsReport: [ErrorCollectionType]\n}\ntype ActivateQuestionsPayload {\n objects: [QuestionType]\n errorsReport: [ErrorCollectionType]\n}\ntype DeactivateQuestionsPayload {\n objects: [QuestionType]\n errorsReport: [ErrorCollectionType]\n}\ntype DeleteQuestionsPayload {\n objects: [QuestionType]\n errorsReport: [ErrorCollectionType]\n success: Boolean\n}\n# - Error\ntype ErrorCollectionType {\n objectPosition: String\n errors: [ErrorType]\n}\ntype ErrorType {\n field: String!\n messages: [String!]!\n}\n\n\n\n# Interfaces\n\ninterface PaginationInterface {\n total: Int\n page: Int\n pages: Int\n hasNext: Boolean\n hasPrev: Boolean\n indexStart: Int\n indexEnd: Int\n}\n\n\n# Scalars\n\n\"\"\"\nThe `DateTime` scalar type represents a DateTime\nvalue as specified by\n[iso8601](https://en.wikipedia.org/wiki/ISO_8601).\n\"\"\"\nscalar DateTime\n\"\"\"The page size can be int or 'All'\"\"\"\nscalar IntOrAll\n\n\n# Enums\nenum OrderEnum {\n ASC\n DESC\n}\n\nenum OrderStringEnum {\n ASC\n DESC\n IASC\n IDESC\n}\n\n```\n\n</details> \n\n\ud83c\udf89\ud83e\udd73 Now you can use and test in Graphiql \ud83d\ude80\ud83d\ude80\ud83d\ude80 \n\n## <a name=\"features\">\ud83c\udf81 Features</a>\n\n| Status | Description |\n| :----: | ----------- |\n| \u2705 | Done |\n| \u3030\ufe0f | In progress |\n| \u274c | Not started |\n\n\n\n| Feature | Status | Comments |\n| -----------------------------------------------------------------------| :-----------------: | :-----------------------------------: |\n| Generate `ObjectType` from Django model | \u2705 | Pending for documentation |\n| Generate `InputObjectType` from Django model | \u2705 | Pending for documentation |\n| Generate `Fields` from Django model | \u2705 | Pending for documentation |\n| Generate `InputFields` from Django model | \u2705 | Pending for documentation |\n| Generate `Arguments` from Django model | \u2705 | Pending for documentation |\n| Generate `Mutations` from Django model | \u2705 | Pending for documentation |\n| Generate `Queries` from Django model | \u2705 | Pending for documentation |\n| Generate `resolvers` from Django model | \u2705 | Pending for documentation |\n| Generate `Create` operation for a Django model | \u2705 | Pending for documentation |\n| Generate `Read` operation for a Django model | \u2705 | Pending for documentation |\n| Generate `Update` operation for a Django model | \u2705 | Pending for documentation |\n| Generate `Delete` operation for a Django model | \u2705 | Pending for documentation |\n| Generate `Deactivate` operation for a Django model | \u2705 | Pending for documentation |\n| Generate `Activate` operation for a Django model | \u2705 | Pending for documentation |\n| Generate `List` operation for a Django model | \u2705 | Pending for documentation |\n| Generate `Search` operation for a Django model | \u2705 | Pending for documentation |\n| Generate each operation, all to be performed `massively` | \u2705 | Pending for documentation |\n| Handle `null` and `blank` attribute of Django model | \u2705 | Pending for documentation |\n| Handle `editable` attribute of Django model | \u2705 | Pending for documentation |\n| Handle `help_text` attribute of Django model | \u2705 | Pending for documentation |\n| Handle `default` attribute of Django model | \u2705 | Pending for documentation |\n| Handle `choices` attribute of Django model | \u2705 | Pending for documentation |\n| Handle `OneToOneField` field of Django model | \u2705 | Pending for documentation |\n| Handle `OneToOneRel` field of Django model | \u2705 | Pending for documentation |\n| Handle `ManyToManyField` field of Django model | \u2705 | Pending for documentation |\n| Handle `ManyToManyRel` field of Django model | \u2705 | Pending for documentation |\n| Handle `ForeignKey` field of Django model | \u2705 | Pending for documentation |\n| Handle `ManyToOneRel` field of Django model | \u2705 | Pending for documentation |\n| Handle `GenericForeignKey` field of Django model | \u2705 | Pending for documentation |\n| Handle `GenericRel` field of Django model | \u2705 | Pending for documentation |\n| Handle `FileField` and `ImageField` fields of Django Model | \u2705 | Pending for documentation |\n| Handle `JSONField` field of Django model | \u2705 | Pending for documentation |\n| Allowing nested mutations at any depth level | \u2705 | Pending for documentation |\n| Allowing nested queries at any depth level | \u2705 | Pending for documentation |\n| Handle pagination of query results | \u2705 | Pending for documentation |\n| Handle sorting of query results | \u2705 | Pending for documentation |\n| Handle advanced search | \u2705 | Pending for documentation |\n| Handle advanced search with `AND` operator | \u2705 | Pending for documentation |\n| Handle advanced search with `OR` operator | \u2705 | Pending for documentation |\n| Handle advanced search with `NOT` operator | \u2705 | Pending for documentation |\n| Handle advanced search with `relational fields` operator | \u2705 | Pending for documentation |\n| Providing a friendly and comprehensive list of errors | \u2705 | Pending for documentation |\n| Allow use the ObjectTypes generated from the models | \u2705 | Pending for documentation |\n| Allow customizing the `ObjectType` generated by CRUDDALS | \u2705 | Pending for documentation |\n| Allow customizing the `InputObjectType` generated by CRUDDALS | \u2705 | Pending for documentation |\n| Allow customizing the `Fields` generated by CRUDDALS | \u2705 | Pending for documentation |\n| Allow customizing the `InputFields` generated by CRUDDALS | \u2705 | Pending for documentation |\n| Allow customizing the `Arguments` generated by CRUDDALS | \u2705 | Pending for documentation |\n| Allow customizing the `Mutations` generated by CRUDDALS | \u2705 | Pending for documentation |\n| Allow customizing the `Queries` generated by CRUDDALS | \u2705 | Pending for documentation |\n| Allow customizing the `resolvers` generated by CRUDDALS | \u2705 | Pending for documentation |\n| Generate all operations at the `model`, `app`, or `project` **level** | \u2705 | Pending for documentation |\n| Files for consuming the GraphQL API with any JavaScript client | \u2705 | Pending for documentation |\n| File with the queries and mutations for with GraphiQL | \u2705 | Pending for documentation |\n| File with the entire GraphQL schema generated | \u2705 | Pending for documentation |\n| Handle transactions in mutations | \u274c | Pending for documentation |\n| Handle directives in queries and mutations | \u274c | Pending for documentation |\n| Handle subscriptions | \u274c | Pending for documentation |\n| Optimized queries and mutations | \u274c | Pending for documentation |\n| Generate Types for TypeScript | \u274c | Pending for documentation |\n| Generate validators for Zod, Yup, others | \u274c | Pending for documentation |\n\n\n\n\n\n\n\n## <a name=\"documentation\">\ud83d\udcda Documentation</a>\n\nYou can find the full documentation [here](https://graphene-django-cruddals.readthedocs.io/en/latest/), please keep in mind that this is a work in progress.\n\n## <a name=\"license\">\ud83d\udcdc License</a>\n\nDistributed under the MIT License. See [LICENSE](https://github.com/juanjcardona13/graphene_django_cruddals/blob/main/LICENSE) for more information.\n\n## <a name=\"contributing\">\u2764\ufe0f Contributing</a>\n\nContributions are what make the open-source community such an amazing place to learn, inspire, and create. Any contributions you make are **greatly appreciated**. For more information, please read the [CONTRIBUTING.md](https://github.com/juanjcardona13/graphene_django_cruddals/blob/main/CONTRIBUTING.md) \n\n## <a name=\"contact\">\ud83d\udcde Contact</a>\n\n- [Email](mailto:juanjcardona13@gmail.com)\n- [LinkedIn](https://www.linkedin.com/in/juanjcardona/)\n- [GitHub](https://github.com/juanjcardona13)\n\n## <a name=\"acknowledgements\">\ud83d\ude4f Acknowledgements</a>\n\n- [Python](https://www.python.org/)\n- [Django](https://www.djangoproject.com/)\n- [Graphene Django](https://docs.graphene-python.org/projects/django/en/latest/)\n- [Graphene Django CRUD](https://github.com/djipidi/graphene_django_crud)\n- [Readme Template 1](https://www.makeareadme.com)\n- [Readme Template 2](https://gist.github.com/PurpleBooth/109311bb0361f32d87a2)\n- and many others \n\n## <a name=\"roadmap\">\ud83d\uddfa\ufe0f Roadmap</a>\n\n- [ ] Finish documentation\n- [ ] Add more examples\n- [ ] Add more features\n- [x] Add tests\n- [ ] Add localization\n- [ ] Add SEO\n- [ ] Add analytics\n- [ ] Make social marketing\n- [ ] Add monitoring\n- [ ] Add logging\n- [ ] Add CI/CD\n- [ ] Add collaboration\n- [ ] Add communication\n- [ ] Add networking\n",
"bugtrack_url": null,
"license": "Apache 2.0",
"summary": "Framework for trivial code, Easy and Fast for learn, Easy and Fast for use",
"version": "0.1.4",
"project_urls": {
"Homepage": "https://github.com/juanjcardona13/graphene_django_cruddals"
},
"split_keywords": [
"api",
"graphql",
"crud",
"graphene",
"graphene-django",
"cruddals"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "7fbfe23a4998dd09e45bb1dcfd2c622b871925c84d0a5ec0c346eae9ec29453f",
"md5": "e59a2255901c2937bc47eda40188b580",
"sha256": "2eec3be36e1c071069260682c741adf9eb456f35382daf21a351805f016a2ee9"
},
"downloads": -1,
"filename": "graphene_django_cruddals-0.1.4-py3-none-any.whl",
"has_sig": false,
"md5_digest": "e59a2255901c2937bc47eda40188b580",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 48522,
"upload_time": "2024-07-20T12:36:15",
"upload_time_iso_8601": "2024-07-20T12:36:15.909981Z",
"url": "https://files.pythonhosted.org/packages/7f/bf/e23a4998dd09e45bb1dcfd2c622b871925c84d0a5ec0c346eae9ec29453f/graphene_django_cruddals-0.1.4-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "03c9905c099241bece7ad50e17377223b9b8dab75181c15768885248b6d7a7a6",
"md5": "779cd17d6c8b874124e14654fd5f898f",
"sha256": "a2a4a5bba25af70369fc36797d6b7317a5217c8e52e7f4372cc214b88e7ae229"
},
"downloads": -1,
"filename": "graphene_django_cruddals-0.1.4.tar.gz",
"has_sig": false,
"md5_digest": "779cd17d6c8b874124e14654fd5f898f",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 45428,
"upload_time": "2024-07-20T12:36:17",
"upload_time_iso_8601": "2024-07-20T12:36:17.415320Z",
"url": "https://files.pythonhosted.org/packages/03/c9/905c099241bece7ad50e17377223b9b8dab75181c15768885248b6d7a7a6/graphene_django_cruddals-0.1.4.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-07-20 12:36:17",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "juanjcardona13",
"github_project": "graphene_django_cruddals",
"travis_ci": false,
"coveralls": true,
"github_actions": true,
"tox": true,
"lcname": "graphene-django-cruddals"
}