From b79e20b8e7d11a9cb3479cc35e3adeceafe1f66b Mon Sep 17 00:00:00 2001 From: Joel Bender Date: Wed, 24 Nov 2021 01:03:20 -0500 Subject: [PATCH 01/13] works with 2.3, 2.4, 3.0.0-pr1 --- bsyncpy/bsync.py | 378 ++++++++++++++++++----------------- bsyncpy/bsyncpy_generator.py | 71 +++---- 2 files changed, 224 insertions(+), 225 deletions(-) diff --git a/bsyncpy/bsync.py b/bsyncpy/bsync.py index bd06eed..489f355 100644 --- a/bsyncpy/bsync.py +++ b/bsyncpy/bsync.py @@ -387,44 +387,6 @@ class PremisesNotes(BSElement): element_type = "xs:string" -# eGRIDRegionCode -class eGRIDRegionCode(BSElement): - """WARNING: eGRIDRegionCode will be deprecated in BuildingSync 3.0 - use eGRIDSubregionCodes.""" - - element_type = "xs:string" - element_enumerations = [ - "AKGD", - "AKMS", - "AZNM", - "CAMX", - "ERCT", - "FRCC", - "HIMS", - "HIOA", - "MORE", - "MROE", - "MROW", - "NEWE", - "NWPP", - "NYCW", - "NYLI", - "NYUP", - "PRMS", - "RFCE", - "RFCM", - "RFCW", - "RMPA", - "SPNO", - "SPSO", - "SRMV", - "SRMW", - "SRSO", - "SRTV", - "SRVC", - "Other", - ] - - # WeatherDataStationID class WeatherDataStationID(BSElement): """For an actual weather station, this is the ID assigned by National Oceanic and Atmospheric Administration (NOAA). For hourly energy simulations, this is the six digit code associated with the hourly weather data, generally found in the name of the weather data file, as well as in the header of the data file. (NNNNNN) WARNING: This element is being deprecated, use WeatherStations/WeatherStation/WeatherDataStationID instead""" @@ -547,7 +509,7 @@ class PubliclySubsidized(BSElement): class NumberOfBusinesses(BSElement): """Number of separate business tenants within the premises.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # FloorsAboveGrade @@ -568,28 +530,28 @@ class FloorsBelowGrade(BSElement): class ConditionedFloorsAboveGrade(BSElement): """Nominal number of floors which are fully above ground and are conditioned.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # BuildingType.ConditionedFloorsBelowGrade class ConditionedFloorsBelowGrade(BSElement): """Nominal number of floors which are fully underground and are conditioned.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # BuildingType.UnconditionedFloorsAboveGrade class UnconditionedFloorsAboveGrade(BSElement): """Nominal number of floors which are fully above ground and are unconditioned.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # BuildingType.UnconditionedFloorsBelowGrade class UnconditionedFloorsBelowGrade(BSElement): """Nominal number of floors which are fully underground and are unconditioned.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # BuildingAutomationSystem @@ -624,7 +586,7 @@ class AspectRatio(BSElement): class Perimeter(BSElement): """Length of a line forming the boundary around the premises. (ft)""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # BuildingType.TotalExteriorAboveGradeWallArea @@ -738,7 +700,7 @@ class PercentLeasedByOwner(BSElement): class NumberOfFacilitiesOnSite(BSElement): """Number of facilities on the site.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # BuildingType.OperatorType @@ -967,7 +929,7 @@ class FootprintShape(BSElement): class NumberOfSides(BSElement): """Number of sides of the section of the building. Inclusion of this element is recommended when auc:FootprintShape is Other.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # Story @@ -1030,7 +992,7 @@ class ZOffset(BSElement): class FloorsPartiallyBelowGrade(BSElement): """Number of floors which are partially underground.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # BuildingType.Sections.Section.FloorToFloorHeight @@ -1157,7 +1119,7 @@ class PercentageOfCommonSpace(BSElement): class ConditionedVolume(BSElement): """Heated or cooled air volume of a premises. (ft3)""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # SpaceType.OccupancyScheduleIDs.OccupancyScheduleID @@ -2941,7 +2903,7 @@ class ExistingSystemRemoved(BSElement): class MeasureRank(BSElement): """Sequence in which the measure was analyzed relative to other measures. Ranking should be 1 if it is analyzed first, 2 if analyzed after Measure 1 is applied, etc. This accounts for interactive effects between measures. Ranking may be 1 for all measures if they are not analyzed as a package.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # MeasureType.MeasureSavingsAnalysis.OtherCostAnnualSavings @@ -3317,32 +3279,6 @@ class FrequencyOfMaintenance(BSElement): ] -# HVACSystemType.PrimaryHVACSystemType -class PrimaryHVACSystemType(BSElement): - """Primary HVAC type. WARNING: This element is being deprecated, use PrincipalHVACSystemType instead.""" - - element_type = "xs:string" - element_enumerations = [ - "Packaged Terminal Air Conditioner", - "Four Pipe Fan Coil Unit", - "Packaged Terminal Heat Pump", - "Packaged Rooftop Air Conditioner", - "Packaged Rooftop Heat Pump", - "Packaged Rooftop VAV with Hot Water Reheat", - "Packaged Rooftop VAV with Electric Reheat", - "VAV with Hot Water Reheat", - "VAV with Electric Reheat", - "Warm Air Furnace", - "Ventilation Only", - "Dedicated Outdoor Air System", - "Water Loop Heat Pump", - "Ground Source Heat Pump", - "VRF Terminal Unit", - "Chilled Beam", - "Other", - ] - - # HVACSystemType.PrincipalHVACSystemType class PrincipalHVACSystemType(BSElement): """Principal HVAC type.""" @@ -3373,7 +3309,7 @@ class PrincipalHVACSystemType(BSElement): class Quantity(BSElement): """Number of systems of this type.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # HVACSystemType.HeatingAndCoolingSystems.HeatingSources.HeatingSource.HeatingSourceType.Furnace.FurnaceType @@ -3637,6 +3573,13 @@ class SourceHeatingPlantID(BSElement): "IDref", # IDREF ] +# OutputCapacity +class OutputCapacity(BSElement): + """Output capacity of equipment. WARNING: This element is being deprecated, use Capacity instead""" + + element_type = "xs:decimal" + + # HVACSystemType.HeatingAndCoolingSystems.HeatingSources.HeatingSource.HeatingSourceCondition class HeatingSourceCondition(EquipmentCondition): pass @@ -3687,13 +3630,6 @@ class InputCapacity(BSElement): element_type = "xs:decimal" -# OutputCapacity -class OutputCapacity(BSElement): - """Output capacity of equipment. WARNING: This element is being deprecated, use Capacity instead""" - - element_type = "xs:decimal" - - # CapacityUnits class CapacityUnits(BSElement): """Units used to measure capacity.""" @@ -4086,13 +4022,6 @@ class MinimumOutsideAirPercentage(BSElement): element_type = "xs:decimal" -# DuctSystemType.MaximumOAFlowRate -class MaximumOAFlowRate(BSElement): - """WARNING:This element is being deprecated in version 3.0, use MaximumOutsideAirFlowRate. The maximum flow rate of outside air that the system is able to deliver. For systems with economizing or demand controlled ventilation capability, this is the outdoor air flow rate when the outdoor air (OA) damper is fully open and the fan speed is at maximum. (cfm)""" - - element_type = "xs:decimal" - - # DuctSystemType.MaximumOutsideAirFlowRate class MaximumOutsideAirFlowRate(BSElement): """The maximum flow rate of outside air that the system is able to deliver. For systems with economizing or demand controlled ventilation capability, this is the outdoor air flow rate when the outdoor air (OA) damper is fully open and the fan speed is at maximum. (cfm)""" @@ -4582,7 +4511,7 @@ class CoolingTowerCellControl(BSElement): class CellCount(BSElement): """The number of cells in the cooling tower. Each cell has its own fan, water flow allowing for responding to lower load conditions.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # CondenserPlantType.GroundSource.WaterSideEconomizer.WaterSideEconomizerTemperatureSetpoint @@ -4605,7 +4534,7 @@ class GroundSourceType(BSElement): # CondenserPlantType.GroundSource.WellCount class WellCount(BSElement): - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # OtherHVACSystemType.OtherHVACSystemCondition @@ -4876,14 +4805,14 @@ class LampPower(BSElement): class NumberOfLampsPerLuminaire(BSElement): """The number of lamps in the luminaire.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # LightingSystemType.NumberOfLampsPerBallast class NumberOfLampsPerBallast(BSElement): """The number of lamps driven by the ballast.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # LightingSystemType.NumberOfBallastsPerLuminaire @@ -4897,7 +4826,7 @@ class NumberOfBallastsPerLuminaire(BSElement): class NumberOfLuminaires(BSElement): """Total number of luminaires/fixtures in this system.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # LightingSystemType.OutsideLighting @@ -5237,7 +5166,7 @@ class HeatExchanger(BSElement): class RecirculationLoopCount(BSElement): """The total number of hot water recirculation loops coming from and returning to a specific water heater.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # DomesticHotWaterSystemType.Recirculation.RecirculationFlowRate @@ -5324,7 +5253,7 @@ class TypeOfCookingEquipment(BSElement): class NumberOfMeals(BSElement): """Number of meals cooked per year using this equipment.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # CookingSystemType.CookingEnergyPerMeal @@ -5345,7 +5274,7 @@ class DailyWaterUse(BSElement): class CompressorUnloaderStages(BSElement): """Number of stages available for unloading the compressor.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # RefrigerationSystemType.RefrigerationSystemCategory.CentralRefrigerationSystem.RefrigerationCompressor.RefrigerationCompressorType @@ -5402,7 +5331,7 @@ class SuctionVaporTemperature(BSElement): class NumberOfRefrigerantReturnLines(BSElement): """Number of return lines from refrigerated cases to the compressor.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # RefrigerationSystemType.RefrigerationSystemCategory.CentralRefrigerationSystem.EvaporatorPressureRegulators @@ -5786,13 +5715,6 @@ class FanSize(BSElement): element_type = "xs:decimal" -# FanSystemType.InstalledFlowRate -class InstalledFlowRate(BSElement): - """Actual flow rate of fan under normal operating conditions. WARNING: this element is being deprecated, use FanInstalledFlowRate instead. (cfm)""" - - element_type = "xs:decimal" - - # FanSystemType.FanInstalledFlowRate class FanInstalledFlowRate(BSElement): """Actual flow rate of fan under normal operating conditions. (cfm)""" @@ -5892,21 +5814,21 @@ class DesignStaticPressure(BSElement): class NumberOfDiscreteFanSpeedsCooling(BSElement): """The number of discrete operating speeds for the supply-fan motor when the unit is in cooling mode, excluding "off." Only used if flow control is "stepped." """ - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # FanSystemType.NumberOfDiscreteFanSpeedsHeating class NumberOfDiscreteFanSpeedsHeating(BSElement): """The number of discrete operating speeds for the supply-fan motor when the unit is in heating mode, excluding "off." Only used if flow control is "stepped." """ - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # MotorSystemType.MotorRPM class MotorRPM(BSElement): """The number of full revolutions in a unit of time and is used to assign MotorEfficiency. 2008 NR ACM table N2-20 has four speeds: 3600 rpm, 1800 rpm, 1200 rpm, 900 rpm.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # MotorSystemType.MotorBrakeHP @@ -5948,7 +5870,7 @@ class FullLoadAmps(BSElement): class MotorPoleCount(BSElement): """The number of pole electromagnetic windings in the motor's stator and used to assign MotorEfficiency. Pole count is always a multiple of 2.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # MotorSystemType.MotorEnclosureType @@ -6487,7 +6409,7 @@ class RoofExteriorSolarAbsorptance(BSElement): class RoofExteriorSolarReflectanceIndex(BSElement): """A measure of a roof's ability to reject solar heat, as shown by a small temperature rise. It is defined so that a standard black (reflectance 0.05, emittance 0.90) is 0 and a standard white (reflectance 0.80, emittance 0.90) is 100.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # RoofSystemType.RoofExteriorThermalAbsorptance @@ -7353,14 +7275,14 @@ class ThermalMedium(BSElement): class PhotovoltaicSystemNumberOfModulesPerArray(BSElement): """Number of modules in each array of a photovoltaic system.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # OnsiteStorageTransmissionGenerationSystemType.EnergyConversionType.Generation.OnsiteGenerationType.PV.PhotovoltaicSystemNumberOfArrays class PhotovoltaicSystemNumberOfArrays(BSElement): """Number of arrays in a photovoltaic system.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # OnsiteStorageTransmissionGenerationSystemType.EnergyConversionType.Generation.OnsiteGenerationType.PV.PhotovoltaicSystemMaximumPowerOutput @@ -7647,7 +7569,7 @@ class SpatialUnitType(BSElement): class NumberOfUnits(BSElement): """Number of individual units within the premises.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # SpatialUnitTypeType.UnitDensity @@ -7698,7 +7620,7 @@ class StreetNumberPrefix(BSElement): class StreetNumberNumeric(BSElement): """The numeric identifier for a land parcel, house, building, or other location along a thoroughfare or within a community.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # Address.StreetAddressDetail.Complex.StreetNumberSuffix @@ -8781,7 +8703,7 @@ class ControlStrategyDaylightingType(BSElement): class ControlSteps(BSElement): """For stepped dimming, the number of equally spaced control steps.""" - element_type = "xs:integer" + element_type = "xs:nonNegativeInteger" # CommunicationProtocolAnalogType @@ -10145,7 +10067,7 @@ class MeasureName(BSElement): "Clean and/or repair", "Implement training and/or documentation", "Upgrade operating protocols, calibration, and/or sequencing", - "Convert to Cleaner Fuels", + "Convert to cleaner fuels", "Other", ] @@ -10189,7 +10111,6 @@ class MeasureName(BSElement): element_type = "xs:string" element_enumerations = [ - "Add heat recovery", "Add or upgrade BAS/EMS/EMCS", "Add or upgrade controls", "Convert pneumatic controls to DDC", @@ -10215,7 +10136,8 @@ class MeasureName(BSElement): "Improve distribution fans", "Improve ventilation fans", "Convert CV system to VAV system", - "Repair leaks / seal ducts", + "Repair leaks in ducts", + "Seal ducts", "Add duct insulation", "Balance ventilation/distribution system", "Repair or replace HVAC damper and controller", @@ -10228,14 +10150,12 @@ class MeasureName(BSElement): "Install solar ventilation preheating system", "Add or repair economizer", "Add energy recovery", - "Add or replace cooling tower", "Install thermal destratification fans", "Install demand control ventilation", "Install gas cooling", "Install air source heat pump", "Install variable refrigerant flow system", "Capture and return condensate", - "Install or Upgrade Master Venting", "Clean and/or repair", "Implement training and/or documentation", "Upgrade operating protocols, calibration, and/or sequencing", @@ -10298,7 +10218,8 @@ class MeasureName(BSElement): "Insulate thermal bypasses", "Increase ceiling insulation", "Increase roof insulation", - "Insulate attic hatch / stair box", + "Insulate attic hatch", + "Insulate attic stair box", "Add attic/knee wall insulation", "Install cool/green roof", "Add shading devices", @@ -10335,7 +10256,6 @@ class MeasureName(BSElement): "Replace or upgrade water heater", "Add energy recovery", "Install solar hot water system", - "Separate SHW from heating", "Replace with higher efficiency pump", "Replace with variable speed pump", "Install or upgrade master venting", @@ -10557,7 +10477,6 @@ class MeasureName(BSElement): element_type = "xs:string" element_enumerations = [ "Change to more favorable rate schedule", - "Energy cost reduction through rate adjustments - uncategorized", "Energy service billing and meter auditing recommendations", "Change to lower energy cost supplier(s)", "Other", @@ -10661,21 +10580,6 @@ class MeasureName(BSElement): ("MeasureName", DataCenterImprovements.MeasureName), ] -# MeasureType.TechnologyCategories.TechnologyCategory.FutureOtherECMs -class FutureOtherECMs(BSElement): - """Measures reserved for future and other ECMs.""" - - class MeasureName(BSElement): - """Short description of measure.""" - - element_type = "xs:string" - element_enumerations = ["Other"] - - -FutureOtherECMs.element_children = [ - ("MeasureName", FutureOtherECMs.MeasureName), -] - # MeasureType.TechnologyCategories.TechnologyCategory.HealthAndSafety class HealthAndSafety(BSElement): """Category heading for measures that are necessary for health, comfort, or safety reasons, not for energy efficiency reasons.""" @@ -10755,7 +10659,6 @@ class MeasureName(BSElement): ("AdvancedMeteringSystems", AdvancedMeteringSystems), ("PlugLoadReductions", PlugLoadReductions), ("DataCenterImprovements", DataCenterImprovements), - ("FutureOtherECMs", FutureOtherECMs), ("HealthAndSafety", HealthAndSafety), ("Uncategorized", Uncategorized), ] @@ -10824,6 +10727,11 @@ class HVACControlSystemTypes(BSElement): ("HVACControlSystemType", HVACControlSystemType), ] +# ElectricResistance +class ElectricResistance(ElectricResistanceType): + pass + + # HVACSystemType.HeatingAndCoolingSystems.HeatingSources.HeatingSource.HeatingSourceType.Furnace class Furnace(BSElement): pass @@ -10850,11 +10758,6 @@ class HeatPumpBackupSystemFuel(FuelTypes): """Backup fuel used by the heat pump.""" -# ElectricResistance -class ElectricResistance(ElectricResistanceType): - pass - - # OtherCombination class OtherCombination(OtherCombinationType): pass @@ -10937,6 +10840,9 @@ class SupplyFractionOfDuctLeakage(BoundedDecimalZeroToOneWithSourceAttribute): # HeatingPlantType.DistrictHeating class DistrictHeating(BSElement): + class OutputCapacity(OutputCapacity): + pass + class Capacity(BSElement): """Output capacity of equipment.""" @@ -10959,6 +10865,9 @@ class Capacity(BSElement): # HeatingPlantType.SolarThermal class SolarThermal(BSElement): + class OutputCapacity(OutputCapacity): + pass + class Capacity(BSElement): """Output capacity of equipment.""" @@ -11294,15 +11203,24 @@ class Recirculation(BSElement): class DirectTankHeatingSource(BSElement): """Direct source of heat for hot water tank.""" + class ElectricResistance(ElectricResistance): + pass + + class Combustion(Combustion): + pass + class Other(OtherType): pass + class Unknown(Unknown): + pass + DirectTankHeatingSource.element_children = [ - ("ElectricResistance", ElectricResistance), - ("Combustion", Combustion), + ("ElectricResistance", DirectTankHeatingSource.ElectricResistance), + ("Combustion", DirectTankHeatingSource.Combustion), ("Other", DirectTankHeatingSource.Other), - ("Unknown", Unknown), + ("Unknown", DirectTankHeatingSource.Unknown), ] # DomesticHotWaterSystemType.DomesticHotWaterType.StorageTank.TankHeatingType.Direct @@ -11332,15 +11250,24 @@ class SpaceHeatingSystem(BSElement): class InstantaneousWaterHeatingSource(BSElement): """Source of heat for instantaneous water heater.""" + class ElectricResistance(ElectricResistance): + pass + + class Combustion(Combustion): + pass + class Other(OtherType): pass + class Unknown(Unknown): + pass + InstantaneousWaterHeatingSource.element_children = [ - ("ElectricResistance", ElectricResistance), - ("Combustion", Combustion), + ("ElectricResistance", InstantaneousWaterHeatingSource.ElectricResistance), + ("Combustion", InstantaneousWaterHeatingSource.Combustion), ("Other", InstantaneousWaterHeatingSource.Other), - ("Unknown", Unknown), + ("Unknown", InstantaneousWaterHeatingSource.Unknown), ] # DomesticHotWaterSystemType.DomesticHotWaterType.Instantaneous @@ -11721,13 +11648,16 @@ class GroundCoupling(BSElement): class Other(OtherType): pass + class Unknown(Unknown): + pass + GroundCoupling.element_children = [ ("SlabOnGrade", SlabOnGrade), ("Crawlspace", Crawlspace), ("Basement", Basement), ("Other", GroundCoupling.Other), - ("Unknown", Unknown), + ("Unknown", GroundCoupling.Unknown), ] # ProcessGasElectricLoadType.HeatGainFraction @@ -12820,6 +12750,9 @@ class TypeOfRateStructure(BSElement): class Other(OtherType): """Other type of rate structure, or combination of other types.""" + class Unknown(Unknown): + pass + TypeOfRateStructure.element_children = [ ("FlatRate", FlatRate), @@ -12830,7 +12763,7 @@ class Other(OtherType): ("CriticalPeakPricing", CriticalPeakPricing), ("CriticalPeakRebates", CriticalPeakRebates), ("Other", TypeOfRateStructure.Other), - ("Unknown", Unknown), + ("Unknown", TypeOfRateStructure.Unknown), ] # UtilityType.RateSchedules.RateSchedule @@ -12945,18 +12878,30 @@ class Qualifications(BSElement): class HeatingSourceType(BSElement): """Source of energy used for heating the zone.""" + class ElectricResistance(ElectricResistance): + pass + class HeatPump(BSElement): pass + class OtherCombination(OtherCombination): + pass + + class NoHeating(NoHeating): + pass + + class Unknown(Unknown): + pass + HeatingSourceType.element_children = [ ("SourceHeatingPlantID", SourceHeatingPlantID), - ("ElectricResistance", ElectricResistance), + ("ElectricResistance", HeatingSourceType.ElectricResistance), ("Furnace", Furnace), ("HeatPump", HeatingSourceType.HeatPump), - ("OtherCombination", OtherCombination), - ("NoHeating", NoHeating), - ("Unknown", Unknown), + ("OtherCombination", HeatingSourceType.OtherCombination), + ("NoHeating", HeatingSourceType.NoHeating), + ("Unknown", HeatingSourceType.Unknown), ] HeatingSourceType.HeatPump.element_children = [ ("HeatPumpType", HeatPumpType), @@ -12990,18 +12935,30 @@ class DX(BSElement): class CoolingSourceType(BSElement): """Source of energy used for cooling the zone.""" + class OtherCombination(OtherCombination): + pass + + class NoCooling(NoCooling): + pass + + class Unknown(Unknown): + pass + CoolingSourceType.element_children = [ ("CoolingPlantID", CoolingPlantID), ("DX", DX), ("EvaporativeCooler", EvaporativeCooler), - ("OtherCombination", OtherCombination), - ("NoCooling", NoCooling), - ("Unknown", Unknown), + ("OtherCombination", CoolingSourceType.OtherCombination), + ("NoCooling", CoolingSourceType.NoCooling), + ("Unknown", CoolingSourceType.Unknown), ] # HeatingPlantType.Boiler class Boiler(BSElement): + class OutputCapacity(OutputCapacity): + pass + class Capacity(BSElement): """Output capacity of equipment.""" @@ -13198,6 +13155,12 @@ class MechanicalVentilation(BSElement): class LampType(BSElement): """A lamp is a replaceable component, or bulb, which is designed to produce light from electricity, though, non-electric lamps also exist.""" + class OtherCombination(OtherCombination): + pass + + class Unknown(Unknown): + pass + LampType.element_children = [ ("Incandescent", Incandescent), @@ -13211,8 +13174,8 @@ class LampType(BSElement): ("Plasma", Plasma), ("Photoluminescent", Photoluminescent), ("SelfLuminous", SelfLuminous), - ("OtherCombination", OtherCombination), - ("Unknown", Unknown), + ("OtherCombination", LampType.OtherCombination), + ("Unknown", LampType.Unknown), ] # LightingSystemType.DimmingCapability @@ -13242,13 +13205,16 @@ class LaundryType(BSElement): class Other(OtherType): pass + class Unknown(Unknown): + pass + LaundryType.element_children = [ ("Washer", Washer), ("Dryer", Dryer), ("Combination", Combination), ("Other", LaundryType.Other), - ("Unknown", Unknown), + ("Unknown", LaundryType.Unknown), ] # WallSystemType.WallInsulations @@ -13715,11 +13681,8 @@ class Side(BSElement): Side.element_children = [ ("SideNumber", SideNumber), ("SideLength", SideLength), - ("WallID", WallID), ("WallIDs", WallIDs), - ("WindowID", WindowID), ("WindowIDs", WindowIDs), - ("DoorID", DoorID), ("DoorIDs", DoorIDs), ("ThermalZoneIDs", ThermalZoneIDs), ] @@ -13838,6 +13801,15 @@ class Space(BSElement): # CoolingPlantType class CoolingPlantType(BSElement): + class OtherCombination(OtherCombination): + pass + + class NoCooling(NoCooling): + pass + + class Unknown(Unknown): + pass + class ControlSystemTypes(BSElement): """CoolingPlant equipment control strategies.""" @@ -13869,6 +13841,9 @@ class CondenserPlantType(BSElement): class Other(OtherType): pass + class Unknown(Unknown): + pass + class ControlSystemTypes(BSElement): """CondenserPlant equipment control strategies.""" @@ -14007,6 +13982,12 @@ class CoolingSources(BSElement): class OtherHVACType(BSElement): """Type of space conditioning equipment that is not classified as heating, cooling, or air-distribution. This category includes ventilation, dehumidification, humidification, and air cleaning systems.""" + class OtherCombination(OtherCombination): + pass + + class Unknown(Unknown): + pass + OtherHVACType.element_children = [ ("Humidifier", Humidifier), @@ -14015,8 +13996,8 @@ class OtherHVACType(BSElement): ("MechanicalVentilation", MechanicalVentilation), ("SpotExhaust", SpotExhaust), ("NaturalVentilation", NaturalVentilation), - ("OtherCombination", OtherCombination), - ("Unknown", Unknown), + ("OtherCombination", OtherHVACType.OtherCombination), + ("Unknown", OtherHVACType.Unknown), ] # ControlLightingType @@ -14126,13 +14107,16 @@ class HeatPump(BSElement): class Other(OtherType): pass + class Unknown(Unknown): + pass + IndirectTankHeatingSource.element_children = [ ("HeatPump", IndirectTankHeatingSource.HeatPump), ("Solar", Solar), ("SpaceHeatingSystem", SpaceHeatingSystem), ("Other", IndirectTankHeatingSource.Other), - ("Unknown", Unknown), + ("Unknown", IndirectTankHeatingSource.Unknown), ] IndirectTankHeatingSource.HeatPump.element_children = [ ("RatedHeatPumpSensibleHeatRatio", RatedHeatPumpSensibleHeatRatio), @@ -14156,12 +14140,15 @@ class TankHeatingType(BSElement): class Other(OtherType): pass + class Unknown(Unknown): + pass + TankHeatingType.element_children = [ ("Direct", Direct), ("Indirect", Indirect), ("Other", TankHeatingType.Other), - ("Unknown", Unknown), + ("Unknown", TankHeatingType.Unknown), ] # DomesticHotWaterSystemType.DomesticHotWaterType.StorageTank @@ -14654,6 +14641,9 @@ class StandardPractice(BSElement): class BenchmarkType(BSElement): """Source of energy data or building characteristics for benchmarking energy performance.""" + class PortfolioManager(PortfolioManager): + pass + class CBECS(CBECSType): pass @@ -14662,7 +14652,7 @@ class Other(BSElement): BenchmarkType.element_children = [ - ("PortfolioManager", PortfolioManager), + ("PortfolioManager", BenchmarkType.PortfolioManager), ("CBECS", BenchmarkType.CBECS), ("CodeMinimum", CodeMinimum), ("StandardPractice", StandardPractice), @@ -14799,6 +14789,15 @@ class Utility(UtilityType): # HeatingPlantType class HeatingPlantType(BSElement): + class OtherCombination(OtherCombination): + pass + + class NoHeating(NoHeating): + pass + + class Unknown(Unknown): + pass + class ControlSystemTypes(BSElement): """HeatingPlant equipment control strategies.""" @@ -14856,6 +14855,9 @@ class CondenserPlants(BSElement): # HVACSystemType.HeatingAndCoolingSystems.HeatingSources.HeatingSource class HeatingSource(BSElement): + class OutputCapacity(OutputCapacity): + pass + class Capacity(BSElement): """Output capacity of equipment.""" @@ -14939,7 +14941,6 @@ class DuctSystemType(BSElement): DuctSystemType.element_children = [ ("DuctConfiguration", DuctConfiguration), ("MinimumOutsideAirPercentage", MinimumOutsideAirPercentage), - ("MaximumOAFlowRate", MaximumOAFlowRate), ("MaximumOutsideAirFlowRate", MaximumOutsideAirFlowRate), ("DuctInsulationCondition", DuctInsulationCondition), ("DuctSealing", DuctSealing), @@ -14972,13 +14973,16 @@ class DomesticHotWaterType(BSElement): class Other(OtherType): pass + class Unknown(Unknown): + pass + DomesticHotWaterType.element_children = [ ("StorageTank", StorageTank), ("Instantaneous", Instantaneous), ("HeatExchanger", HeatExchanger), ("Other", DomesticHotWaterType.Other), - ("Unknown", Unknown), + ("Unknown", DomesticHotWaterType.Unknown), ] # PoolType.Heated @@ -15237,7 +15241,6 @@ class Control(ControlGeneralType): FanSystemType.element_children = [ ("FanEfficiency", FanEfficiency), ("FanSize", FanSize), - ("InstalledFlowRate", InstalledFlowRate), ("FanInstalledFlowRate", FanInstalledFlowRate), ("MinimumFlowRate", MinimumFlowRate), ("MaximumFanPower", MaximumFanPower), @@ -16315,7 +16318,6 @@ class HVACSystemType(BSElement): ("Location", Location), ("Priority", Priority), ("FrequencyOfMaintenance", FrequencyOfMaintenance), - ("PrimaryHVACSystemType", PrimaryHVACSystemType), ("PrincipalHVACSystemType", PrincipalHVACSystemType), ("HVACControlSystemTypes", HVACControlSystemTypes), ("LinkedPremises", LinkedPremises), @@ -16325,7 +16327,17 @@ class HVACSystemType(BSElement): # BuildingType class BuildingType(BSElement): - pass + class WeatherDataStationID(WeatherDataStationID): + pass + + class WeatherStationName(WeatherStationName): + pass + + class WeatherStationCategory(WeatherStationCategory): + pass + + class WeatherStations(WeatherStations): + pass BuildingType.element_attributes = [ @@ -16337,7 +16349,6 @@ class BuildingType(BSElement): ("PremisesIdentifiers", PremisesIdentifiers), ("Address", Address), ("ClimateZoneType", ClimateZoneType), - ("eGRIDRegionCode", eGRIDRegionCode), ("eGRIDSubregionCodes", eGRIDSubregionCodes), ("WeatherDataStationID", WeatherDataStationID), ("WeatherStationName", WeatherStationName), @@ -16564,7 +16575,17 @@ class Building(BuildingType): # SiteType class SiteType(BSElement): - pass + class WeatherDataStationID(WeatherDataStationID): + pass + + class WeatherStationName(WeatherStationName): + pass + + class WeatherStationCategory(WeatherStationCategory): + pass + + class WeatherStations(WeatherStations): + pass SiteType.element_attributes = [ @@ -16577,7 +16598,6 @@ class SiteType(BSElement): ("OccupancyClassification", OccupancyClassification), ("Address", Address), ("ClimateZoneType", ClimateZoneType), - ("eGRIDRegionCode", eGRIDRegionCode), ("eGRIDSubregionCodes", eGRIDSubregionCodes), ("WeatherDataStationID", WeatherDataStationID), ("WeatherStationName", WeatherStationName), diff --git a/bsyncpy/bsyncpy_generator.py b/bsyncpy/bsyncpy_generator.py index cffcbc7..3dfc54e 100644 --- a/bsyncpy/bsyncpy_generator.py +++ b/bsyncpy/bsyncpy_generator.py @@ -146,7 +146,8 @@ def topological_sort() -> List[str]: class BSElement: """A instance of this object is a summary of the BuildingSync element - components, enough to turn it into a Python class definition.""" + components, enough to turn it into a Python class definition. + """ element_name: str element_type: str @@ -373,45 +374,18 @@ def do_complexType(element) -> BSElement: elif choice is not None: logging.debug(" choice!") for i, child in enumerate(choice): - logging.debug(f" c [{i}] {child} {child.get('name')}") + child_name = child.get("name") + child_ref = child.get("ref") + logging.debug(f" c [{i}] {child} {child_name} {child_ref}") + if not child_name: + child_name = child_ref[4:] - if child.tag == "element": - child_name = child.get("name") - child_ref = child.get("ref") - - if child_name and child_ref: - logging.debug(f" - here {child_name} refers to {child_ref}") - if child_ref.startswith("auc:"): - child_type_name = child_ref[4:] - bs_element.element_children.append( - (child_name, child_type_name) - ) - else: - logging.debug(" - punt") - - elif child_name: - logging.debug(" - seems to be here") - logging.debug(f"+1 {child_name}") - child_element = do_element(child) - logging.debug(f"-1 {child_name}") - - bs_element.element_children.append( - (child_name, child_element.element_full_name) - ) - - elif child_ref: - logging.debug(f" - no name, refers to {child_ref}") + choice_element = do_element(child) + logging.debug(f" - choice_element: {choice_element.element_name}") - if child_ref.startswith("auc:"): - child_type_name = child_ref[4:] - bs_element.element_children.append( - (child_type_name, child_type_name) - ) - else: - logging.debug(" - punt") - - else: - raise RuntimeError("resolve element with no name or reference") + bs_element.element_children.append( + (child_name, choice_element.element_full_name) + ) elif sequence is not None: logging.debug(" sequence!") @@ -507,12 +481,13 @@ def do_complexType(element) -> BSElement: elif subchild.tag == "sequence": logging.debug(f" - sequence {subchild} ***") for i, grandchild in enumerate(subchild): + grandchild_name = grandchild.get("name") + grandchild_ref = grandchild.get("ref") logging.debug( - f" s [{i}] {grandchild} {grandchild.get('name')} {grandchild.get('ref')}" + f" s [{i}] {grandchild} {grandchild_name} {grandchild_ref}" ) + grandchild_element = do_element(grandchild) - grandchild_name = grandchild.get("name") - grandchild_ref = grandchild.get("ref") if grandchild_ref.startswith("auc:"): grandchild_type_name = grandchild_ref[4:] bs_element.element_children.append( @@ -535,11 +510,6 @@ def do_complexType(element) -> BSElement: def do_element(element) -> BSElement: logging.debug(f"element {element} {element.get('name')}") - element_ref = element.get("ref") - if element_ref: - logging.debug(f" - elsewhere: {element_ref}") - return - element_name = element.get("name") if element_name: logging.debug(f" - here: {element_name}") @@ -548,6 +518,15 @@ def do_element(element) -> BSElement: if element_type: logging.debug(f" - type: {element_type}") + element_ref = element.get("ref") + if element_ref: + logging.debug(f" - elsewhere: {element_ref}") + if element_ref.startswith("auc:"): + element_type = element_ref + element_name = element_ref[4:] + else: + raise RuntimeError("oof!") + element_docstring = "" simple_type = complex_type = None From 9d3c6172e42a354416e04807c93441bdb3648df8 Mon Sep 17 00:00:00 2001 From: Hannah Eslinger Date: Wed, 23 Mar 2022 16:13:34 -0500 Subject: [PATCH 02/13] Add AnnualAverageGHGEmissions --- bsyncpy/bsync.py | 97 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 94 insertions(+), 3 deletions(-) diff --git a/bsyncpy/bsync.py b/bsyncpy/bsync.py index bd06eed..8826e5c 100644 --- a/bsyncpy/bsync.py +++ b/bsyncpy/bsync.py @@ -1598,6 +1598,27 @@ class AnnualWaterCostSavings(BSElement): element_type = "xs:decimal" +# AnnualSavingsAverageGHGEmissions +class AnnualSavingsAverageGHGEmissions(BSElement): + """Average GHG emissions savings per year. (MtCO2e/year)""" + + element_type = "xs:decimal" + + +# AnnualSavingsMarginalGHGEmissions +class AnnualSavingsMarginalGHGEmissions(BSElement): + """Marginal GHG emissions savings per year. (MtCO2e/year)""" + + element_type = "xs:decimal" + + +# AnnualSavingsGHGEmissionIntensity +class AnnualSavingsGHGEmissionIntensity(BSElement): + """Annual GHG emissions intensity savings per year. (kg CO2e/ft2/year)""" + + element_type = "xs:decimal" + + # SimplePayback class SimplePayback(BSElement): """The length of time required for the investment to pay for itself. (yrs)""" @@ -2343,6 +2364,15 @@ class LinkedTimeSeriesID(BSElement): "IDref", # IDREF ] +# ResourceUseType.Emissions.Emission.EmissionsLinkedTimeSeriesIDs.EmissionsLinkedTimeSeriesID +class EmissionsLinkedTimeSeriesID(BSElement): + pass + + +EmissionsLinkedTimeSeriesID.element_attributes = [ + "IDref", # IDREF +] + # ResourceUseType.UtilityIDs.UtilityID class UtilityID(BSElement): """ID of utility associated with this resource use.""" @@ -2365,7 +2395,16 @@ class EmissionsType(BSElement): """Category of greenhouse gas or other emission.""" element_type = "xs:string" - element_enumerations = ["CO2e", "CO2", "CH4", "N2O", "NOx", "SO2", "Other"] + element_enumerations = [ + "CO2e", + "MtCO2e", + "CO2", + "CH4", + "N2O", + "NOx", + "SO2", + "Other", + ] # ResourceUseType.Emissions.Emission.EmissionsFactor @@ -2385,18 +2424,37 @@ class EmissionsFactorSource(BSElement): # ResourceUseType.Emissions.Emission.GHGEmissions class GHGEmissions(BSElement): - """Emissions that result in gases that trap heat in the atmosphere. (kgCO2e)""" + """Emissions that result in gases that trap heat in the atmosphere. (MtCO2e)""" + + element_type = "xs:decimal" + + +# ResourceUseType.Emissions.Emission.GHGEmissionsIntensity +class GHGEmissionsIntensity(BSElement): + """GHG Emission Intensity (kg CO2e/ft2)""" element_type = "xs:decimal" # ResourceUseType.Emissions.Emission.AvoidedEmissions class AvoidedEmissions(BSElement): - """The avoided Greenhouse gas (GHG) emissions resulting from a renewable energy source or a system. (kgCO2e)""" + """The avoided Greenhouse gas (GHG) emissions resulting from a renewable energy source or a system. (MtCO2e)""" + + element_type = "xs:decimal" + + +# ResourceUseType.Emissions.Emission.EmissionsLinkedTimeSeriesIDs +class EmissionsLinkedTimeSeriesIDs(BSElement): + """Links to all time series data used to calculate the total GHG Emissions""" element_type = "xs:decimal" +EmissionsLinkedTimeSeriesIDs.element_children = [ + ("EmissionsLinkedTimeSeriesID", EmissionsLinkedTimeSeriesID), +] + + # AllResourceTotalType.SiteEnergyUseIntensity class SiteEnergyUseIntensity(BSElement): """The Site Energy Use divided by the premises gross floor area. (kBtu/ft2)""" @@ -2554,6 +2612,7 @@ class TimeSeriesReadingQuantity(BSElement): "Current Angle", "Demand", "Frequency", + "Greenhouse Gas Emissions", "Power", "Power Factor", "Energy", @@ -10031,7 +10090,9 @@ class Emission(BSElement): ("EmissionsFactor", EmissionsFactor), ("EmissionsFactorSource", EmissionsFactorSource), ("GHGEmissions", GHGEmissions), + ("GHGEmissionsIntensity", GHGEmissionsIntensity), ("AvoidedEmissions", AvoidedEmissions), + ("EmissionsLinkedTimeSeriesIDs", EmissionsLinkedTimeSeriesIDs), ] # TimeSeriesType.IntervalDurationUnits @@ -12744,6 +12805,9 @@ class Target(BSElement): ("InternalRateOfReturn", InternalRateOfReturn), ("AssetScore", AssetScore), ("ENERGYSTARScore", ENERGYSTARScore), + ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), + ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), + ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), ] # AnnualSavingsByFuels @@ -12772,6 +12836,21 @@ class WaterUse(BSElement): element_type = "xs:decimal" + class AnnualAverageGHGEmissions(BSElement): + """Annual Average GHG Emissions. (MtCO2e)""" + + element_type = "xs:decimal" + + class AnnualMarginalGHGEmissions(BSElement): + """Annual Marginal GHG Emissions. (MtCO2e)""" + + element_type = "xs:decimal" + + class AnnualGHGEmissionIntensity(BSElement): + """Annual GHG Emission Intensity. (kg CO2e/ft2/year)""" + + element_type = "xs:decimal" + AllResourceTotalType.element_attributes = [ "ID", # ID @@ -12782,6 +12861,9 @@ class WaterUse(BSElement): ("ResourceBoundary", ResourceBoundary), ("SiteEnergyUse", AllResourceTotalType.SiteEnergyUse), ("SiteEnergyUseIntensity", SiteEnergyUseIntensity), + ("AnnualAverageGHGEmissions", AllResourceTotalType.AnnualAverageGHGEmissions), + ("AnnualMarginalGHGEmissions", AllResourceTotalType.AnnualMarginalGHGEmissions), + ("AnnualGHGEmissionIntensity", AllResourceTotalType.AnnualGHGEmissionIntensity), ("SourceEnergyUse", AllResourceTotalType.SourceEnergyUse), ("SourceEnergyUseIntensity", SourceEnergyUseIntensity), ("BuildingEnergyUse", BuildingEnergyUse), @@ -14731,6 +14813,9 @@ class PackageOfMeasures(BSElement): ("AssetScore", AssetScore), ("ENERGYSTARScore", ENERGYSTARScore), ("UserDefinedFields", UserDefinedFields), + ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), + ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), + ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), ] # ScenarioType.ResourceUses.ResourceUse @@ -14790,6 +14875,9 @@ class MeasureSavingsAnalysis(BSElement): ("SimplePayback", SimplePayback), ("NetPresentValue", NetPresentValue), ("InternalRateOfReturn", InternalRateOfReturn), + ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), + ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), + ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), ] # ReportType.Utilities.Utility @@ -16442,6 +16530,9 @@ class ScenarioType(BSElement): ("InternalRateOfReturn", InternalRateOfReturn), ("AssetScore", AssetScore), ("ENERGYSTARScore", ENERGYSTARScore), + ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), + ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), + ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), ] ScenarioType.ScenarioType.element_children = [ ("CurrentBuilding", CurrentBuilding), From 5dbb16d4f39ce78fc2b97bc25f3f1ac60dec6552 Mon Sep 17 00:00:00 2001 From: Hannah Eslinger Date: Tue, 29 Mar 2022 13:44:42 -0500 Subject: [PATCH 03/13] Remove EmissionsType MtCO2e --- bsyncpy/bsync.py | 1 - 1 file changed, 1 deletion(-) diff --git a/bsyncpy/bsync.py b/bsyncpy/bsync.py index 8826e5c..37551f2 100644 --- a/bsyncpy/bsync.py +++ b/bsyncpy/bsync.py @@ -2397,7 +2397,6 @@ class EmissionsType(BSElement): element_type = "xs:string" element_enumerations = [ "CO2e", - "MtCO2e", "CO2", "CH4", "N2O", From f348feb4b5d03d0aac35581ef4050316391a904a Mon Sep 17 00:00:00 2001 From: Hannah Eslinger Date: Tue, 29 Mar 2022 14:51:41 -0500 Subject: [PATCH 04/13] Format --- bsyncpy/bsync.py | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/bsyncpy/bsync.py b/bsyncpy/bsync.py index 37551f2..6ff5bd5 100644 --- a/bsyncpy/bsync.py +++ b/bsyncpy/bsync.py @@ -2395,15 +2395,7 @@ class EmissionsType(BSElement): """Category of greenhouse gas or other emission.""" element_type = "xs:string" - element_enumerations = [ - "CO2e", - "CO2", - "CH4", - "N2O", - "NOx", - "SO2", - "Other", - ] + element_enumerations = ["CO2e", "CO2", "CH4", "N2O", "NOx", "SO2", "Other"] # ResourceUseType.Emissions.Emission.EmissionsFactor From 3880b59689b0ea8add4d61fe7a38e18f1854c961 Mon Sep 17 00:00:00 2001 From: Hannah Eslinger Date: Wed, 30 Mar 2022 10:47:52 -0500 Subject: [PATCH 05/13] Update black pre-commit --- .pre-commit-config.yaml | 2 +- poetry.lock | 227 +++++++++++++++++++++------------------- 2 files changed, 123 insertions(+), 106 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index e70eb70..45e519d 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,6 @@ repos: - repo: https://github.com/psf/black - rev: 21.9b0 # Replace by any tag/version: https://github.com/psf/black/tags + rev: 22.3.0 hooks: - id: black language_version: python3 # Should be a command that runs python3.6+ \ No newline at end of file diff --git a/poetry.lock b/poetry.lock index 318c686..6d4fd0b 100644 --- a/poetry.lock +++ b/poetry.lock @@ -8,21 +8,21 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "attrs" -version = "21.2.0" +version = "21.4.0" description = "Classes Without Boilerplate" category = "dev" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] [[package]] name = "backports.entry-points-selectable" -version = "1.1.0" +version = "1.1.1" description = "Compatibility shim providing selectable entry points for older implementations" category = "dev" optional = false @@ -33,7 +33,7 @@ importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} [package.extras] docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-flake8", "pytest-cov", "pytest-black (>=0.3.7)", "pytest-mypy", "pytest-checkdocs (>=2.4)", "pytest-enabler (>=1.0.1)"] +testing = ["pytest", "pytest-flake8", "pytest-cov", "pytest-black (>=0.3.7)", "pytest-mypy", "pytest-checkdocs (>=2.4)", "pytest-enabler (>=1.0.1)"] [[package]] name = "cfgv" @@ -53,7 +53,7 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "distlib" -version = "0.3.3" +version = "0.3.4" description = "Distribution utilities" category = "dev" optional = false @@ -61,11 +61,11 @@ python-versions = "*" [[package]] name = "filelock" -version = "3.3.2" +version = "3.6.0" description = "A platform independent file lock." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] @@ -73,31 +73,31 @@ testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-co [[package]] name = "identify" -version = "2.3.3" +version = "2.4.12" description = "File identification library for Python" category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.7" [package.extras] -license = ["editdistance-s"] +license = ["ukkonen"] [[package]] name = "importlib-metadata" -version = "4.8.1" +version = "4.11.3" description = "Read metadata from Python packages" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] perf = ["ipython"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pep517", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] [[package]] name = "iniconfig" @@ -109,7 +109,7 @@ python-versions = "*" [[package]] name = "lxml" -version = "4.6.3" +version = "4.8.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." category = "main" optional = false @@ -131,22 +131,22 @@ python-versions = "*" [[package]] name = "packaging" -version = "21.2" +version = "21.3" description = "Core utilities for Python packages" category = "dev" optional = false python-versions = ">=3.6" [package.dependencies] -pyparsing = ">=2.0.2,<3" +pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" [[package]] name = "platformdirs" -version = "2.4.0" +version = "2.5.1" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] @@ -169,7 +169,7 @@ testing = ["pytest", "pytest-benchmark"] [[package]] name = "pre-commit" -version = "2.15.0" +version = "2.17.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." category = "dev" optional = false @@ -186,19 +186,22 @@ virtualenv = ">=20.0.8" [[package]] name = "py" -version = "1.10.0" +version = "1.11.0" description = "library with cross-python path, ini-parsing, io, code, log facilities" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" [[package]] name = "pyparsing" -version = "2.4.7" +version = "3.0.7" description = "Python parsing module" category = "dev" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.6" + +[package.extras] +diagrams = ["jinja2", "railroad-diagrams"] [[package]] name = "pytest" @@ -248,11 +251,11 @@ python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" [[package]] name = "typing-extensions" -version = "3.10.0.2" -description = "Backported and Experimental Type Hints for Python 3.5+" +version = "4.1.1" +description = "Backported and Experimental Type Hints for Python 3.6+" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "virtualenv" @@ -276,15 +279,15 @@ testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", [[package]] name = "zipp" -version = "3.6.0" +version = "3.7.0" description = "Backport of pathlib-compatible object wrapper for zip files" category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.extras] docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=4.6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] [metadata] lock-version = "1.1" @@ -297,12 +300,12 @@ atomicwrites = [ {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, ] attrs = [ - {file = "attrs-21.2.0-py2.py3-none-any.whl", hash = "sha256:149e90d6d8ac20db7a955ad60cf0e6881a3f20d37096140088356da6c716b0b1"}, - {file = "attrs-21.2.0.tar.gz", hash = "sha256:ef6aaac3ca6cd92904cdd0d83f629a15f18053ec84e6432106f7a4d04ae4f5fb"}, + {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, + {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, ] "backports.entry-points-selectable" = [ - {file = "backports.entry_points_selectable-1.1.0-py2.py3-none-any.whl", hash = "sha256:a6d9a871cde5e15b4c4a53e3d43ba890cc6861ec1332c9c2428c92f977192acc"}, - {file = "backports.entry_points_selectable-1.1.0.tar.gz", hash = "sha256:988468260ec1c196dab6ae1149260e2f5472c9110334e5d51adcb77867361f6a"}, + {file = "backports.entry_points_selectable-1.1.1-py2.py3-none-any.whl", hash = "sha256:7fceed9532a7aa2bd888654a7314f864a3c16a4e710b34a58cfc0f08114c663b"}, + {file = "backports.entry_points_selectable-1.1.1.tar.gz", hash = "sha256:914b21a479fde881635f7af5adc7f6e38d6b274be32269070c53b698c60d5386"}, ] cfgv = [ {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, @@ -313,100 +316,115 @@ colorama = [ {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, ] distlib = [ - {file = "distlib-0.3.3-py2.py3-none-any.whl", hash = "sha256:c8b54e8454e5bf6237cc84c20e8264c3e991e824ef27e8f1e81049867d861e31"}, - {file = "distlib-0.3.3.zip", hash = "sha256:d982d0751ff6eaaab5e2ec8e691d949ee80eddf01a62eaa96ddb11531fe16b05"}, + {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, + {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, ] filelock = [ - {file = "filelock-3.3.2-py3-none-any.whl", hash = "sha256:bb2a1c717df74c48a2d00ed625e5a66f8572a3a30baacb7657add1d7bac4097b"}, - {file = "filelock-3.3.2.tar.gz", hash = "sha256:7afc856f74fa7006a289fd10fa840e1eebd8bbff6bffb69c26c54a0512ea8cf8"}, + {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"}, + {file = "filelock-3.6.0.tar.gz", hash = "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85"}, ] identify = [ - {file = "identify-2.3.3-py2.py3-none-any.whl", hash = "sha256:ffab539d9121b386ffdea84628ff3eefda15f520f392ce11b393b0a909632cdf"}, - {file = "identify-2.3.3.tar.gz", hash = "sha256:b9ffbeb7ed87e96ce017c66b80ca04fda3adbceb5c74e54fc7d99281d27d0859"}, + {file = "identify-2.4.12-py2.py3-none-any.whl", hash = "sha256:5f06b14366bd1facb88b00540a1de05b69b310cbc2654db3c7e07fa3a4339323"}, + {file = "identify-2.4.12.tar.gz", hash = "sha256:3f3244a559290e7d3deb9e9adc7b33594c1bc85a9dd82e0f1be519bf12a1ec17"}, ] importlib-metadata = [ - {file = "importlib_metadata-4.8.1-py3-none-any.whl", hash = "sha256:b618b6d2d5ffa2f16add5697cf57a46c76a56229b0ed1c438322e4e95645bd15"}, - {file = "importlib_metadata-4.8.1.tar.gz", hash = "sha256:f284b3e11256ad1e5d03ab86bb2ccd6f5339688ff17a4d797a0fe7df326f23b1"}, + {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, + {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, ] iniconfig = [ {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, ] lxml = [ - {file = "lxml-4.6.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:df7c53783a46febb0e70f6b05df2ba104610f2fb0d27023409734a3ecbb78fb2"}, - {file = "lxml-4.6.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:1b7584d421d254ab86d4f0b13ec662a9014397678a7c4265a02a6d7c2b18a75f"}, - {file = "lxml-4.6.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:079f3ae844f38982d156efce585bc540c16a926d4436712cf4baee0cce487a3d"}, - {file = "lxml-4.6.3-cp27-cp27m-win32.whl", hash = "sha256:bc4313cbeb0e7a416a488d72f9680fffffc645f8a838bd2193809881c67dd106"}, - {file = "lxml-4.6.3-cp27-cp27m-win_amd64.whl", hash = "sha256:8157dadbb09a34a6bd95a50690595e1fa0af1a99445e2744110e3dca7831c4ee"}, - {file = "lxml-4.6.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:7728e05c35412ba36d3e9795ae8995e3c86958179c9770e65558ec3fdfd3724f"}, - {file = "lxml-4.6.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:4bff24dfeea62f2e56f5bab929b4428ae6caba2d1eea0c2d6eb618e30a71e6d4"}, - {file = "lxml-4.6.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:74f7d8d439b18fa4c385f3f5dfd11144bb87c1da034a466c5b5577d23a1d9b51"}, - {file = "lxml-4.6.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:f90ba11136bfdd25cae3951af8da2e95121c9b9b93727b1b896e3fa105b2f586"}, - {file = "lxml-4.6.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:4c61b3a0db43a1607d6264166b230438f85bfed02e8cff20c22e564d0faff354"}, - {file = "lxml-4.6.3-cp35-cp35m-manylinux2014_x86_64.whl", hash = "sha256:5c8c163396cc0df3fd151b927e74f6e4acd67160d6c33304e805b84293351d16"}, - {file = "lxml-4.6.3-cp35-cp35m-win32.whl", hash = "sha256:f2380a6376dfa090227b663f9678150ef27543483055cc327555fb592c5967e2"}, - {file = "lxml-4.6.3-cp35-cp35m-win_amd64.whl", hash = "sha256:c4f05c5a7c49d2fb70223d0d5bcfbe474cf928310ac9fa6a7c6dddc831d0b1d4"}, - {file = "lxml-4.6.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d2e35d7bf1c1ac8c538f88d26b396e73dd81440d59c1ef8522e1ea77b345ede4"}, - {file = "lxml-4.6.3-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:289e9ca1a9287f08daaf796d96e06cb2bc2958891d7911ac7cae1c5f9e1e0ee3"}, - {file = "lxml-4.6.3-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:bccbfc27563652de7dc9bdc595cb25e90b59c5f8e23e806ed0fd623755b6565d"}, - {file = "lxml-4.6.3-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:d916d31fd85b2f78c76400d625076d9124de3e4bda8b016d25a050cc7d603f24"}, - {file = "lxml-4.6.3-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:820628b7b3135403540202e60551e741f9b6d3304371712521be939470b454ec"}, - {file = "lxml-4.6.3-cp36-cp36m-manylinux2014_x86_64.whl", hash = "sha256:c47ff7e0a36d4efac9fd692cfa33fbd0636674c102e9e8d9b26e1b93a94e7617"}, - {file = "lxml-4.6.3-cp36-cp36m-win32.whl", hash = "sha256:5a0a14e264069c03e46f926be0d8919f4105c1623d620e7ec0e612a2e9bf1c04"}, - {file = "lxml-4.6.3-cp36-cp36m-win_amd64.whl", hash = "sha256:92e821e43ad382332eade6812e298dc9701c75fe289f2a2d39c7960b43d1e92a"}, - {file = "lxml-4.6.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:efd7a09678fd8b53117f6bae4fa3825e0a22b03ef0a932e070c0bdbb3a35e654"}, - {file = "lxml-4.6.3-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:efac139c3f0bf4f0939f9375af4b02c5ad83a622de52d6dfa8e438e8e01d0eb0"}, - {file = "lxml-4.6.3-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:0fbcf5565ac01dff87cbfc0ff323515c823081c5777a9fc7703ff58388c258c3"}, - {file = "lxml-4.6.3-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:36108c73739985979bf302006527cf8a20515ce444ba916281d1c43938b8bb96"}, - {file = "lxml-4.6.3-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:122fba10466c7bd4178b07dba427aa516286b846b2cbd6f6169141917283aae2"}, - {file = "lxml-4.6.3-cp37-cp37m-manylinux2014_x86_64.whl", hash = "sha256:cdaf11d2bd275bf391b5308f86731e5194a21af45fbaaaf1d9e8147b9160ea92"}, - {file = "lxml-4.6.3-cp37-cp37m-win32.whl", hash = "sha256:3439c71103ef0e904ea0a1901611863e51f50b5cd5e8654a151740fde5e1cade"}, - {file = "lxml-4.6.3-cp37-cp37m-win_amd64.whl", hash = "sha256:4289728b5e2000a4ad4ab8da6e1db2e093c63c08bdc0414799ee776a3f78da4b"}, - {file = "lxml-4.6.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b007cbb845b28db4fb8b6a5cdcbf65bacb16a8bd328b53cbc0698688a68e1caa"}, - {file = "lxml-4.6.3-cp38-cp38-manylinux1_i686.whl", hash = "sha256:76fa7b1362d19f8fbd3e75fe2fb7c79359b0af8747e6f7141c338f0bee2f871a"}, - {file = "lxml-4.6.3-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:26e761ab5b07adf5f555ee82fb4bfc35bf93750499c6c7614bd64d12aaa67927"}, - {file = "lxml-4.6.3-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:e1cbd3f19a61e27e011e02f9600837b921ac661f0c40560eefb366e4e4fb275e"}, - {file = "lxml-4.6.3-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:66e575c62792c3f9ca47cb8b6fab9e35bab91360c783d1606f758761810c9791"}, - {file = "lxml-4.6.3-cp38-cp38-manylinux2014_x86_64.whl", hash = "sha256:1b38116b6e628118dea5b2186ee6820ab138dbb1e24a13e478490c7db2f326ae"}, - {file = "lxml-4.6.3-cp38-cp38-win32.whl", hash = "sha256:89b8b22a5ff72d89d48d0e62abb14340d9e99fd637d046c27b8b257a01ffbe28"}, - {file = "lxml-4.6.3-cp38-cp38-win_amd64.whl", hash = "sha256:2a9d50e69aac3ebee695424f7dbd7b8c6d6eb7de2a2eb6b0f6c7db6aa41e02b7"}, - {file = "lxml-4.6.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ce256aaa50f6cc9a649c51be3cd4ff142d67295bfc4f490c9134d0f9f6d58ef0"}, - {file = "lxml-4.6.3-cp39-cp39-manylinux1_i686.whl", hash = "sha256:7610b8c31688f0b1be0ef882889817939490a36d0ee880ea562a4e1399c447a1"}, - {file = "lxml-4.6.3-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f8380c03e45cf09f8557bdaa41e1fa7c81f3ae22828e1db470ab2a6c96d8bc23"}, - {file = "lxml-4.6.3-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:3082c518be8e97324390614dacd041bb1358c882d77108ca1957ba47738d9d59"}, - {file = "lxml-4.6.3-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:884ab9b29feaca361f7f88d811b1eea9bfca36cf3da27768d28ad45c3ee6f969"}, - {file = "lxml-4.6.3-cp39-cp39-manylinux2014_x86_64.whl", hash = "sha256:6f12e1427285008fd32a6025e38e977d44d6382cf28e7201ed10d6c1698d2a9a"}, - {file = "lxml-4.6.3-cp39-cp39-win32.whl", hash = "sha256:33bb934a044cf32157c12bfcfbb6649807da20aa92c062ef51903415c704704f"}, - {file = "lxml-4.6.3-cp39-cp39-win_amd64.whl", hash = "sha256:542d454665a3e277f76954418124d67516c5f88e51a900365ed54a9806122b83"}, - {file = "lxml-4.6.3.tar.gz", hash = "sha256:39b78571b3b30645ac77b95f7c69d1bffc4cf8c3b157c435a34da72e78c82468"}, + {file = "lxml-4.8.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:e1ab2fac607842ac36864e358c42feb0960ae62c34aa4caaf12ada0a1fb5d99b"}, + {file = "lxml-4.8.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28d1af847786f68bec57961f31221125c29d6f52d9187c01cd34dc14e2b29430"}, + {file = "lxml-4.8.0-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b92d40121dcbd74831b690a75533da703750f7041b4bf951befc657c37e5695a"}, + {file = "lxml-4.8.0-cp27-cp27m-win32.whl", hash = "sha256:e01f9531ba5420838c801c21c1b0f45dbc9607cb22ea2cf132844453bec863a5"}, + {file = "lxml-4.8.0-cp27-cp27m-win_amd64.whl", hash = "sha256:6259b511b0f2527e6d55ad87acc1c07b3cbffc3d5e050d7e7bcfa151b8202df9"}, + {file = "lxml-4.8.0-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1010042bfcac2b2dc6098260a2ed022968dbdfaf285fc65a3acf8e4eb1ffd1bc"}, + {file = "lxml-4.8.0-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fa56bb08b3dd8eac3a8c5b7d075c94e74f755fd9d8a04543ae8d37b1612dd170"}, + {file = "lxml-4.8.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:31ba2cbc64516dcdd6c24418daa7abff989ddf3ba6d3ea6f6ce6f2ed6e754ec9"}, + {file = "lxml-4.8.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:31499847fc5f73ee17dbe1b8e24c6dafc4e8d5b48803d17d22988976b0171f03"}, + {file = "lxml-4.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5f7d7d9afc7b293147e2d506a4596641d60181a35279ef3aa5778d0d9d9123fe"}, + {file = "lxml-4.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a3c5f1a719aa11866ffc530d54ad965063a8cbbecae6515acbd5f0fae8f48eaa"}, + {file = "lxml-4.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6268e27873a3d191849204d00d03f65c0e343b3bcb518a6eaae05677c95621d1"}, + {file = "lxml-4.8.0-cp310-cp310-win32.whl", hash = "sha256:330bff92c26d4aee79c5bc4d9967858bdbe73fdbdbacb5daf623a03a914fe05b"}, + {file = "lxml-4.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:b2582b238e1658c4061ebe1b4df53c435190d22457642377fd0cb30685cdfb76"}, + {file = "lxml-4.8.0-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a2bfc7e2a0601b475477c954bf167dee6d0f55cb167e3f3e7cefad906e7759f6"}, + {file = "lxml-4.8.0-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a1547ff4b8a833511eeaceacbcd17b043214fcdb385148f9c1bc5556ca9623e2"}, + {file = "lxml-4.8.0-cp35-cp35m-win32.whl", hash = "sha256:a9f1c3489736ff8e1c7652e9dc39f80cff820f23624f23d9eab6e122ac99b150"}, + {file = "lxml-4.8.0-cp35-cp35m-win_amd64.whl", hash = "sha256:530f278849031b0eb12f46cca0e5db01cfe5177ab13bd6878c6e739319bae654"}, + {file = "lxml-4.8.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:078306d19a33920004addeb5f4630781aaeabb6a8d01398045fcde085091a169"}, + {file = "lxml-4.8.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:86545e351e879d0b72b620db6a3b96346921fa87b3d366d6c074e5a9a0b8dadb"}, + {file = "lxml-4.8.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24f5c5ae618395ed871b3d8ebfcbb36e3f1091fd847bf54c4de623f9107942f3"}, + {file = "lxml-4.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bbab6faf6568484707acc052f4dfc3802bdb0cafe079383fbaa23f1cdae9ecd4"}, + {file = "lxml-4.8.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7993232bd4044392c47779a3c7e8889fea6883be46281d45a81451acfd704d7e"}, + {file = "lxml-4.8.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6d6483b1229470e1d8835e52e0ff3c6973b9b97b24cd1c116dca90b57a2cc613"}, + {file = "lxml-4.8.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ad4332a532e2d5acb231a2e5d33f943750091ee435daffca3fec0a53224e7e33"}, + {file = "lxml-4.8.0-cp36-cp36m-win32.whl", hash = "sha256:db3535733f59e5605a88a706824dfcb9bd06725e709ecb017e165fc1d6e7d429"}, + {file = "lxml-4.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5f148b0c6133fb928503cfcdfdba395010f997aa44bcf6474fcdd0c5398d9b63"}, + {file = "lxml-4.8.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:8a31f24e2a0b6317f33aafbb2f0895c0bce772980ae60c2c640d82caac49628a"}, + {file = "lxml-4.8.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:719544565c2937c21a6f76d520e6e52b726d132815adb3447ccffbe9f44203c4"}, + {file = "lxml-4.8.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:c0b88ed1ae66777a798dc54f627e32d3b81c8009967c63993c450ee4cbcbec15"}, + {file = "lxml-4.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fa9b7c450be85bfc6cd39f6df8c5b8cbd76b5d6fc1f69efec80203f9894b885f"}, + {file = "lxml-4.8.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e9f84ed9f4d50b74fbc77298ee5c870f67cb7e91dcdc1a6915cb1ff6a317476c"}, + {file = "lxml-4.8.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1d650812b52d98679ed6c6b3b55cbb8fe5a5460a0aef29aeb08dc0b44577df85"}, + {file = "lxml-4.8.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:80bbaddf2baab7e6de4bc47405e34948e694a9efe0861c61cdc23aa774fcb141"}, + {file = "lxml-4.8.0-cp37-cp37m-win32.whl", hash = "sha256:6f7b82934c08e28a2d537d870293236b1000d94d0b4583825ab9649aef7ddf63"}, + {file = "lxml-4.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e1fd7d2fe11f1cb63d3336d147c852f6d07de0d0020d704c6031b46a30b02ca8"}, + {file = "lxml-4.8.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:5045ee1ccd45a89c4daec1160217d363fcd23811e26734688007c26f28c9e9e7"}, + {file = "lxml-4.8.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0c1978ff1fd81ed9dcbba4f91cf09faf1f8082c9d72eb122e92294716c605428"}, + {file = "lxml-4.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cbf2ff155b19dc4d4100f7442f6a697938bf4493f8d3b0c51d45568d5666b5"}, + {file = "lxml-4.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ce13d6291a5f47c1c8dbd375baa78551053bc6b5e5c0e9bb8e39c0a8359fd52f"}, + {file = "lxml-4.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e11527dc23d5ef44d76fef11213215c34f36af1608074561fcc561d983aeb870"}, + {file = "lxml-4.8.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:60d2f60bd5a2a979df28ab309352cdcf8181bda0cca4529769a945f09aba06f9"}, + {file = "lxml-4.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:62f93eac69ec0f4be98d1b96f4d6b964855b8255c345c17ff12c20b93f247b68"}, + {file = "lxml-4.8.0-cp38-cp38-win32.whl", hash = "sha256:20b8a746a026017acf07da39fdb10aa80ad9877046c9182442bf80c84a1c4696"}, + {file = "lxml-4.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:891dc8f522d7059ff0024cd3ae79fd224752676447f9c678f2a5c14b84d9a939"}, + {file = "lxml-4.8.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:b6fc2e2fb6f532cf48b5fed57567ef286addcef38c28874458a41b7837a57807"}, + {file = "lxml-4.8.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:74eb65ec61e3c7c019d7169387d1b6ffcfea1b9ec5894d116a9a903636e4a0b1"}, + {file = "lxml-4.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:627e79894770783c129cc5e89b947e52aa26e8e0557c7e205368a809da4b7939"}, + {file = "lxml-4.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:545bd39c9481f2e3f2727c78c169425efbfb3fbba6e7db4f46a80ebb249819ca"}, + {file = "lxml-4.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5a58d0b12f5053e270510bf12f753a76aaf3d74c453c00942ed7d2c804ca845c"}, + {file = "lxml-4.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec4b4e75fc68da9dc0ed73dcdb431c25c57775383fec325d23a770a64e7ebc87"}, + {file = "lxml-4.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5804e04feb4e61babf3911c2a974a5b86f66ee227cc5006230b00ac6d285b3a9"}, + {file = "lxml-4.8.0-cp39-cp39-win32.whl", hash = "sha256:aa0cf4922da7a3c905d000b35065df6184c0dc1d866dd3b86fd961905bbad2ea"}, + {file = "lxml-4.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:dd10383f1d6b7edf247d0960a3db274c07e96cf3a3fc7c41c8448f93eac3fb1c"}, + {file = "lxml-4.8.0-pp37-pypy37_pp73-macosx_10_14_x86_64.whl", hash = "sha256:2403a6d6fb61c285969b71f4a3527873fe93fd0abe0832d858a17fe68c8fa507"}, + {file = "lxml-4.8.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:986b7a96228c9b4942ec420eff37556c5777bfba6758edcb95421e4a614b57f9"}, + {file = "lxml-4.8.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6fe4ef4402df0250b75ba876c3795510d782def5c1e63890bde02d622570d39e"}, + {file = "lxml-4.8.0-pp38-pypy38_pp73-macosx_10_14_x86_64.whl", hash = "sha256:f10ce66fcdeb3543df51d423ede7e238be98412232fca5daec3e54bcd16b8da0"}, + {file = "lxml-4.8.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:730766072fd5dcb219dd2b95c4c49752a54f00157f322bc6d71f7d2a31fecd79"}, + {file = "lxml-4.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8b99ec73073b37f9ebe8caf399001848fced9c08064effdbfc4da2b5a8d07b93"}, + {file = "lxml-4.8.0.tar.gz", hash = "sha256:f63f62fc60e6228a4ca9abae28228f35e1bd3ce675013d1dfb828688d50c6e23"}, ] nodeenv = [ {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, ] packaging = [ - {file = "packaging-21.2-py3-none-any.whl", hash = "sha256:14317396d1e8cdb122989b916fa2c7e9ca8e2be9e8060a6eff75b6b7b4d8a7e0"}, - {file = "packaging-21.2.tar.gz", hash = "sha256:096d689d78ca690e4cd8a89568ba06d07ca097e3306a4381635073ca91479966"}, + {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, + {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] platformdirs = [ - {file = "platformdirs-2.4.0-py3-none-any.whl", hash = "sha256:8868bbe3c3c80d42f20156f22e7131d2fb321f5bc86a2a345375c6481a67021d"}, - {file = "platformdirs-2.4.0.tar.gz", hash = "sha256:367a5e80b3d04d2428ffa76d33f124cf11e8fff2acdaa9b43d545f5c7d661ef2"}, + {file = "platformdirs-2.5.1-py3-none-any.whl", hash = "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227"}, + {file = "platformdirs-2.5.1.tar.gz", hash = "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d"}, ] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] pre-commit = [ - {file = "pre_commit-2.15.0-py2.py3-none-any.whl", hash = "sha256:a4ed01000afcb484d9eb8d504272e642c4c4099bbad3a6b27e519bd6a3e928a6"}, - {file = "pre_commit-2.15.0.tar.gz", hash = "sha256:3c25add78dbdfb6a28a651780d5c311ac40dd17f160eb3954a0c59da40a505a7"}, + {file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"}, + {file = "pre_commit-2.17.0.tar.gz", hash = "sha256:c1a8040ff15ad3d648c70cc3e55b93e4d2d5b687320955505587fd79bbaed06a"}, ] py = [ - {file = "py-1.10.0-py2.py3-none-any.whl", hash = "sha256:3b80836aa6d1feeaa108e046da6423ab8f6ceda6468545ae8d02d9d58d18818a"}, - {file = "py-1.10.0.tar.gz", hash = "sha256:21b81bda15b66ef5e1a777a21c4dcd9c20ad3efd0b3f817e7a809035269e1bd3"}, + {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, + {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, ] pyparsing = [ - {file = "pyparsing-2.4.7-py2.py3-none-any.whl", hash = "sha256:ef9d7589ef3c200abe66653d3f1ab1033c3c419ae9b9bdb1240a85b024efc88b"}, - {file = "pyparsing-2.4.7.tar.gz", hash = "sha256:c203ec8783bf771a155b207279b9bccb8dea02d8f0c9e5f8ead507bc3246ecc1"}, + {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, + {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, ] pytest = [ {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, @@ -456,15 +474,14 @@ toml = [ {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] typing-extensions = [ - {file = "typing_extensions-3.10.0.2-py2-none-any.whl", hash = "sha256:d8226d10bc02a29bcc81df19a26e56a9647f8b0a6d4a83924139f4a8b01f17b7"}, - {file = "typing_extensions-3.10.0.2-py3-none-any.whl", hash = "sha256:f1d25edafde516b146ecd0613dabcc61409817af4766fbbcfb8d1ad4ec441a34"}, - {file = "typing_extensions-3.10.0.2.tar.gz", hash = "sha256:49f75d16ff11f1cd258e1b988ccff82a3ca5570217d7ad8c5f48205dd99a677e"}, + {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, + {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, ] virtualenv = [ {file = "virtualenv-20.9.0-py2.py3-none-any.whl", hash = "sha256:1d145deec2da86b29026be49c775cc5a9aab434f85f7efef98307fb3965165de"}, {file = "virtualenv-20.9.0.tar.gz", hash = "sha256:bb55ace18de14593947354e5e6cd1be75fb32c3329651da62e92bf5d0aab7213"}, ] zipp = [ - {file = "zipp-3.6.0-py3-none-any.whl", hash = "sha256:9fe5ea21568a0a70e50f273397638d39b03353731e6cbbb3fd8502a33fec40bc"}, - {file = "zipp-3.6.0.tar.gz", hash = "sha256:71c644c5369f4a6e07636f0aa966270449561fcea2e3d6747b8d23efaa9d7832"}, + {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"}, + {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"}, ] From 3dea29fbdf134fd743c2f3e044f872ca3a9aca57 Mon Sep 17 00:00:00 2001 From: Nicholas Long Date: Thu, 31 Mar 2022 08:04:36 -0600 Subject: [PATCH 06/13] format ci file --- .github/workflows/ci.yml | 56 ++++++++++++++++++++-------------------- 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 037b289..adad9f8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,31 +12,31 @@ jobs: python-version: [3.7, 3.8] steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - - name: Display Python version - run: python -c "import sys; print(sys.version)" - - - name: Install poetry - uses: abatilo/actions-poetry@v2.0.0 - - - name: Install poetry (and update) and pre-commit - run: | - poetry update - poetry run pre-commit install - - - name: Run pre-commit - run: poetry run pre-commit run --all-files - - - name: Run tests - run: poetry run pytest - - - name: Run Generator (BuildingSync 2.4) - run: | - curl -L -o bsyncpy/BuildingSync-2.4.xsd https://github.com/BuildingSync/schema/releases/download/v2.4.0/BuildingSync.xsd - cd bsyncpy - poetry run python bsyncpy_generator.py BuildingSync-2.4.xsd + - uses: actions/checkout@v2 + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Display Python version + run: python -c "import sys; print(sys.version)" + + - name: Install poetry + uses: abatilo/actions-poetry@v2.0.0 + + - name: Install poetry (and update) and pre-commit + run: | + poetry update + poetry run pre-commit install + + - name: Run pre-commit + run: poetry run pre-commit run --all-files + + - name: Run tests + run: poetry run pytest + + - name: Run Generator (BuildingSync 2.4) + run: | + curl -L -o bsyncpy/BuildingSync-2.4.xsd https://github.com/BuildingSync/schema/releases/download/v2.4.0/BuildingSync.xsd + cd bsyncpy + poetry run python bsyncpy_generator.py BuildingSync-2.4.xsd From a7581ba525127d15e42250e1422ccadb5c7c6dc4 Mon Sep 17 00:00:00 2001 From: Nicholas Long Date: Thu, 31 Mar 2022 08:26:15 -0600 Subject: [PATCH 07/13] add changelog --- CHANGELOG.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7f8722d..8058ad4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,8 @@ -# Version 0.2.0 (Unreleased) +# Version 0.3.0 (Unreleased) + +* Generated for BuildingSync 2.5 (which is currently develop-v2) + +# Version 0.2.0 * Generated for BuildingSync 2.4 * Renamed project folder to bsyncpy to follow Python package conventions From cb5ed2d0d71b072952d1dae1fc8ddb02938e0065 Mon Sep 17 00:00:00 2001 From: Nicholas Long Date: Thu, 31 Mar 2022 08:32:40 -0600 Subject: [PATCH 08/13] test more versions of bsync --- .github/workflows/ci.yml | 18 ++++++++++++++++++ README.md | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index adad9f8..075c8a8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,8 +35,26 @@ jobs: - name: Run tests run: poetry run pytest + - name: Run Generator (BuildingSync 2.3) + run: | + curl -L -o bsyncpy/BuildingSync-2.3.xsd https://github.com/BuildingSync/schema/releases/download/v2.3.0/BuildingSync.xsd + cd bsyncpy + poetry run python bsyncpy_generator.py BuildingSync-2.3.xsd + - name: Run Generator (BuildingSync 2.4) run: | curl -L -o bsyncpy/BuildingSync-2.4.xsd https://github.com/BuildingSync/schema/releases/download/v2.4.0/BuildingSync.xsd cd bsyncpy poetry run python bsyncpy_generator.py BuildingSync-2.4.xsd + + - name: Run Generator (BuildingSync Develop V2) + run: | + curl -L -o bsyncpy/BuildingSync-develop-v2.xsd https://raw.githubusercontent.com/BuildingSync/schema/develop-v2/BuildingSync.xsd + cd bsyncpy + poetry run python bsyncpy_generator.py BuildingSync-develop-v2.xsd + + - name: Run Generator (BuildingSync Develop V3) + run: | + curl -L -o bsyncpy/BuildingSync-develop-v3.xsd https://raw.githubusercontent.com/BuildingSync/schema/develop-v3/BuildingSync.xsd + cd bsyncpy + poetry run python bsyncpy_generator.py BuildingSync-develop-v3.xsd \ No newline at end of file diff --git a/README.md b/README.md index d49e953..c928c5a 100644 --- a/README.md +++ b/README.md @@ -57,6 +57,6 @@ Check out our example Jupyter Notebook [here](https://nbviewer.jupyter.org/githu * See the notes above on downloading and generating the new bsync.py file. * Bump version in `pyproject.toml` file -* Add CHANGELOG entry +* Add/update CHANGELOG entry * Update (or add) generator test in `.github/ci.yml` * Update this README with the latest version of testing. \ No newline at end of file From 0726bfcac098aeb0dfebadd78a0e0c99f1345fbf Mon Sep 17 00:00:00 2001 From: Nicholas Long Date: Thu, 31 Mar 2022 08:46:37 -0600 Subject: [PATCH 09/13] bump version --- .gitignore | 3 ++- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 4d6600f..380d176 100644 --- a/.gitignore +++ b/.gitignore @@ -5,8 +5,9 @@ __pycache__ *.egg-info *.pyc +dist BuildingSync.xsd BuildingSync-*.xsd example.py -output.xml \ No newline at end of file +output.xml diff --git a/pyproject.toml b/pyproject.toml index 9fbe48f..2bfcd1d 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "bsyncpy" -version = "0.2.0" +version = "0.3.0-alpha.0" description = "Tools to autogenerate a Python SDK for BuildingSync given an XSD" authors = ["Joel Bender "] From 1f41221fc439bacea9a7fe914b7e9f8593e06e83 Mon Sep 17 00:00:00 2001 From: Nicholas Long Date: Thu, 31 Mar 2022 08:47:17 -0600 Subject: [PATCH 10/13] eol --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 075c8a8..b6f16b5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,7 +40,7 @@ jobs: curl -L -o bsyncpy/BuildingSync-2.3.xsd https://github.com/BuildingSync/schema/releases/download/v2.3.0/BuildingSync.xsd cd bsyncpy poetry run python bsyncpy_generator.py BuildingSync-2.3.xsd - + - name: Run Generator (BuildingSync 2.4) run: | curl -L -o bsyncpy/BuildingSync-2.4.xsd https://github.com/BuildingSync/schema/releases/download/v2.4.0/BuildingSync.xsd @@ -57,4 +57,4 @@ jobs: run: | curl -L -o bsyncpy/BuildingSync-develop-v3.xsd https://raw.githubusercontent.com/BuildingSync/schema/develop-v3/BuildingSync.xsd cd bsyncpy - poetry run python bsyncpy_generator.py BuildingSync-develop-v3.xsd \ No newline at end of file + poetry run python bsyncpy_generator.py BuildingSync-develop-v3.xsd From f0541d5fbd667fe7d209dd2789f0af9cf1ad054b Mon Sep 17 00:00:00 2001 From: Nicholas Long Date: Thu, 31 Mar 2022 10:05:47 -0600 Subject: [PATCH 11/13] rerun on develop-v2 --- bsyncpy/bsync.py | 395 +++++++++++++++++++++++++++++++---------------- 1 file changed, 260 insertions(+), 135 deletions(-) diff --git a/bsyncpy/bsync.py b/bsyncpy/bsync.py index 39dd54d..2d6a4e8 100644 --- a/bsyncpy/bsync.py +++ b/bsyncpy/bsync.py @@ -387,6 +387,44 @@ class PremisesNotes(BSElement): element_type = "xs:string" +# eGRIDRegionCode +class eGRIDRegionCode(BSElement): + """WARNING: eGRIDRegionCode will be deprecated in BuildingSync 3.0 - use eGRIDSubregionCodes.""" + + element_type = "xs:string" + element_enumerations = [ + "AKGD", + "AKMS", + "AZNM", + "CAMX", + "ERCT", + "FRCC", + "HIMS", + "HIOA", + "MORE", + "MROE", + "MROW", + "NEWE", + "NWPP", + "NYCW", + "NYLI", + "NYUP", + "PRMS", + "RFCE", + "RFCM", + "RFCW", + "RMPA", + "SPNO", + "SPSO", + "SRMV", + "SRMW", + "SRSO", + "SRTV", + "SRVC", + "Other", + ] + + # WeatherDataStationID class WeatherDataStationID(BSElement): """For an actual weather station, this is the ID assigned by National Oceanic and Atmospheric Administration (NOAA). For hourly energy simulations, this is the six digit code associated with the hourly weather data, generally found in the name of the weather data file, as well as in the header of the data file. (NNNNNN) WARNING: This element is being deprecated, use WeatherStations/WeatherStation/WeatherDataStationID instead""" @@ -509,7 +547,7 @@ class PubliclySubsidized(BSElement): class NumberOfBusinesses(BSElement): """Number of separate business tenants within the premises.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # FloorsAboveGrade @@ -530,28 +568,28 @@ class FloorsBelowGrade(BSElement): class ConditionedFloorsAboveGrade(BSElement): """Nominal number of floors which are fully above ground and are conditioned.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # BuildingType.ConditionedFloorsBelowGrade class ConditionedFloorsBelowGrade(BSElement): """Nominal number of floors which are fully underground and are conditioned.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # BuildingType.UnconditionedFloorsAboveGrade class UnconditionedFloorsAboveGrade(BSElement): """Nominal number of floors which are fully above ground and are unconditioned.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # BuildingType.UnconditionedFloorsBelowGrade class UnconditionedFloorsBelowGrade(BSElement): """Nominal number of floors which are fully underground and are unconditioned.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # BuildingAutomationSystem @@ -586,7 +624,7 @@ class AspectRatio(BSElement): class Perimeter(BSElement): """Length of a line forming the boundary around the premises. (ft)""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # BuildingType.TotalExteriorAboveGradeWallArea @@ -700,7 +738,7 @@ class PercentLeasedByOwner(BSElement): class NumberOfFacilitiesOnSite(BSElement): """Number of facilities on the site.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # BuildingType.OperatorType @@ -929,7 +967,7 @@ class FootprintShape(BSElement): class NumberOfSides(BSElement): """Number of sides of the section of the building. Inclusion of this element is recommended when auc:FootprintShape is Other.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # Story @@ -992,7 +1030,7 @@ class ZOffset(BSElement): class FloorsPartiallyBelowGrade(BSElement): """Number of floors which are partially underground.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # BuildingType.Sections.Section.FloorToFloorHeight @@ -1119,7 +1157,7 @@ class PercentageOfCommonSpace(BSElement): class ConditionedVolume(BSElement): """Heated or cooled air volume of a premises. (ft3)""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # SpaceType.OccupancyScheduleIDs.OccupancyScheduleID @@ -2326,21 +2364,21 @@ class LinkedTimeSeriesID(BSElement): "IDref", # IDREF ] -# ResourceUseType.Emissions.Emission.EmissionsLinkedTimeSeriesIDs.EmissionsLinkedTimeSeriesID -class EmissionsLinkedTimeSeriesID(BSElement): - pass +# ResourceUseType.UtilityIDs.UtilityID +class UtilityID(BSElement): + """ID of utility associated with this resource use.""" -EmissionsLinkedTimeSeriesID.element_attributes = [ +UtilityID.element_attributes = [ "IDref", # IDREF ] -# ResourceUseType.UtilityIDs.UtilityID -class UtilityID(BSElement): - """ID of utility associated with this resource use.""" +# ResourceUseType.Emissions.Emission.EmissionsLinkedTimeSeriesIDs.EmissionsLinkedTimeSeriesID +class EmissionsLinkedTimeSeriesID(BSElement): + pass -UtilityID.element_attributes = [ +EmissionsLinkedTimeSeriesID.element_attributes = [ "IDref", # IDREF ] @@ -2382,8 +2420,8 @@ class GHGEmissions(BSElement): element_type = "xs:decimal" -# ResourceUseType.Emissions.Emission.GHGEmissionsIntensity -class GHGEmissionsIntensity(BSElement): +# ResourceUseType.Emissions.Emission.GHGEmissionIntensity +class GHGEmissionIntensity(BSElement): """GHG Emission Intensity (kg CO2e/ft2)""" element_type = "xs:decimal" @@ -2391,23 +2429,11 @@ class GHGEmissionsIntensity(BSElement): # ResourceUseType.Emissions.Emission.AvoidedEmissions class AvoidedEmissions(BSElement): - """The avoided Greenhouse gas (GHG) emissions resulting from a renewable energy source or a system. (MtCO2e)""" + """The avoided Greenhouse gas (GHG) emissions resulting from a renewable energy source or a system. (kg CO2e)""" element_type = "xs:decimal" -# ResourceUseType.Emissions.Emission.EmissionsLinkedTimeSeriesIDs -class EmissionsLinkedTimeSeriesIDs(BSElement): - """Links to all time series data used to calculate the total GHG Emissions""" - - element_type = "xs:decimal" - - -EmissionsLinkedTimeSeriesIDs.element_children = [ - ("EmissionsLinkedTimeSeriesID", EmissionsLinkedTimeSeriesID), -] - - # AllResourceTotalType.SiteEnergyUseIntensity class SiteEnergyUseIntensity(BSElement): """The Site Energy Use divided by the premises gross floor area. (kBtu/ft2)""" @@ -2527,6 +2553,27 @@ class WasteWaterVolume(BSElement): element_type = "xs:decimal" +# AllResourceTotalType.AnnualAverageGHGEmissions +class AnnualAverageGHGEmissions(BSElement): + """Annual Average GHG Emissions. (MtCO2e)""" + + element_type = "xs:decimal" + + +# AllResourceTotalType.AnnualMarginalGHGEmissions +class AnnualMarginalGHGEmissions(BSElement): + """Annual Marginal GHG Emissions. (MtCO2e)""" + + element_type = "xs:decimal" + + +# AllResourceTotalType.AnnualGHGEmissionIntensity +class AnnualGHGEmissionIntensity(BSElement): + """Annual GHG Emission Intensity. (kg CO2e/ft2/year)""" + + element_type = "xs:decimal" + + # TimeSeriesType.ReadingType class ReadingType(BSElement): """Type of data recorded by the meter or other source.""" @@ -2565,9 +2612,9 @@ class TimeSeriesReadingQuantity(BSElement): "Current Angle", "Demand", "Frequency", - "Greenhouse Gas Emissions", "Power", "Power Factor", + "Greenhouse Gas Emissions", "Energy", "Voltage", "Voltage Angle", @@ -2953,7 +3000,7 @@ class ExistingSystemRemoved(BSElement): class MeasureRank(BSElement): """Sequence in which the measure was analyzed relative to other measures. Ranking should be 1 if it is analyzed first, 2 if analyzed after Measure 1 is applied, etc. This accounts for interactive effects between measures. Ranking may be 1 for all measures if they are not analyzed as a package.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # MeasureType.MeasureSavingsAnalysis.OtherCostAnnualSavings @@ -3329,6 +3376,32 @@ class FrequencyOfMaintenance(BSElement): ] +# HVACSystemType.PrimaryHVACSystemType +class PrimaryHVACSystemType(BSElement): + """Primary HVAC type. WARNING: This element is being deprecated, use PrincipalHVACSystemType instead.""" + + element_type = "xs:string" + element_enumerations = [ + "Packaged Terminal Air Conditioner", + "Four Pipe Fan Coil Unit", + "Packaged Terminal Heat Pump", + "Packaged Rooftop Air Conditioner", + "Packaged Rooftop Heat Pump", + "Packaged Rooftop VAV with Hot Water Reheat", + "Packaged Rooftop VAV with Electric Reheat", + "VAV with Hot Water Reheat", + "VAV with Electric Reheat", + "Warm Air Furnace", + "Ventilation Only", + "Dedicated Outdoor Air System", + "Water Loop Heat Pump", + "Ground Source Heat Pump", + "VRF Terminal Unit", + "Chilled Beam", + "Other", + ] + + # HVACSystemType.PrincipalHVACSystemType class PrincipalHVACSystemType(BSElement): """Principal HVAC type.""" @@ -3359,7 +3432,7 @@ class PrincipalHVACSystemType(BSElement): class Quantity(BSElement): """Number of systems of this type.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # HVACSystemType.HeatingAndCoolingSystems.HeatingSources.HeatingSource.HeatingSourceType.Furnace.FurnaceType @@ -4072,6 +4145,13 @@ class MinimumOutsideAirPercentage(BSElement): element_type = "xs:decimal" +# DuctSystemType.MaximumOAFlowRate +class MaximumOAFlowRate(BSElement): + """WARNING:This element is being deprecated in version 3.0, use MaximumOutsideAirFlowRate. The maximum flow rate of outside air that the system is able to deliver. For systems with economizing or demand controlled ventilation capability, this is the outdoor air flow rate when the outdoor air (OA) damper is fully open and the fan speed is at maximum. (cfm)""" + + element_type = "xs:decimal" + + # DuctSystemType.MaximumOutsideAirFlowRate class MaximumOutsideAirFlowRate(BSElement): """The maximum flow rate of outside air that the system is able to deliver. For systems with economizing or demand controlled ventilation capability, this is the outdoor air flow rate when the outdoor air (OA) damper is fully open and the fan speed is at maximum. (cfm)""" @@ -4561,7 +4641,7 @@ class CoolingTowerCellControl(BSElement): class CellCount(BSElement): """The number of cells in the cooling tower. Each cell has its own fan, water flow allowing for responding to lower load conditions.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # CondenserPlantType.GroundSource.WaterSideEconomizer.WaterSideEconomizerTemperatureSetpoint @@ -4584,7 +4664,7 @@ class GroundSourceType(BSElement): # CondenserPlantType.GroundSource.WellCount class WellCount(BSElement): - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # OtherHVACSystemType.OtherHVACSystemCondition @@ -4855,14 +4935,14 @@ class LampPower(BSElement): class NumberOfLampsPerLuminaire(BSElement): """The number of lamps in the luminaire.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # LightingSystemType.NumberOfLampsPerBallast class NumberOfLampsPerBallast(BSElement): """The number of lamps driven by the ballast.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # LightingSystemType.NumberOfBallastsPerLuminaire @@ -4876,7 +4956,7 @@ class NumberOfBallastsPerLuminaire(BSElement): class NumberOfLuminaires(BSElement): """Total number of luminaires/fixtures in this system.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # LightingSystemType.OutsideLighting @@ -5216,7 +5296,7 @@ class HeatExchanger(BSElement): class RecirculationLoopCount(BSElement): """The total number of hot water recirculation loops coming from and returning to a specific water heater.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # DomesticHotWaterSystemType.Recirculation.RecirculationFlowRate @@ -5303,7 +5383,7 @@ class TypeOfCookingEquipment(BSElement): class NumberOfMeals(BSElement): """Number of meals cooked per year using this equipment.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # CookingSystemType.CookingEnergyPerMeal @@ -5324,7 +5404,7 @@ class DailyWaterUse(BSElement): class CompressorUnloaderStages(BSElement): """Number of stages available for unloading the compressor.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # RefrigerationSystemType.RefrigerationSystemCategory.CentralRefrigerationSystem.RefrigerationCompressor.RefrigerationCompressorType @@ -5381,7 +5461,7 @@ class SuctionVaporTemperature(BSElement): class NumberOfRefrigerantReturnLines(BSElement): """Number of return lines from refrigerated cases to the compressor.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # RefrigerationSystemType.RefrigerationSystemCategory.CentralRefrigerationSystem.EvaporatorPressureRegulators @@ -5765,6 +5845,13 @@ class FanSize(BSElement): element_type = "xs:decimal" +# FanSystemType.InstalledFlowRate +class InstalledFlowRate(BSElement): + """Actual flow rate of fan under normal operating conditions. WARNING: this element is being deprecated, use FanInstalledFlowRate instead. (cfm)""" + + element_type = "xs:decimal" + + # FanSystemType.FanInstalledFlowRate class FanInstalledFlowRate(BSElement): """Actual flow rate of fan under normal operating conditions. (cfm)""" @@ -5864,21 +5951,21 @@ class DesignStaticPressure(BSElement): class NumberOfDiscreteFanSpeedsCooling(BSElement): """The number of discrete operating speeds for the supply-fan motor when the unit is in cooling mode, excluding "off." Only used if flow control is "stepped." """ - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # FanSystemType.NumberOfDiscreteFanSpeedsHeating class NumberOfDiscreteFanSpeedsHeating(BSElement): """The number of discrete operating speeds for the supply-fan motor when the unit is in heating mode, excluding "off." Only used if flow control is "stepped." """ - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # MotorSystemType.MotorRPM class MotorRPM(BSElement): """The number of full revolutions in a unit of time and is used to assign MotorEfficiency. 2008 NR ACM table N2-20 has four speeds: 3600 rpm, 1800 rpm, 1200 rpm, 900 rpm.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # MotorSystemType.MotorBrakeHP @@ -5920,7 +6007,7 @@ class FullLoadAmps(BSElement): class MotorPoleCount(BSElement): """The number of pole electromagnetic windings in the motor's stator and used to assign MotorEfficiency. Pole count is always a multiple of 2.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # MotorSystemType.MotorEnclosureType @@ -6459,7 +6546,7 @@ class RoofExteriorSolarAbsorptance(BSElement): class RoofExteriorSolarReflectanceIndex(BSElement): """A measure of a roof's ability to reject solar heat, as shown by a small temperature rise. It is defined so that a standard black (reflectance 0.05, emittance 0.90) is 0 and a standard white (reflectance 0.80, emittance 0.90) is 100.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # RoofSystemType.RoofExteriorThermalAbsorptance @@ -7325,14 +7412,14 @@ class ThermalMedium(BSElement): class PhotovoltaicSystemNumberOfModulesPerArray(BSElement): """Number of modules in each array of a photovoltaic system.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # OnsiteStorageTransmissionGenerationSystemType.EnergyConversionType.Generation.OnsiteGenerationType.PV.PhotovoltaicSystemNumberOfArrays class PhotovoltaicSystemNumberOfArrays(BSElement): """Number of arrays in a photovoltaic system.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # OnsiteStorageTransmissionGenerationSystemType.EnergyConversionType.Generation.OnsiteGenerationType.PV.PhotovoltaicSystemMaximumPowerOutput @@ -7619,7 +7706,7 @@ class SpatialUnitType(BSElement): class NumberOfUnits(BSElement): """Number of individual units within the premises.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # SpatialUnitTypeType.UnitDensity @@ -7670,7 +7757,7 @@ class StreetNumberPrefix(BSElement): class StreetNumberNumeric(BSElement): """The numeric identifier for a land parcel, house, building, or other location along a thoroughfare or within a community.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # Address.StreetAddressDetail.Complex.StreetNumberSuffix @@ -8753,7 +8840,7 @@ class ControlStrategyDaylightingType(BSElement): class ControlSteps(BSElement): """For stepped dimming, the number of equally spaced control steps.""" - element_type = "xs:nonNegativeInteger" + element_type = "xs:integer" # CommunicationProtocolAnalogType @@ -9479,6 +9566,15 @@ class WallID(BSElement): ("WallArea", WallArea), ] +# BuildingType.Sections.Section.Sides.Side.WallIDs +class WallIDs(BSElement): + pass + + +WallIDs.element_children = [ + ("WallID", WallID), +] + # DoorID class DoorID(BSElement): """ID number of the door type associated with this side of the section.""" @@ -9491,6 +9587,15 @@ class DoorID(BSElement): ("FenestrationArea", FenestrationArea), ] +# BuildingType.Sections.Section.Sides.Side.DoorIDs +class DoorIDs(BSElement): + pass + + +DoorIDs.element_children = [ + ("DoorID", DoorID), +] + # ThermalZoneIDs class ThermalZoneIDs(BSElement): pass @@ -9992,6 +10097,15 @@ class UtilityIDs(BSElement): ("UtilityID", UtilityID), ] +# ResourceUseType.Emissions.Emission.EmissionsLinkedTimeSeriesIDs +class EmissionsLinkedTimeSeriesIDs(BSElement): + """Links to all time series data used to calculate the total GHG Emissions""" + + +EmissionsLinkedTimeSeriesIDs.element_children = [ + ("EmissionsLinkedTimeSeriesID", EmissionsLinkedTimeSeriesID), +] + # ResourceUseType.Emissions.Emission class Emission(BSElement): pass @@ -10003,7 +10117,7 @@ class Emission(BSElement): ("EmissionsFactor", EmissionsFactor), ("EmissionsFactorSource", EmissionsFactorSource), ("GHGEmissions", GHGEmissions), - ("GHGEmissionsIntensity", GHGEmissionsIntensity), + ("GHGEmissionIntensity", GHGEmissionIntensity), ("AvoidedEmissions", AvoidedEmissions), ("EmissionsLinkedTimeSeriesIDs", EmissionsLinkedTimeSeriesIDs), ] @@ -10119,7 +10233,7 @@ class MeasureName(BSElement): "Clean and/or repair", "Implement training and/or documentation", "Upgrade operating protocols, calibration, and/or sequencing", - "Convert to cleaner fuels", + "Convert to Cleaner Fuels", "Other", ] @@ -10163,6 +10277,7 @@ class MeasureName(BSElement): element_type = "xs:string" element_enumerations = [ + "Add heat recovery", "Add or upgrade BAS/EMS/EMCS", "Add or upgrade controls", "Convert pneumatic controls to DDC", @@ -10188,8 +10303,7 @@ class MeasureName(BSElement): "Improve distribution fans", "Improve ventilation fans", "Convert CV system to VAV system", - "Repair leaks in ducts", - "Seal ducts", + "Repair leaks / seal ducts", "Add duct insulation", "Balance ventilation/distribution system", "Repair or replace HVAC damper and controller", @@ -10202,12 +10316,14 @@ class MeasureName(BSElement): "Install solar ventilation preheating system", "Add or repair economizer", "Add energy recovery", + "Add or replace cooling tower", "Install thermal destratification fans", "Install demand control ventilation", "Install gas cooling", "Install air source heat pump", "Install variable refrigerant flow system", "Capture and return condensate", + "Install or Upgrade Master Venting", "Clean and/or repair", "Implement training and/or documentation", "Upgrade operating protocols, calibration, and/or sequencing", @@ -10270,8 +10386,7 @@ class MeasureName(BSElement): "Insulate thermal bypasses", "Increase ceiling insulation", "Increase roof insulation", - "Insulate attic hatch", - "Insulate attic stair box", + "Insulate attic hatch / stair box", "Add attic/knee wall insulation", "Install cool/green roof", "Add shading devices", @@ -10308,6 +10423,7 @@ class MeasureName(BSElement): "Replace or upgrade water heater", "Add energy recovery", "Install solar hot water system", + "Separate SHW from heating", "Replace with higher efficiency pump", "Replace with variable speed pump", "Install or upgrade master venting", @@ -10529,6 +10645,7 @@ class MeasureName(BSElement): element_type = "xs:string" element_enumerations = [ "Change to more favorable rate schedule", + "Energy cost reduction through rate adjustments - uncategorized", "Energy service billing and meter auditing recommendations", "Change to lower energy cost supplier(s)", "Other", @@ -10619,6 +10736,7 @@ class MeasureName(BSElement): element_enumerations = [ "Improve data center efficiency", "Implement hot aisle hold aisle design", + "Implement hot aisle cold aisle design", "Implement server virtualization", "Upgrade servers", "Clean and/or repair", @@ -10632,6 +10750,21 @@ class MeasureName(BSElement): ("MeasureName", DataCenterImprovements.MeasureName), ] +# MeasureType.TechnologyCategories.TechnologyCategory.FutureOtherECMs +class FutureOtherECMs(BSElement): + """Measures reserved for future and other ECMs.""" + + class MeasureName(BSElement): + """Short description of measure.""" + + element_type = "xs:string" + element_enumerations = ["Other"] + + +FutureOtherECMs.element_children = [ + ("MeasureName", FutureOtherECMs.MeasureName), +] + # MeasureType.TechnologyCategories.TechnologyCategory.HealthAndSafety class HealthAndSafety(BSElement): """Category heading for measures that are necessary for health, comfort, or safety reasons, not for energy efficiency reasons.""" @@ -10711,6 +10844,7 @@ class MeasureName(BSElement): ("AdvancedMeteringSystems", AdvancedMeteringSystems), ("PlugLoadReductions", PlugLoadReductions), ("DataCenterImprovements", DataCenterImprovements), + ("FutureOtherECMs", FutureOtherECMs), ("HealthAndSafety", HealthAndSafety), ("Uncategorized", Uncategorized), ] @@ -12544,15 +12678,6 @@ class Assessments(BSElement): ("Assessment", Assessment), ] -# BuildingType.Sections.Section.Sides.Side.WallIDs -class WallIDs(BSElement): - pass - - -WallIDs.element_children = [ - ("WallID", WallID), -] - # WindowID class WindowID(BSElement): """ID number of the window type associated with this side of the section.""" @@ -12567,13 +12692,46 @@ class WindowID(BSElement): ("PercentOfWindowAreaShaded", PercentOfWindowAreaShaded), ] -# BuildingType.Sections.Section.Sides.Side.DoorIDs -class DoorIDs(BSElement): +# BuildingType.Sections.Section.Sides.Side.WindowIDs +class WindowIDs(BSElement): pass -DoorIDs.element_children = [ +WindowIDs.element_children = [ + ("WindowID", WindowID), +] + +# BuildingType.Sections.Section.Sides.Side +class Side(BSElement): + class WallID(WallID): + pass + + class WindowID(WindowID): + pass + + class DoorID(DoorID): + pass + + +Side.element_children = [ + ("SideNumber", SideNumber), + ("SideLength", SideLength), + ("WallID", WallID), + ("WallIDs", WallIDs), + ("WindowID", WindowID), + ("WindowIDs", WindowIDs), ("DoorID", DoorID), + ("DoorIDs", DoorIDs), + ("ThermalZoneIDs", ThermalZoneIDs), +] + +# BuildingType.Sections.Section.Sides +class Sides(BSElement): + """List of sides.""" + + +Sides.element_children = [ + ("Side", Side), ] # BuildingType.Sections.Section.Ceilings.Ceiling.CeilingID @@ -12721,14 +12879,14 @@ class Target(BSElement): ("AnnualPeakElectricityReduction", AnnualPeakElectricityReduction), ("AnnualWaterSavings", AnnualWaterSavings), ("AnnualWaterCostSavings", AnnualWaterCostSavings), + ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), + ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), + ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), ("SimplePayback", SimplePayback), ("NetPresentValue", NetPresentValue), ("InternalRateOfReturn", InternalRateOfReturn), ("AssetScore", AssetScore), ("ENERGYSTARScore", ENERGYSTARScore), - ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), - ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), - ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), ] # AnnualSavingsByFuels @@ -12757,21 +12915,6 @@ class WaterUse(BSElement): element_type = "xs:decimal" - class AnnualAverageGHGEmissions(BSElement): - """Annual Average GHG Emissions. (MtCO2e)""" - - element_type = "xs:decimal" - - class AnnualMarginalGHGEmissions(BSElement): - """Annual Marginal GHG Emissions. (MtCO2e)""" - - element_type = "xs:decimal" - - class AnnualGHGEmissionIntensity(BSElement): - """Annual GHG Emission Intensity. (kg CO2e/ft2/year)""" - - element_type = "xs:decimal" - AllResourceTotalType.element_attributes = [ "ID", # ID @@ -12782,9 +12925,6 @@ class AnnualGHGEmissionIntensity(BSElement): ("ResourceBoundary", ResourceBoundary), ("SiteEnergyUse", AllResourceTotalType.SiteEnergyUse), ("SiteEnergyUseIntensity", SiteEnergyUseIntensity), - ("AnnualAverageGHGEmissions", AllResourceTotalType.AnnualAverageGHGEmissions), - ("AnnualMarginalGHGEmissions", AllResourceTotalType.AnnualMarginalGHGEmissions), - ("AnnualGHGEmissionIntensity", AllResourceTotalType.AnnualGHGEmissionIntensity), ("SourceEnergyUse", AllResourceTotalType.SourceEnergyUse), ("SourceEnergyUseIntensity", SourceEnergyUseIntensity), ("BuildingEnergyUse", BuildingEnergyUse), @@ -12813,6 +12953,9 @@ class AnnualGHGEmissionIntensity(BSElement): ("WaterIntensity", WaterIntensity), ("WaterCost", WaterCost), ("WasteWaterVolume", WasteWaterVolume), + ("AnnualAverageGHGEmissions", AnnualAverageGHGEmissions), + ("AnnualMarginalGHGEmissions", AnnualMarginalGHGEmissions), + ("AnnualGHGEmissionIntensity", AnnualGHGEmissionIntensity), ("UserDefinedFields", UserDefinedFields), ] @@ -13737,38 +13880,6 @@ class TenantType(BSElement): ("UserDefinedFields", UserDefinedFields), ] -# BuildingType.Sections.Section.Sides.Side.WindowIDs -class WindowIDs(BSElement): - pass - - -WindowIDs.element_children = [ - ("WindowID", WindowID), -] - -# BuildingType.Sections.Section.Sides.Side -class Side(BSElement): - pass - - -Side.element_children = [ - ("SideNumber", SideNumber), - ("SideLength", SideLength), - ("WallIDs", WallIDs), - ("WindowIDs", WindowIDs), - ("DoorIDs", DoorIDs), - ("ThermalZoneIDs", ThermalZoneIDs), -] - -# BuildingType.Sections.Section.Sides -class Sides(BSElement): - """List of sides.""" - - -Sides.element_children = [ - ("Side", Side), -] - # ResourceUseType class ResourceUseType(BSElement): pass @@ -14773,6 +14884,9 @@ class PackageOfMeasures(BSElement): ("AnnualDemandSavingsCost", AnnualDemandSavingsCost), ("AnnualWaterSavings", AnnualWaterSavings), ("AnnualWaterCostSavings", AnnualWaterCostSavings), + ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), + ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), + ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), ("ImplementationPeriod", ImplementationPeriod), ("PackageFirstCost", PackageFirstCost), ("MVCost", MVCost), @@ -14794,9 +14908,6 @@ class PackageOfMeasures(BSElement): ("AssetScore", AssetScore), ("ENERGYSTARScore", ENERGYSTARScore), ("UserDefinedFields", UserDefinedFields), - ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), - ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), - ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), ] # ScenarioType.ResourceUses.ResourceUse @@ -14856,9 +14967,6 @@ class MeasureSavingsAnalysis(BSElement): ("SimplePayback", SimplePayback), ("NetPresentValue", NetPresentValue), ("InternalRateOfReturn", InternalRateOfReturn), - ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), - ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), - ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), ] # ReportType.Utilities.Utility @@ -15020,6 +15128,7 @@ class DuctSystemType(BSElement): DuctSystemType.element_children = [ ("DuctConfiguration", DuctConfiguration), ("MinimumOutsideAirPercentage", MinimumOutsideAirPercentage), + ("MaximumOAFlowRate", MaximumOAFlowRate), ("MaximumOutsideAirFlowRate", MaximumOutsideAirFlowRate), ("DuctInsulationCondition", DuctInsulationCondition), ("DuctSealing", DuctSealing), @@ -15320,6 +15429,7 @@ class Control(ControlGeneralType): FanSystemType.element_children = [ ("FanEfficiency", FanEfficiency), ("FanSize", FanSize), + ("InstalledFlowRate", InstalledFlowRate), ("FanInstalledFlowRate", FanInstalledFlowRate), ("MinimumFlowRate", MinimumFlowRate), ("MaximumFanPower", MaximumFanPower), @@ -16397,6 +16507,7 @@ class HVACSystemType(BSElement): ("Location", Location), ("Priority", Priority), ("FrequencyOfMaintenance", FrequencyOfMaintenance), + ("PrimaryHVACSystemType", PrimaryHVACSystemType), ("PrincipalHVACSystemType", PrincipalHVACSystemType), ("HVACControlSystemTypes", HVACControlSystemTypes), ("LinkedPremises", LinkedPremises), @@ -16406,6 +16517,12 @@ class HVACSystemType(BSElement): # BuildingType class BuildingType(BSElement): + class eGRIDRegionCode(eGRIDRegionCode): + pass + + class eGRIDSubregionCodes(eGRIDSubregionCodes): + pass + class WeatherDataStationID(WeatherDataStationID): pass @@ -16428,6 +16545,7 @@ class WeatherStations(WeatherStations): ("PremisesIdentifiers", PremisesIdentifiers), ("Address", Address), ("ClimateZoneType", ClimateZoneType), + ("eGRIDRegionCode", eGRIDRegionCode), ("eGRIDSubregionCodes", eGRIDSubregionCodes), ("WeatherDataStationID", WeatherDataStationID), ("WeatherStationName", WeatherStationName), @@ -16527,14 +16645,14 @@ class ScenarioType(BSElement): ("AnnualPeakElectricityReduction", AnnualPeakElectricityReduction), ("AnnualWaterSavings", AnnualWaterSavings), ("AnnualWaterCostSavings", AnnualWaterCostSavings), + ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), + ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), + ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), ("SimplePayback", SimplePayback), ("NetPresentValue", NetPresentValue), ("InternalRateOfReturn", InternalRateOfReturn), ("AssetScore", AssetScore), ("ENERGYSTARScore", ENERGYSTARScore), - ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), - ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), - ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), ] ScenarioType.ScenarioType.element_children = [ ("CurrentBuilding", CurrentBuilding), @@ -16657,6 +16775,12 @@ class Building(BuildingType): # SiteType class SiteType(BSElement): + class eGRIDRegionCode(eGRIDRegionCode): + pass + + class eGRIDSubregionCodes(eGRIDSubregionCodes): + pass + class WeatherDataStationID(WeatherDataStationID): pass @@ -16680,6 +16804,7 @@ class WeatherStations(WeatherStations): ("OccupancyClassification", OccupancyClassification), ("Address", Address), ("ClimateZoneType", ClimateZoneType), + ("eGRIDRegionCode", eGRIDRegionCode), ("eGRIDSubregionCodes", eGRIDSubregionCodes), ("WeatherDataStationID", WeatherDataStationID), ("WeatherStationName", WeatherStationName), From 5ac61d3b6a510e2746e93bb89dd38b46e4ca19be Mon Sep 17 00:00:00 2001 From: Nicholas Long Date: Thu, 14 Apr 2022 14:07:33 -0600 Subject: [PATCH 12/13] updating version and changelog --- CHANGELOG.md | 3 ++- README.md | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8058ad4..959fc56 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,7 @@ -# Version 0.3.0 (Unreleased) +# Version 0.3.0.alpha.0 * Generated for BuildingSync 2.5 (which is currently develop-v2) + * Added GHG emission metrics # Version 0.2.0 diff --git a/README.md b/README.md index a27e0cc..4a028eb 100644 --- a/README.md +++ b/README.md @@ -67,6 +67,7 @@ Check out our example Jupyter Notebook [here](https://nbviewer.jupyter.org/githu ## Releasing New Version +* Bump version using poetry by calling `poetry version X.Y.Z` * Merge everything down to `main` * `git tag `. Version in the form of vX.Y.Z. * `git push --tags`. From 350ff690eac1234ce67aed399ae12ddfc5dd8488 Mon Sep 17 00:00:00 2001 From: Nicholas Long Date: Thu, 14 Apr 2022 14:10:42 -0600 Subject: [PATCH 13/13] update README.md --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 4a028eb..f8ca3da 100644 --- a/README.md +++ b/README.md @@ -68,7 +68,8 @@ Check out our example Jupyter Notebook [here](https://nbviewer.jupyter.org/githu ## Releasing New Version * Bump version using poetry by calling `poetry version X.Y.Z` -* Merge everything down to `main` +* Make sure CHANGELOG.md is up to date +* Create pull request to merge `develop` to `main` * `git tag `. Version in the form of vX.Y.Z. * `git push --tags`. * Go to GitHub and convert the tag to a release.