Graphene MongoEngine integration

Overview

Build Status Coverage Status Documentation Status PyPI version PyPI pyversions Downloads

Graphene-Mongo

A Mongoengine integration for Graphene.

Installation

For installing graphene-mongo, just run this command in your shell

pip install graphene-mongo

Examples

Here is a simple Mongoengine model as models.py:

from mongoengine import Document
from mongoengine.fields import StringField

class User(Document):
    meta = {'collection': 'user'}
    first_name = StringField(required=True)
    last_name = StringField(required=True)

To create a GraphQL schema for it you simply have to write the following:

import graphene

from graphene_mongo import MongoengineObjectType

from .models import User as UserModel

class User(MongoengineObjectType):
    class Meta:
        model = UserModel

class Query(graphene.ObjectType):
    users = graphene.List(User)
    
    def resolve_users(self, info):
    	return list(UserModel.objects.all())

schema = graphene.Schema(query=Query)

Then you can simply query the schema:

query = '''
    query {
        users {
            firstName,
            lastName
        }
    }
'''
result = schema.execute(query)

To learn more check out the following examples:

Contributing

After cloning this repo, ensure dependencies are installed by running:

pip install -r requirements.txt

After developing, the full test suite can be evaluated by running:

make test
Comments
  • Support for cursor based pagination

    Support for cursor based pagination

    Hi,

    how can I use cursor based pagination (page=page, per_page=...) with your library ? I can't modify the mongo request using something like this:

    def resolve_users(self, info):
        	return list(UserModel.objects.find({...}).sort(...).limit(limit))
    

    because then I get 'QuerySet' object has no attribute 'find'

    Please provide information regarding this functionality or implement this feature.

    opened by mpgalaxy 8
  • Improve extensibility around DB querying in MongoengineConnectionField

    Improve extensibility around DB querying in MongoengineConnectionField

    In MongoengineConnectionField, the get_query method gatekeeps a pretty critical aspect of the field (namely manipulating args that go into the queryset filter call, as well as manipulating the eventual queryset itself).

    Anyone wanting to do the above (which opens up numerous possibilities in extending the field, such as advanced filtering, ordering, etc. etc.) has to re-implement the entire method in a subclass, which is far from ideal.

    This pull requests implements a couple of simple before and after hooks around the objs = objs.filter(**args) call in the method. An trivial example of usage is in tests/test_fields.py.

    Let me know if there are any comments or issues with the implementation, and I'll be happy to see what I can do.

    opened by riverfr0zen 8
  • InputObjectType fields from models

    InputObjectType fields from models

    I've used a MongoengineObjectType class to define the schema from model. There's a way to use a reference model to define a InputObjectType or AbstractType class? Something like that:

    class UserFields(graphene.AbstractType):
    	class Meta:
    		model = model.User
    
    class User(graphene.ObjectType, UserFields):
    	pass
    
    class UserInput(graphene.InputObjectType, UserFields):
    	pass
    
    
    
    good first issue wait for response 
    opened by nephew92 7
  • How to achieve filtering?

    How to achieve filtering?

    Hi,

    It would be good if graphene mongo had support for filters. For example query { allPersons(filter: { age_gt: 18 }) { firstName lastName } } Is there any other way to achieve this or fire a query like thin in graphene-mongo?

    opened by anilwarbhe 6
  • Bug in version 0.2.0 all_posts = MongoengineConnectionField(Posts)

    Bug in version 0.2.0 all_posts = MongoengineConnectionField(Posts)

    After updating graphene-mongo from 0.18 to 0.2.0, I could not get "ListField(StringField())" types in query parameter. So I revert back to 0.18. For example:

    query{ allPosts(here I can have all fields of posts collection except 'selectedtags' and 'postpics') }

    in post_model.py I have following class Posts(Document): meta = {'collection': 'posts'} categoryid = ReferenceField(Categories) cityid = ReferenceField(City) pdate = DateTimeField() content = DictField(required = True) selectedtags = ListField(StringField()) postpics = ListField(StringField()) featured = BooleanField()

    work in progress 
    opened by anilwarbhe 6
  • AttributeError: 'NoneType' object has no attribute '_type'

    AttributeError: 'NoneType' object has no attribute '_type'

    I am receiving an error node = kv[1].get_type()._type._meta AttributeError: 'NoneType' object has no attribute '_type'

    when I am using "EmbeddedDocument(LatLang)"

    class LatLng(EmbeddedDocument): lat = FloatField() lng = FloatField()

    class User(Document): email = StringField(required=True) first_name = StringField(max_length=50) last_name = StringField(max_length=50) location = EmbeddedDocumentField(LatLng)

    opened by mtech2008 6
  • Fix: Don't use negative integers to slice

    Fix: Don't use negative integers to slice

    In some version of mongoengine/mongodb, negative integers are not allowed in list slices.

    I was getting an "message": "Cursor instances do not support negative indices" in my graphQL response.

    This PR modifies the "last" method to only use positive integers

    opened by FloatingGhost 6
  • TypeError: 'List' object is not callable

    TypeError: 'List' object is not callable

    Hello, guys

    I updated graphene-mongo to 0.2.8 in my environment to make use of the new filters (#103), but I cannot for the life of me make it work with the other versions of packages I am using, namely

    Flask==1.0.2
    Flask-GraphQL==2.0.1
    flask-mongoengine==0.9.5
    graphene==2.1.3
    

    I've had to pin the packages to certain versions because of this issue with graphene and flask which I am not sure interferes here.

    I have tried multiple combinations of versions to these packages, but I either get the "backend" error mentioned in that issue or the following error:

    ImportError while loading conftest '/usr/src/code/tests/conftest.py'.
    tests/conftest.py:7: in <module>
        from commands.app import app as _app  # pylint: disable=wrong-import-order
    commands/app.py:10: in <module>
        from commands.graphql.schema import schema  # pylint: disable=wrong-import-order
    commands/graphql/schema.py:39: in <module>
        mutation=Mutation,
    /usr/local/lib/python3.7/site-packages/graphene/types/schema.py:62: in __init__
        self.build_typemap()
    /usr/local/lib/python3.7/site-packages/graphene/types/schema.py:126: in build_typemap
        initial_types, auto_camelcase=self.auto_camelcase, schema=self
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:80: in __init__
        super(TypeMap, self).__init__(types)
    /usr/local/lib/python3.7/site-packages/graphql/type/typemap.py:28: in __init__
        self.update(reduce(self.reducer, types, OrderedDict()))  # type: ignore
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:88: in reducer
        return self.graphene_reducer(map, type)
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:117: in graphene_reducer
        return GraphQLTypeMap.reducer(map, internal_type)
    /usr/local/lib/python3.7/site-packages/graphql/type/typemap.py:106: in reducer
        field_map = type.fields
    /usr/local/lib/python3.7/site-packages/graphql/pyutils/cached_property.py:22: in __get__
        value = obj.__dict__[self.func.__name__] = self.func(obj)
    /usr/local/lib/python3.7/site-packages/graphql/type/definition.py:226: in fields
        return define_field_map(self, self._fields)
    /usr/local/lib/python3.7/site-packages/graphql/type/definition.py:240: in define_field_map
        field_map = field_map()
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:274: in construct_fields_for_type
        map = self.reducer(map, field.type)
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:88: in reducer
        return self.graphene_reducer(map, type)
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:117: in graphene_reducer
        return GraphQLTypeMap.reducer(map, internal_type)
    /usr/local/lib/python3.7/site-packages/graphql/type/typemap.py:106: in reducer
        field_map = type.fields
    /usr/local/lib/python3.7/site-packages/graphql/pyutils/cached_property.py:22: in __get__
        value = obj.__dict__[self.func.__name__] = self.func(obj)
    /usr/local/lib/python3.7/site-packages/graphql/type/definition.py:226: in fields
        return define_field_map(self, self._fields)
    /usr/local/lib/python3.7/site-packages/graphql/type/definition.py:240: in define_field_map
        field_map = field_map()
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:274: in construct_fields_for_type
        map = self.reducer(map, field.type)
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:88: in reducer
        return self.graphene_reducer(map, type)
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:93: in graphene_reducer
        return self.reducer(map, type.of_type)
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:88: in reducer
        return self.graphene_reducer(map, type)
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:93: in graphene_reducer
        return self.reducer(map, type.of_type)
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:88: in reducer
        return self.graphene_reducer(map, type)
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:117: in graphene_reducer
        return GraphQLTypeMap.reducer(map, internal_type)
    /usr/local/lib/python3.7/site-packages/graphql/type/typemap.py:106: in reducer
        field_map = type.fields
    /usr/local/lib/python3.7/site-packages/graphql/pyutils/cached_property.py:22: in __get__
        value = obj.__dict__[self.func.__name__] = self.func(obj)
    /usr/local/lib/python3.7/site-packages/graphql/type/definition.py:226: in fields
        return define_field_map(self, self._fields)
    /usr/local/lib/python3.7/site-packages/graphql/type/definition.py:240: in define_field_map
        field_map = field_map()
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:274: in construct_fields_for_type
        map = self.reducer(map, field.type)
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:88: in reducer
        return self.graphene_reducer(map, type)
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:117: in graphene_reducer
        return GraphQLTypeMap.reducer(map, internal_type)
    /usr/local/lib/python3.7/site-packages/graphql/type/typemap.py:106: in reducer
        field_map = type.fields
    /usr/local/lib/python3.7/site-packages/graphql/pyutils/cached_property.py:22: in __get__
        value = obj.__dict__[self.func.__name__] = self.func(obj)
    /usr/local/lib/python3.7/site-packages/graphql/type/definition.py:226: in fields
        return define_field_map(self, self._fields)
    /usr/local/lib/python3.7/site-packages/graphql/type/definition.py:240: in define_field_map
        field_map = field_map()
    /usr/local/lib/python3.7/site-packages/graphene/types/typemap.py:285: in construct_fields_for_type
        for arg_name, arg in field.args.items():
    /usr/local/lib/python3.7/site-packages/graphene_mongo/fields.py:62: in args
        dict(dict(self.field_args, **self.reference_args), **self.filter_args)
    /usr/local/lib/python3.7/site-packages/graphene_mongo/fields.py:105: in field_args
        return self._field_args(self.fields.items())
    /usr/local/lib/python3.7/site-packages/graphene_mongo/fields.py:101: in _field_args
        return {k: get_type(v) for k, v in items if is_filterable(k)}
    /usr/local/lib/python3.7/site-packages/graphene_mongo/fields.py:101: in <dictcomp>
        return {k: get_type(v) for k, v in items if is_filterable(k)}
    /usr/local/lib/python3.7/site-packages/graphene_mongo/fields.py:98: in get_type
        return v.type.of_type()
    E   TypeError: 'List' object is not callable
    

    I tried other versions and the problem seems to have appeared in version 0.2.3 of graphene-mongo (I was using version 0.2.0 and 0.2.1 works as well).

    Have you guys seen this before? Do you know what could be the cause of it?

    Thank you in advance.

    opened by claradaia 5
  • update mutation on nested document fails

    update mutation on nested document fails

    Hi, I'm trying to update a nested document including an EmbeddedDocumentListField / EmbeddedDocument with graphene-mongo. Creating a new user via create mutation works perfectly fine, but when I try to update a nested document, it fails with the error Invalid embedded document instance provided to an EmbeddedDocumentField: ['label']

    Here is my code: models.py:

    from mongoengine import Document, EmbeddedDocumentListField, EmbeddedDocument
    from mongoengine.fields import StringField
    
    
    class UserLabel(EmbeddedDocument):
        code = StringField()
        value = StringField()
    
    
    class User(Document):
        meta = {'collection': 'user'}
        first_name = StringField(required=True)
        last_name = StringField(required=True)
        label = EmbeddedDocumentListField(UserLabel)
    

    app.py:

    from flask import Flask
    from flask_graphql import GraphQLView
    import graphene
    from graphene_mongo import MongoengineObjectType
    from mongoengine import connect
    from models import User as UserModel, UserLabel as UserLabelModel
    
    app = Flask(__name__)
    
    class UserLabel(MongoengineObjectType):
        class Meta:
            model = UserLabelModel
    
    
    class User(MongoengineObjectType):
        class Meta:
            model = UserModel
    
    
    class UserLabelInput(graphene.InputObjectType):
        code = graphene.String()
        value = graphene.String()
    
    
    class UserInput(graphene.InputObjectType):
        id = graphene.String()
        first_name = graphene.String()
        last_name = graphene.String()
        label = graphene.List(UserLabelInput, required=False)
    
    
    class Query(graphene.ObjectType):
        users = graphene.List(User)
    
        def resolve_users(self, info):
            return list(UserModel.objects.all())
    
    
    class createUser(graphene.Mutation):
        user = graphene.Field(User)
    
        class Arguments:
            user_data = UserInput()
    
        def mutate(root, info, user_data):
            user = UserModel(
                first_name=user_data.first_name,
                last_name=user_data.last_name,
                label=user_data.label
            )
            user.save()
            return createUser(user=user)
    
    
    class updateUser(graphene.Mutation):
        user = graphene.Field(User)
    
        class Arguments:
            user_data = UserInput()
    
        def mutate(self, info, user_data):
            user = UserModel.objects.get(id=user_data.id)
    
            if user_data.first_name:
                user.first_name = user_data.first_name
            if user_data.last_name:
                user.last_name = user_data.last_name
            if user_data.label:
                user.label = user_data.label
    
            user.save()
            return updateUser(user=user)
    
    
    class Mutation(graphene.ObjectType):
        create_user = createUser.Field()
        update_user = updateUser.Field()
    
    
    schema = graphene.Schema(query=Query, mutation=Mutation)
    app.add_url_rule('/graphql', view_func=GraphQLView.as_view('graphql', schema=schema, graphiql=True))
    
    if __name__ == '__main__':
        app.run(debug=True, port=1234)
    

    Trying to run this update mutation via graphiql :

    mutation {
      updateUser(userData: {
        id: "5d6f8bbbe3ec841d93229322",
        firstName: "Peter",
        lastName: "Simpson",
        label: [
          {
            code:"DE",
            value: "Peter Simpson"
          }
        ]
      }) {
        user {
          id
          firstName
          lastName
          label {
            code
            value
          }
        }
      }
    }
    

    I get the error:

    {
      "errors": [
        {
          "message": "ValidationError (User:5d6f8bbbe3ec841d93229322) (Invalid embedded document instance provided to an EmbeddedDocumentField: ['label'])",
          "locations": [
            {
              "line": 2,
              "column": 3
            }
          ],
          "path": [
            "updateUser"
          ]
        }
      ],
      "data": {
        "updateUser": null
      }
    } 
    

    Updating without the nested field works perfectly fine. How can I resolve this ?

    good first issue wait for response 
    opened by mpgalaxy 5
  • [BUG] Document subclasses are cast to parent class in query results

    [BUG] Document subclasses are cast to parent class in query results

    I know I'm missing something. Given a model with multiple document types in a collection:

    class AModel(Document):
        meta = {'allow_inheritance': True}
        a_field = StringField()
    
    class ASubModel(AModel):
        a_sub_field = StringField()
    

    I can construct a schema and query:

    class A(MongoengineObjectType):                                           
        class Meta:                                                                
            model = AModel                                                    
            interfaces = (Node,)                                                   
    
    class ASub(A):                                                      
        class Meta:                                                                
            model = ASubModel                                                
            interfaces = (Node,)
    
    class Query(graphene.ObjectType):                                              
        node = Node.Field()                                                        
        all_a = MongoengineConnectionField(A)                           
    

    If I run the allA query, I get back all the documents as expected, but I can't access ASub's fields because the returned type is A, not ASub, even though the class is identified as A.ASub. E.g.,:

    {
      "data": {
        "allA": {
          "edges": [
            {
              "node": {
                "id": "VGFyZ2V0OjVjZTVmOTMwMjRmN2NhMGJmMjZlNzZmMQ==",
                "Cls": "A.ASub",
                "__typename": "A"
              }
            }
         ]
      }
    }
    

    Attempting to resolve ASub.a_sub_field results in an error. Inline fragment doesn't work either:

    {
      "errors": [
        {
          "message": "Fragment cannot be spread here as objects of type A can never be of type ASub",
          "locations": [
            {
              "line": 8,
              "column": 9
            }
          ]
        }
      ]
    }
    

    I'm clearly doing something wrong, but I don't know what.

    wait for response 
    opened by Cerebus 5
  • Filter like mongodb find

    Filter like mongodb find

    Dear,

    Is it possible to move the following find to a GraphQL query?

    Example Mongodb: (Specifically { date_ar: { $regex: /23:55$/ } )

    ´´´

    db.collection.find( { date_ar: { $regex: /23:55$/ } } ).limit(30).sort( { $natural: -1 } ).pretty() { "_id" : ObjectId("5cb9388e87200745fba9d727"), "dm3rf" : "4240.02", "dm3pr" : "4945.75", "rdm3p" : "40.67", "unit" : "m3", "dm3" : "3813.85", "truckm" : "477", "date_ar" : "2019-04-18 23:55", "rdm3" : "1993.03", "dm3rf_p" : "86.53", "dm3_p" : "77.83", "date_utc" : "2019-04-19 02:55:10.030226" } { "_id" : ObjectId("5cb7e7118720071491f42149"), "dm3pr" : "5623.5", "date_ar" : "2019-04-17 23:55", "dm3" : "4265.61", "dm3_p" : "87.05", "rdm3" : "3986.05", "date_utc" : "2019-04-18 02:55:13.017360", "truckm" : "533", "dm3rf" : "4353.11", "dm3rf_p" : "88.84", "unit" : "m3", "rdm3p" : "81.35" } ´´´

    Example GraphQL - (I can only select a specific day and time)

    ´´´ allDaym3(dateAr: "2019-04-16 23:55") { edges { node { dm3 dm3rf rdm3 dm3pr dateAr } } } ´´´ ´´´ { "data": { "allDaym3": { "edges": [ { "node": { "dm3": "4196.06", "dm3rf": "4192.95", "rdm3": "3986.05", "dm3pr": "5695.5", "dateAr": "2019-04-16 23:55" } } ] }, ´´´

    opened by rhnux 5
  • Fixing fragment spread oversight

    Fixing fragment spread oversight

    Trying to use fragments ended up in a FragmentSpreadNode is not subscriptable error. This is because there was an oversight when updating to Graphene 3 (I think). I've updated it and added a test that should check get_query_fields.

    opened by TomReichardt 0
  • Bump waitress from 2.1.1 to 2.1.2 in /examples/falcon_mongoengine

    Bump waitress from 2.1.1 to 2.1.2 in /examples/falcon_mongoengine

    Bumps waitress from 2.1.1 to 2.1.2.

    Changelog

    Sourced from waitress's changelog.

    2.1.2

    Bugfix

    
    - When expose_tracebacks is enabled waitress would fail to properly encode
      unicode thereby causing another error during error handling. See
      https://github.com/Pylons/waitress/pull/378
    
    • Header length checking had a calculation that was done incorrectly when the data was received across multple socket reads. This calculation has been corrected, and no longer will Waitress send back a 413 Request Entity Too Large. See Pylons/waitress#376

    Security Bugfix

    • in 2.1.0 a new feature was introduced that allowed the WSGI thread to start sending data to the socket. However this introduced a race condition whereby a socket may be closed in the sending thread while the main thread is about to call select() therey causing the entire application to be taken down. Waitress will no longer close the socket in the WSGI thread, instead waking up the main thread to cleanup. See Pylons/waitress#377
    Commits
    • 0aa4879 Remove change of default for clear_untrusted_proxy_headers
    • 2784628 Revert "Merge pull request #370 from Yourun-proger/del_warnings"
    • 479df63 Prep 2.1.2
    • 4f6789b Merge pull request #377 from Pylons/bugfix/select-closed-socket-race
    • 1952050 Merge pull request #379 from Pylons/enhancement/pyupgrade-3.7
    • 8f5b473 pyupgrade 3.7
    • c7a3d7e Only close socket in the main thread
    • 7c3739b Merge pull request #376 from Pylons/bugfix/header-calculation
    • 3066fdd Merge pull request #378 from Pylons/bugfix/expose_tracebacks-encode-error
    • 4467d76 Fix tests to assume body is bytes
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • graphene-mongo not compatible with graphql-server due to GraphQLResolveInfo.context handling

    graphene-mongo not compatible with graphql-server due to GraphQLResolveInfo.context handling

    Error description

    Running the tutorial application at https://graphene-mongo.readthedocs.io/en/latest/tutorial.html with graphql-server[flask] instead of Flask-GraphQL installed results in the following error being returned

    {
      "errors": [
        {
          "message": "'dict' object has no attribute 'queryset'",
          "locations": [
            {
              "line": 2,
              "column": 3
            }
          ],
          "path": [
            "allEmployees"
          ]
        }
      ],
      "data": {
        "allEmployees": null
      }
    }
    

    Underlying Cause

    graphql-server passes its GraphQLResolveInfo.context as a dict rather than an object with attribute getters and setters, which leads to an Exception whenever graphene-mongo attempts to set a queryset attribute on it

    graphene-django and the old Flask-GraphQL pass a Request object as the GraphQLResolveInfo.context and graphene-mongo defaults the context to a graphene Context object if no context is specified

    Workaround

    Subclass graphql-server's GraphQLView to create a context that allows a queryset attribute to be set

    class DictWithQuerySet(dict):
        def __init__(self, *args, **kwargs):
            super(DictWithQuerySet, self).__init__(*args, **kwargs)
            self.queryset = None
    
    
    class MyGraphQLView(GraphQLView):
        def get_context(self):
            context = super().get_context()
            return DictWithQuerySet(context)
    
    opened by leonardwellthy 0
Releases(v0.2.15)
This is a minimal project using graphene with django and user authentication to expose a graphql endpoint.

Welcome This is a minimal project using graphene with django and user authentication to expose a graphql endpoint. Definitely checkout how I have mana

yosef salmalian 1 Nov 18, 2021
Пример использования GraphQL Ariadne с FastAPI и сравнение его с GraphQL Graphene FastAPI

FastAPI Ariadne Example Пример использования GraphQL Ariadne с FastAPI и сравнение его с GraphQL Graphene FastAPI - GitHub ###Запуск на локальном окру

ZeBrains Team 9 Nov 10, 2022
A Django GraphQL Starter that uses graphene and graphene_django to interface GraphQL.

Django GraphQL Starter GraphQL is a query language for APIs and a runtime for fulfilling those queries with your existing data... According to the doc

0101 Solutions 1 Jan 10, 2022
Graphene Metanode is a locally hosted node for one account and several trading pairs, which uses minimal RAM resources.

Graphene Metanode is a locally hosted node for one account and several trading pairs, which uses minimal RAM resources. It provides the necessary user stream data and order book data for trading in a format one would expect from a centralized exchange API.

litepresence 5 May 8, 2022
A Django GraphQL (Graphene) base template

backend A Django GraphQL (Graphene) base template Make sure your IDE/Editor has Black and EditorConfig plugins installed; and configure it lint file a

Reckonsys 4 May 25, 2022
Restful API framework wrapped around MongoEngine

Flask-MongoRest A Restful API framework wrapped around MongoEngine. Setup from flask import Flask from flask_mongoengine import MongoEngine from flask

Close 525 Jan 1, 2023
MongoEngine flask extension with WTF model forms support

Flask-MongoEngine Info: MongoEngine for Flask web applications. Repository: https://github.com/MongoEngine/flask-mongoengine About Flask-MongoEngine i

MongoEngine 815 Jan 3, 2023
Flask-Potion is a RESTful API framework for Flask and SQLAlchemy, Peewee or MongoEngine

Flask-Potion Description Flask-Potion is a powerful Flask extension for building RESTful JSON APIs. Potion features include validation, model resource

DTU Biosustain 491 Dec 8, 2022
Restful API framework wrapped around MongoEngine

Flask-MongoRest A Restful API framework wrapped around MongoEngine. Setup from flask import Flask from flask_mongoengine import MongoEngine from flask

Close 505 Feb 11, 2021
Flask-Potion is a RESTful API framework for Flask and SQLAlchemy, Peewee or MongoEngine

Flask-Potion Description Flask-Potion is a powerful Flask extension for building RESTful JSON APIs. Potion features include validation, model resource

DTU Biosustain 484 Feb 3, 2021
MongoEngine flask extension with WTF model forms support

Flask-MongoEngine Info: MongoEngine for Flask web applications. Repository: https://github.com/MongoEngine/flask-mongoengine About Flask-MongoEngine i

MongoEngine 815 Jan 3, 2023
Restful API framework wrapped around MongoEngine

Flask-MongoRest A Restful API framework wrapped around MongoEngine. Setup from flask import Flask from flask_mongoengine import MongoEngine from flask

Close 525 Jan 1, 2023
Median and percentile for Django and MongoEngine

Tailslide Median and percentile for Django and MongoEngine Supports: PostgreSQL SQLite MariaDB MySQL (with an extension) SQL Server MongoDB ?? Uses na

Andrew Kane 4 Jan 15, 2022
Pandas on AWS - Easy integration with Athena, Glue, Redshift, Timestream, QuickSight, Chime, CloudWatchLogs, DynamoDB, EMR, SecretManager, PostgreSQL, MySQL, SQLServer and S3 (Parquet, CSV, JSON and EXCEL).

AWS Data Wrangler Pandas on AWS Easy integration with Athena, Glue, Redshift, Timestream, QuickSight, Chime, CloudWatchLogs, DynamoDB, EMR, SecretMana

Amazon Web Services - Labs 3.3k Jan 4, 2023
Integration of IPython pdb

IPython pdb Use ipdb exports functions to access the IPython debugger, which features tab completion, syntax highlighting, better tracebacks, better i

Godefroid Chapelle 1.7k Jan 7, 2023
Bootstrap 3 integration with Django.

django-bootstrap3 Bootstrap 3 integration for Django. Goal The goal of this project is to seamlessly blend Django and Bootstrap 3. Want to use Bootstr

Zostera B.V. 2.3k Dec 24, 2022
Bootstrap 4 integration with Django.

django-bootstrap 4 Bootstrap 4 integration for Django. Goal The goal of this project is to seamlessly blend Django and Bootstrap 4. Requirements Pytho

Zostera B.V. 979 Dec 26, 2022
Universal Xiaomi MIoT integration for Home Assistant

Xiaomi MIoT Raw 简体中文 | English MIoT 协议是小米智能家居从 2018 年起推行的智能设备通信协议规范,此后凡是可接入米家的设备均通过此协议进行通信。此插件按照 MIoT 协议规范与设备通信,实现对设备的状态读取及控制。

null 1.9k Jan 2, 2023
An early stage integration of Hotwire Turbo with Django

Note: This is not ready for production. APIs likely to change dramatically. Please drop by our Slack channel to discuss!

Hotwire for Django 352 Jan 6, 2023