Ce référentiel contient le code de wikispeedruns.com.
Nous vous recommandons de créer un environnement virtuel Python pour exécuter le serveur.
python -m venv env
Pour Windows PowerShell :
./env/Scripts/Activate.ps1
Pour Linux/Unix (Mac)
source env/bin/activate
Installez ensuite la configuration requise (avec votre environnement virtuel activé)
pip install -r requirements.txt
Installez ensuite la configuration requise (avec votre environnement virtuel activé)
npm install
Il existe un certain nombre de scripts pour aider à configurer l'application Web dans des scripts.
Une fois le serveur MySQL exécuté, vous devrez créer un compte. Par défaut, nous supposons un compte user
sans mot de passe (voir default.json
). Si vous souhaitez utiliser une configuration MySQL différente, vous pouvez créer prod.json
avec les champs MySQL pertinents dans config
qui remplaceront default.json
.
Créez ensuite la base de données et les tables à l'aide du script fourni.
cd scripts
python create_db.py
Il existe également un script interactif (avec des instructions dans les scripts) qui peut être utilisé pour créer un compte administrateur local. Grâce au compte administrateur, les invites peuvent être gérées via /manage
.
cd scripts
python create_admin_account.py
(Facultatif) Enfin, il existe également un script pour remplir la base de données avec des données pour le développement local
cd scripts
python populate_db.py
Définissez la variable d'environnement FLASK_ENV
dans l'invite de commande que vous prévoyez d'utiliser pour exécuter le serveur Flask. Cela permettra à l'instance locale de se recharger automatiquement lorsque les fichiers sont modifiés.
Par exemple, sous Linux/Mac
export FLASK_DEBUG=1
export FLASK_ENV="development"
Ou sous Windows Powershell
$env:FLASK_ENV="development"
Depuis le répertoire de niveau supérieur
npm run start
Dans un shell séparé, à partir du répertoire de niveau supérieur
flask --app app run --debug
Afin d'exécuter les tests localement, vous devez créer un autre compte dans MYSQL avec le nom d'utilisateur testuser
et le mot de passe testpassword
. Nos tests sont configurés pour s'exécuter sur ce compte par défaut.
Ensuite, exécutez simplement pytest depuis le répertoire test
.
cd test
pytest
Notez que ces tests sont également exécutés dans Docker lors de la création d'un PR à l'aide des workflows Github. À l'avenir, nous pourrions également configurer Docker pour exécuter des tests.
Les réalisations sont ajoutées à la base de données via des scripts python. Exécutez ces scripts Python avec votre environnement virtuel activé pour remplir les tableaux de réussite :
scriptsachievementadd_achievements_to_database.py
Toutes les courses futures seront vérifiées par rapport aux réalisations dans la base de données. Nous pouvons également appliquer ces règles de vérification aux exécutions précédentes.
Exécutez ce script Python pour vérifier rétroactivement les exécutions historiques par rapport à toutes les réalisations actuelles.
scriptsachievementhistorical_achievements.py
La file d'attente des tâches asynchrones pour les tâches de scraper est prise en charge par 2 outils supplémentaires, céleri et redis. Le céleri est installé comme une exigence Python, mais Redis (https://redis.io/) doit être installé et exécuté séparément (similaire au serveur SQL, voir le site Web pour les instructions). Le scraper task_queue nécessite également le scraper_graph
, qui peut être téléchargé localement (contactez l'un des responsables)
Plutôt que de calculer le chemin dans le cadre de la requête, ce qui gèle le serveur, Flask transmet les tâches de grattage à un autre processus géré par Celery (et communique via Redis). Ces tâches sont définies à l'aide de décorateurs Python, dont des exemples peuvent être vus ici.
Malheureusement, ni le céleri ni Redis ne sont pris en charge sous Windows. Donc, si vous disposez d'une machine de développement Windows, vous devrez exécuter le serveur via WSL. Notez que si vous souhaitez conserver votre instance Windows MySQL, vous devez déterminer sur quel port la machine Windows hôte est exposée dans WSL. Voir ce message de super utilisateur. Notez que cela change à chaque redémarrage de WSL.