Nous sommes le Ven 29 Mars, 2024 00:13
Supprimer les cookies

Page 2 sur 2Précédent 1, 2Framakey 2 - Synapps et proxy

Image Image Forum dédié à notre projet de clé USB nomade libre sous Windows

Mar 09 Oct, 2012 23:31

Bonjour,

@fat115: Je n'ai pas le temps de corriger ça maintenant, je te donne quelques pistes pour améliorer un peu ça, mais ce n'est pas le réel problème. (Ce qui est dans le spoiler n'est pas important, mais je m'en suis rendu compte après l'avoir écrit, donc je le laisse ;) )
Code: Tout sélectionner
AttributeError: 'bool' object has no attribute 'lower'

Ce problème a lieu quand l'argument de la fonction str2bool est déjà un booléen, ce qui peut arriver pour plusieurs raisons:

Par exemple à la ligne 37 du fichier preferences.py, si proxycheckbox n'est pas défini, la valeur par défaut doit être "False" (chaine de caractères) et non False (booléen).

À mon avis, la meilleure façon de gérer ça serait de modifier directement la méthode database.get_config et de ne plus utiliser str2bool :
Code: Tout sélectionner
def get_config(self, name=None, default=None):
    if name == None:
        return self.query("SELECT * FROM config")
    else:
        self.curseur.execute("SELECT * FROM config WHERE name = ?", (name,))
        value = self.curseur.fetchone()
        if value == None:
            return default
        else:
            if value['value'] == None:
                return default
            elif value['value'].isdigit():
                return int(value['value'])
            elif value['value'].lower() in ("yes", "true"):
                return True
            elif value['value'].lower() in ("no", "false"):
                return False
            else:
                return value['value']


C'est pas très propre, mais à mon avis c'est ce qu'il a de plus simple à utiliser.

À mon avis, l'idéal serait d'ajouter une colonne "type" à la table config, qui serait soit "bool", soit "string", soit "int", et de convertir la valeur dans les méthodes get_config et set_config en fonction de son type, mais c'est compliqué à mettre en place si on veut que ça marche sans devoir supprimer la base de donnée...

En fait ce n'est qu'une conséquence du problème précédent, et d'une petite erreur de ma part:
Dans main.py, remplace la fonction thread par
Code: Tout sélectionner
def thread(dialog):
   global finished, database
   
   try:
      database = db.database()
      logging.debug("Version : %s" % database.get_config("version"))
      database.update()
   except IOError as message:
      errordialog = gtk.MessageDialog(None, gtk.DIALOG_MODAL|gtk.DIALOG_DESTROY_WITH_PARENT, gtk.MESSAGE_ERROR, gtk.BUTTONS_CLOSE, str(message))
      errordialog.run()
      errordialog.destroy()
   else:
      finished = True
   
   dialog.destroy()
   
   return False

Sans cette modification, l'erreur de connexion interrompais la création de la base de données, mais pas le programme, du coup proxycheckbox n'était pas initialisé, et on tombe sur le problème que j'ai expliqué dans le spoiler, d'où l'erreur.
Bref, c'est toujours une erreur due au proxy.

Je pense qu'il faut essayer autant que possible d'utiliser les paramètres système (pour la portabilité c'est beaucoup mieux...).

@ReBa:
Dans le fichier main.py, ajoute
Code: Tout sélectionner
   import urllib2
   logging.debug("Proxies : " + str(urllib2.getproxies()))

après
Code: Tout sélectionner
def main(argv):
   global finished, database, session

(en respectant l'indentation: une tabulation avant chaque ligne)

Et envoie moi par mp le contenu du fichier debug.log (il peut potentiellement y avoir des données privées dans la première ligne (mot de passe...), tu peux les remplacer par n'importe quoi, mais dans ce cas vérifie qu'elles correspondent bien au proxy que tu veux utiliser).
Roromis

Messages : 228
Géo : Nord

Mer 10 Oct, 2012 07:54

Merci à tous les 2

Je vais faire mon possible pour vous répondre par mp mais je risque de manquer de temps ces prochains jours
Merci de votre patience ;)

@Roromis
Sur quelle version dois-je intégrer tes corrections ? Sur la version beta de Fat115 ou bien sur celle de la Framakey ?
ReBa

Messages : 8
Géo : Paris

Mer 10 Oct, 2012 08:31

Bonjour

Je viens de faire un nouveau test en changeant les paramètres proxy du système

Initialement j'avais un script de configuration automatique de type "http://xxxx.yyyy.fr/proxy.pac"
Dans ce cas j'obtiens une chaine vide avec le debug que propose Roromis

J'ai changé pour mettre une adresse de proxy avec un port.
Dans ce cas j'obtiens bien les paramètres proxy dans la chaine de debug de Roromis

Je ferai d'autres tests ultérieurement
ReBa

Messages : 8
Géo : Paris

Mer 10 Oct, 2012 23:40

Bonjour,

En fait, les fichiers .pac sont des fichiers javascript. Du coup, les déchiffrer nécessiterait un interpréteur javascript... J'ai fait quelques recherches, à priori ça n'existe pas en python pur, mais on devrait pouvoir ajouter une bibliothèque à PythonPortable.

Mais avant d'utiliser le fichier .pac, il faut y avoir accès. Comment configures-tu ton proxy?
La clé de registre "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings" contient-elle l'adresse de ton fichier .pac? (je ne sais plus trop comment on fait pour la consulter, à priori Menu démarrer -> Exécuter -> tape regedit)
Roromis

Messages : 228
Géo : Nord

Jeu 11 Oct, 2012 04:32

Roromis a écrit:Je pense qu'il faut essayer autant que possible d'utiliser les paramètres système (pour la portabilité c'est beaucoup mieux...).

@ReBa:
Dans le fichier main.py, ajoute
Code: Tout sélectionner
   import urllib2
   logging.debug("Proxies : " + str(urllib2.getproxies()))

après
Code: Tout sélectionner
def main(argv):
   global finished, database, session

(en respectant l'indentation: une tabulation avant chaque ligne)
urllib2.getproxies() ???? Mais d'où qu'elle sort donc cette fonction non documentée ?
fat115

Avatar de l’utilisateur
Messages : 930
Géo : Ardèche ... du nord

Jeu 11 Oct, 2012 05:57

En fait c'est juste un "raccourci" vers urllib.getproxies.
Roromis

Messages : 228
Géo : Nord

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit