1

Voilà mon petit problème du jour :

J'ai d'abord une classe PySyncSet, dans un fichier pysync.py

Ensuite, j'ai deux autres classes class BookSet(pysync.PySyncSet) et class CollectionSet(pysync.PySyncSet). Il n'y a aucun lien entre ces deux classes (ou alors je suis passé à côté…)

Je crée une instance de chacune de ces deux classes, et j'utilise une de leur méthode.
collections = CollectionSet(server, client)
collections.synchronize()
entries = BookSet(server, client)
entries.synchronize()


Bon, ça plante, rien que de très normal cheeky

Le problème, c'est que ça plante lors de l'appel à entries.synchronize, et ça plante à l'intérieur dans une méthode CollectionSet, alors qu'il n'y a aucune raison pour que CollectionSet soit appelé...

Autres remarques :
- si je supprime l'appel à collections.synchronize, ça fonctionne confus
- j'ai dupliqué le fichier pysync en pysync2, et changé la définition de CollectionSet pour étendre la même classe, mais dans un module différent CollectionSet(pysync2.PySyncSet), et là, ça marche.

Y aurait-il quelque chose dans l'héritage que je n'ai pas saisi ?
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2

C’est quoi ton code ? (les constructeurs au moins)
Sinon, comment sais-tu que c’est l’appel entries.synchronies qui plante ? D’après ce que tu dis on dirait plutôt que c’est collections.synchronize().
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

3

Je sais que c'est entries.synchronies qui plante parce que si je fais un print "machintruc" entre entries.synchronize() et collections.synchronize(), il est affiché, et c'est justement ça qui est bizarre hehe
ation of entries entries = BookSet(server, client) entries.synchronize() entries.close() J'ai un peu fait le ménage en supprimant la majorité du code, histoire que ça soit lisible : #!/usr/bin/python # coding=utf-8 import pysync import pysync2 import sqlite3 import os.path import os import string import fileinput import datetime import time import shutil import sys import getopt client = "/Users/flanker/Downloads/Bookpedia" client = "/Users/flanker/Library/Application Support/Bookpedia" server = "/Users/flanker/Downloads/Bookpedia2" class CollectionSet(pysync.PySyncSet):     clientDirectory = None     serverDirectory = None     def __init__(self, server, client):         self.clientDirectory = client         self.serverDirectory = server     def close(self):         self.serverDataBase.commit()     def newElement(self, uuid):         return CollectionElement(uuid, self)      class CollectionElement(pysync.PySyncElement):     CollectionBase = None     def __init__(self, uuid, CollectionBase):         self.uuid = uuid         self.CollectionBase = CollectionBase     def add(self, side):         if not self.quiet:     def remove(self, side):         if not self.quiet:     def modify(self, side):         if not self.quiet:     def display(self, side):         if self.verbose:     def diff(self):         if self.quiet: class BookSet(pysync2.PySyncSet):     def __init__(self, server, client):         self.clientDirectory = client         self.serverDirectory = server     def close(self):         self.last_synchronization = datetime.datetime.now()     def newElement(self, uuid):         return BookElement(uuid, self) class BookElement(pysync2.PySyncElement):     BookBase = None     def __init__(self, uuid, BookBase):         self.uuid = uuid         self.BookBase = BookBase     def add(self, side):         if not self.quiet:     def remove(self, side):         if not self.quiet:     def modify(self, side):         if not self.quiet:     def display(self, side):         if self.verbose:     def diff(self):         if self.quiet: # Synchronization of collections collections = CollectionSet(server, client) collections.synchronize() collections.close() # Synchroniz
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

4

Dans ton constructeur il faut que tu appelles le constructeur de la classe parente :
class CollectionSet(pysync.PySyncSet):
    def __init__(self, server, client):
        super(pysync.PySyncSet, self).__init__()
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

5

Autre chose, le code suivant :
class A:
  a1 = 1
  def __init__(self):
    self.a1 = 2

a = A()
print A.a1
print a.a1

Affichera 1 puis 2.
Le premier a1 est un atribut statique, accessible par « A.a1 » (la classe définit simplement un nouvel espace de noms)
Le second a1 est un attribut de l’instance a.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

6

Bon, j'avais un peu laissé ce bug de côté, mais j'y suis à nouveau confronté. Voici le code source complet : http://www.mirari.fr/qraO

Après un peu de réflexion, j'ai compris une des sources du problème :

class pere_list:
    list = []
    def __init__(self):
        return


dans l'init, je ne reconstruis pas une nouvelle liste. Rajouter un list = [] dans l'init corrige tout ça smile
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

7

cf ./5 Je pense que tu voudrais supprimer le liste = [] qui est juste en-dessous de la déclaration de la classe.
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »

8

non, parce que sinon la variable n'est pas déclarée sad
Ou alors faut que je trouve une autre façon déclarer les variables trifaq
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

9

Tu veux un attribut statique ?

Pour déclarer un attribut c’est comme ça :
class MaClasse:
  def __init__(self):
    self.ma_liste = []
avatar
« Quand le dernier arbre sera abattu, la dernière rivière empoisonnée, le dernier poisson capturé, alors vous découvrirez que l'argent ne se mange pas. »