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