Archives de l’auteur : Numa

Symfony : Se débarrasser de « sensio/framework-extra-bundle »

Note rapide

remplacer les

use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;

par

use Symfony\Component\Security\Http\Attribute\IsGranted;

et l’utilisation

* @IsGranted("editProject", subject="entity")

par

#[IsGranted('editProject', 'entity')]

remplacer les

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Entity;

par

use Symfony\Bridge\Doctrine\Attribute\MapEntity;

et l’utilisation

/**
* @Entity("project", expr="repository.findDetails(id)")
*/

public function emptyElements(Project $entity)

par

public function emptyElements(
        #[MapEntity(disabled: true, expr: 'repository.findDetails(id)')]
       Project $entity
        )

pour les paramConverter, ce cas peut etre supprimé directement

* @ParamConverter("day", options={"format": "Y-m-d"})

Une fois tous les élements de ce type supprimé/remplacer on peux supprimer le sensio/framework-extra-bundle du fichier composer.json et mettre à jour

Observation : Chenille du Sphinx de l’euphorbe

Ce 12 juillet 2023 dans le jardin une grosse chenille (j’ai mesurer 8cm !) au couleurs criarde (rouge, blanche et noire) m’interpelle. Après quelques recherche j’en déduit qu’il s’agit de la chenille du Sphinx de l’euphorbe et j’apprends par la même occasion que la plante qu’elle est en train de grignoter et donc l’Euphorbe.
Chenille du Sphinx de l'euphorbe

Blog : Découverte et mémoire

Je vais à présent utiliser cette section comme mémoire perso (que je découvre, que j’observe, dont je veux me souvenir etc..)

L’idée initiale était de me développer un outil perso stockant toutes mes notes, avec une fonctionnalité « il y’a un an, deux ans, trois ans, etc ». je n’ai pas le temps de m’en occuper pour l’instant mais je vais remplir des notes via ce blog pour une potentielle utilisation future.

Je place dans une catégorie « Temps qui passe » pour pouvoir extraire facilement. Pour l’instant aussi dans la catégorie « Partage » (que j’utilise finalement très peu et probablement plus) simplement pour que ce soit à part du blog technique. C’est donc disponible publiquement, bien que personne ne le sache…

Je commence cette pratique le 23 juin 2023 mais je publierais sans doute des événements dans le passé pour placer quelques notes déjà prise ailleurs.

Mon premier script Python

Pour marquer la date d’une pierre blanche !

Après plus de 15 ans de bons et loyaux service en PHP (et ce n’est pas terminé), j’ai l’occasion de travailler sur mon premier projet Python, et en ce mercredi 15 Février 2023 j’ai développé mon premier script dans ce langage.

Alors oui c’est basique mais je le pose ici pour le souvenir

import psycopg2
import csv

from psycopg2 import Error
#config :
# id de la liste que l'on veux remplir
id_liste = 300
# nom du fichier csv
filename = 'liste300.csv'
#
try:
    #connexion à la base
    conn = psycopg2.connect(database="nom_de_la_base",
                        host="localhost",
                        user="user_base",
                        password="pass_base",
                        port="5432")

    cursor = conn.cursor()
    #on vidange la liste au cas ou elle ne soit pas vierge
    cursor.execute("DELETE FROM taxonomie.cor_nom_liste WHERE id_liste = %s", (id_liste,))

    #parcours CSV
    nbInsert = 0
    nbError = 0;
    with open(filename, 'r') as csvfile:
        datareader = csv.reader(csvfile)
        for row in datareader:
            if row[0] != "cd_nom":
                #on recherche le cd_nom dans la table bib_nom pour récupérer la valeur id_nom
                cd_nom = row[0]
                cursor.execute("SELECT * FROM taxonomie.bib_noms WHERE cd_nom = %s", (cd_nom,))
                #on indique si la valeur n'existe pas
                nom = cursor.fetchone()
                if nom is None:
                    #raise Exception('cd_nom "' + str(cd_nom) + '" introuvable')
                    print('cd_nom "' + str(cd_nom) + '" introuvable ('+row[16]+') ')
                    nbError += 1
                else:
                    #insérer les données
                    id_nom = nom[0]
                    cursor.execute("INSERT INTO taxonomie.cor_nom_liste (id_nom, id_liste) VALUES(%s, %s)", (id_nom, id_liste,))
                    nbInsert += 1

    #commit
    conn.commit()
    print(str(nbInsert)+" lignes insérées")
    print(str(nbError)+" lignes ignorées")

except (Exception, Error) as error:
    print("Le script d'import retourne l'erreur : ", error)
finally:
    if conn:
        cursor.close()
        conn.close()

J’en profite pour remercier mon partenaire Iulian de me sortir de ma zone de confort, et qui après le NodeJs me lance sur Python. Je le remercie aussi de me permettre de me régaler sur d’autre projets avec l’utilisation de Symfony mon framework adoré !

Staphylin noir : Rencontre avec ce long insecte noir

J’ai croisé cet alien ce 4 Janvier dans la maison.
Je me suis bien demandé de quoi il s’agissait, je n’avais pas souvenir d’en avoir déjà vu.
Une simple recherche web « long insecte noir » à suffit pour m’apporter la réponse, il s’agit du Staphylin noir.

Voir wikipedia, d’où j’ai récupéré la photo d’illustration qui correspnd totalement à ce que j’ai vu.
https://fr.wikipedia.org/wiki/Ocypus_olens

Staphylin noir