Categories
Programming

Pourquoi j’aime bien utiliser Flask

def post_postprocessor(updated_user=None, **kw):
    socketio.emit('update_user_representation', updated_user, namespace="/user")
 
with app.app_context():
    blueprint_user = manager.create_api_blueprint(models.User,
                                    methods=['GET', 'POST', 'PUT', 'DELETE'],
                                    allow_delete_many = True,
                                    postprocessors = {
                                        'POST': [post_postprocessor]
                                    })
    app.register_blueprint(blueprint_user)
 
if __name__ == "__main__":
    socketio.run(app,
                host=conf.WEBSERVER_HOST,
                port=conf.WEBSERVER_PORT,
                debug=conf.WEBSERVER_DEBUG)

Voici une API ReSTful pour un modèle (User) qui permet de propager vers différents clients les modifications effectuées sur un object.
Je trouve ça vraiment beau.

Categories
Programming

L’instance Heroku de pyAggr3g470r est ouverte

Entre deux coups de pioche dans le jardin, intégration d’un captcha pour la page de création de compte de pyAggr3g470r. Ceci grâce à Flask-WTF.

Categories
Programming Python

Plateforme météorologique

Aujourd’hui je vous présente un nouveau projet. Il s’agit d’une plateforme permettant l’agrégation de données météorologiques. Elle permettra aussi de consulter les données d’une station d’un contributeur dans le monde sans avoir de compte. Je souhaite que la base de la plateforme regroupe des données publiques et impersonnelles (donc un minimum de fonctionnalités pour une personne identifiée sur le site), au maximum.
Voici l’instance de test.

Pour valider le système j’utiliserai une station Yocto-Meteo. Voici comment récupérer de cette puce la température, pression et l’humidité. Évidemment les données pourront provenir d’une station quelconque tant que l’utilisateur aura un moyen d’envoyer les informations via une requête HTTP POST. Pour ceci il manque encore les spécifications, mais des services sont déjà disponibles (un exemple) car le site reposera sur ces propres services Web pour son fonctionnement.

Voici la seule interface actuellement disponible lorsque l’utilisateur est connecté:

Grenouille-profile-screen

Comme vous pouvez le constater pour envoyer des données il faudra être authentifié et disposer d’une clé (générée automatiquement à la création de votre compte).

Aussi, il vous sera possible de déclarer plusieurs stations. Il est aussi important de pouvoir récupérer les données envoyées par une station (certainement dans un fichier JSON).

Pour terminer j’ajoute que je suis ouvert à toutes contributions (même idées). Surtout si vous disposez d’autres stations, propriétaires ou fait-maison (Arduino, etc.), et que vous désirez écrire des clients que l’on pourra ajouter au projet.
Vous pourrez utiliser le service gratuitement (mais j’accepte les Bitcoins). Pour le moment les données se situent dans une base PostgreSQL sur Heroku, à terme j’utiliserai une base ailleurs (où j’ai bien plus de place) et le code sera certainement toujours sur Heroku. À ce propos, si vous souhaitez tester de votre côté, le README montre comme il est super simple de déployer le service sur Heroku ou sur votre machine.

Categories
Programming

Avis aux indécis

Sachez que lorsque vous ne savez pas où aller déjeuner, il y a Cédric, on mange où à midi?. L’application proposera à vous et à vos chers collègues un lieu de restauration, fonction de différents critères paramétrables (distance, jour de la semaine, météo, etc.) et si vous le souhaitez prendra en compte vos préférences (envoyées en POST dans un fichier JSON).
Lisez plutôt le README.

En espérant que ce petit don soit utile pour la communauté (essentiellement des indécis).

Categories
Cloud Web

Déploiement d’applications Web avec Heroku

Depuis quelques temps je m’intéresse au service PaaS offert par Heroku (équivalent de Google App Engine). Ce service permet de déployer des applications (entre autres: node.js, Ruby, Clojure, Python et Scala) sans se soucier de l’administration du serveur (et donc une partie des problèmes de sécurité). Et cela vraiment simplement et rapidement.

Pour preuve, voici ci-dessous les étapes afin d’avoir une première application Python basée sur Flask, juste après la création d’un compte.

debian:/home/cedric# wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

cedric@debian:~$ git clone git://github.com/heroku/python-sample.git
Cloning into python-sample...
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (8/8), done.
remote: Total 12 (delta 1), reused 11 (delta 0)
Receiving objects: 100% (12/12), done.
Resolving deltas: 100% (1/1), done.

cedric@debian:~$ cd python-sample/

cedric@debian:~/python-sample$ heroku create
Enter your Heroku credentials.
Email: kimble.mandel@gmail.com
Password (typing will be hidden):
Found existing public key: /home/cedric/.ssh/id_rsa.pub
Uploading SSH public key /home/cedric/.ssh/id_rsa.pub... done
Creating peaceful-refuge-5673... done, stack is cedar
http://peaceful-refuge-5673.herokuapp.com/ | git@heroku.com:peaceful-refuge-5673.git
Git remote heroku added

cedric@debian:~/python-sample$ git push heroku master
The authenticity of host 'heroku.com (50.19.85.156)' can't be established.
RSA key fingerprint is 8b:48:5e:67:0e:c9:16:47:32:f2:87:0c:1f:c8:60:ad.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'heroku.com,50.19.85.156' (RSA) to the list of known hosts.
Enter passphrase for key '/home/cedric/.ssh/id_rsa':
Counting objects: 12, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (12/12), 1.13 KiB, done.
Total 12 (delta 1), reused 12 (delta 1)

-----> Python app detected
-----> No runtime.txt provided; assuming python-2.7.3.
-----> Preparing Python runtime (python-2.7.3)
-----> Installing Distribute (0.6.34)
-----> Installing Pip (1.2.1)
-----> Installing dependencies using Pip (1.2.1
.
.
.
-- snip --
.
.
.
-----> Discovering process types
       Procfile declares types -> web

-----> Compiled slug size: 23.7MB
-----> Launching... done, v4
       http://peaceful-refuge-5673.herokuapp.com deployed to Heroku

To git@heroku.com:peaceful-refuge-5673.git
 * [new branch]      master -> master

Et voici le résultat. Il faut savoir qu’Heroku repose en fait sur le service IaaS EC2 d’Amazon (équivalent de Google Compute Engine). Vous êtes donc dépendant de la qualité de service d’Amazon.

Le service est élastique et de nombreuses configurations sont possibles. J’utilise un compte gratuit. Pour la persistance des données de votre application vous pouvez utiliser l’addon MongoHQ avec 512 Mo de stockage offert.

On va voir ce qu’on peut faire avec ça…