IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

probleme de Python debutant


Sujet :

Python

  1. #1
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut probleme de Python debutant
    salut a tous, j essaye de configuger mon master.cfg de Buildbot, afin de pouvoir realiser des tests automatiques avec des modules dans mon repository, et j ai des problemes au niveau de la configursation, au fait il s agit du langage python et je suis tout debutant.

    je declare une classe RepositoryScheduler et plus bas j appelle cette classe et j ai des errors comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Typeerror: __init__() takes at least 3 non-keyword arguments (2 given)
    est ce que quelque peut m aider?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class RepositoryScheduler(Scheduler):
            def __init__(self=None, name=None,repository=None, shouldntBeSet=NotABranch, treeStableTimer=None, builderNames=None, branch=NotABranch, fileIsImportant=None, properties={}, categories=None, change_filter=None):
                    Scheduler.__init__(self=None,name=None,shouldntBeSet=NotABranch, treeStableTimer=None, builderNames=None, branch=NotABranch, fileIsImportant=None, properties={}, categories=None, change_filter=None)
    		self.repository = repository
     
     
     
     
    s_trunk2=RepositoryScheduler(name="trunk-only-2",shouldntBeSet=NotABranch, treeStableTimer=1*60, builderNames=None, branch=NotABranch, fileIsImportant=None, properties={}, categories=None, change_filter=None)
    c['schedulers'].append (s_trunk2)
     
    test2_steps = [s(step.SVN,  mode="update", baseURL=svnserver + 'test2/'),
    		s(step.Compile, command="make build"),
    		s(step.Test, command="make test")]

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    Citation Envoyé par billates Voir le message
    je declare une classe RepositoryScheduler et plus bas j appelle cette classe et j ai des errors comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Typeerror: __init__() takes at least 3 non-keyword arguments (2 given)
    est ce que quelque peut m aider?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class RepositoryScheduler(Scheduler):
            def __init__(self=None, name=None,repository=None, shouldntBeSet=NotABranch, treeStableTimer=None, builderNames=None, branch=NotABranch, fileIsImportant=None, properties={}, categories=None, change_filter=None):
     
    #[snip]
    le paramètre self en python n'est pas un paramètre optionnel. C'est un paramètre spécial qui est donné par le moteur python et qui fait référence à l'objet en lui-même (équivalent du pointeur 'this' en C++ si cela t'éclaire).

    cf. object.__init__ (python doc)

    Donc ça devrait ressembler à ça:

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class RepositoryScheduler(Scheduler):
            def __init__(self, name=None,repository=None, shouldntBeSet=NotABranch, treeStableTimer=None, builderNames=None, branch=NotABranch, fileIsImportant=None, properties={}, categories=None, change_filter=None):
                    Scheduler.__init__(self, name=None,shouldntBeSet=NotABranch, treeStableTimer=None, builderNames=None, branch=NotABranch, fileIsImportant=None, properties={}, categories=None, change_filter=None)
    		self.repository = repository

    le nom 'self' est une convention - donc non obligatoire - mais très fortement recommandé:

    cf. Python Tutorial; chap. 9.4 Random Remarks

    Citation Envoyé par Python Docs
    Often, the first argument of a method is called self. This is nothing more than a convention: the name self has absolutely no special meaning to Python. Note, however, that by not following the convention your code may be less readable to other Python programmers, and it is also conceivable that a class browser program might be written that relies upon such a convention.
    Note1: Pour les listes de paramètres longue comme le bras, tu peux aussi utiliser *args ou **kwargs. cf. chapitres 4.7.2 ; 4.7.3; 4.7.4 de python tutorial.

    Note2: Tu peux aussi utiliser super() en lieu et place de "BaseClass.__init__(self, [args...]) "

    J'espère que ça répond à ta question

  3. #3
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Neitsa
    Note1: Pour les listes de paramètres longue comme le bras, tu peux aussi utiliser *args ou **kwargs. cf. chapitres 4.7.2 ; 4.7.3; 4.7.4 de python tutorial.

    Note2: Tu peux aussi utiliser super() en lieu et place de "BaseClass.__init__(self, [args...]) "
    Just do it:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class RepositoryScheduler(Scheduler):
            def __init__(self, name=None, repository=None, **kwds):
                    super(RepositoryScheduler, self).__init__(name, **kwds)
    		self.repository = repository
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci pour la reponse Neitsa,

    j ai essaye comme tu as dit et j obtiens l erreur suivante:

    AssertionError: The buildeNames= argument to Scheduler must be a list of Builder description name <i.e. the 'name' key of the Builder specification dictionary>

    Paux tu me dire quelle genre de nom je dois entrer ici

    merci
    Citation Envoyé par Neitsa Voir le message
    Bonjour,



    le paramètre self en python n'est pas un paramètre optionnel. C'est un paramètre spécial qui est donné par le moteur python et qui fait référence à l'objet en lui-même (équivalent du pointeur 'this' en C++ si cela t'éclaire).

    cf. object.__init__ (python doc)

    Donc ça devrait ressembler à ça:

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    class RepositoryScheduler(Scheduler):
            def __init__(self, name=None,repository=None, shouldntBeSet=NotABranch, treeStableTimer=None, builderNames=None, branch=NotABranch, fileIsImportant=None, properties={}, categories=None, change_filter=None):
                    Scheduler.__init__(self, name=None,shouldntBeSet=NotABranch, treeStableTimer=None, builderNames=None, branch=NotABranch, fileIsImportant=None, properties={}, categories=None, change_filter=None)
    		self.repository = repository

    le nom 'self' est une convention - donc non obligatoire - mais très fortement recommandé:

    cf. Python Tutorial; chap. 9.4 Random Remarks



    Note1: Pour les listes de paramètres longue comme le bras, tu peux aussi utiliser *args ou **kwargs. cf. chapitres 4.7.2 ; 4.7.3; 4.7.4 de python tutorial.

    Note2: Tu peux aussi utiliser super() en lieu et place de "BaseClass.__init__(self, [args...]) "

    J'espère que ça répond à ta question

  5. #5
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    Merci pour ta reponse Wiztricks, mais cela ne semble pas aussi marcher chez moi.

    j ai l erreur suivante:
    TypeError: super<> argument 1 must be type, not classobj

    qu'en penses tu?

    merci

    Citation Envoyé par wiztricks Voir le message
    Salut,


    Just do it:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class RepositoryScheduler(Scheduler):
            def __init__(self, name=None, repository=None, **kwds):
                    super(RepositoryScheduler, self).__init__(name, **kwds)
    		self.repository = repository
    - W

  6. #6
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Citation Envoyé par billates Voir le message
    Merci pour la reponse Neitsa,

    j ai essaye comme tu as dit et j obtiens l erreur suivante:

    AssertionError: The buildeNames= argument to Scheduler must be a list of Builder description name <i.e. the 'name' key of the Builder specification dictionary>

    Paux tu me dire quelle genre de nom je dois entrer ici

    merci
    A priori, buildeNames doit être une instance de 'list' ou 'tuple' et doit contenir des chaînes de caractères (donc pas 'None').

    cf. code source lignes 63-67:

    Code source sur BuildBot GIT

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
            errmsg = ("The builderNames argument to a scheduler must be a list "
                      "of Builder names.")
            assert isinstance(builderNames, (list, tuple)), errmsg
            for b in builderNames:
                assert isinstance(b, str), errmsg

    donc qque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    myBuilderNames = ("foo", "bar", "baz")
    et tu passes mybuilderNames au constructeur via le keyword 'builderNames'. Le problème c'est que j'ignore à quoi correspondent ces builderNames, c'est spécifique à l'application, pas à python...

    @param builderNames: list of builders this scheduler may start
    @type builderNames: list of unicode
    Merci pour ta reponse Wiztricks, mais cela ne semble pas aussi marcher chez moi.

    j ai l erreur suivante:
    TypeError: super<> argument 1 must be type, not classobj
    A confirmer, mais je crois que le problème est que la classe 'Scheduler' n'est pas une "new style class" et n'hérite donc pas de la classe 'object', du coup super() ne fonctionne pas avec ces classes là...

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par billates Voir le message
    qu'en penses tu?
    Vieilles classes.
    Mon point était surtout sur l'utilisation du **kwds évitant de re-tapper les arguments.
    Une forme du genre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    class RepositoryScheduler(Scheduler):
            def __init__(self, **kwds):
                    self.repository = kwds.pop('repository', None)
                    Scheduler.__init__(self, **kwds)
    pourrait aussi marcher.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  8. #8
    Futur Membre du Club
    Inscrit en
    Décembre 2009
    Messages
    11
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 11
    Points : 6
    Points
    6
    Par défaut
    ben salut a vous, jusqu'a present j ai pas pu resoudre ce probleme. Je suis actuellement entrain de chercher des exemples de master.cfg avec buildbot concernant le scheduler...

Discussions similaires

  1. Probleme cour python
    Par mali_67 dans le forum Tkinter
    Réponses: 21
    Dernier message: 16/04/2008, 14h58
  2. Probleme de methodes ( debutant )
    Par pracede2005 dans le forum Langage
    Réponses: 4
    Dernier message: 18/04/2007, 14h56
  3. probleme de regex! (debutant)
    Par kriskikout dans le forum Langage
    Réponses: 7
    Dernier message: 25/06/2006, 23h00
  4. probleme d'un debutant
    Par jalilc dans le forum Balisage (X)HTML et validation W3C
    Réponses: 4
    Dernier message: 14/06/2006, 19h54
  5. Probleme simple de debutant avec INSERT TO et UPDATE
    Par Tom_Cruise dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/08/2005, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo