From 458bea7b83d2d3a3f3c001ca0a8e157e5fa6c91c Mon Sep 17 00:00:00 2001 From: Roman Mogylatov Date: Mon, 20 Jul 2020 12:07:03 -0400 Subject: [PATCH] Make various fixes --- docs/tutorials/flask.rst | 156 +++++++++++++++--- .../githubnavigator/templates/index.html | 23 ++- .../ghnav-flask/githubnavigator/views.py | 7 +- 3 files changed, 154 insertions(+), 32 deletions(-) diff --git a/docs/tutorials/flask.rst b/docs/tutorials/flask.rst index a51e8f89..dacb045c 100644 --- a/docs/tutorials/flask.rst +++ b/docs/tutorials/flask.rst @@ -333,26 +333,59 @@ Put next into the ``index.html``:

Github Navigator

-

-

-
- -
- -
-
-
-

- +
+
+ +
+ +
+
+
{% if repositories|length == 0 %} -

No search results

+ No search results {% endif %} +

+ Results found: {{ repositories|length }} +

+ + + + + + + + + + + + {% for repository in repositories %} {{n}} + + + + + + + {% endfor %} + +
#RepositoryRepository ownerLast commit
{{ loop.index }} + {{ repository.name }} + + avatar + + {{ repository.owner.login }} + + {{ repository.latest_commit.sha }} + {{ repository.latest_commit.message }} + {{ repository.latest_commit.author_name }} +
+ {% endblock %} Ok, almost there. The last step is to make ``index`` view to render the ``index.html`` template. @@ -360,20 +393,25 @@ Ok, almost there. The last step is to make ``index`` view to render the ``index. Edit ``views.py``: .. code-block:: python - :emphasize-lines: 3,7 """Views module.""" - from flask import render_template + from flask import request, render_template def index(): - return render_template('index.html') + search_term = request.args.get('search_term', 'Dependency Injector') + repositories = [] + return render_template( + 'index.html', + search_term=search_term, + repositories=repositories, + ) That's it. -Make sure the app is running and open ``http://127.0.0.1:7000/``. +Make sure the app is running and open ``http://127.0.0.1:5000/``. You should see: @@ -667,6 +705,86 @@ Edit ``containers.py``: index_view = flask.View(views.index) +Make the search +--------------- + +Now we are ready to make the search work. + +Edit ``views.py``: + +.. code-block:: python + :emphasize-lines: 5,8,11,16 + + """Views module.""" + + from flask import request, render_template + + from .services import SearchService + + + def index(search_service: SearchService): + search_term = request.args.get('search_term') + + repositories = search_service.search_repositories(search_term) + + return render_template( + 'index.html', + search_term=search_term, + repositories=repositories, + ) + +Edit ``containers.py``: + +.. code-block:: python + :emphasize-lines: 32-38 + + """Application containers module.""" + + from dependency_injector import containers, providers + from dependency_injector.ext import flask + from flask import Flask + from flask_bootstrap import Bootstrap + from github import Github + + from . import services, views + + + class ApplicationContainer(containers.DeclarativeContainer): + """Application container.""" + + app = flask.Application(Flask, __name__) + + bootstrap = flask.Extension(Bootstrap) + + config = providers.Configuration() + + github_client = providers.Factory( + Github, + login_or_token=config.github.auth_token, + timeout=config.github.request_timeout, + ) + + search_service = providers.Factory( + services.SearchService, + github_client=github_client, + ) + + index_view = flask.View( + views.index, + search_service=search_service, + ) + +Edit ``config.yml``: + +.. code-block:: + :emphasize-lines: 3-5 + + github: + request_timeout: 10 + search: + default_term: "Dependency Injector" + default_limit: 5 + Tests ----- diff --git a/examples/miniapps/ghnav-flask/githubnavigator/templates/index.html b/examples/miniapps/ghnav-flask/githubnavigator/templates/index.html index f412724e..f9cc345f 100644 --- a/examples/miniapps/ghnav-flask/githubnavigator/templates/index.html +++ b/examples/miniapps/ghnav-flask/githubnavigator/templates/index.html @@ -32,22 +32,29 @@ # Repository Repository owner - Last commit - {% for repository in repositories %} {{n}} + {% for repository in repositories %} {{n}} {{ loop.index }} - {{ repository.name }} - avatar - {{ repository.owner.login }} + + {{ repository.name }} + + + avatar + + {{ repository.owner.login }} + + + {{ repository.latest_commit.sha }} + {{ repository.latest_commit.message }} + {{ repository.latest_commit.author_name }} - {{ repository.latest_commit.sha }} {{ repository.latest_commit['message'] }} {{ repository.latest_commit.author_name }} - {% endfor %} - + {% endfor %} diff --git a/examples/miniapps/ghnav-flask/githubnavigator/views.py b/examples/miniapps/ghnav-flask/githubnavigator/views.py index f444c559..6979e382 100644 --- a/examples/miniapps/ghnav-flask/githubnavigator/views.py +++ b/examples/miniapps/ghnav-flask/githubnavigator/views.py @@ -5,15 +5,12 @@ from flask import request, render_template from .services import SearchService -def index(search_service: SearchService, default_search_term, default_search_limit): +def index(search_service: SearchService, default_search_term: str, default_search_limit: int): search_term = request.args.get('search_term', default_search_term) - limit = request.args.get('limit', default_search_limit, int) - - repositories = search_service.search_repositories(search_term, limit) + repositories = search_service.search_repositories(search_term, default_search_limit) return render_template( 'index.html', search_term=search_term, - limit=limit, repositories=repositories, )