mirror of
				https://github.com/ets-labs/python-dependency-injector.git
				synced 2025-11-04 09:57:37 +03:00 
			
		
		
		
	Add bootstrap and remove created at from ghnav-flask app
This commit is contained in:
		
							parent
							
								
									8a2a88ccc9
								
							
						
					
					
						commit
						62ebe8d6b9
					
				| 
						 | 
					@ -12,6 +12,9 @@ def create_app():
 | 
				
			||||||
    app = container.app()
 | 
					    app = container.app()
 | 
				
			||||||
    app.container = container
 | 
					    app.container = container
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bootstrap = container.bootstrap()
 | 
				
			||||||
 | 
					    bootstrap.init_app(app)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    app.add_url_rule('/', view_func=container.index_view.as_view())
 | 
					    app.add_url_rule('/', view_func=container.index_view.as_view())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    return app
 | 
					    return app
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3,6 +3,7 @@
 | 
				
			||||||
from dependency_injector import containers, providers
 | 
					from dependency_injector import containers, providers
 | 
				
			||||||
from dependency_injector.ext import flask
 | 
					from dependency_injector.ext import flask
 | 
				
			||||||
from flask import Flask
 | 
					from flask import Flask
 | 
				
			||||||
 | 
					from flask_bootstrap import Bootstrap
 | 
				
			||||||
from github import Github
 | 
					from github import Github
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from . import views, services
 | 
					from . import views, services
 | 
				
			||||||
| 
						 | 
					@ -13,6 +14,8 @@ class ApplicationContainer(containers.DeclarativeContainer):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    app = flask.Application(Flask, __name__)
 | 
					    app = flask.Application(Flask, __name__)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    bootstrap = flask.Extension(Bootstrap)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    config = providers.Configuration()
 | 
					    config = providers.Configuration()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    github_client = providers.Factory(
 | 
					    github_client = providers.Factory(
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -29,7 +29,6 @@ class SearchService:
 | 
				
			||||||
                'url': repository.owner.html_url,
 | 
					                'url': repository.owner.html_url,
 | 
				
			||||||
                'avatar_url': repository.owner.avatar_url,
 | 
					                'avatar_url': repository.owner.avatar_url,
 | 
				
			||||||
            },
 | 
					            },
 | 
				
			||||||
            'created_at': repository.created_at,
 | 
					 | 
				
			||||||
            'latest_commit': self._format_commit(commits[0]) if commits else {},
 | 
					            'latest_commit': self._format_commit(commits[0]) if commits else {},
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,26 @@
 | 
				
			||||||
 | 
					<!doctype html>
 | 
				
			||||||
 | 
					<html lang="en">
 | 
				
			||||||
 | 
					    <head>
 | 
				
			||||||
 | 
					        {% block head %}
 | 
				
			||||||
 | 
					        <!-- Required meta tags -->
 | 
				
			||||||
 | 
					        <meta charset="utf-8">
 | 
				
			||||||
 | 
					        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        {% block styles %}
 | 
				
			||||||
 | 
					            <!-- Bootstrap CSS -->
 | 
				
			||||||
 | 
					            {{ bootstrap.load_css() }}
 | 
				
			||||||
 | 
					        {% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        <title>{% block title %}{% endblock %}</title>
 | 
				
			||||||
 | 
					        {% endblock %}
 | 
				
			||||||
 | 
					    </head>
 | 
				
			||||||
 | 
					    <body>
 | 
				
			||||||
 | 
					        <!-- Your page content -->
 | 
				
			||||||
 | 
					        {% block content %}{% endblock %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        {% block scripts %}
 | 
				
			||||||
 | 
					            <!-- Optional JavaScript -->
 | 
				
			||||||
 | 
					            {{ bootstrap.load_js() }}
 | 
				
			||||||
 | 
					        {% endblock %}
 | 
				
			||||||
 | 
					    </body>
 | 
				
			||||||
 | 
					</html>
 | 
				
			||||||
| 
						 | 
					@ -1,40 +1,55 @@
 | 
				
			||||||
<!DOCTYPE html>
 | 
					{% extends "base.html" %}
 | 
				
			||||||
<html>
 | 
					
 | 
				
			||||||
<head>
 | 
					{% block title %}Github Navigator{% endblock %}
 | 
				
			||||||
    <title>Github Navigator</title>
 | 
					
 | 
				
			||||||
</head>
 | 
					{% block content %}
 | 
				
			||||||
<body>
 | 
					<div class="container">
 | 
				
			||||||
<h1>Github Navigator</h1>
 | 
					    <h1 class="mb-4">Github Navigator</h1>
 | 
				
			||||||
<form method="get">
 | 
					
 | 
				
			||||||
    <p>
 | 
					    <form>
 | 
				
			||||||
        Search term: <input type="text" name="search_term" value="{{ search_term if search_term }}">
 | 
					      <div class="form-group form-row">
 | 
				
			||||||
        Limit: <input type="text" name="limit" value="{{ limit }}">
 | 
					          <label for="mySearch" class="col-form-label">Search for:</label>
 | 
				
			||||||
        <input type="submit">
 | 
					          <div class="col-10">
 | 
				
			||||||
    </p>
 | 
					              <input class="form-control" type="text" id="mySearch"
 | 
				
			||||||
 | 
					                     placeholder="Type something to search on GitHub"
 | 
				
			||||||
 | 
					                     name="search_term"
 | 
				
			||||||
 | 
					                     value="{{ search_term if search_term }}">
 | 
				
			||||||
 | 
					          </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
    </form>
 | 
					    </form>
 | 
				
			||||||
<h2>Search results</h2>
 | 
					
 | 
				
			||||||
    {% if repositories|length == 0 %}
 | 
					    {% if repositories|length == 0 %}
 | 
				
			||||||
    <small>No search results</small>
 | 
					    <small>No search results</small>
 | 
				
			||||||
    {% endif %}
 | 
					    {% endif %}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <p>
 | 
				
			||||||
 | 
					        <small>Results found: {{ repositories|length }}</small>
 | 
				
			||||||
 | 
					    </p>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    <table class="table table-striped">
 | 
				
			||||||
 | 
					        <thead>
 | 
				
			||||||
 | 
					            <tr>
 | 
				
			||||||
 | 
					                <th>#</th>
 | 
				
			||||||
 | 
					                <th>Repository</th>
 | 
				
			||||||
 | 
					                <th class="text-nowrap">Repository owner</th>
 | 
				
			||||||
 | 
					<!--                <th class="text-nowrap">Created at</th>-->
 | 
				
			||||||
 | 
					                <th class="text-nowrap">Last commit</th>
 | 
				
			||||||
 | 
					            </tr>
 | 
				
			||||||
 | 
					        </thead>
 | 
				
			||||||
 | 
					        <tbody>
 | 
				
			||||||
    {% for repository in repositories %} {{n}}
 | 
					    {% for repository in repositories %} {{n}}
 | 
				
			||||||
<p>
 | 
					            <tr>
 | 
				
			||||||
    <small>Search result # {{ loop.index }} from {{ repositories|length }}</small>
 | 
					              <th>{{ loop.index }}</th>
 | 
				
			||||||
</p>
 | 
					              <td><a href="{{ repository.url }}">{{ repository.name }}</a></td>
 | 
				
			||||||
<p>
 | 
					              <td><a href="{{ repository.owner.url }}"><img src="{{ repository.owner.avatar_url }}" alt="avatar" height="24" width="24"/></a>
 | 
				
			||||||
    Repository: <a href="{{ repository.url }}">{{ repository.name }}</a>
 | 
					 | 
				
			||||||
</p>
 | 
					 | 
				
			||||||
<p>
 | 
					 | 
				
			||||||
    Repository owner:
 | 
					 | 
				
			||||||
    <a href="{{ repository.owner.url }}"><img src="{{ repository.owner.avatar_url }}" alt="avatar" height="24" width="24"/></a>
 | 
					 | 
				
			||||||
                  <a href="{{ repository.owner.url }}">{{ repository.owner.login }}</a>
 | 
					                  <a href="{{ repository.owner.url }}">{{ repository.owner.login }}</a>
 | 
				
			||||||
</p>
 | 
					              </td>
 | 
				
			||||||
<p>
 | 
					              <td><a href="{{ repository.latest_commit.url }}">{{ repository.latest_commit.sha }}</a> {{ repository.latest_commit['message'] }} {{ repository.latest_commit.author_name }}</td>
 | 
				
			||||||
    Created at: {{ repository.created_at }}
 | 
					            </tr>
 | 
				
			||||||
</p>
 | 
					 | 
				
			||||||
<p>
 | 
					 | 
				
			||||||
    LastCommit: <a href="{{ repository.latest_commit.url }}">{{ repository.latest_commit.sha }}</a> {{ repository.latest_commit['message'] }} {{ repository.latest_commit.author_name }}
 | 
					 | 
				
			||||||
</p>
 | 
					 | 
				
			||||||
<hr/>
 | 
					 | 
				
			||||||
    {% endfor %}
 | 
					    {% endfor %}
 | 
				
			||||||
</body>
 | 
					
 | 
				
			||||||
</html>
 | 
					        </tbody>
 | 
				
			||||||
 | 
					    </table>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{% endblock %}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -25,7 +25,6 @@ def test_index(client, app):
 | 
				
			||||||
                html_url='owner1-url',
 | 
					                html_url='owner1-url',
 | 
				
			||||||
                avatar_url='owner1-avatar-url',
 | 
					                avatar_url='owner1-avatar-url',
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
            created_at='repo1-created-at',
 | 
					 | 
				
			||||||
            get_commits=mock.Mock(return_value=[mock.Mock()]),
 | 
					            get_commits=mock.Mock(return_value=[mock.Mock()]),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
        mock.Mock(
 | 
					        mock.Mock(
 | 
				
			||||||
| 
						 | 
					@ -36,7 +35,6 @@ def test_index(client, app):
 | 
				
			||||||
                html_url='owner2-url',
 | 
					                html_url='owner2-url',
 | 
				
			||||||
                avatar_url='owner2-avatar-url',
 | 
					                avatar_url='owner2-avatar-url',
 | 
				
			||||||
            ),
 | 
					            ),
 | 
				
			||||||
            created_at='repo2-created-at',
 | 
					 | 
				
			||||||
            get_commits=mock.Mock(return_value=[mock.Mock()]),
 | 
					            get_commits=mock.Mock(return_value=[mock.Mock()]),
 | 
				
			||||||
        ),
 | 
					        ),
 | 
				
			||||||
    ]
 | 
					    ]
 | 
				
			||||||
| 
						 | 
					@ -51,14 +49,12 @@ def test_index(client, app):
 | 
				
			||||||
    assert b'owner1-login' in response.data
 | 
					    assert b'owner1-login' in response.data
 | 
				
			||||||
    assert b'owner1-url' in response.data
 | 
					    assert b'owner1-url' in response.data
 | 
				
			||||||
    assert b'owner1-avatar-url' in response.data
 | 
					    assert b'owner1-avatar-url' in response.data
 | 
				
			||||||
    assert b'repo1-created-at' in response.data
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    assert b'repo2-url' in response.data
 | 
					    assert b'repo2-url' in response.data
 | 
				
			||||||
    assert b'repo2-name' in response.data
 | 
					    assert b'repo2-name' in response.data
 | 
				
			||||||
    assert b'owner2-login' in response.data
 | 
					    assert b'owner2-login' in response.data
 | 
				
			||||||
    assert b'owner2-url' in response.data
 | 
					    assert b'owner2-url' in response.data
 | 
				
			||||||
    assert b'owner2-avatar-url' in response.data
 | 
					    assert b'owner2-avatar-url' in response.data
 | 
				
			||||||
    assert b'repo2-created-at' in response.data
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def test_index_no_results(client, app):
 | 
					def test_index_no_results(client, app):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user