Skip to main content

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

PyPI GitHub License

CRUDDALS Gif

Docs

Built with ❤︎ by Juan J Cardona and contributors

📋 Table of Contents

  1. 🚀 Getting started
  2. 👩‍💻 Usage
  3. 🎁 Features
  4. 📚 Documentation
  5. 📜 License
  6. ❤️ Contributing
  7. 📞 Contact
  8. 🙏 Acknowledgements
  9. 🗺️ 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 "CruddalsModel" 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(CruddalsModel):
    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
  indexStartObj: Int
  indexEndObj: 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
  indexStartObj: Int
  indexEndObj: 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

🗺️ 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

graphene_django_cruddals-0.1.2.tar.gz (54.6 kB view hashes)

Uploaded Source

Built Distribution

graphene_django_cruddals-0.1.2-py3-none-any.whl (60.6 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page