Tema: Re: Q: YAML ir reikšmių pakeitimas
Autorius: Grzegorz Brzęczyszczykiewicz
Data: 2025-08-25 19:56:17
2025-05-20 23:48, Laimis rašė:

Prisėdau toliau gadinti kodą ir įlipau į štai tokią problemą (Python 3.11.9, PyYAML 6.0.2): panašu, kad 'pyyaml' biblioteka išlaiko alias'us, kas mano atvejus yra Labai Blogai. 'ruamel.yaml' elgiasi taip pat.

Kaip atsikratyti 'paveldėtų' YAML alias'ų Python duomenų struktūrose?


Man reikia lokaliai pakeisti reikšmes ir nieko kol kas nesugalvojau geriau nei įdėti 'override' bloką. Idėjiškai teisinga: ontologijos dirba, kiekvienam elementui galima sudėti reikiamas reikšmes (nes dabar daužau sau rankas už juokingas reikšmes kai kuriuose duomenyse).

YAML gabalas:
    - id: Meteorologinė stotelė
      classifications:
        NSIK LF: L
        NSIK LT: LC
        NSIK LK: "%BUA1010"
      ifcType: *type_e
      memo: Elementai, nenumatyti kitose projekto dalyse
      stages: &stages_s1_s2_s3_s4_equipment
        s1:
          lod: 275
          properties:
            <<: *prop_u
            <<: *prop_g
            <<: *prop_vis
            <<: *prop_e
            <<: *prop_equipment
        # s2:
          # lod: 200
          # properties:
            # <<: *prop
        s3:
          lod: 300
          properties:
            <<: *prop_g
            <<: *prop_vis
            <<: *prop_e
        s4:
          lod: 350
          properties:
            <<: *prop_u
            <<: *prop_equipment
...
    - id: Kintamos srovės maitinimo blokas
      examples:
      - AC maitinimo blokas
      memo: Elementai, nenumatyti kitose projekto dalyse
      classifications:
        NSIK LF: L
        NSIK LT: LC
        NSIK LK: TCA
      ifcType:
      - IfcElectricFlowStorageDevice
      - IfcEnergyConversionDevice
      - IfcFlowStorageDevice
      - IfcDistributionElement
      stages:
        <<: *stages_s1_s2_s3_s4_equipment
      override:
        Name:
          examples:
            - AC/AC maitinimo blokas




Būtų viskas ok, Python kode tą bloką pasigaunu ir pakeičiu reikšmes. Debug'as:

[Kintamos srovės maitinimo blokas] OVERRIDE: 'Name' with {'examples': ['AC/AC maitinimo blokas']}

[Kintamos srovės maitinimo blokas][s1]          got match for 'Name' as {'examples': ['AC/AC maitinimo blokas']} in 'Kintamos srovės maitinimo blokas': {}
                Adding 'Name' to '{'Name': {}, 'Type': {}, 'Pset_ConstructionAdministration.SpecificationSectionNumber': {}, 'Pset_ElementComponentCommon.Status': {}, 'Tag': {}, 'Pset_QuantityTakeOff.Height': {}, 'Pset_QuantityTakeOff.Width': {}, 'Pset_QuantityTakeOff.Length': {}, 'VVK.Material': {}, 'VVK.Finish': {}, 'VVK.Colour': {}, 'Pset_ElectricalDeviceCommon.RatedVoltage': {}, 'Pset_ElectricalDeviceCommon.NominalPowerConsumption': {}, 'Pset_ElectricalDeviceCommon.IP_Code': {}, 'Pset_ElectricalDeviceCommon.IK_Code': {}, 'Pset_ElectricalDeviceCommon.InsulationStandardClass': {}, 'Pset_ElectricalDeviceCommon.RatedCurrent': {}, 'Pset_ElectricalDeviceCommon.NominalFrequencyRange': {}}'
                        After override: '{'Name': {'examples': ['AC/AC maitinimo blokas']}, 'Type': {}, 'Pset_ConstructionAdministration.SpecificationSectionNumber': {}, 'Pset_ElementComponentCommon.Status': {}, 'Tag': {}, 'Pset_QuantityTakeOff.Height': {}, 'Pset_QuantityTakeOff.Width': {}, 'Pset_QuantityTakeOff.Length': {}, 'VVK.Material': {}, 'VVK.Finish': {}, 'VVK.Colour': {}, 'Pset_ElectricalDeviceCommon.RatedVoltage': {}, 'Pset_ElectricalDeviceCommon.NominalPowerConsumption': {}, 'Pset_ElectricalDeviceCommon.IP_Code': {}, 'Pset_ElectricalDeviceCommon.IK_Code': {}, 'Pset_ElectricalDeviceCommon.InsulationStandardClass': {}, 'Pset_ElectricalDeviceCommon.RatedCurrent': {}, 'Pset_ElectricalDeviceCommon.NominalFrequencyRange': {}}'

[Kintamos srovės maitinimo blokas][s3]           No 'Name' in dict_keys(['Pset_QuantityTakeOff.Height', 'Pset_QuantityTakeOff.Width', 'Pset_QuantityTakeOff.Length', 'VVK.Material', 'VVK.Finish', 'VVK.Colour', 'Pset_ElectricalDeviceCommon.RatedVoltage', 'Pset_ElectricalDeviceCommon.NominalPowerConsumption'])

[Kintamos srovės maitinimo blokas][s4]          got match for 'Name' as {'examples': ['AC/AC maitinimo blokas']} in 'Kintamos srovės maitinimo blokas': {}
                Adding 'Name' to '{'Name': {}, 'Type': {}, 'Pset_ConstructionAdministration.SpecificationSectionNumber': {}, 'Pset_ElementComponentCommon.Status': {}, 'Tag': {}, 'Pset_ElectricalDeviceCommon.RatedVoltage': {}, 'Pset_ElectricalDeviceCommon.NominalPowerConsumption': {}, 'Pset_ElectricalDeviceCommon.IP_Code': {}, 'Pset_ElectricalDeviceCommon.IK_Code': {}, 'Pset_ElectricalDeviceCommon.InsulationStandardClass': {}, 'Pset_ElectricalDeviceCommon.RatedCurrent': {},
'Pset_ElectricalDeviceCommon.NominalFrequencyRange': {}}'
                        After override: '{'Name': {'examples': ['AC/AC maitinimo blokas']}, 'Type': {}, 'Pset_ConstructionAdministration.SpecificationSectionNumber': {}, 'Pset_ElementComponentCommon.Status': {}, 'Tag': {}, 'Pset_ElectricalDeviceCommon.RatedVoltage': {}, 'Pset_ElectricalDeviceCommon.NominalPowerConsumption': {}, 'Pset_ElectricalDeviceCommon.IP_Code': {}, 'Pset_ElectricalDeviceCommon.IK_Code': {}, 'Pset_ElectricalDeviceCommon.InsulationStandardClass': {}, 'Pset_ElectricalDeviceCommon.RatedCurrent': {}, 'Pset_ElectricalDeviceCommon.NominalFrequencyRange': {}}'





Bet išvedus į YAML, šis pakeitimas nukeliauja ir tiems elementams, kuriems jis neskirtas:

YAML gabalas:

    - id: Meteorologinė stotelė
      classifications:
        NSIK LF: L
        NSIK LT: LC
        NSIK LK: '%BUA1010'
      ifcType: *id028
      memo: Elementai, nenumatyti kitose projekto dalyse
      stages:
        s1: &id035
          lod: 275
          properties:
            Name: &id032
              examples:
              - AC/AC maitinimo blokas
            Type: *id020
...
    - id: Dažnio keitiklis
      examples:
      - 1F dažnio keitiklis
      - 3F dažnio keitiklis
      memo: Elementai, nenumatyti kitose projekto dalyse
      classifications:
        NSIK LF: L
        NSIK LT: LC
        NSIK LK: TAC
      ifcType: *id028
      stages:
        s1: *id035
        s3: *id036
        s4: *id037
    - id: Kintamos srovės maitinimo blokas
      examples:
      - AC maitinimo blokas
      memo: Elementai, nenumatyti kitose projekto dalyse
      classifications:
        NSIK LF: L
        NSIK LT: LC
        NSIK LK: TCA
      ifcType:
      - IfcElectricFlowStorageDevice
      - IfcEnergyConversionDevice
      - IfcFlowStorageDevice
      - IfcDistributionElement
      stages:
        s1: *id035
        s3: *id036
        s4: *id037
    - id: Pastovios srovės maitinimo blokas
      examples:
      - DC maitinimo blokas
      memo: Elementai, nenumatyti kitose projekto dalyse
      classifications:
        NSIK LF: L
        NSIK LT: LC
        NSIK LK: TCB
      ifcType:
      - IfcElectricFlowStorageDevice
      - IfcEnergyConversionDevice
      - IfcFlowStorageDevice
      - IfcDistributionElement
      stages:
        s1: *id035
        s3: *id036
        s4: *id037

-- 
Grzegorz

Chrząszczyrzewoszyce, powiat Łękołody
3Dastronomyagricultureaudioautosautos.audiautos.audioautos.binariesautos.bmwautos.clubautos.fordautos.hondacrxautos.japanautos.mercedesautos.opelautos.sportautos.volvoautos.vwaviaavia.binariesbankcardsbinariesbooksbuildingcinemacommercecomp.hardwarecomp.softwarecomp.lietuvinimascomp.networksculturedarbas.ieskaudarbas.siulaudesigneconomicselectronicsfaunafauna.aquafauna.binariesfishingflorafotofoto.binariesgamesgames.csgames.onlinegsmgurmanaihumourhumour.binariesinternetlawmicrosoftmotomusicmusic.binariesmusic.instrumentsmusic.LT.binariesnavigacijaphppoliticsprogrammingrpgsportstudyingsveikatatalktesttranslationtransportationtraveltravel.binariestvunixvideovideo.binarieswatersportswwwwww.flashpdaautos.supermama.ltmobiledarbasretro.3Dretro.agricultureretro.astronomyretro.audioretro.autosretro.autos.audiretro.autos.audioretro.autos.binariesretro.autos.bmwretro.autos.clubretro.autos.fordretro.autos.hondacrxretro.autos.japanretro.autos.mercedesretro.autos.opelretro.autos.sportretro.autos.supermamaretro.autos.supermama.ltretro.autos.volvoretro.autos.vwretro.aviaretro.avia.binariesretro.bankcardsretro.beosretro.binariesretro.booksretro.buildingretro.cinemaretro.commerceretro.compretro.comp.hardwareretro.comp.lietuvinimasretro.comp.networksretro.comp.softwareretro.cultureretro.darbasretro.darbas.ieskauretro.darbas.siulauretro.designretro.economicsretro.electronicsretro.e-vejasretro.faunaretro.fauna.aquaretro.fauna.binariesretro.fishingretro.floraretro.fotoretro.foto.binariesretro.gamesretro.games.csretro.games.onlineretro.games.rpgretro.genealogijaretro.gsmretro.gurmanairetro.humourretro.humour.binariesretro.internetretro.YZFretro.YZF.nebukretro.YZF.nebuk.netikintisretro.YZF.nebuk.netikintis.bukretro.YZF.nebuk.netikintis.buk.tikintisretro.lawretro.microsoftretro.mobileretro.motoretro.musicretro.music.binariesretro.music.instrumentsretro.music.LTretro.music.LT.binariesretro.navigacijaretro.newsretro.news.taisyklesretro.newuserretro.pdaretro.phpretro.politicsretro.programmingretro.rpgretro.sportretro.studyingretro.sveikataretro.talkretro.translationretro.transportationretro.travelretro.travel.binariesretro.tvretro.unixretro.videoretro.video.binariesretro.watersportsretro.wwwretro.www.flashdiylt.rkm.news.announcelt.rkm.news.newuser