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 :

Aide, Keyerror avec Python Brisa


Sujet :

Python

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut Aide, Keyerror avec Python Brisa
    Bonjour,

    Je suis entain de travailler sur la création d'une plate forme UPnP AV / DLNA.
    Je travail sous Ubuntu 11.10 et Python 2.7.

    J'essaye actuellement d'utiliser le code de Python Brisa lien : http://brisa.garage.maemo.org/
    Avec le tutorial suivant : http://www.linux-magazine.com/Issues...-Plug-and-Play

    Afin de réaliser un Control Point AV pilotable par ligne de commande.

    Mais j'ai une erreur à lors l'utilisation de ce programme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Traceback (most recent call last):
      File "CommandlLineControlPointAv.py", line 93, in <module>
        main()
      File "CommandlLineControlPointAv.py", line 89, in main
        cmdline.run()
      File "CommandlLineControlPointAv.py", line 68, in run
        self.cmd_browse(c.split(' ')[1])
      File "CommandlLineControlPointAv.py", line 48, in cmd_browse
        resultat = self.browse(id, 'BrowseDirectChildren', '*', 0, 10)['Result']
      File "/usr/local/lib/python2.7/dist-packages/brisa/upnp/control_point/control_point_av.py", line 137, in browse
        elt = Element.from_string(browse_response['Result'])
    KeyError: 'Result'
    La partie de code est la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    def browse(self, object_id, browse_flag, filter, starting_index,
                   requested_count, sort_criteria="dc:title"):
            """ Browses media servers.
     
            @param object_id: object id
            @param browse_flag: BrowseDirectChildren or BrowseMetadata
            @param filter: a filter to indicate which metadata properties
                           are to be returned. Usually "*".
            @param starting_index: starting index to consider the requested count
            @param requested_count: requested number of entries
            @param sort_criteria: sorting criteria
     
            @type object_id: string
            @type browse_flag: string
            @type filter: string
            @type starting_index: int
            @type requested_count: int
            @type sort_criteria: string
     
            @return: a list of containers and items
            @rtype: list
            """
            service = self.get_cd_service()
            browse_response = service.Browse(ObjectID=str(object_id),
                                             BrowseFlag=browse_flag,
                                             Filter=filter,
                                             StartingIndex=starting_index,
                                             RequestedCount=requested_count,
                                             SortCriteria=sort_criteria)
            elt = Element.from_string(browse_response['Result'])
            browse_response['Result'] = elt.get_items()
            return browse_response
    Qu'elle peut être la cause de cette erreur?
    Et qu'elle serait la solution pour l'éviter?

    Merci d'avance

    Rémi

  2. #2
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Ne serait-ce pas simplement:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    elt = Element.from_string(browse_response)
    browse_response['Result'] = elt.get_items()

    Conseil gratuit: Utilise les balises code, j'ai mis du temps à réaliser que l'appel à service.Browse() prenait six lignes.

  3. #3
    Candidat au Club
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Désolé pour les balises je suis allé un peu vite.

    En faisant votre solution cela me créer une erreur plus loins.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    Traceback (most recent call last):
      File "CommandlLineControlPointAv.py", line 93, in <module>
        main()
      File "CommandlLineControlPointAv.py", line 89, in main
        cmdline.run()
      File "CommandlLineControlPointAv.py", line 68, in run
        self.cmd_browse(c.split(' ')[1])
      File "CommandlLineControlPointAv.py", line 48, in cmd_browse
        resultat = self.browse(id, 'BrowseDirectChildren', '*', 0, 10)['Result']
      File "/usr/local/lib/python2.7/dist-packages/brisa/upnp/control_point/control_point_av.py", line 144, in browse
        elt = Element.from_string(browse_response)
      File "/usr/local/lib/python2.7/dist-packages/brisa/upnp/didl/didl_lite.py", line 2671, in from_string
        elt = parse_xml(aString)
      File "/usr/local/lib/python2.7/dist-packages/brisa/core/network.py", line 197, in parse_xml
        p.feed(decode(data))
      File "/usr/lib/python2.7/xml/etree/ElementTree.py", line 1622, in feed
        self._parser.Parse(data, 0)
    TypeError: must be string or read-only buffer, not dict

  4. #4
    Expert éminent

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 300
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Non, mais ma réponse m'était inspirée par la première erreur, c'était sans garantie.

    Quoiqu'il en soit, puisqu'il semble bien que browse_response soit un dictionnaire, pourquoi ne pas faire un print browse_response ? Histoire de voir son contenu ou au moins ses clés.

  5. #5
    Candidat au Club
    Inscrit en
    Janvier 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Janvier 2013
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Le print de browse_response

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    browse_response : {'faultCode': 's:Client', 'faultString': 'UPnPError', '__header__': {}, 'detail': ''}
    Il est vrai que j'ai du mal à saisir et gérer ces dictionnaire.

    A noté que browse est utilsié de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resultat = self.browse(id, 'BrowseDirectChildren', '*', 0, 10)['Result']

Discussions similaires

  1. aide pour coder et modéliser un écosystème avec python
    Par auribat44 dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 12/02/2015, 19h03
  2. création de base mySQL avec python
    Par preacher_man dans le forum Bibliothèques tierces
    Réponses: 7
    Dernier message: 23/06/2006, 19h38
  3. Les 128 derniers bits d'un fichier en ligne avec Python ?
    Par ecocentric dans le forum Réseau/Web
    Réponses: 7
    Dernier message: 26/09/2005, 12h40
  4. besoin d'aide fonction avec fichier (debutant)
    Par boby61 dans le forum Débuter
    Réponses: 9
    Dernier message: 14/03/2005, 11h22

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