Commit 8587220a authored by berumuron's avatar berumuron
Browse files

tec: Initialize the project

parent fee771f9
__pycache__
/env
.DEFAULT_GOAL := help
.PHONY: dep
dep: ## Install the dependencies
python3 -m pip install -r requirements.txt
.PHONY: run
run: ## Run the application binary
FLASK_APP=src FLASK_ENV=development flask run
.PHONY: help
help:
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
......@@ -14,3 +14,5 @@ Reflets est distribué sous licence [AGPL 3](./LICENSE).
Ce fichier est à destination d'un public technique. Si vous avez des questions
de l'ordre de l'utilisation ou des remarques sur l'outil, vous pouvez m'envoyer
un email à marien@framasoft.org
La documentation technique se trouve dans [le répertoire `./docs`](./docs/index.md).
# Documentation technique
## Stack technique
Reflets est écrit en Python 3.6+ pour le backend et repose sur le
microframework [Flask](http://flask.pocoo.org/). Les données sont stockées dans
une base SQLite, et nous n'utilisons pas d'ORM. Ce choix pourra évoluer par la
suite.
Le frontend est écrit en pur HTML et CSS (i.e. sans framework type Bootstrap).
Pour ce qui est du JavaScript, on se contentera de commencer sans framework non
plus mais [VueJS](https://vuejs.org/) est envisagé à terme si le besoin se fait
sentir.
Le maître mot de cette stack est : simplicité. Le but est d'avoir du code
facile à prendre en main, en particulier pour les personnes apprenant à
développer. La documentation est donc importante à maintenir en parallèle.
## Installation des dépendances
Cette documentation assume que vous êtes sous Linux (les instructions
pourraient aussi fonctionner sous MacOS mais je ne peux pas le garantir). Git
doit également être installé pour récupérer et travailler sur le projet ([plus
d'infos ici](https://git-scm.com/downloads)).
Les commandes listées ci-dessous doivent être exécutées dans une console (aussi
appelée terminal). Elles commencent toutes par un `$` : cela correspond au
"prompt" de la console et ne doit pas être tapé. Un chemin peut être indiqué
avant le `$` (exemple : `reflets$`), cela afin de vous aider à vous situer dans
l'arborescence des répertoires.
Assurez-vous d'avoir Python 3.6+ installé sur votre ordinateur. Dans une
console, exécutez :
```console
$ python3 -V
Python 3.7.3
```
Si le numéro de version qui s'affiche n'est pas le même mais est supérieur ou
égal à 3.6, c'est bon aussi ! En cas d'erreur ou de problème vous pouvez jeter
un coup d'œil [au site officiel de Python](https://www.python.org/downloads/).
Si vous êtes sous Linux, préférez utiliser votre gestionnaire de paquets favori.
Téléchargez maintenant le projet Git avec la commande :
```console
$ git clone git@framagit.org:marien.fressinaud/reflets.git
$ cd reflets
```
Créez-vous maintenant un environnement Python qui sera propre à votre projet :
```console
reflets$ python3 -m venv env
```
Un répertoire `env` devrait être maintenant apparu dans votre projet. Activez
l'environnement avec :
```console
reflets$ source env/bin/activate
```
Une fois cet environnement activé, toutes les dépendances installées seront
confinées dedans. Cela évite notamment que plusieurs programmes écrits en
Python ne se marchent sur les pieds sur votre PC. Vous pourrez à tout moment
désactiver l'environnement avec (ne le faites toutefois pas immédiatement) :
```console
reflets$ deactivate
```
Pour installer maintenant les sources du projet, exécutez :
```console
reflets$ pip install -r requirements.txt
```
Si vous disposez de la commande `make` sur votre PC, vous pouvez aussi utiliser :
```console
reflets$ make dep
```
## Lancer l'application (développement)
Une fois les dépendances installées, pour lancer l'application, exécutez la
commande suivante :
```console
reflets$ FLASK_APP=src FLASK_ENV=development flask run
reflets$ # ou avec la commande make
reflets$ make run
```
Cela exécute Flask (le framework utilisé pour le backend) en lui précisant que
l'application se trouve dans le répertoire `src` et de se lancer en mode
`development` pour qu'il détecte automatiquement les changements faits dans le
code.
Click==7.0
Flask==1.0.3
itsdangerous==1.1.0
Jinja2==2.10.1
MarkupSafe==1.1.1
Werkzeug==0.15.4
[metadata]
name = reflets
version = attr: src.__version__
description = Web application to highligt the key moments of a structure
long_description = file: README.md
long_description_content_type = text/markdown
license = file: LICENSE
author = Marien Fressinaud
author_email = dev@marienfressinaud.fr
url = https://framagit.org/marien.fressinaud/reflets
download_url = https://framagit.org/marien.fressinaud/reflets/-/archive/master/reflets-master.zip
classifiers =
Development Status :: 2 - Pre-Alpha
Environment :: Web Environment
Framework :: Flask
Intended Audience :: End Users/Desktop
License :: OSI Approved :: GNU Affero General Public License v3
Programming Language :: Python
Programming Language :: Python :: 3
Programming Language :: Python :: 3.6
Programming Language :: Python :: 3.7
[options]
packages = find:
python_requires = >= 3.6
install_requires =
Flask>=1.0.3
#!/usr/bin/env python3
from setuptools import setup
setup()
from flask import Flask, render_template
__version__ = "0.1.0"
app = Flask(__name__)
@app.route("/")
def index():
return render_template("index.html")
/* Global */
* {
box-sizing: border-box;
}
html,
body {
margin: 0;
padding: 0;
}
html {
font-family: -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen-Sans,Ubuntu,Cantarell,Helvetica Neue,sans-serif;
font-size: 18px;
line-height: 26px;
}
@media(min-width: 800px) {
html {
font-size: 20px;
line-height: 30px;
}
}
/* Typography */
h1, h2, h3 {
margin-top: 0;
margin-bottom: 0.5rem;
word-wrap: break-word;
}
h1 {
margin-bottom: 1.75rem;
}
h1 { font-size: 2rem; line-height: 2.5rem; }
h2 { font-size: 1.4rem; line-height: 2rem; }
h3 { font-size: 1rem; line-height: 1.5rem; }
* + h1,
* + h2,
* + h3 {
margin-top: 1.5rem;
}
p {
margin-top: 0;
margin-bottom: 1rem;
}
p:last-child {
margin-bottom: 0;
}
/* Containers */
.container {
max-width: 1200px;
margin-left: auto;
margin-right: auto;
}
<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1.0" />
<link rel=stylesheet type=text/css href="{{ url_for('static', filename='app.css') }}">
<title>Reflets</title>
</head>
<body>
<div class="container">
<h1>Bonjour Monde&nbsp;!</h1>
<p>Bienvenue sur Reflets.</p>
</div>
</body>
</html>
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment