PTO lookup webapp
We add a small flask-powered web application in charge of retrieving the PBO-related data from axione.
This commit is contained in:
parent
53af975601
commit
2daf6ab8e2
6 changed files with 170 additions and 4 deletions
|
@ -22,9 +22,7 @@ $ poetry run python test_axione_api.py
|
|||
|
||||
Travailler depuis la VM whitelistée par Axione est peu pratique. C'est pourquoi nous avons ajouté un mode debug permettant de simuler les réponses d'Axione.
|
||||
|
||||
Pour l'activer, il vous faudra mettre la variable d'environnement `DEBUG` a `true`. Vous pouvez également utiliser un fichier de configuration ne se trouvant pas a `/etc/axione-elig-test.ini` à l'aide de la variable d'environnement `CONFIG`.
|
||||
|
||||
Par example:
|
||||
Pour lancer la webapp localement en mode debug, vous pouvez utiliser le script `run-dev-server`:
|
||||
```bash
|
||||
$ DEBUG=true CONFIG=./elig-test.ini poetry run python elig-test.py
|
||||
./run-dev-server
|
||||
```
|
||||
|
|
3
run-dev-server
Executable file
3
run-dev-server
Executable file
|
@ -0,0 +1,3 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
DEBUG=true CONFIG=./elig-test.ini.sample FLASK_APP=webapp poetry run flask run --reload
|
25
templates/landing_form.html
Normal file
25
templates/landing_form.html
Normal file
|
@ -0,0 +1,25 @@
|
|||
<!doctype html>
|
||||
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Aquilenet: Éligibilité FTTH</title>
|
||||
<style>
|
||||
{% include 'style.css' %}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1 id="aquilenet-title">Aquilenet</h1>
|
||||
<div id="container">
|
||||
<h1 id="main-title">Test d'Éligibilité FTTH Aquilenet</h1>
|
||||
<form method="post" action="/result">
|
||||
<label>Numéro de PTO :
|
||||
<input name="pto"/>
|
||||
</label>
|
||||
<button>Tester</button>
|
||||
</form>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
62
templates/result.html
Normal file
62
templates/result.html
Normal file
|
@ -0,0 +1,62 @@
|
|||
<!doctype html>
|
||||
|
||||
<html lang="fr">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>Aquilenet: Éligibilité FTTH</title>
|
||||
<style>
|
||||
{% include 'style.css' %}
|
||||
</style>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<h1 id="aquilenet-title">Aquilenet</h1>
|
||||
<div id="container">
|
||||
<h1 id="main-title">Test d'Éligibilité FTTH Aquilenet: Résultats</h1>
|
||||
<p>Résultat pour le PTO: {{ pto }}</p>
|
||||
{% for batiment in result %}
|
||||
<table>
|
||||
<thead>
|
||||
<tr>
|
||||
<th colspan="100">{{ batiment["referenceBatiment"] }}</th>
|
||||
</tr>
|
||||
</thead>
|
||||
{% for etage in batiment["etages"] %}
|
||||
<tr>
|
||||
<td>{{ etage["reference"] }}</td>
|
||||
<td>
|
||||
<table>
|
||||
<tr><td>Nb Lignes Actives</td><td>{{ etage["nbLignesActives"] }}</td></tr>
|
||||
<tr><td>Nb Lignes Existantes</td><td>{{ etage["nbLignesExistantes"] }}</td></tr>
|
||||
<tr><td>Nb Locaux FTTH</td><td>{{ etage["nbLocauxFtth"] }}</td></tr>
|
||||
<tr>
|
||||
<td>
|
||||
<table>
|
||||
<thead>
|
||||
<tr><th colspan="100">Lignes</th></tr>
|
||||
<tr><td>PTO</td><td>PBO</td><td>actif</td><td>commercialisable</td><td>existant</td><td>raccordable</td><td>rompu</td></tr>
|
||||
</thead>
|
||||
{% for ligne in etage["lignes"] %}
|
||||
<tr>
|
||||
<td>{{ ligne["pto"] }}</td>
|
||||
<td>{{ ligne["pbo"] }}</td>
|
||||
<td>{{ ligne["actif"] }}</td>
|
||||
<td>{{ ligne["commercialisable"] }}</td>
|
||||
<td>{{ ligne["existant"] }}</td>
|
||||
<td>{{ ligne["raccordable"] }}</td>
|
||||
<td>{{ ligne["rompu"] }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</table>
|
||||
{% endfor %}
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
46
templates/style.css
Normal file
46
templates/style.css
Normal file
|
@ -0,0 +1,46 @@
|
|||
body {
|
||||
background-color: #1787c2;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
font-family: 'Titillium Web', sans-serif;
|
||||
}
|
||||
#aquilenet-title {
|
||||
color: white;
|
||||
align-self: center;
|
||||
font-size: 4em;
|
||||
margin-top: .3em;
|
||||
margin-bottom: .5em;
|
||||
}
|
||||
#container {
|
||||
width: 80%;
|
||||
background-color: #ffd38c;
|
||||
align-self: center;
|
||||
padding: 2em;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
padding-bottom: 10em;
|
||||
}
|
||||
|
||||
form {
|
||||
align-self: center;
|
||||
}
|
||||
|
||||
#main-title {
|
||||
align-self: center;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
||||
table,td {
|
||||
border: 2px solid #333;
|
||||
border-collapse: collapse;
|
||||
}
|
||||
|
||||
thead, tfoot {
|
||||
background-color: #333;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
td {
|
||||
padding-left: 1em;
|
||||
padding-right: 1em;
|
||||
}
|
32
webapp.py
Normal file
32
webapp.py
Normal file
|
@ -0,0 +1,32 @@
|
|||
import os
|
||||
from flask import Flask, render_template, request, escape
|
||||
|
||||
from axione_api.config import parse_config
|
||||
from axione_api.api import query_axione_pto, parse_response
|
||||
|
||||
def load_config():
|
||||
cfg_path = os.environ.get("CONFIG", "/etc/axione-elig-test.ini")
|
||||
print(f'Reading the "{cfg_path}" config file')
|
||||
cfg = parse_config(cfg_path)
|
||||
cfg.debug = True if "DEBUG" in os.environ else False
|
||||
if cfg.debug:
|
||||
print("===================")
|
||||
print("DEBUG_MODE")
|
||||
print("No requests will be performed")
|
||||
print("We'll inject some dummy data instead")
|
||||
print("===================")
|
||||
print("")
|
||||
return cfg
|
||||
|
||||
cfg = load_config()
|
||||
app = Flask(__name__)
|
||||
|
||||
@app.route("/", methods=['GET'])
|
||||
def get_form():
|
||||
return render_template("landing_form.html")
|
||||
|
||||
@app.route("/result", methods=['POST'])
|
||||
def show_result():
|
||||
pto = escape(request.form['pto'])
|
||||
result = parse_response(query_axione_pto(cfg, pto))
|
||||
return render_template("result.html", pto=pto, result=result)
|
Loading…
Reference in a new issue