Ankündigung

Einklappen
Keine Ankündigung bisher.

Main Problem merging subtrees, probably invalid YAML file

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

    Main Problem merging subtrees, probably invalid YAML file

    Hallo,

    [ich hatte dies schon auf gitter.im gefragt, aber vielleicht hat hier ja jemand eine Idee)
    woran kann denn das hier liegen?

    Code:
    2020-01-30 20:15:30 DEBUG Main parse_yaml: Add filename = Licht.yaml to items
    2020-01-30 20:15:30 ERROR Main Problem merging subtrees, probably invalid YAML file
    2020-01-30 20:15:30 DEBUG Main parse_yaml: Parsing file Lohberger.yaml
    2020-01-30 20:15:30 INFO Main Loading '/usr/local/smarthome/items/Lohberger.yaml' to 'OrderedDict'
    2020-01-30 20:15:30 DEBUG Main parse_yaml: Checking if file Lohberger.yaml contains 'struct' attribute
    2020-01-30 20:15:30 DEBUG Main parse_yaml: Add filename = Lohberger.yaml to items
    2020-01-30 20:15:30 DEBUG Main parse_yaml: Parsing file Reed.yaml
    2020-01-30 20:15:30 INFO Main Loading '/usr/local/smarthome/items/Reed.yaml' to 'OrderedDict'
    2020-01-30 20:15:30 DEBUG Main parse_yaml: Checking if file Reed.yaml contains 'struct' attribute
    2020-01-30 20:15:30 DEBUG Main parse_yaml: Add filename = Reed.yaml to items
    2020-01-30 20:15:30 ERROR Main Problem merging subtrees, probably invalid YAML file
    2020-01-30 20:15:30 DEBUG Main parse_yaml: Parsing file Steckdosen.yaml
    (Problem merging subtrees)
    Die Dateien sind laut yamlint.com valide
    Und es fehlen tatsächlich einige (nicht alle) Items aus Licht.yaml
    Und zwar sind es nicht --wie ich es sonst bei yaml-Fehlern kenne- alle Items nach einer bestimmten Zeile, sondern nur das Esszimmer.

    Gruß,
    Hendrik

    #2
    Im develop branch ist die Fehlermeldung im vergangenen Juni erweitert worden. Du könntest folgendes tun:

    die lib.config aus dem develop Tree bei Dir einspielen (sollte auch unter v1.6 laufen)

    oder nur (risikoloser): Die Funktion merge() aus der lib.config bei Dir durch die Funktion merge() aus der lib.config des develop Branches ersetzen.


    Viele Grüße
    Martin

    Stay away from negative people. They have a problem for every solution.

    Kommentar


      #3
      Mache ich. Danke

      Kommentar


        #4
        Hallo,

        das ergibt nun
        Code:
        2020-02-01 17:21:36 ERROR Main Problem merging subtrees, probably invalid YAML file with entry None. Error: 'str' object has no attribute 'setdefault'
        2020-02-01 17:21:36 DEBUG Main parse_yaml: Parsing file Steckdosen.yaml
        "problem" ist also None (weil destination None ist, ich bin nicht sicher, ob das schon ungewöhnlich ist) und es gibt eine Exception , da str kein attribut 'setdefault' hat.
        Die funktion setdefault wird ja als destination.setdefault aufgerufen; Da destination None ist, ist klar, dass es die Funktion nicht gibt. Aber mich wundert, dass hier nicht "NoneType has no attribut..." kommt

        gruß,
        Hendrik

        Kommentar


          #5
          Dann hast Du eine Datei, die beim Einlesen keine Einträge enthält, die zu einem dict eingelesen werden können.
          Viele Grüße
          Martin

          Stay away from negative people. They have a problem for every solution.

          Kommentar


            #6
            Hallo,

            nein, das war es nicht.
            Ich hatte eine YAML die so aussah:
            Code:
            eg:
              Esszimmer:
            
              Kueche: 
                Dunstabzugshaube: 
                  type: bool
                  mqtt...
            Esszimmer hatte also keine Children.
            Ist nicht erlaubt, aber eine Prüfung wäre gut, denke ich.

            Gruß,
            Hendrik

            Kommentar


              #7
              Das kann nicht die Ursache sein. Ich habe das nachgestellt:

              Code:
              test:
                  node_ohne_daten:
              
                  dict:
                      var_dict1:
                      type: dict
                      value: '{"k1": "v1", "k2": "v2"}'
              und habe keine Fehlermeldung im Log. node_ohne_daten taucht selbstverständlich nicht im Itemtree auf, da der Subtree keine Items enthält.

              Wie kommst Du darauf, dass das nicht erlaubt wäre?
              Viele Grüße
              Martin

              Stay away from negative people. They have a problem for every solution.

              Kommentar


                #8
                Hallo,

                ich meinte, dass mindestens ein Type nötig wäre.
                Ich habe gerade nochmal nachgesehen, was ich geändert habe. Ich habe tatsächlich nur am leeren Item etwas geändert.
                Ich glaube, das Problem taucht nur auf wenn du folgendes machst:

                a.yaml:
                Code:
                  
                 test:    
                    node_ohne_daten:    
                
                    dict:    
                        var_dict1:    
                        type: dict    
                        value: '{"k1": "v1", "k2": "v2"}'
                b.yaml
                Code:
                test:
                  node_ohne_daten:
                Gruß,
                Hendrik

                Kommentar


                  #9
                  Klar, dann enthält die gesamte Datei keine Items, also wird None zurück geliefert.

                  Ich könnte höchstens den Hinweis in die Doku aufnehmen, dass man eine item.yaml Datei nur anlegen soll, wenn man darin auch ein Item definieren möchte.
                  Viele Grüße
                  Martin

                  Stay away from negative people. They have a problem for every solution.

                  Kommentar


                    #10
                    Deine Einschätzung der Ursache kann nicht stimmen.

                    Ich habe noch mal ganz ohne Items nachgestellt:

                    Code:
                    test:
                        test_leer:
                            node_ohne_daten:
                                leaf_ohne_daten:
                    erzeugt keinen Fehler. Es wird wie vorgesehen ein leerer Teilbaum mit allen Nodes angelegt. Das Leaf (leaf_ohne_daten) wird nicht angelegt, da leafs Items sein müssen um angelegt zu werden.
                    Viele Grüße
                    Martin

                    Stay away from negative people. They have a problem for every solution.

                    Kommentar


                      #11
                      Hallo,

                      mein Beispiel war schlecht.
                      a.yaml
                      Code:
                        
                       test:    
                          node_ohne_daten:    
                      
                          dict:    
                              var_dict1:    
                              type: dict    
                              value: '{"k1": "v1", "k2": "v2"}'
                      b.yaml
                      Code:
                      test:
                        node_ohne_daten:
                           node_mit_daten:
                              type: bool
                      test1:
                        node_mit_daten
                        type: bool
                      Beim Mischen des node_ohne daten aus a.yaml mit dem "node_ohne_daten" der aber Daten hat ging es bei mir schief.


                      Gruß,
                      Hendrik

                      Kommentar


                        #12
                        Mit Deinem letzten Beispiel habe ich das Problem nachstellen können. Ich habe einen Fix in develop gepusht.

                        Kannst Du aus der aktuellen lib.config nochmal die merge() Routine in Deine lib.config übernehmen? Der Bug sollte nun weg sein.
                        Viele Grüße
                        Martin

                        Stay away from negative people. They have a problem for every solution.

                        Kommentar


                          #13
                          Hallo,

                          danke, ich kann bestätigen, dass das den Bug fixt.

                          Gruß,
                          Hendrik

                          Kommentar

                          Lädt...
                          X