AFPy
by AFPy - Mastodon from AFPy - Mastodon
Assemblée Générale de l'AFPy le 2 Novembre 2025Soyez à jour de vos cotisations (jusqu'au 19 octobre inclus)
Le 2 septembre 2025 est sortie la version 2.7 du logiciel de gestion de la relation client Crème CRM (sous licence AGPL-3.0), un peu plus d’un an après Creme 2.6 (5 août 2024).

Au programme notamment, le passage à Django 5.2, les types de fiches personnalisés et un système de processus automatisés. Les nouveautés sont détaillées dans la suite de la dépêche.
Crème CRM est un logiciel de gestion de la relation client, généralement appelé CRM (pour Customer Relationship Management). Il dispose évidemment des fonctionnalités basiques d’un tel logiciel :
Crème CRM dispose en outre de nombreux modules optionnels le rendant très polyvalent :
L’objectif de Crème CRM est de fournir un logiciel libre de gestion de la relation client pouvant convenir à la plupart des besoins, simples ou complexes. À cet effet, il propose quelques concepts puissants qui se combinent entre eux (entités, relations, filtres, vues, propriétés, blocs), et il est très configurable (bien des problèmes pouvant se résoudre par l’interface de configuration) ; la contrepartie est qu’il faudra sûrement passer quelques minutes dans l’interface de configuration graphique pour avoir quelque chose qui vous convienne vraiment (la configuration par défaut ne pouvant être optimale pour tout le monde). De plus, afin de satisfaire les besoins les plus particuliers, son code est conçu pour être facilement étendu, tel un cadriciel (framework).
Du côté de la technique, Crème CRM est codé notamment avec Python/Django et fonctionne avec les bases de données MySQL, SQLite et PostgreSQL.
Voici les changements les plus notables de cette version :
La nouvelle version LTS (Long Time Support, car maintenue pendant 3 ans) du cadriciel Web est sortie en avril 2025.
Pour les personnes qui déploient Creme, cela implique de nouvelles versions minimales :
Python 3.13 est désormais géré officiellement.
Il a bien sûr toujours été possible de créer ses propres types de fiches (entités) via du code (c’est même plutôt simple, notamment grâce aux outils que fournis Django).
Mais ici il s’agit de créer des types de manière visuelle, via l’interface de configuration. Pour créer un nouveau type il suffit de lui donner un nom (genre “Boutique”), ainsi que son nom au pluriel (donc “Boutiques” dans notre exemple). Ensuite des champs personnalisés peuvent être ajoutés, comme pour n’importe quel type de fiche. Et évidemment vous pouvez utiliser derrière tous les outils de configuration classiques pour construire l’interface qui vous convient (blocs, boutons, formulaires, menu…).
Techniquement, les tables correspondant aux types sont en fait toutes créés dès l’installation (mais seuls les types activés sont visibles) ce qui permet de fonctionner sereinement même sur les SGBD ne gérant pas les transactions de schéma. C’est pourquoi le nombre de types personnalisés est limité (à 20 en l’occurrence, cela devrait être largement suffisant en pratique).
Ce nouveau système était attendu depuis longtemps, et devrait encore un peu abaisser la barrière d’entrée en permettant d’éviter d’écrire du code dans pas mal de cas.

Ce nouveau système permet de programmer des actions qui seront effectuées de manière automatique lorsque certains évènements se produisent. Pour mieux comprendre les possibilités offertes, voici un processus créé lors de l’installation de Creme 2.7 : lorsqu’une fiche Opportunité d’affaire est modifiée et que son nouveau statut est un statut considéré comme gagné, alors la société cible de l’Opportunité devient cliente (si elle ne l’était pas déjà évidemment).
Dans cette première version, les évènements qui peuvent déclencher un processus sont :
Les actions actuellement disponibles sont :
Cette version initiale nous a demandé pas mal de travail afin de trouver une conception satisfaisante, mais de nombreuses améliorations sont d’ores et déjà prévues (notamment les évènements temporels & une action qui peut modifier une fiche).
Les processus automatisés étaient, à l’instar des types personnalisés, très attendus ; et combiner ces 2 nouveaux systèmes ouvre pas mal de perspectives.

La version plus détaillée est ici
La prochaine version devrait être plus courte que la 2.7 (qui a été un peu plus grosse que prévu à la base), afin de mieux coller aux sorties de Django. À l’année prochaine !
Commentaires : voir le flux Atom ouvrir dans le navigateur
Bonjour tout le monde,
La PyConFR 2025 approche et nous avons besoin de votre aide !
Que vous soyez habitué ou non des PyConFR, tout le monde est le·la bienvenue ![]()
Si vous êtes intéressé·e, vous pouvez répondre à ce message en indiquant les domaines qui vous intéressent. N’hésitez pas également si  vous avez des questions ![]()
Nous recherchons des volontaires sur différentes tâches :
Animation de l’atelier pour les enfants : le samedi après-midi a lieu l’atelier de programmation pour les enfants, en partenariat avec MixTeen. De nouvelles personnes pour encadrer l’atelier nous permettrait d’accueillir plus d’enfants. Des bénévoles de MixTeen sont déjà à l’animation et vous accompagneront.
Coordination des sessions : signaler à l’orateurice qu’il reste 10min/5min, le temps restant pour les questions, indiquer quand le créneau est fini. Il faudrait au moins une personne par salle.
Coordination des Lightning Talks : le dimanche matin, il y a également le créneau de Lightning Talks à coordonner (limiter le temps de présentation à 5/10min par sujet et le temps de questions).
Accueil du public : le dimanche matin aussi a lieu l’Assemblée Générale de l’AFPy à laquelle toutes les personnes adhérentes seront. Il faudrait des personnes pour accueillir le public durant ce temps (pointer les gens, fournir un tour de cou + badge si besoin).
| — | ||||
|---|---|---|---|---|
| samedi matin | @lalmeras | Gaston | @ReiNula | @matthieusb | 
| samedi après-midi | @petrus-v | Ruud Van der Ham | @CaptainKro | @MounaSb | 
| dimanche matin | @lalmeras | Habibi | Maylis | |
| dimanche après-midi | @matthieusb | Habibi | @amine | @Chadys | 
Lightning Talks :
Accueil samedi matin : @matthieusb
Accueil dimanche matin : Maylis, Johana, @lalmeras, Antonio
Atelier pour les enfants : @lalmeras @Fefedu973
14 messages - 9 participant(e)s
Cette communication a été envoyée par mail à tous les membres présents et passés de l’association (2025, 2024, 2023).
2025-11-02 09:00 (Europe/Paris) → 2025-11-02 09:55 (Europe/Paris)
Vous recevez ce courriel aujourd’hui car vous êtes ou avez été membre de l’association ces dernières années. De ce fait, si vous êtes toujours membre cette année, vous êtes cordialement convoqué pour notre assemblée générale annuelle qui se tiendra durant la PyConFR 2025 ce dimanche 2 novembre à 9h.
Pour rappel, la PyConFR 2025 se tient au Campus René Cassin de Lyon, du jeudi 30 octobre au dimanche 2 novembre (plus d’informations : À propos − PyConFR 2025).
Le planning est disponible et les inscriptions sont ouvertes (plus d’informations : Actualités − PyConFR 2025) !
Si ce n’est pas déjà fait, nous vous invitons à renouveler votre adhésion pour l’année 2025 en suivant les liens suivants :
AFPY - Le site web de l'Association Francophone Python ou https://www.helloasso.com/associations/afpy/adhesions/adhesion-2025-a-l-afpy
Si vous ne savez pas si vous êtes à jour de cotisation, n’hésitez pas nous contacter par courriel à l’adresse secretaire@afpy.org.
Nous vous rappelons que si l’adhésion à l’association n’est pas obligatoire pour nous suivre et participer à nos événements, elle est néanmoins indispensable pour pouvoir voter aux résolutions lors de l’assemblée générale. De plus, votre adhésion est un soutien important pour les futures activités de l’association et, espérons-le, l’organisation d’une prochaine PyConFR, donc si vous pouvez vous le permettre nous vous en sommes reconnaissants !
L’ordre du jour de cette assemblée générale sera le suivant :
Des questions ou remarques diverses non assujetties à un vote de la part de l’assemblée pourront également être évoquées par les membres du Bureau, du Comité de Direction et/ou par les membres, cotisants ou non, de l’association. N’hésitez pas à nous transmettre par avance en réponse à ce mail les sujets que vous souhaiteriez potentiellement aborder lors de cette assemblée générale.
Pour votre information, selon l’article 11 de nos statuts, il sera nécessaire de renouveller un tiers des membres du Comité de Direction de l’association.
Si vous êtes intéressé·es par rejoindre le Comité Directeur, n’hésitez pas à vous signaler par retour de mail et à nous poser les questions que vous pouvez avoir.
Un sujet a également été ouvert sur notre Discourse : Renouvellement du Comité Directeur.
Vous trouverez ci-dessous la liste de l’ensemble des membres au Comité de Direction avec leur année de début de mandat ainsi que leur poste éventuel au sein du Bureau :
Dans le cas où il vous serait impossible de participer à l’assemblée générale de l’association, nous vous encourageons vivement à transmettre votre pouvoir à un autre membre (lui-même à jour de cotisation et présent lors de cette assemblée) de façon à ce que votre voix soit entendue. Pour cela, vous devez nous faire parvenir par courriel à l’adresse secretaire@afpy.org (en utilisant votre adresse d’adhésion) l’ensemble de vos coordonnées ainsi que celles du membre qui vous représentera en le mettant lui-même en copie de votre message et en y stipulant explicitement que vous lui accordez votre pouvoir de décision/vote.
Il ne sera pas possible de voter à distance.
Je profite également de cette communication pour vous rappeler les liens et ressources importantes pour rester en contact avec nous :
Merci à toutes et tous pour votre temps de lecture, j’espère vous retrouver à la PyConFR 2025 et surtout à notre assemblée générale ce dimanche 2 novembre à 9h !
À très bientôt !
1 message - 1 participant(e)
De l’intelligence artificielle au développement web, en passant par la data science et l’automatisation, Python continue de dominer le paysage technologique en 2025. Découvrez les raisons de cette popularité persistante et pourquoi les développeur·se·s continuent de privilégier ce langage polyvalent.

Retour sur ma participation au Geek Camp organisé par l'association Okiwi.
Geek Camp automne 2025 Organisé par l'association Okiwi, le Geek Camp rassemble le temps d'un week-end convivial la communauté tech bordelaise. L'organisation s'articule autour d'un grand forum ouvert, et qui dit ouvert, dit ouvert, donc si tu n'es ni de la tech ni de Bordeaux, tu es la·e bienvenu·e !
L'événement commence le vendredi soir et se termine le dimanche en début d'après midi. Et bien sûr, c'est ouvert aussi sur ces points : on peut ne venir que pour une partie ou juste pour dire bonjour ! C'est vraiment ouvert quoi. Le lieu, c'est la salle des fêtes de Ruffiac dans le 47. Un lieu très vert avec une jolie vue. Venez et vous verrez (inscriptions ici).
J'étais déjà venu à un Geek Camp juste avant de débuter chez Yaal Coop (encore merci Sam), lors de la session du printemps 2024. J'avais vraiment hâte de revenir pour profiter de cette ambiance si pleine de bienveillance et de passionné·e·s, curieux·se·s, brillant·e·s et animé·e·s d'un fort désir de partage.
Vendredi Je suis arrivé le vendredi soir et déjà les discussions s'animaient tout en préparant les lieux et invoquant le feu pour les grillades. Entre retrouvailles et discussions, la soirée s'est déroulée dans une ambiance de simplicité et de convivialité.
Sur un grand écran, Manu et Fabien présentent leurs projets en cours et invitent qui veut à participer à la résolution des problèmes du moment. Autour des tables, on s'arrête pour échanger sur l'incroyable ergonomic split keyboard cutomisé de Romain. Alors que certains n'ont pas encore regagné leur tente, nous partageons un moment ludique rythmé par les rires et les encouragements des observateurs.
Un forum ouvert, c'est quoi au fait ? Merci de me poser la question, je suis toujours heureux d'expliquer le principe. Et c'est très simple. Chacun pourra proposer un (ou plusieurs) atelier, thème de discussion, activité, présentation, demande d'aide, etc. en proposant une heure de début et une durée approximative (et même un lieu pour se retrouver). Ce moment, c'est la place de marché. Au préalable on a rappelé les règles et la loi qui régissent un forum ouvert: - règle 1 : ça commence quand ça commence et ça finit quand ça finit. Oui, il n'est pas toujours facile de commencer à l'heure promise. Parfois, on commence même plus tôt et pas à l'endroit convenu. Parfois, au bout de 10 minutes, on a fait le tour, répondu au besoin et on n'a pas tenu le temps prévu. Parfois on déborde. - règle 2 : les personnes présentes sont les bonnes personnes. On aurait peut-être aimé attirer cet expert·e sur le sujet, mais il fait autre chose. Alors on fait le sujet avec les personnes présentes. Peut-être même que celui qui voulait de l'aide va se retrouver à en apporter ou à initier. Et c'est très bien comme ça. - règle 3 : ce qui arrive est la meilleur chose qui pouvait se passer. Les trois règles forment un ensemble cohérent. Je n'ai pas eu le temps de faire mon atelier ? Alors c'est que j'ai certainement fait ce que je devais faire. Et c'est tout simplement ce qui pouvait arriver de mieux. - loi de la mobilité (dite des deux pieds) : si je suis quelque part et que je n'apprends rien et que je n'apporte rien, je dois faire autre chose. Ainsi, il est tout à fait admis de quitter un atelier et de revenir plus tard, il n'y a pas lieu de se vexer, on ne fait que se soumettre à cette loi. Il est tout à fait autorisé de buller dans son coin ou de faire ce que l'on veut seul ou accompagné. On peut aussi papillonner en passant d'un atelier à l'autre ou butiner telle une abeille en apportant un peu ici et là. Bref, un forum ouvert, c'est OUVERT dans tous les sens du terme. et, oui, ça a un côté assez magique, parce que ça fonctionne drôlement bien.
Samedi Le samedi va commencer tout doucement, tellement doucement que l'ouverture du forum ouvert (la place du marché) ne se fera qu'en fin de matinée.
Les premiers ateliers commencent vers 15h. Nous sommes un peu plus d'une vingtaine de participants et tout le monde est ravi·e et impatient·e de s'y mettre. Bon nombre d'entre nous se rendent devant le tableau pour choisir leur premier rendez-vous. J'ai choisi de rejoindre Sam et Manu qui préparaient un futur atelier pour Agenux. Un fizzbuzz en C#, SOLID, CUPID and cute DDD. Je ne connais pas le C#. J'ai l'habitude de ne pas savoir, je suis junior. Alors je m'assois et j'écoute, je regarde. Bonne nouvelle, je ne comprends certes pas les problèmes, mais j'arrive à suivre le fil. Alors, ça me va.
Vers 16h, je rejoins Arnaud qui souhaite tester un atelier de dev qui s'appuie sur le lambda-calcul pour le meet up lambda Nantes. Là, clairement, je n'ai pas le niveau et en plus, c'est la première fois que j'entends parler de lambda-calcul. Mais ça m'intéresse de suivre et Arnaud me fait rire. Je vais passer un bon moment à suivre les retours et les difficultés à capter les ressorts de l'exercice par les participants.
Vers 18h, je vais participer à la présentation d'un outil de craft présenté par Fabien. Son outil vise à identifier les difficultés d'une tâche afin d'évaluer aussi ce que je peux apprendre grâce aux autres, par moi-même ou ce qui doit être reporté ou vite abattu pour permettre d'avancer sans chercher à faire de la qualité. Nous échangeons à 4 ou 5 autour du sujet, proposons des amélioration, soulevons des question pour faire évoluer l'outil.
Je n'ai malheureusement pas eu le temps d'animer mon atelier : "gagner la confiance client". C'est ce qui devait arriver. Mais alors que la journée touche à sa fin, Florimond puis Fabien (un autre Fabien) me disent qu'ils auraient aimé y assister. Alors je décale mon atelier au dimanche matin 10h.
Le soir venu, le Geek Camp prend l'allure d'une soirée entre amis. On parle de tout et de rien, on rigole beaucoup, on échange nos idées, on parle de nous. Un beau moment entouré de gens qui ne jugent pas, juste du partage.
Certains enchaîneront les petits jeux, d'autre feront un gros jeu et, Arnaud, Guillaume et moi un trop gros. 3h pour le premier tour seulement. Arnaud avait eu le courage de découvrir les règles de ce wargame imposant durant la journée. C'était vraiment chouette : les bonnes personnes qui vivent ce qui pouvait se passer de meilleur.
Dimanche Le dimanche matin, je vais attendre que Florimond et Fabien soient prêts et je lance ma présentation. Nous serons rejoints par 6 ou 7 personnes. Je suis content de voir que le sujet intéresse. Je réponds à quelques questions puis on continue sur le sujet avant de dériver et de beaucoup rire de l'anecdote du chat de Florimond.
En fin de matinée, alors que Mikael remplace Xavier à la crêpière, nous faisons la clôture du forum ouvert. On va tous pouvoir s'exprimer en se promettant de tout faire pour que le prochain dure plus longtemps. Après tout avec le télétravail, ça devrait être possible. Certains se motivent pour organiser une promenade dans les environs.
Après un dernier repas, et un dernier coup d'éponge, chacun rentre chez soi, des souvenirs pleins la tête avec la ferme intention de revenir profiter le plus tôt possible.
Pour conclure, je tiens à remercier l'engagement et l'énergie de Xavier, Stéfanie et Sam (membres du bureau d'Okiwi) qui ont permis de faire de cette session une nouvelle réussite. Merci à vous !
Alors que je pleurais la disparition de sqlsoup et ré-écrivais pour la 5é fois le code minimal pour le remplacer je me suis dit ; tu pourrais offrir un module équivalent.
SQLRamen offre une interface minimaliste au dessus de sqlalchemy pour avoir une console introspective sur une base de données… Ce qui est avec une API différente ce que faisait SQLSoup qui a disparu avec sqlalchemy 2.
Le code est minimal et est basé sur automap.
python -m pip install sqlramen
from sqlramen import SQLRamen
db = SQLRamen("sqlite:///../pdca/aide")
user = db.query(db.table.user).filter_by(email="j@j.com").one()
[ l.message for l in user.comment_collection ]
# ['SCAM Manual\r\n\r\nA complete guide to create a guide with scam',
# ...
#  'future plan',
#  'further down']
db.query(db.table.comment.message).join(db.table.comment.user
    ).filter(db.table.user.email=="j@j.com").all()
# same
print([l for l in db.table.user.__table__.c])
# [Column('id', INTEGER(), table=<user>, primary_key=True, nullable=False),
# Column('pic_file', TEXT(), table=<user>),
# Column('name', TEXT(), table=<user>, nullable=False),
# Column('email', TEXT(), table=<user>, nullable=False),
# Column('secret_token', TEXT(), table=<user>),
# Column('secret_password', TEXT(), table=<user>, nullable=False)]
db.raw("select * from comment limit 5").all()
#[('2025-01-12 12:52:09', 1, 1, None, 'SCAM Manual\r\n\r\nA complete guide to create a guide with scam', None, 'story'),
# ('2025-01-12 13:28:14', 2, 1, 1, 'Synopsis\r\n\r\nA frontend to a pandoc toolchain to build a book in a supposedly new way.', None, 'story_item'),
# ('2025-01-12 13:28:47', 3, 1, 1, 'How to install and start it\r\n', None, 'story_item'),
# ('2025-01-12 13:29:48', 4, 1, 1, 'walkthrough to create this manual with the tool\r\n\r\nFirst post//landing page', None, 'story_item'),
# ('2025-01-12 13:30:23', 5, 1, 3, 'Quickstart', None, 'comment')]
Le module est livré avec un grapheur de base de données dont voici un exemple :
db_introspect sqlite:///../pdca/aide && xdot out.dot
Ce qui donne le résultat suivant

Commentaires : voir le flux Atom ouvrir dans le navigateur
255e émission « Libre à vous ! » de l’April. Podcast et programme :
Rendez‐vous en direct chaque mardi de 15 h 30 à 17 h sur 93,1 FM en Île‐de‐France. L’émission est diffusée simultanément sur le site Web de la radio Cause Commune.
Commentaires : voir le flux Atom ouvrir dans le navigateur
'lut,
Vous me direz, encore un journal sur l'IA ! C'est un sujet globalement plutôt décrié sur ce site qui met en exergue surtout ses méfaits, mais je tenais à faire part de mon expérience car ça peut être également un super outil du quotidien. A tel point que j'ai quasiment laissé tomber les moteurs de recherche, dont le premier d'entre eux et mon premier réflexe est maintenant d'abord de consulter chatgpt. Pourquoi chatgpt ? Simplement parce que je trouve encore les autres bien moins performants.
Je le consulte pour les petites problématiques du quotidien et du bricoleur du dimanche que je suis, quand je regarde mon historique de consultation, ça va aussi bien de la recherche d'une référence d'une pièce auto et la manière de l'installer, rattraper une anchoïade, installer un programmateur dans un tableau électrique, faire un joint d'étanchéité sous l'eau ou trouver le mode d'emploi d'un réfrigérateur ! Et dans le domaine informatique, ça couvre aussi bien des scripts bash pour divers usage et des problèmes variés rencontrés sur divers logiciels.
Tout n'est surtout pas à prendre au pied de la lettre, il y a parfois des erreurs grossières, des informations datées voire obsolètes, il lui arrive également de tourner en rond et de radoter sans avancer, mais le plus souvent il me donne les bonnes pistes et par itération successive, j'arrive très souvent à mes fins pour résoudre mon problème initial.
S'il fallait illustrer mes propos par un exemple concret, dans un précédent journal j'avais évoqué que j'avais déployé chez moi un système de vidéosurveillance basé sur zoneminder. J'avais acheté un ensemble de caméras adhoc dont certains à bas coût d'une vingtaine d'euros dont les caractéristiques semblaient intéressantes pour l'usage que je voulais en faire. A vrai dire je n'ai jamais pu installer ces caméras bas coût car l'adresse du flux vidéo change régulièrement ce qui les rend inutilisables pour les logiciels comme zoneminder ou frigate qui ne gèrent que les adresses fixes, contraignant à utiliser l'application propriétaire Android fournie avec.
J'ai buté des mois sur ce problème en tentant vainement diverses solutions et en mettant au point sans succès très laborieusement un script python. Dernièrement j'ai fait appel à chatgpt et en 2h de temps tout était en place. chatgpt m'a aidé à créer un script qui récupère à intervalle régulier l'adresse du stream vidéo, adresse qu'il enregistre ensuite dans le fichier de configuration de mediamtx, serveur de flux vidéo qui rediffuse le flux avec une adresse fixe accessible de zoneminder ou frigate.
Je ne suis pas sûr que j'y serais arrivé seul, ou alors au bout de je ne sais combien d'heure de vaines programmations. Je me rends compte que chatgpt a évolué également, car je lui avais posé la même question il y a plusieurs mois, il a été incapable d'y répondre et ne m'avait pas donné à l'époque de pistes sérieuses pour avancer. Pour autant je ne pense pas que l'IA va envoyer les développeurs au chômage, je pense plutôt qu'il va les aider à être bien plus efficace.
Il en reste pas moins que ceux qui sont intéressés par ce sujet spécifique peuvent toujours consulter cette page pour retrouver ce fameux script python.
Commentaires : voir le flux Atom ouvrir dans le navigateur