Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,24 +12,12 @@
# See the License for the specific language governing permissions and
# limitations under the License.

# [START ndb_wsgi_middleware]
# [START ndb_django_middleware]
from google.cloud import ndb


# [END ndb_django_middleware]
def ndb_wsgi_middleware(wsgi_app):
client = ndb.Client()

def middleware(environ, start_response):
with client.context():
return wsgi_app(environ, start_response)

return middleware
# [END ndb_wsgi_middleware]


# [START ndb_django_middleware]
# Once this middleware is activated in Django settings, NDB calls inside Django
# views will be executed in context, with a separate context for each request.
def ndb_django_middleware(get_response):
client = ndb.Client()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,18 +14,7 @@

from google.cloud import ndb

import middleware


def test_ndb_wsgi_middleware():
def fake_wsgi_app(environ, start_response):
# Validate that a context is live. This will throw
# ndb.exceptions.ContextError if no context is set up.
ndb.context.get_context()

wrapped_function = middleware.ndb_wsgi_middleware(fake_wsgi_app)

wrapped_function(None, None)
import django_middleware


def test_ndb_django_middleware():
Expand All @@ -34,6 +23,7 @@ def fake_get_response(request):
# ndb.exceptions.ContextError if no context is set up.
ndb.context.get_context()

wrapped_function = middleware.ndb_django_middleware(fake_get_response)
wrapped_function = django_middleware.ndb_django_middleware(
fake_get_response)

wrapped_function(None)
24 changes: 15 additions & 9 deletions datastore/cloud-ndb/flask_app.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,33 @@
# See the License for the specific language governing permissions and
# limitations under the License.

from middleware import ndb_wsgi_middleware

# [START ndb_flask_middleware_usage]
# [START ndb_flask]
from flask import Flask
# [END ndb_flask_middleware_usage]

from google.cloud import ndb
# [START ndb_flask_middleware_usage]


client = ndb.Client()


def ndb_wsgi_middleware(wsgi_app):
def middleware(environ, start_response):
with client.context():
return wsgi_app(environ, start_response)

return middleware


app = Flask(__name__)
app.wsgi_app = ndb_wsgi_middleware(app.wsgi_app) # Wrap the app in middleware.
# [END ndb_flask_middleware_usage]


class Book(ndb.Model):
title = ndb.StringProperty()


client = ndb.Client()


@app.route('/')
def list_books():
books = Book.query()
return str([book.to_dict() for book in books])
# [END ndb_flask]
13 changes: 13 additions & 0 deletions datastore/cloud-ndb/flask_app_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@

import pytest

from google.cloud import ndb

import flask_app


Expand All @@ -40,3 +42,14 @@ def test_index(test_book):
r = client.get('/')
assert r.status_code == 200
assert test_book.title in r.data.decode('utf-8')


def test_ndb_wsgi_middleware():
def fake_wsgi_app(environ, start_response):
# Validate that a context is live. This will throw
# ndb.exceptions.ContextError if no context is set up.
ndb.context.get_context()

wrapped_function = flask_app.ndb_wsgi_middleware(fake_wsgi_app)

wrapped_function(None, None)
2 changes: 2 additions & 0 deletions datastore/cloud-ndb/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,4 @@
#[START ndb_version]
google-cloud-ndb==0.0.1
#[END ndb_version]
flask==1.0.2