Framework for trivial code, Easy and Fast for learn, Easy and Fast for use
Project description
Graphene-Django-CRUDDALS
๐ฉ๐ฝโ๐ป ๐ ๐จ๐ฝโ๐ป
Framework for trivial code, easy and fast to learn and use.
Turn your Django-models into a complete GraphQL API with all CRUD operations
Built with โค๏ธ by Juan J Cardona and contributors
๐ Table of Contents
- ๐ Getting started
- ๐ฉโ๐ป Usage
- ๐ Features
- ๐ Documentation
- ๐ License
- โค๏ธ Contributing
- ๐ Contact
- ๐ Acknowledgements
- ๐บ๏ธ Roadmap
๐ Getting started
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.
Installation
You can install this package using pip:
pip install graphene-django-cruddals
๐ฉโ๐ป Usage
To use it, simply create a new class that inherits "DjangoModelCruddals
"
Suppose we have the following models.
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
class CruddalsQuestion(DjangoModelCruddals):
class Meta:
model = Question
Now you can use the schema
that was generated for you,
schema = CruddalsQuestion.Schema
or use in your existing schema root Query
and Mutation
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
Click to see the generated schema
# 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
}
๐๐ฅณ Now you can use and test in Graphiql ๐๐๐
๐ Features
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 |
๐ Documentation
You can find the full documentation here, please keep in mind that this is a work in progress.
๐ License
Distributed under the MIT License. See LICENSE for more information.
โค๏ธ Contributing
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
๐ Contact
๐ Acknowledgements
- Python
- Django
- Graphene Django
- Graphene Django CRUD
- Readme Template 1
- Readme Template 2
- and many others
๐บ๏ธ Roadmap
- Finish documentation
- Add more examples
- Add more features
- Add tests
- Add localization
- Add SEO
- Add analytics
- Make social marketing
- Add monitoring
- Add logging
- Add CI/CD
- Add collaboration
- Add communication
- Add networking
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file graphene_django_cruddals-0.1.4.tar.gz
.
File metadata
- Download URL: graphene_django_cruddals-0.1.4.tar.gz
- Upload date:
- Size: 45.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a2a4a5bba25af70369fc36797d6b7317a5217c8e52e7f4372cc214b88e7ae229 |
|
MD5 | 779cd17d6c8b874124e14654fd5f898f |
|
BLAKE2b-256 | 03c9905c099241bece7ad50e17377223b9b8dab75181c15768885248b6d7a7a6 |
File details
Details for the file graphene_django_cruddals-0.1.4-py3-none-any.whl
.
File metadata
- Download URL: graphene_django_cruddals-0.1.4-py3-none-any.whl
- Upload date:
- Size: 48.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2eec3be36e1c071069260682c741adf9eb456f35382daf21a351805f016a2ee9 |
|
MD5 | e59a2255901c2937bc47eda40188b580 |
|
BLAKE2b-256 | 7fbfe23a4998dd09e45bb1dcfd2c622b871925c84d0a5ec0c346eae9ec29453f |