Ankündigung

Einklappen

Serverwartung 21.2.



Am 21.2. im Laufe des späten Abends wird eine Serverwartung durchgeführt. Das Forum ist dadurch für gut zwei Stunden nicht erreichbar.
Es wird eine Wartungsseite geschaltet.

Mehr anzeigen
Weniger anzeigen

Backend-Plugin Fehler

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Backend-Plugin Fehler

    Hallo zusammen,

    folgenden Fehler bekomme ich mit dem Backend-Server:

    Code:
    2018-12-02  22:11:15 ERROR    CP Server Thread-9 [02/Dec/2018:22:11:15] HTTP
    Traceback (most recent call last):
      File "/usr/local/lib/python3.5/dist-packages/cherrypy/_cprequest.py", line 628, in respond
        self._do_respond(path_info)
      File "/usr/local/lib/python3.5/dist-packages/cherrypy/_cprequest.py", line 687, in _do_respond
        response.body = self.handler()
      File "/usr/local/lib/python3.5/dist-packages/cherrypy/lib/encoding.py", line 219, in __call__
        self.body = self.oldhandler(*args, **kwargs)
      File "/usr/local/lib/python3.5/dist-packages/cherrypy/_cpdispatch.py", line 54, in __call__
        return self.callable(*self.args, **self.kwargs)
      File "/usr/local/smarthome/plugins/backend/BackendSysteminfo.py", line 76, in system_html
        ipv6 = Utils.get_local_ipv6_address()
      File "/usr/local/smarthome/lib/utils.py", line 182, in get_local_ipv6_address
        s.close()
    UnboundLocalError: local variable 's' referenced before assignment
    SmarthomeNG und Plugins sind von heute (02.12.18 21 Uhr), alles aus dem DEV-Zweig. System-Umgebung ist ein Docker-Image (Ubuntu).
    Kann gerne debuggen, um den Fehler einzukreisen.

    Gruss,

    Stefan
    Sonos

    #2
    Ah ja, tatsächlich ist da ein Bug in der lib/utils.py:

    Code:
        @staticmethod
        def get_local_ipv6_address():
            """
            Get's local ipv6 address
            TODO: What if more than one interface present ?
    
            :return: IPv6 address as a string
            :rtype: string
            """
            try:
                s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
                s.connect(('2001:4860:4860::8888', 1))
                IP = s.getsockname()[0]
            except:
                IP = '::1'
            finally:
                s.close()
            return IP
    Hier muss im finally-Block die Variable "s" auf None geprüft werden.

    In der Funktion "get_local_ipv4_address" ist der gleiche Fehler.

    Gruss,

    Stefan
    Zuletzt geändert von pfischi; 02.12.2018, 22:27.
    Sonos

    Kommentar


      #3
      wie würde die gefixte utils.py dann aussehen? Habe grade rumprobiert, ging aber entweder nicht durch den compiler oder hatte nicht den gewünschten nutzen.

      Danke im voraus.



      Kommentar


        #4
        Das hat jemand im dev Branch bereits gefixt:

        Code:
        @staticmethod
        def get_local_ipv6_address():
             """
             Get's local ipv6 address
             TODO: What if more than one interface present ?
        
                :return: IPv6 address as a string
                :rtype: string
                """
             try:
                 s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
                 s.connect(('2001:4860:4860::8888', 1))
                 IP = s.getsockname()[0]
             except:
                 IP = '::1'
            finally:
                 if 's' in locals():
                     s.close()
           return IP
        Viele Grüße
        Martin

        There is no cloud. It's only someone else's computer.

        Kommentar


          #5
          Danke dir! --> läuft.

          Kommentar

          Lädt...
          X