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