EPA-PM-API-Wrapper 0.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- epa_pm_api_wrapper/__init__.py +30 -0
- epa_pm_api_wrapper/__main__.py +4 -0
- epa_pm_api_wrapper/cli.py +413 -0
- epa_pm_api_wrapper/client.py +507 -0
- epa_pm_api_wrapper/exceptions.py +67 -0
- epa_pm_api_wrapper/models/__init__.py +1451 -0
- epa_pm_api_wrapper/models/accept_reject_type.py +12 -0
- epa_pm_api_wrapper/models/account.py +15 -0
- epa_pm_api_wrapper/models/account_info.py +58 -0
- epa_pm_api_wrapper/models/account_type.py +122 -0
- epa_pm_api_wrapper/models/account_type_language_preference.py +9 -0
- epa_pm_api_wrapper/models/additional_identifier.py +58 -0
- epa_pm_api_wrapper/models/additional_identifier_type.py +60 -0
- epa_pm_api_wrapper/models/additional_identifier_type_group.py +10 -0
- epa_pm_api_wrapper/models/additional_identifier_types.py +19 -0
- epa_pm_api_wrapper/models/additional_identifiers.py +19 -0
- epa_pm_api_wrapper/models/address_type.py +84 -0
- epa_pm_api_wrapper/models/address_type_state.py +159 -0
- epa_pm_api_wrapper/models/adult_education.py +17 -0
- epa_pm_api_wrapper/models/agency_type.py +41 -0
- epa_pm_api_wrapper/models/agency_type_country.py +242 -0
- epa_pm_api_wrapper/models/alerts.py +16 -0
- epa_pm_api_wrapper/models/alerts_type.py +47 -0
- epa_pm_api_wrapper/models/alerts_type_alert.py +29 -0
- epa_pm_api_wrapper/models/all_energy_meters_type.py +32 -0
- epa_pm_api_wrapper/models/all_meter_types.py +130 -0
- epa_pm_api_wrapper/models/ambulatory_surgical_center.py +16 -0
- epa_pm_api_wrapper/models/amount_of_laundry_processed_annually.py +17 -0
- epa_pm_api_wrapper/models/amount_of_laundry_processed_annually_type.py +28 -0
- epa_pm_api_wrapper/models/amount_of_laundry_processed_annually_units_type.py +9 -0
- epa_pm_api_wrapper/models/annual_research_expenditure.py +16 -0
- epa_pm_api_wrapper/models/annual_research_expenditure_type.py +22 -0
- epa_pm_api_wrapper/models/annual_research_expenditure_type_value.py +10 -0
- epa_pm_api_wrapper/models/aquarium.py +17 -0
- epa_pm_api_wrapper/models/area_of_all_walk_in_refrigeration_units.py +19 -0
- epa_pm_api_wrapper/models/average_effluent_biological_oxygen_demand.py +16 -0
- epa_pm_api_wrapper/models/average_influent_biological_oxygen_demand.py +16 -0
- epa_pm_api_wrapper/models/average_number_of_residents.py +15 -0
- epa_pm_api_wrapper/models/average_number_of_vehicles_in_inventory.py +16 -0
- epa_pm_api_wrapper/models/bank_branch.py +16 -0
- epa_pm_api_wrapper/models/bank_branch_type.py +35 -0
- epa_pm_api_wrapper/models/bank_branch_type_use_details.py +58 -0
- epa_pm_api_wrapper/models/bar_nightclub.py +17 -0
- epa_pm_api_wrapper/models/barracks.py +17 -0
- epa_pm_api_wrapper/models/barracks_type.py +35 -0
- epa_pm_api_wrapper/models/barracks_type_use_details.py +58 -0
- epa_pm_api_wrapper/models/baseline_and_target.py +16 -0
- epa_pm_api_wrapper/models/baseline_and_target_type.py +27 -0
- epa_pm_api_wrapper/models/baseline_type.py +41 -0
- epa_pm_api_wrapper/models/billboard_metric_setting.py +21 -0
- epa_pm_api_wrapper/models/billboard_metric_type.py +33 -0
- epa_pm_api_wrapper/models/billboard_metrics.py +11 -0
- epa_pm_api_wrapper/models/billboard_metrics_type.py +26 -0
- epa_pm_api_wrapper/models/bowling_alley.py +40 -0
- epa_pm_api_wrapper/models/bowling_alley_use_details.py +58 -0
- epa_pm_api_wrapper/models/building.py +11 -0
- epa_pm_api_wrapper/models/casino.py +16 -0
- epa_pm_api_wrapper/models/category_type.py +17 -0
- epa_pm_api_wrapper/models/cegep.py +15 -0
- epa_pm_api_wrapper/models/cegep_type.py +35 -0
- epa_pm_api_wrapper/models/cegep_type_use_details.py +131 -0
- epa_pm_api_wrapper/models/ceiling_height.py +15 -0
- epa_pm_api_wrapper/models/ceiling_height_units_type.py +27 -0
- epa_pm_api_wrapper/models/clear_height.py +16 -0
- epa_pm_api_wrapper/models/clear_height_units_type.py +26 -0
- epa_pm_api_wrapper/models/college_university.py +15 -0
- epa_pm_api_wrapper/models/college_university_type.py +37 -0
- epa_pm_api_wrapper/models/college_university_type_use_details.py +131 -0
- epa_pm_api_wrapper/models/common_entrance.py +16 -0
- epa_pm_api_wrapper/models/community_center_and_social_meeting_hall.py +46 -0
- epa_pm_api_wrapper/models/community_center_and_social_meeting_hall_use_details.py +58 -0
- epa_pm_api_wrapper/models/completely_enclosed_footage.py +15 -0
- epa_pm_api_wrapper/models/construction_status_type.py +9 -0
- epa_pm_api_wrapper/models/contact_type.py +70 -0
- epa_pm_api_wrapper/models/convenience_store_with_gas_station.py +19 -0
- epa_pm_api_wrapper/models/convenience_store_with_gas_station_type.py +37 -0
- epa_pm_api_wrapper/models/convenience_store_with_gas_station_type_use_details.py +140 -0
- epa_pm_api_wrapper/models/convenience_store_without_gas_station.py +19 -0
- epa_pm_api_wrapper/models/convenience_store_without_gas_station_type.py +37 -0
- epa_pm_api_wrapper/models/convenience_store_without_gas_station_type_use_details.py +140 -0
- epa_pm_api_wrapper/models/convention_center.py +16 -0
- epa_pm_api_wrapper/models/cooking_facilities.py +15 -0
- epa_pm_api_wrapper/models/cooking_located_onsite.py +16 -0
- epa_pm_api_wrapper/models/cooling_equipment_redundancy.py +15 -0
- epa_pm_api_wrapper/models/cooling_equipment_redundancy_type.py +22 -0
- epa_pm_api_wrapper/models/cooling_equipment_redundancy_type_value.py +12 -0
- epa_pm_api_wrapper/models/country_code.py +16 -0
- epa_pm_api_wrapper/models/country_list.py +493 -0
- epa_pm_api_wrapper/models/courthouse.py +16 -0
- epa_pm_api_wrapper/models/courthouse_type.py +35 -0
- epa_pm_api_wrapper/models/courthouse_type_use_details.py +58 -0
- epa_pm_api_wrapper/models/custom_field.py +109 -0
- epa_pm_api_wrapper/models/custom_field_list.py +20 -0
- epa_pm_api_wrapper/models/custom_field_list_custom_field.py +17 -0
- epa_pm_api_wrapper/models/custom_field_valid_characters.py +15 -0
- epa_pm_api_wrapper/models/custom_field_when_to_prompt.py +15 -0
- epa_pm_api_wrapper/models/custom_metric.py +49 -0
- epa_pm_api_wrapper/models/custom_units_type.py +19 -0
- epa_pm_api_wrapper/models/custom_use.py +15 -0
- epa_pm_api_wrapper/models/custom_use_detail1.py +15 -0
- epa_pm_api_wrapper/models/custom_use_detail2.py +15 -0
- epa_pm_api_wrapper/models/custom_use_details_type.py +50 -0
- epa_pm_api_wrapper/models/custom_use_details_type_data_type.py +8 -0
- epa_pm_api_wrapper/models/custom_use_type.py +35 -0
- epa_pm_api_wrapper/models/custom_use_type_use_details.py +27 -0
- epa_pm_api_wrapper/models/customer.py +77 -0
- epa_pm_api_wrapper/models/customer_language_preference.py +9 -0
- epa_pm_api_wrapper/models/data_center.py +17 -0
- epa_pm_api_wrapper/models/data_center_type.py +35 -0
- epa_pm_api_wrapper/models/data_center_type_use_details.py +50 -0
- epa_pm_api_wrapper/models/data_exchange_settings.py +37 -0
- epa_pm_api_wrapper/models/data_exchange_settings_supported_meter_types.py +20 -0
- epa_pm_api_wrapper/models/data_exchange_settings_terms_of_use.py +40 -0
- epa_pm_api_wrapper/models/data_request.py +88 -0
- epa_pm_api_wrapper/models/data_request_locations.py +19 -0
- epa_pm_api_wrapper/models/data_request_locations_location.py +22 -0
- epa_pm_api_wrapper/models/data_request_requester_details.py +32 -0
- epa_pm_api_wrapper/models/data_request_status_type.py +13 -0
- epa_pm_api_wrapper/models/data_response.py +47 -0
- epa_pm_api_wrapper/models/data_response_properties.py +20 -0
- epa_pm_api_wrapper/models/data_type.py +9 -0
- epa_pm_api_wrapper/models/delivery_facility.py +16 -0
- epa_pm_api_wrapper/models/demand_tracking_type.py +35 -0
- epa_pm_api_wrapper/models/design.py +15 -0
- epa_pm_api_wrapper/models/design_base_type.py +83 -0
- epa_pm_api_wrapper/models/design_base_type_estimated_energy_list.py +17 -0
- epa_pm_api_wrapper/models/design_base_type_property_uses.py +709 -0
- epa_pm_api_wrapper/models/design_base_type_target.py +34 -0
- epa_pm_api_wrapper/models/design_unit_of_measure.py +37 -0
- epa_pm_api_wrapper/models/detail_type.py +22 -0
- epa_pm_api_wrapper/models/details_types.py +20 -0
- epa_pm_api_wrapper/models/disposal_destination_type.py +60 -0
- epa_pm_api_wrapper/models/distribution_center.py +17 -0
- epa_pm_api_wrapper/models/distribution_center_type.py +37 -0
- epa_pm_api_wrapper/models/distribution_center_type_use_details.py +76 -0
- epa_pm_api_wrapper/models/drinking_water_treatment_and_distribution.py +18 -0
- epa_pm_api_wrapper/models/drinking_water_treatment_and_distribution_type.py +37 -0
- epa_pm_api_wrapper/models/drinking_water_treatment_and_distribution_type_use_details.py +18 -0
- epa_pm_api_wrapper/models/e_grid_subregion.py +38 -0
- epa_pm_api_wrapper/models/e_grid_subregion_country.py +242 -0
- epa_pm_api_wrapper/models/e_grid_subregion_list.py +19 -0
- epa_pm_api_wrapper/models/edu.py +64 -0
- epa_pm_api_wrapper/models/edu_list.py +18 -0
- epa_pm_api_wrapper/models/electric_vehicle_charging_station.py +15 -0
- epa_pm_api_wrapper/models/empty_string.py +7 -0
- epa_pm_api_wrapper/models/empty_type.py +7 -0
- epa_pm_api_wrapper/models/enclosed_floor_area.py +15 -0
- epa_pm_api_wrapper/models/enclosed_mall.py +16 -0
- epa_pm_api_wrapper/models/energy_meter_assoc_and_config_type.py +25 -0
- epa_pm_api_wrapper/models/energy_performance_project.py +11 -0
- epa_pm_api_wrapper/models/energy_performance_project_type.py +136 -0
- epa_pm_api_wrapper/models/energy_power_station.py +20 -0
- epa_pm_api_wrapper/models/energy_uom_type.py +11 -0
- epa_pm_api_wrapper/models/enrollment.py +11 -0
- epa_pm_api_wrapper/models/error_type.py +29 -0
- epa_pm_api_wrapper/models/errors_type.py +25 -0
- epa_pm_api_wrapper/models/estimated_energy_list_type.py +19 -0
- epa_pm_api_wrapper/models/estimated_energy_type.py +58 -0
- epa_pm_api_wrapper/models/estimates_applied.py +15 -0
- epa_pm_api_wrapper/models/ev_charging_station_type.py +37 -0
- epa_pm_api_wrapper/models/ev_charging_station_type_use_details.py +41 -0
- epa_pm_api_wrapper/models/evaluation_period_type.py +35 -0
- epa_pm_api_wrapper/models/exterior_entrance_to_the_public.py +15 -0
- epa_pm_api_wrapper/models/fast_food_restaurant.py +17 -0
- epa_pm_api_wrapper/models/fast_food_restaurant_type.py +37 -0
- epa_pm_api_wrapper/models/fast_food_restaurant_type_use_details.py +84 -0
- epa_pm_api_wrapper/models/federal_agencies.py +19 -0
- epa_pm_api_wrapper/models/financial_office.py +16 -0
- epa_pm_api_wrapper/models/financial_office_type.py +35 -0
- epa_pm_api_wrapper/models/financial_office_type_use_details.py +58 -0
- epa_pm_api_wrapper/models/fire_station.py +16 -0
- epa_pm_api_wrapper/models/fire_station_type.py +35 -0
- epa_pm_api_wrapper/models/fire_station_type_use_details.py +92 -0
- epa_pm_api_wrapper/models/fitness_center_health_club_gym.py +42 -0
- epa_pm_api_wrapper/models/fitness_center_health_club_gym_use_details.py +58 -0
- epa_pm_api_wrapper/models/fixed_film_trickle_filtration_process.py +15 -0
- epa_pm_api_wrapper/models/floor_area_type_base.py +23 -0
- epa_pm_api_wrapper/models/food_sales.py +17 -0
- epa_pm_api_wrapper/models/food_sales_type.py +35 -0
- epa_pm_api_wrapper/models/food_sales_type_use_details.py +114 -0
- epa_pm_api_wrapper/models/food_service.py +17 -0
- epa_pm_api_wrapper/models/full_service_spa_floor_area.py +15 -0
- epa_pm_api_wrapper/models/generation_location_type.py +41 -0
- epa_pm_api_wrapper/models/government_subsidized_housing.py +16 -0
- epa_pm_api_wrapper/models/grant_dollars.py +11 -0
- epa_pm_api_wrapper/models/green_power_fuel_source_enum.py +13 -0
- epa_pm_api_wrapper/models/green_power_type_enum.py +15 -0
- epa_pm_api_wrapper/models/gross_floor_area_hotel_conference_space.py +18 -0
- epa_pm_api_wrapper/models/gross_floor_area_that_is_exhibit_space.py +19 -0
- epa_pm_api_wrapper/models/gross_floor_area_type.py +24 -0
- epa_pm_api_wrapper/models/gross_floor_area_units_type.py +8 -0
- epa_pm_api_wrapper/models/gross_floor_area_used_for_food_preparation.py +19 -0
- epa_pm_api_wrapper/models/gym_center_floor_area.py +15 -0
- epa_pm_api_wrapper/models/gymnasium_floor_area.py +15 -0
- epa_pm_api_wrapper/models/has_computer_lab.py +15 -0
- epa_pm_api_wrapper/models/has_dining_hall.py +15 -0
- epa_pm_api_wrapper/models/has_laboratory.py +15 -0
- epa_pm_api_wrapper/models/hey.py +11 -0
- epa_pm_api_wrapper/models/hey_type.py +29 -0
- epa_pm_api_wrapper/models/hey_type_meter.py +35 -0
- epa_pm_api_wrapper/models/hey_type_meter_meter_data.py +22 -0
- epa_pm_api_wrapper/models/hey_type_property_info.py +35 -0
- epa_pm_api_wrapper/models/hierarchy.py +16 -0
- epa_pm_api_wrapper/models/hierarchy_type.py +84 -0
- epa_pm_api_wrapper/models/highest_award_level.py +17 -0
- epa_pm_api_wrapper/models/highest_award_level_type.py +20 -0
- epa_pm_api_wrapper/models/highest_award_level_type_value.py +11 -0
- epa_pm_api_wrapper/models/hospital.py +22 -0
- epa_pm_api_wrapper/models/hospital_type.py +35 -0
- epa_pm_api_wrapper/models/hospital_type_use_details.py +132 -0
- epa_pm_api_wrapper/models/hotel.py +17 -0
- epa_pm_api_wrapper/models/hotel_type.py +41 -0
- epa_pm_api_wrapper/models/hotel_type_use_details.py +140 -0
- epa_pm_api_wrapper/models/hours_per_day_guests_onsite.py +16 -0
- epa_pm_api_wrapper/models/hours_per_day_guests_onsite_type.py +22 -0
- epa_pm_api_wrapper/models/hours_per_day_guests_onsite_type_value.py +9 -0
- epa_pm_api_wrapper/models/ice_curling_rink.py +27 -0
- epa_pm_api_wrapper/models/ice_curling_rink_type.py +35 -0
- epa_pm_api_wrapper/models/ice_curling_rink_type_use_details.py +78 -0
- epa_pm_api_wrapper/models/ice_events.py +15 -0
- epa_pm_api_wrapper/models/individual_meter.py +86 -0
- epa_pm_api_wrapper/models/indoor_arena.py +17 -0
- epa_pm_api_wrapper/models/indoor_arena_type.py +35 -0
- epa_pm_api_wrapper/models/indoor_arena_type_use_details.py +104 -0
- epa_pm_api_wrapper/models/international_weather_station_list.py +26 -0
- epa_pm_api_wrapper/models/irrigation_area_type.py +28 -0
- epa_pm_api_wrapper/models/irrigation_area_type_base.py +30 -0
- epa_pm_api_wrapper/models/irrigation_area_units_type.py +10 -0
- epa_pm_api_wrapper/models/is_high_school.py +16 -0
- epa_pm_api_wrapper/models/is_tertiary_care.py +17 -0
- epa_pm_api_wrapper/models/it_energy_configuration_type.py +20 -0
- epa_pm_api_wrapper/models/it_energy_configuration_type_value.py +14 -0
- epa_pm_api_wrapper/models/it_energy_meter_configuration.py +16 -0
- epa_pm_api_wrapper/models/k12_school.py +16 -0
- epa_pm_api_wrapper/models/k12_school_type.py +35 -0
- epa_pm_api_wrapper/models/k12_school_type_use_details.py +126 -0
- epa_pm_api_wrapper/models/laboratory.py +17 -0
- epa_pm_api_wrapper/models/laundry_facility.py +16 -0
- epa_pm_api_wrapper/models/length_of_all_commercial_kitchen_hoods.py +19 -0
- epa_pm_api_wrapper/models/length_of_all_open_closed_refrigeration_units.py +21 -0
- epa_pm_api_wrapper/models/length_of_use_detail_type.py +26 -0
- epa_pm_api_wrapper/models/length_units_type.py +8 -0
- epa_pm_api_wrapper/models/library.py +17 -0
- epa_pm_api_wrapper/models/library_type.py +35 -0
- epa_pm_api_wrapper/models/library_type_use_details.py +58 -0
- epa_pm_api_wrapper/models/license.py +60 -0
- epa_pm_api_wrapper/models/license_list.py +19 -0
- epa_pm_api_wrapper/models/licensed_bed_capacity.py +19 -0
- epa_pm_api_wrapper/models/lifestyle_center.py +18 -0
- epa_pm_api_wrapper/models/link_type.py +52 -0
- epa_pm_api_wrapper/models/links_type.py +19 -0
- epa_pm_api_wrapper/models/log.py +11 -0
- epa_pm_api_wrapper/models/log_type.py +79 -0
- epa_pm_api_wrapper/models/mailing_center_post_office.py +16 -0
- epa_pm_api_wrapper/models/mailing_center_post_office_type.py +37 -0
- epa_pm_api_wrapper/models/mailing_center_post_office_type_use_details.py +74 -0
- epa_pm_api_wrapper/models/manufacturing_industrial_plant.py +17 -0
- epa_pm_api_wrapper/models/manufacturing_industrial_plant_type.py +37 -0
- epa_pm_api_wrapper/models/manufacturing_industrial_plant_type_use_details.py +49 -0
- epa_pm_api_wrapper/models/mapping.py +11 -0
- epa_pm_api_wrapper/models/mapping_type.py +23 -0
- epa_pm_api_wrapper/models/maximum_number_of_floors.py +15 -0
- epa_pm_api_wrapper/models/maximum_resident_capacity.py +15 -0
- epa_pm_api_wrapper/models/medical_office.py +16 -0
- epa_pm_api_wrapper/models/medical_office_type.py +35 -0
- epa_pm_api_wrapper/models/medical_office_type_use_details.py +82 -0
- epa_pm_api_wrapper/models/meter.py +11 -0
- epa_pm_api_wrapper/models/meter_category_type.py +9 -0
- epa_pm_api_wrapper/models/meter_consumption.py +15 -0
- epa_pm_api_wrapper/models/meter_consumption_type.py +110 -0
- epa_pm_api_wrapper/models/meter_data.py +11 -0
- epa_pm_api_wrapper/models/meter_data_type.py +41 -0
- epa_pm_api_wrapper/models/meter_delivery.py +11 -0
- epa_pm_api_wrapper/models/meter_delivery_type.py +68 -0
- epa_pm_api_wrapper/models/meter_list_type.py +23 -0
- epa_pm_api_wrapper/models/meter_property_association_list.py +18 -0
- epa_pm_api_wrapper/models/meter_property_association_list_type.py +38 -0
- epa_pm_api_wrapper/models/meter_property_use_association_list.py +16 -0
- epa_pm_api_wrapper/models/meter_type.py +131 -0
- epa_pm_api_wrapper/models/meter_type_unit_of_measure.py +40 -0
- epa_pm_api_wrapper/models/metric.py +71 -0
- epa_pm_api_wrapper/models/months_in_use.py +15 -0
- epa_pm_api_wrapper/models/months_in_use_type.py +21 -0
- epa_pm_api_wrapper/models/months_main_indoor_ice_rink_in_use.py +15 -0
- epa_pm_api_wrapper/models/months_school_in_use_type.py +21 -0
- epa_pm_api_wrapper/models/movie_theater.py +15 -0
- epa_pm_api_wrapper/models/multifamily_housing.py +16 -0
- epa_pm_api_wrapper/models/multifamily_housing_type.py +37 -0
- epa_pm_api_wrapper/models/multifamily_housing_type_use_details.py +124 -0
- epa_pm_api_wrapper/models/museum.py +26 -0
- epa_pm_api_wrapper/models/museum_type.py +35 -0
- epa_pm_api_wrapper/models/museum_type_use_details.py +78 -0
- epa_pm_api_wrapper/models/non_refrigerated_warehouse.py +16 -0
- epa_pm_api_wrapper/models/non_refrigerated_warehouse_type.py +37 -0
- epa_pm_api_wrapper/models/non_refrigerated_warehouse_type_use_details.py +76 -0
- epa_pm_api_wrapper/models/notification_list.py +16 -0
- epa_pm_api_wrapper/models/notification_list_type.py +19 -0
- epa_pm_api_wrapper/models/notification_type.py +106 -0
- epa_pm_api_wrapper/models/number_of_annual_emergency_incidents.py +17 -0
- epa_pm_api_wrapper/models/number_of_bedrooms.py +15 -0
- epa_pm_api_wrapper/models/number_of_cash_registers.py +15 -0
- epa_pm_api_wrapper/models/number_of_commercial_refrigeration_units.py +16 -0
- epa_pm_api_wrapper/models/number_of_commercial_washing_machines.py +16 -0
- epa_pm_api_wrapper/models/number_of_computers.py +15 -0
- epa_pm_api_wrapper/models/number_of_concert_show_events_per_year.py +15 -0
- epa_pm_api_wrapper/models/number_of_cooking_equipment_units.py +15 -0
- epa_pm_api_wrapper/models/number_of_curling_sheets.py +16 -0
- epa_pm_api_wrapper/models/number_of_dc_fast_ev_charging_stations.py +15 -0
- epa_pm_api_wrapper/models/number_of_emergency_vehicles.py +16 -0
- epa_pm_api_wrapper/models/number_of_fteworkers.py +16 -0
- epa_pm_api_wrapper/models/number_of_full_time_students_enrolled_january_to_april.py +16 -0
- epa_pm_api_wrapper/models/number_of_full_time_students_enrolled_may_to_august.py +16 -0
- epa_pm_api_wrapper/models/number_of_full_time_students_enrolled_september_to_december.py +16 -0
- epa_pm_api_wrapper/models/number_of_guest_meals_served_per_year.py +15 -0
- epa_pm_api_wrapper/models/number_of_hotel_rooms.py +15 -0
- epa_pm_api_wrapper/models/number_of_indoor_ice_rinks.py +18 -0
- epa_pm_api_wrapper/models/number_of_laundry_hookups_in_all_units.py +16 -0
- epa_pm_api_wrapper/models/number_of_laundry_hookups_in_common_area.py +16 -0
- epa_pm_api_wrapper/models/number_of_letters_packages_per_year.py +17 -0
- epa_pm_api_wrapper/models/number_of_level_one_ev_charging_stations.py +15 -0
- epa_pm_api_wrapper/models/number_of_level_two_ev_charging_stations.py +15 -0
- epa_pm_api_wrapper/models/number_of_mri_machines.py +15 -0
- epa_pm_api_wrapper/models/number_of_open_closed_refrigeration_units.py +27 -0
- epa_pm_api_wrapper/models/number_of_paint_bays.py +16 -0
- epa_pm_api_wrapper/models/number_of_people.py +15 -0
- epa_pm_api_wrapper/models/number_of_repair_bays.py +16 -0
- epa_pm_api_wrapper/models/number_of_residential_lift_systems.py +15 -0
- epa_pm_api_wrapper/models/number_of_residential_living_units.py +20 -0
- epa_pm_api_wrapper/models/number_of_residential_living_units_high_rise_setting.py +18 -0
- epa_pm_api_wrapper/models/number_of_residential_living_units_low_rise_setting.py +18 -0
- epa_pm_api_wrapper/models/number_of_residential_living_units_mid_rise_setting.py +18 -0
- epa_pm_api_wrapper/models/number_of_residential_washing_machines.py +15 -0
- epa_pm_api_wrapper/models/number_of_rooms.py +16 -0
- epa_pm_api_wrapper/models/number_of_special_other_events_per_year.py +16 -0
- epa_pm_api_wrapper/models/number_of_sporting_events_per_year.py +15 -0
- epa_pm_api_wrapper/models/number_of_staffed_beds.py +15 -0
- epa_pm_api_wrapper/models/number_of_sterilization_units.py +15 -0
- epa_pm_api_wrapper/models/number_of_surgical_operating_beds.py +16 -0
- epa_pm_api_wrapper/models/number_of_walk_in_refrigeration_units.py +16 -0
- epa_pm_api_wrapper/models/number_of_warming_heating_equipment_units.py +15 -0
- epa_pm_api_wrapper/models/number_of_weekdays_open.py +17 -0
- epa_pm_api_wrapper/models/number_of_weekdays_type.py +21 -0
- epa_pm_api_wrapper/models/number_of_weekly_ice_resurfacing_for_all_rinks.py +23 -0
- epa_pm_api_wrapper/models/number_of_weekly_ice_resurfacing_type.py +20 -0
- epa_pm_api_wrapper/models/number_of_workers.py +16 -0
- epa_pm_api_wrapper/models/nutrient_removal.py +16 -0
- epa_pm_api_wrapper/models/occupancy_type.py +27 -0
- epa_pm_api_wrapper/models/office.py +16 -0
- epa_pm_api_wrapper/models/office_type.py +35 -0
- epa_pm_api_wrapper/models/office_type_use_details.py +58 -0
- epa_pm_api_wrapper/models/offsite_green_power_purchase.py +11 -0
- epa_pm_api_wrapper/models/offsite_green_power_purchase_type.py +224 -0
- epa_pm_api_wrapper/models/offsite_green_power_purchase_type_amount_purchased.py +31 -0
- epa_pm_api_wrapper/models/offsite_green_power_purchase_type_amount_purchased_percentage.py +46 -0
- epa_pm_api_wrapper/models/offsite_green_power_purchase_type_amount_purchased_percentage_meters.py +21 -0
- epa_pm_api_wrapper/models/offsite_green_power_purchase_type_amount_purchased_quantity.py +31 -0
- epa_pm_api_wrapper/models/offsite_green_power_purchase_type_cost.py +31 -0
- epa_pm_api_wrapper/models/offsite_green_power_purchase_type_fuel_sources.py +22 -0
- epa_pm_api_wrapper/models/offsite_green_power_purchase_type_fuel_sources_fuel_source.py +35 -0
- epa_pm_api_wrapper/models/offsite_green_power_purchase_type_rated_capacity.py +31 -0
- epa_pm_api_wrapper/models/offsite_green_power_purchase_type_renewable_generation_technologies.py +21 -0
- epa_pm_api_wrapper/models/on_site_laundry_facility.py +15 -0
- epa_pm_api_wrapper/models/onsite_laundry_type.py +20 -0
- epa_pm_api_wrapper/models/onsite_laundry_type_value.py +10 -0
- epa_pm_api_wrapper/models/onsite_renewable_detail.py +11 -0
- epa_pm_api_wrapper/models/onsite_renewable_detail_type.py +60 -0
- epa_pm_api_wrapper/models/onsite_renewable_details.py +28 -0
- epa_pm_api_wrapper/models/onsite_renewable_optional_info.py +13 -0
- epa_pm_api_wrapper/models/onsite_renewable_optional_info_type.py +134 -0
- epa_pm_api_wrapper/models/onsite_renewable_optional_info_type_rated_capacity.py +31 -0
- epa_pm_api_wrapper/models/onsite_renewable_optional_info_type_renewable_generation_technologies.py +21 -0
- epa_pm_api_wrapper/models/onsite_usage_detail_type.py +70 -0
- epa_pm_api_wrapper/models/open_footage.py +15 -0
- epa_pm_api_wrapper/models/open_on_weekends.py +16 -0
- epa_pm_api_wrapper/models/optional_floor_area_type.py +19 -0
- epa_pm_api_wrapper/models/organization_type.py +77 -0
- epa_pm_api_wrapper/models/other.py +16 -0
- epa_pm_api_wrapper/models/other_education.py +18 -0
- epa_pm_api_wrapper/models/other_entertainment_public_assembly.py +17 -0
- epa_pm_api_wrapper/models/other_lodging_residential.py +19 -0
- epa_pm_api_wrapper/models/other_mall.py +17 -0
- epa_pm_api_wrapper/models/other_public_services.py +21 -0
- epa_pm_api_wrapper/models/other_recreation.py +16 -0
- epa_pm_api_wrapper/models/other_restaurant_bar.py +17 -0
- epa_pm_api_wrapper/models/other_services.py +16 -0
- epa_pm_api_wrapper/models/other_speciality_hospital.py +17 -0
- epa_pm_api_wrapper/models/other_stadium.py +16 -0
- epa_pm_api_wrapper/models/other_stadium_type.py +35 -0
- epa_pm_api_wrapper/models/other_stadium_type_use_details.py +104 -0
- epa_pm_api_wrapper/models/other_technology_science.py +16 -0
- epa_pm_api_wrapper/models/other_type.py +35 -0
- epa_pm_api_wrapper/models/other_type_use_details.py +42 -0
- epa_pm_api_wrapper/models/other_utility.py +16 -0
- epa_pm_api_wrapper/models/outpatient_rehabilitation_physical_therapy.py +16 -0
- epa_pm_api_wrapper/models/owned_by.py +16 -0
- epa_pm_api_wrapper/models/owned_by_type.py +20 -0
- epa_pm_api_wrapper/models/owned_by_type_value.py +9 -0
- epa_pm_api_wrapper/models/parking.py +15 -0
- epa_pm_api_wrapper/models/parking_type.py +35 -0
- epa_pm_api_wrapper/models/parking_type_use_details.py +40 -0
- epa_pm_api_wrapper/models/partially_enclosed_footage.py +16 -0
- epa_pm_api_wrapper/models/ped.py +26 -0
- epa_pm_api_wrapper/models/pending_accounts_type.py +58 -0
- epa_pm_api_wrapper/models/pending_list.py +15 -0
- epa_pm_api_wrapper/models/pending_list_type.py +53 -0
- epa_pm_api_wrapper/models/pending_meters_type.py +104 -0
- epa_pm_api_wrapper/models/pending_properties_type.py +77 -0
- epa_pm_api_wrapper/models/percent_cooled.py +16 -0
- epa_pm_api_wrapper/models/percent_cooled_type.py +20 -0
- epa_pm_api_wrapper/models/percent_cooled_type_value.py +17 -0
- epa_pm_api_wrapper/models/percent_heated.py +16 -0
- epa_pm_api_wrapper/models/percent_heated_type.py +20 -0
- epa_pm_api_wrapper/models/percent_heated_type_value.py +17 -0
- epa_pm_api_wrapper/models/percent_of_gross_floor_area_that_is_common_space_only.py +16 -0
- epa_pm_api_wrapper/models/percent_of_lab_floor_area.py +16 -0
- epa_pm_api_wrapper/models/percent_office_cooled.py +11 -0
- epa_pm_api_wrapper/models/percent_office_cooled_type.py +20 -0
- epa_pm_api_wrapper/models/percent_office_cooled_type_value.py +9 -0
- epa_pm_api_wrapper/models/percent_office_heated.py +11 -0
- epa_pm_api_wrapper/models/percent_office_heated_type.py +20 -0
- epa_pm_api_wrapper/models/percent_office_heated_type_value.py +9 -0
- epa_pm_api_wrapper/models/percent_used_for_cold_storage.py +18 -0
- epa_pm_api_wrapper/models/performance_target_type.py +42 -0
- epa_pm_api_wrapper/models/performance_target_type_target_metric.py +10 -0
- epa_pm_api_wrapper/models/performance_target_type_target_value.py +107 -0
- epa_pm_api_wrapper/models/performing_arts.py +15 -0
- epa_pm_api_wrapper/models/period_type.py +8 -0
- epa_pm_api_wrapper/models/personal_services.py +17 -0
- epa_pm_api_wrapper/models/pgp.py +56 -0
- epa_pm_api_wrapper/models/pgp_list.py +18 -0
- epa_pm_api_wrapper/models/plant_data_type.py +28 -0
- epa_pm_api_wrapper/models/plant_data_type_value.py +71 -0
- epa_pm_api_wrapper/models/plant_design_flow_rate.py +16 -0
- epa_pm_api_wrapper/models/plant_design_flow_rate_type.py +22 -0
- epa_pm_api_wrapper/models/plant_design_flow_rate_units_type.py +8 -0
- epa_pm_api_wrapper/models/plant_type.py +17 -0
- epa_pm_api_wrapper/models/police_station.py +16 -0
- epa_pm_api_wrapper/models/pool_location.py +15 -0
- epa_pm_api_wrapper/models/pool_size.py +16 -0
- epa_pm_api_wrapper/models/pool_size_type.py +20 -0
- epa_pm_api_wrapper/models/pool_size_type_value.py +9 -0
- epa_pm_api_wrapper/models/pool_type.py +20 -0
- epa_pm_api_wrapper/models/pool_type_value.py +8 -0
- epa_pm_api_wrapper/models/precision_controls_for_temperature_and_humidity.py +16 -0
- epa_pm_api_wrapper/models/preschool_daycare.py +17 -0
- epa_pm_api_wrapper/models/preschool_daycare_type.py +35 -0
- epa_pm_api_wrapper/models/preschool_daycare_type_use_details.py +68 -0
- epa_pm_api_wrapper/models/primary_business_type.py +33 -0
- epa_pm_api_wrapper/models/primary_function_type.py +95 -0
- epa_pm_api_wrapper/models/prison.py +17 -0
- epa_pm_api_wrapper/models/professional_designation_list.py +23 -0
- epa_pm_api_wrapper/models/professional_designation_list_professional_designation.py +41 -0
- epa_pm_api_wrapper/models/property.py +11 -0
- epa_pm_api_wrapper/models/property_design_type.py +66 -0
- epa_pm_api_wrapper/models/property_metrics.py +15 -0
- epa_pm_api_wrapper/models/property_metrics_list.py +19 -0
- epa_pm_api_wrapper/models/property_metrics_type.py +58 -0
- epa_pm_api_wrapper/models/property_representation.py +59 -0
- epa_pm_api_wrapper/models/property_representation_property_representation_type.py +27 -0
- epa_pm_api_wrapper/models/property_type.py +192 -0
- epa_pm_api_wrapper/models/property_use.py +22 -0
- epa_pm_api_wrapper/models/race_track.py +16 -0
- epa_pm_api_wrapper/models/rated_capacity_uom_type.py +8 -0
- epa_pm_api_wrapper/models/rec_ownership_enum.py +10 -0
- epa_pm_api_wrapper/models/refrigerated_warehouse.py +17 -0
- epa_pm_api_wrapper/models/refrigerated_warehouse_type.py +37 -0
- epa_pm_api_wrapper/models/refrigerated_warehouse_type_use_details.py +66 -0
- epa_pm_api_wrapper/models/renewable_generation_technology_enum.py +11 -0
- epa_pm_api_wrapper/models/report.py +72 -0
- epa_pm_api_wrapper/models/report_error.py +53 -0
- epa_pm_api_wrapper/models/report_error_missing_metrics.py +21 -0
- epa_pm_api_wrapper/models/report_error_missing_metrics_property_missing_metric.py +43 -0
- epa_pm_api_wrapper/models/report_error_missing_metrics_property_missing_metric_metric.py +33 -0
- epa_pm_api_wrapper/models/report_metric_values_ws.py +57 -0
- epa_pm_api_wrapper/models/report_metrics.py +26 -0
- epa_pm_api_wrapper/models/report_metrics_group.py +36 -0
- epa_pm_api_wrapper/models/report_metrics_group_metrics.py +24 -0
- epa_pm_api_wrapper/models/report_metrics_group_metrics_metric.py +62 -0
- epa_pm_api_wrapper/models/report_properties.py +20 -0
- epa_pm_api_wrapper/models/report_status.py +11 -0
- epa_pm_api_wrapper/models/report_status_def.py +62 -0
- epa_pm_api_wrapper/models/report_status_type.py +33 -0
- epa_pm_api_wrapper/models/report_template.py +11 -0
- epa_pm_api_wrapper/models/report_template_type.py +63 -0
- epa_pm_api_wrapper/models/report_template_type_metrics.py +21 -0
- epa_pm_api_wrapper/models/report_type.py +17 -0
- epa_pm_api_wrapper/models/reporting_interval_type.py +15 -0
- epa_pm_api_wrapper/models/residence_hall_dormitory.py +16 -0
- epa_pm_api_wrapper/models/residence_hall_dormitory_type.py +37 -0
- epa_pm_api_wrapper/models/residence_hall_dormitory_type_use_details.py +58 -0
- epa_pm_api_wrapper/models/resident_population.py +16 -0
- epa_pm_api_wrapper/models/resident_population_type.py +20 -0
- epa_pm_api_wrapper/models/resident_population_type_value.py +12 -0
- epa_pm_api_wrapper/models/residential_care_facility.py +16 -0
- epa_pm_api_wrapper/models/residential_care_facility_type.py +37 -0
- epa_pm_api_wrapper/models/residential_care_facility_type_use_details.py +120 -0
- epa_pm_api_wrapper/models/response.py +11 -0
- epa_pm_api_wrapper/models/response_status.py +36 -0
- epa_pm_api_wrapper/models/response_status_errors.py +19 -0
- epa_pm_api_wrapper/models/response_type.py +59 -0
- epa_pm_api_wrapper/models/restaurant.py +20 -0
- epa_pm_api_wrapper/models/restaurant_type.py +35 -0
- epa_pm_api_wrapper/models/restaurant_type_use_details.py +84 -0
- epa_pm_api_wrapper/models/retail.py +17 -0
- epa_pm_api_wrapper/models/retail_type.py +35 -0
- epa_pm_api_wrapper/models/retail_type_use_details.py +130 -0
- epa_pm_api_wrapper/models/roller_rink.py +16 -0
- epa_pm_api_wrapper/models/school_district.py +15 -0
- epa_pm_api_wrapper/models/search_result_type.py +23 -0
- epa_pm_api_wrapper/models/search_results.py +15 -0
- epa_pm_api_wrapper/models/seating_capacity.py +16 -0
- epa_pm_api_wrapper/models/self_storage_facility.py +15 -0
- epa_pm_api_wrapper/models/self_storage_facility_type.py +37 -0
- epa_pm_api_wrapper/models/self_storage_facility_type_use_details.py +84 -0
- epa_pm_api_wrapper/models/send_data_response.py +43 -0
- epa_pm_api_wrapper/models/send_data_response_additional_email_addresses.py +17 -0
- epa_pm_api_wrapper/models/send_data_response_file_format.py +8 -0
- epa_pm_api_wrapper/models/senior_living_community.py +16 -0
- epa_pm_api_wrapper/models/senior_living_community_type.py +37 -0
- epa_pm_api_wrapper/models/senior_living_community_type_use_details.py +120 -0
- epa_pm_api_wrapper/models/share_level_type.py +12 -0
- epa_pm_api_wrapper/models/sharing_response.py +16 -0
- epa_pm_api_wrapper/models/sharing_response_type.py +34 -0
- epa_pm_api_wrapper/models/single_family_home.py +16 -0
- epa_pm_api_wrapper/models/single_family_home_type.py +35 -0
- epa_pm_api_wrapper/models/single_family_home_type_use_details.py +34 -0
- epa_pm_api_wrapper/models/single_store.py +15 -0
- epa_pm_api_wrapper/models/size_of_electronic_score_boards.py +15 -0
- epa_pm_api_wrapper/models/spectator_seating_capacity.py +16 -0
- epa_pm_api_wrapper/models/stadium_closed.py +17 -0
- epa_pm_api_wrapper/models/stadium_closed_type.py +35 -0
- epa_pm_api_wrapper/models/stadium_closed_type_use_details.py +104 -0
- epa_pm_api_wrapper/models/stadium_open.py +17 -0
- epa_pm_api_wrapper/models/stadium_open_type.py +35 -0
- epa_pm_api_wrapper/models/stadium_open_type_use_details.py +104 -0
- epa_pm_api_wrapper/models/state_code.py +159 -0
- epa_pm_api_wrapper/models/station.py +45 -0
- epa_pm_api_wrapper/models/status_type.py +8 -0
- epa_pm_api_wrapper/models/strip_mall.py +17 -0
- epa_pm_api_wrapper/models/student_seating_capacity.py +16 -0
- epa_pm_api_wrapper/models/supermarket.py +17 -0
- epa_pm_api_wrapper/models/supermarket_type.py +35 -0
- epa_pm_api_wrapper/models/supermarket_type_use_details.py +114 -0
- epa_pm_api_wrapper/models/supplemental_heating.py +15 -0
- epa_pm_api_wrapper/models/surgery_center_floor_area.py +16 -0
- epa_pm_api_wrapper/models/swimming_pool.py +15 -0
- epa_pm_api_wrapper/models/swimming_pool_type.py +35 -0
- epa_pm_api_wrapper/models/swimming_pool_type_use_details.py +34 -0
- epa_pm_api_wrapper/models/system_determined_string.py +7 -0
- epa_pm_api_wrapper/models/target_finder.py +11 -0
- epa_pm_api_wrapper/models/target_type_percentage_type.py +17 -0
- epa_pm_api_wrapper/models/target_type_percentage_values_type.py +107 -0
- epa_pm_api_wrapper/models/target_type_score_type.py +17 -0
- epa_pm_api_wrapper/models/target_type_score_values_type.py +106 -0
- epa_pm_api_wrapper/models/template_type.py +19 -0
- epa_pm_api_wrapper/models/template_type_value.py +15 -0
- epa_pm_api_wrapper/models/tenant_common_area_energy_type.py +21 -0
- epa_pm_api_wrapper/models/tenant_common_area_energy_use_information_type.py +31 -0
- epa_pm_api_wrapper/models/terminate_share_response_type.py +24 -0
- epa_pm_api_wrapper/models/terminate_sharing_response.py +16 -0
- epa_pm_api_wrapper/models/timeframe_type.py +103 -0
- epa_pm_api_wrapper/models/timeframe_type_baseline_period.py +18 -0
- epa_pm_api_wrapper/models/timeframe_type_compare_baseline_period.py +25 -0
- epa_pm_api_wrapper/models/timeframe_type_compare_current_period.py +25 -0
- epa_pm_api_wrapper/models/timeframe_type_current_period.py +18 -0
- epa_pm_api_wrapper/models/timeframe_type_current_vs_baseline.py +18 -0
- epa_pm_api_wrapper/models/timeframe_type_date_range.py +30 -0
- epa_pm_api_wrapper/models/timeframe_type_single_period.py +18 -0
- epa_pm_api_wrapper/models/timeframe_type_two_periods.py +24 -0
- epa_pm_api_wrapper/models/total_gross_floor_area.py +11 -0
- epa_pm_api_wrapper/models/total_ice_rink_surface_area_for_all_rinks.py +21 -0
- epa_pm_api_wrapper/models/transportation_terminal_station.py +16 -0
- epa_pm_api_wrapper/models/type_of_energy_star_partner.py +14 -0
- epa_pm_api_wrapper/models/type_of_meter.py +55 -0
- epa_pm_api_wrapper/models/type_of_waste_meter.py +122 -0
- epa_pm_api_wrapper/models/type_of_waste_meter_data_entry_method.py +18 -0
- epa_pm_api_wrapper/models/type_of_waste_meter_unit_of_measure.py +15 -0
- epa_pm_api_wrapper/models/un_auth_design_type.py +100 -0
- epa_pm_api_wrapper/models/un_auth_design_type_estimated_energy_list.py +17 -0
- epa_pm_api_wrapper/models/un_auth_design_type_property_uses.py +709 -0
- epa_pm_api_wrapper/models/un_auth_design_type_target.py +34 -0
- epa_pm_api_wrapper/models/ups_system_redundancy.py +16 -0
- epa_pm_api_wrapper/models/ups_system_redundancy_type.py +20 -0
- epa_pm_api_wrapper/models/ups_system_redundancy_type_value.py +12 -0
- epa_pm_api_wrapper/models/urgent_care_clinic_other_outpatient.py +17 -0
- epa_pm_api_wrapper/models/use_attribute_base.py +65 -0
- epa_pm_api_wrapper/models/use_attribute_base_default.py +9 -0
- epa_pm_api_wrapper/models/use_decimal_type.py +21 -0
- epa_pm_api_wrapper/models/use_details.py +1086 -0
- epa_pm_api_wrapper/models/use_integer_type.py +20 -0
- epa_pm_api_wrapper/models/use_string_type.py +19 -0
- epa_pm_api_wrapper/models/use_yes_no_type.py +20 -0
- epa_pm_api_wrapper/models/vehicle_dealership.py +16 -0
- epa_pm_api_wrapper/models/vehicle_dealership_type.py +37 -0
- epa_pm_api_wrapper/models/vehicle_dealership_type_use_details.py +84 -0
- epa_pm_api_wrapper/models/vehicle_repair_services.py +19 -0
- epa_pm_api_wrapper/models/vehicle_repair_services_type.py +37 -0
- epa_pm_api_wrapper/models/vehicle_repair_services_type_use_details.py +74 -0
- epa_pm_api_wrapper/models/verification.py +96 -0
- epa_pm_api_wrapper/models/veterinary_office.py +15 -0
- epa_pm_api_wrapper/models/vocational_school.py +16 -0
- epa_pm_api_wrapper/models/warning_type.py +29 -0
- epa_pm_api_wrapper/models/warnings_type.py +25 -0
- epa_pm_api_wrapper/models/waste_data.py +15 -0
- epa_pm_api_wrapper/models/waste_data_list.py +11 -0
- epa_pm_api_wrapper/models/waste_meter.py +11 -0
- epa_pm_api_wrapper/models/waste_meter_assoc_and_config_type.py +18 -0
- epa_pm_api_wrapper/models/waste_meter_data_type.py +32 -0
- epa_pm_api_wrapper/models/waste_meter_entry_type.py +113 -0
- epa_pm_api_wrapper/models/waste_meter_entry_type_average_percent_full.py +11 -0
- epa_pm_api_wrapper/models/waste_meter_type.py +81 -0
- epa_pm_api_wrapper/models/wastewater_treatment_plant.py +15 -0
- epa_pm_api_wrapper/models/wastewater_treatment_plant_type.py +37 -0
- epa_pm_api_wrapper/models/wastewater_treatment_plant_type_use_details.py +63 -0
- epa_pm_api_wrapper/models/water_meter_assoc_and_config_type.py +25 -0
- epa_pm_api_wrapper/models/weekly_building_occupied_hours.py +16 -0
- epa_pm_api_wrapper/models/weekly_operating_hours.py +19 -0
- epa_pm_api_wrapper/models/wholesale_club_supercenter.py +16 -0
- epa_pm_api_wrapper/models/wholesale_club_supercenter_type.py +37 -0
- epa_pm_api_wrapper/models/wholesale_club_supercenter_type_use_details.py +130 -0
- epa_pm_api_wrapper/models/worship_facility.py +19 -0
- epa_pm_api_wrapper/models/worship_facility_type.py +35 -0
- epa_pm_api_wrapper/models/worship_facility_type_use_details.py +102 -0
- epa_pm_api_wrapper/models/yes_no.py +8 -0
- epa_pm_api_wrapper/models/zoo.py +16 -0
- epa_pm_api_wrapper/py.typed +1 -0
- epa_pm_api_wrapper/resources/__init__.py +172 -0
- epa_pm_api_wrapper/resources/_base.py +22 -0
- epa_pm_api_wrapper/resources/account.py +37 -0
- epa_pm_api_wrapper/resources/association.py +145 -0
- epa_pm_api_wrapper/resources/building.py +89 -0
- epa_pm_api_wrapper/resources/consumption_data.py +142 -0
- epa_pm_api_wrapper/resources/custom_metric.py +91 -0
- epa_pm_api_wrapper/resources/customer.py +45 -0
- epa_pm_api_wrapper/resources/data_exchange.py +111 -0
- epa_pm_api_wrapper/resources/green_power.py +237 -0
- epa_pm_api_wrapper/resources/hey.py +22 -0
- epa_pm_api_wrapper/resources/hierarchy.py +59 -0
- epa_pm_api_wrapper/resources/identifier.py +92 -0
- epa_pm_api_wrapper/resources/meter.py +277 -0
- epa_pm_api_wrapper/resources/metrics.py +185 -0
- epa_pm_api_wrapper/resources/property.py +450 -0
- epa_pm_api_wrapper/resources/property_use.py +277 -0
- epa_pm_api_wrapper/resources/report.py +169 -0
- epa_pm_api_wrapper/resources/share.py +139 -0
- epa_pm_api_wrapper/resources/target_finder.py +34 -0
- epa_pm_api_wrapper/resources/verification.py +201 -0
- epa_pm_api_wrapper/resources/waste_data.py +124 -0
- epa_pm_api_wrapper/retry.py +219 -0
- epa_pm_api_wrapper-0.3.0.dist-info/METADATA +137 -0
- epa_pm_api_wrapper-0.3.0.dist-info/RECORD +654 -0
- epa_pm_api_wrapper-0.3.0.dist-info/WHEEL +4 -0
- epa_pm_api_wrapper-0.3.0.dist-info/entry_points.txt +2 -0
- epa_pm_api_wrapper-0.3.0.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"""Consumption data resource — `/meter/{meterId}/consumptionData` and
|
|
2
|
+
`/consumptionData/{id}` endpoints."""
|
|
3
|
+
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from collections.abc import AsyncIterator, Iterator
|
|
7
|
+
|
|
8
|
+
from epa_pm_api_wrapper.models import MeterConsumption, MeterData, Response
|
|
9
|
+
|
|
10
|
+
from ._base import AsyncResource, Resource
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ConsumptionDataResource(Resource):
|
|
14
|
+
def get(
|
|
15
|
+
self,
|
|
16
|
+
meter_id: int,
|
|
17
|
+
page: int | None = None,
|
|
18
|
+
start_date: str | None = None,
|
|
19
|
+
end_date: str | None = None,
|
|
20
|
+
) -> MeterData:
|
|
21
|
+
"""Get consumption data for a meter.
|
|
22
|
+
|
|
23
|
+
Returns up to 120 records per call; use ``page`` to paginate. Dates are ISO 8601
|
|
24
|
+
(YYYY-MM-DD) strings.
|
|
25
|
+
"""
|
|
26
|
+
params = {"page": page, "startDate": start_date, "endDate": end_date}
|
|
27
|
+
return self._client._request("GET", f"meter/{meter_id}/consumptionData", params=params, response_type=MeterData)
|
|
28
|
+
|
|
29
|
+
def add(self, meter_id: int, data: MeterData) -> Response:
|
|
30
|
+
"""Add consumption data records to a meter."""
|
|
31
|
+
return self._client._request("POST", f"meter/{meter_id}/consumptionData", data=data, response_type=Response)
|
|
32
|
+
|
|
33
|
+
def update(self, consumption_data_id: int, data: MeterConsumption) -> Response:
|
|
34
|
+
"""Update a single consumption data record."""
|
|
35
|
+
return self._client._request("PUT", f"consumptionData/{consumption_data_id}", data=data, response_type=Response)
|
|
36
|
+
|
|
37
|
+
def delete(self, consumption_data_id: int) -> Response:
|
|
38
|
+
"""Delete a single consumption data record."""
|
|
39
|
+
return self._client._request("DELETE", f"consumptionData/{consumption_data_id}", response_type=Response)
|
|
40
|
+
|
|
41
|
+
def delete_range(self, meter_id: int, start_date: str, end_date: str) -> Response:
|
|
42
|
+
"""Delete consumption records on a meter within an inclusive date range (YYYY-MM-DD)."""
|
|
43
|
+
return self._client._request(
|
|
44
|
+
"DELETE",
|
|
45
|
+
f"meter/{meter_id}/consumptionData",
|
|
46
|
+
params={"startDate": start_date, "endDate": end_date},
|
|
47
|
+
response_type=Response,
|
|
48
|
+
)
|
|
49
|
+
|
|
50
|
+
def what_changed(self, customer_id: int, date: str) -> Response:
|
|
51
|
+
"""List meters under a connected customer with consumption data modified on/after ``date``."""
|
|
52
|
+
return self._client._request(
|
|
53
|
+
"GET",
|
|
54
|
+
f"customer/{customer_id}/meter/consumptionData/whatChanged",
|
|
55
|
+
params={"date": date},
|
|
56
|
+
response_type=Response,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
def iter(
|
|
60
|
+
self,
|
|
61
|
+
meter_id: int,
|
|
62
|
+
start_date: str | None = None,
|
|
63
|
+
end_date: str | None = None,
|
|
64
|
+
) -> Iterator[MeterConsumption]:
|
|
65
|
+
"""Iterate over every consumption record for a meter, paging internally.
|
|
66
|
+
|
|
67
|
+
The EPA API returns up to 120 records per page; this helper walks pages
|
|
68
|
+
starting at 1 until an empty page is returned. Yields one
|
|
69
|
+
:class:`MeterConsumption` at a time so the caller never has to think
|
|
70
|
+
about page boundaries::
|
|
71
|
+
|
|
72
|
+
for record in client.consumption_data.iter(meter_id, start_date="2024-01-01"):
|
|
73
|
+
process(record)
|
|
74
|
+
"""
|
|
75
|
+
page = 1
|
|
76
|
+
while True:
|
|
77
|
+
data = self.get(meter_id, page=page, start_date=start_date, end_date=end_date)
|
|
78
|
+
records = data.meter_consumption or []
|
|
79
|
+
if not records:
|
|
80
|
+
return
|
|
81
|
+
yield from records
|
|
82
|
+
page += 1
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
class AsyncConsumptionDataResource(AsyncResource):
|
|
86
|
+
async def get(
|
|
87
|
+
self,
|
|
88
|
+
meter_id: int,
|
|
89
|
+
page: int | None = None,
|
|
90
|
+
start_date: str | None = None,
|
|
91
|
+
end_date: str | None = None,
|
|
92
|
+
) -> MeterData:
|
|
93
|
+
params = {"page": page, "startDate": start_date, "endDate": end_date}
|
|
94
|
+
return await self._client._arequest(
|
|
95
|
+
"GET", f"meter/{meter_id}/consumptionData", params=params, response_type=MeterData
|
|
96
|
+
)
|
|
97
|
+
|
|
98
|
+
async def add(self, meter_id: int, data: MeterData) -> Response:
|
|
99
|
+
return await self._client._arequest(
|
|
100
|
+
"POST", f"meter/{meter_id}/consumptionData", data=data, response_type=Response
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
async def update(self, consumption_data_id: int, data: MeterConsumption) -> Response:
|
|
104
|
+
return await self._client._arequest(
|
|
105
|
+
"PUT", f"consumptionData/{consumption_data_id}", data=data, response_type=Response
|
|
106
|
+
)
|
|
107
|
+
|
|
108
|
+
async def delete(self, consumption_data_id: int) -> Response:
|
|
109
|
+
return await self._client._arequest("DELETE", f"consumptionData/{consumption_data_id}", response_type=Response)
|
|
110
|
+
|
|
111
|
+
async def delete_range(self, meter_id: int, start_date: str, end_date: str) -> Response:
|
|
112
|
+
return await self._client._arequest(
|
|
113
|
+
"DELETE",
|
|
114
|
+
f"meter/{meter_id}/consumptionData",
|
|
115
|
+
params={"startDate": start_date, "endDate": end_date},
|
|
116
|
+
response_type=Response,
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
async def what_changed(self, customer_id: int, date: str) -> Response:
|
|
120
|
+
return await self._client._arequest(
|
|
121
|
+
"GET",
|
|
122
|
+
f"customer/{customer_id}/meter/consumptionData/whatChanged",
|
|
123
|
+
params={"date": date},
|
|
124
|
+
response_type=Response,
|
|
125
|
+
)
|
|
126
|
+
|
|
127
|
+
async def iter(
|
|
128
|
+
self,
|
|
129
|
+
meter_id: int,
|
|
130
|
+
start_date: str | None = None,
|
|
131
|
+
end_date: str | None = None,
|
|
132
|
+
) -> AsyncIterator[MeterConsumption]:
|
|
133
|
+
"""Async equivalent of :meth:`ConsumptionDataResource.iter`."""
|
|
134
|
+
page = 1
|
|
135
|
+
while True:
|
|
136
|
+
data = await self.get(meter_id, page=page, start_date=start_date, end_date=end_date)
|
|
137
|
+
records = data.meter_consumption or []
|
|
138
|
+
if not records:
|
|
139
|
+
return
|
|
140
|
+
for record in records:
|
|
141
|
+
yield record
|
|
142
|
+
page += 1
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"""Custom metrics resource — `/property/{propertyId}/customMetrics` endpoints.
|
|
2
|
+
|
|
3
|
+
Custom metrics are user-defined formulas computed from existing metrics and
|
|
4
|
+
property use details, addressed by a 1-based ``slot`` integer per property.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from epa_pm_api_wrapper.models import CustomMetric, DetailsTypes, Response
|
|
10
|
+
|
|
11
|
+
from ._base import AsyncResource, Resource
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class CustomMetricResource(Resource):
|
|
15
|
+
def list(self, property_id: int) -> Response:
|
|
16
|
+
"""List all custom metric slots defined for a property."""
|
|
17
|
+
return self._client._request("GET", f"property/{property_id}/customMetrics", response_type=Response)
|
|
18
|
+
|
|
19
|
+
def get(self, property_id: int, slot: int) -> CustomMetric:
|
|
20
|
+
"""Get the custom metric defined in a specific slot."""
|
|
21
|
+
return self._client._request(
|
|
22
|
+
"GET",
|
|
23
|
+
f"property/{property_id}/customMetrics/{slot}",
|
|
24
|
+
response_type=CustomMetric,
|
|
25
|
+
)
|
|
26
|
+
|
|
27
|
+
def create(self, property_id: int, slot: int, data: CustomMetric) -> Response:
|
|
28
|
+
"""Define a new custom metric in the given slot."""
|
|
29
|
+
return self._client._request(
|
|
30
|
+
"POST",
|
|
31
|
+
f"property/{property_id}/customMetrics/{slot}",
|
|
32
|
+
data=data,
|
|
33
|
+
response_type=Response,
|
|
34
|
+
)
|
|
35
|
+
|
|
36
|
+
def update(self, property_id: int, slot: int, data: CustomMetric) -> Response:
|
|
37
|
+
"""Update the custom metric in the given slot."""
|
|
38
|
+
return self._client._request(
|
|
39
|
+
"PUT",
|
|
40
|
+
f"property/{property_id}/customMetrics/{slot}",
|
|
41
|
+
data=data,
|
|
42
|
+
response_type=Response,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
def delete(self, property_id: int, slot: int) -> Response:
|
|
46
|
+
"""Remove the custom metric from the given slot."""
|
|
47
|
+
return self._client._request(
|
|
48
|
+
"DELETE",
|
|
49
|
+
f"property/{property_id}/customMetrics/{slot}",
|
|
50
|
+
response_type=Response,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
def available_use_detail_types(self, property_id: int) -> DetailsTypes:
|
|
54
|
+
"""List the property-use detail types usable in custom metric definitions."""
|
|
55
|
+
return self._client._request(
|
|
56
|
+
"GET",
|
|
57
|
+
f"property/{property_id}/customMetrics/availableUseDetailTypes",
|
|
58
|
+
response_type=DetailsTypes,
|
|
59
|
+
)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
class AsyncCustomMetricResource(AsyncResource):
|
|
63
|
+
async def list(self, property_id: int) -> Response:
|
|
64
|
+
return await self._client._arequest("GET", f"property/{property_id}/customMetrics", response_type=Response)
|
|
65
|
+
|
|
66
|
+
async def get(self, property_id: int, slot: int) -> CustomMetric:
|
|
67
|
+
return await self._client._arequest(
|
|
68
|
+
"GET", f"property/{property_id}/customMetrics/{slot}", response_type=CustomMetric
|
|
69
|
+
)
|
|
70
|
+
|
|
71
|
+
async def create(self, property_id: int, slot: int, data: CustomMetric) -> Response:
|
|
72
|
+
return await self._client._arequest(
|
|
73
|
+
"POST", f"property/{property_id}/customMetrics/{slot}", data=data, response_type=Response
|
|
74
|
+
)
|
|
75
|
+
|
|
76
|
+
async def update(self, property_id: int, slot: int, data: CustomMetric) -> Response:
|
|
77
|
+
return await self._client._arequest(
|
|
78
|
+
"PUT", f"property/{property_id}/customMetrics/{slot}", data=data, response_type=Response
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
async def delete(self, property_id: int, slot: int) -> Response:
|
|
82
|
+
return await self._client._arequest(
|
|
83
|
+
"DELETE", f"property/{property_id}/customMetrics/{slot}", response_type=Response
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
async def available_use_detail_types(self, property_id: int) -> DetailsTypes:
|
|
87
|
+
return await self._client._arequest(
|
|
88
|
+
"GET",
|
|
89
|
+
f"property/{property_id}/customMetrics/availableUseDetailTypes",
|
|
90
|
+
response_type=DetailsTypes,
|
|
91
|
+
)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
"""Customer resource — `/customer` endpoints (the authenticated account's connected customers)."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from epa_pm_api_wrapper.models import Customer, Response
|
|
6
|
+
|
|
7
|
+
from ._base import AsyncResource, Resource
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class CustomerResource(Resource):
|
|
11
|
+
def list(self) -> Response:
|
|
12
|
+
"""List customers connected to the authenticated account."""
|
|
13
|
+
return self._client._request("GET", "customer/list", response_type=Response)
|
|
14
|
+
|
|
15
|
+
def get(self, customer_id: int) -> Customer:
|
|
16
|
+
"""Get a connected customer's account info."""
|
|
17
|
+
return self._client._request("GET", f"customer/{customer_id}", response_type=Customer)
|
|
18
|
+
|
|
19
|
+
def create(self, customer_data: Customer) -> Response:
|
|
20
|
+
"""Create a new customer account linked to the authenticated organization (data-exchange providers only)."""
|
|
21
|
+
return self._client._request("POST", "customer", data=customer_data, response_type=Response)
|
|
22
|
+
|
|
23
|
+
def update(self, customer_id: int, customer_data: Customer) -> Response:
|
|
24
|
+
"""Update a connected customer's account."""
|
|
25
|
+
return self._client._request("PUT", f"customer/{customer_id}", data=customer_data, response_type=Response)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
class AsyncCustomerResource(AsyncResource):
|
|
29
|
+
async def list(self) -> Response:
|
|
30
|
+
"""List customers connected to the authenticated account."""
|
|
31
|
+
return await self._client._arequest("GET", "customer/list", response_type=Response)
|
|
32
|
+
|
|
33
|
+
async def get(self, customer_id: int) -> Customer:
|
|
34
|
+
"""Get a connected customer's account info."""
|
|
35
|
+
return await self._client._arequest("GET", f"customer/{customer_id}", response_type=Customer)
|
|
36
|
+
|
|
37
|
+
async def create(self, customer_data: Customer) -> Response:
|
|
38
|
+
"""Create a new customer account linked to the authenticated organization (data-exchange providers only)."""
|
|
39
|
+
return await self._client._arequest("POST", "customer", data=customer_data, response_type=Response)
|
|
40
|
+
|
|
41
|
+
async def update(self, customer_id: int, customer_data: Customer) -> Response:
|
|
42
|
+
"""Update a connected customer's account."""
|
|
43
|
+
return await self._client._arequest(
|
|
44
|
+
"PUT", f"customer/{customer_id}", data=customer_data, response_type=Response
|
|
45
|
+
)
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"""Data-exchange settings resource — `/dataExchangeSettings` endpoints.
|
|
2
|
+
|
|
3
|
+
Used by data-exchange providers (organizations that maintain customer accounts)
|
|
4
|
+
to configure their offering and define custom fields collected at customer
|
|
5
|
+
connection time. Custom field *values* on individual accounts/properties/meters
|
|
6
|
+
are exposed via the ``custom_fields`` method on those resources.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
from typing import TYPE_CHECKING
|
|
12
|
+
|
|
13
|
+
from epa_pm_api_wrapper.models import (
|
|
14
|
+
CustomField,
|
|
15
|
+
DataExchangeSettings,
|
|
16
|
+
Response,
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
from ._base import AsyncResource, Resource
|
|
20
|
+
|
|
21
|
+
if TYPE_CHECKING:
|
|
22
|
+
from epa_pm_api_wrapper.client import EpaPmAsyncClient, EpaPmClient
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
class DataExchangeCustomFieldsResource(Resource):
|
|
26
|
+
def list(self) -> Response:
|
|
27
|
+
"""List the custom fields defined in your data-exchange settings."""
|
|
28
|
+
return self._client._request("GET", "dataExchangeSettings/customField/list", response_type=Response)
|
|
29
|
+
|
|
30
|
+
def create(self, data: CustomField) -> Response:
|
|
31
|
+
"""Define a new custom field in your data-exchange settings."""
|
|
32
|
+
return self._client._request("POST", "dataExchangeSettings/customField", data=data, response_type=Response)
|
|
33
|
+
|
|
34
|
+
def get(self, custom_field_id: int) -> CustomField:
|
|
35
|
+
"""Get a custom field definition."""
|
|
36
|
+
return self._client._request(
|
|
37
|
+
"GET",
|
|
38
|
+
f"dataExchangeSettings/customField/{custom_field_id}",
|
|
39
|
+
response_type=CustomField,
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
def update(self, custom_field_id: int, data: CustomField) -> Response:
|
|
43
|
+
"""Update a custom field definition."""
|
|
44
|
+
return self._client._request(
|
|
45
|
+
"PUT",
|
|
46
|
+
f"dataExchangeSettings/customField/{custom_field_id}",
|
|
47
|
+
data=data,
|
|
48
|
+
response_type=Response,
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
def delete(self, custom_field_id: int) -> Response:
|
|
52
|
+
"""Remove a custom field definition."""
|
|
53
|
+
return self._client._request(
|
|
54
|
+
"DELETE",
|
|
55
|
+
f"dataExchangeSettings/customField/{custom_field_id}",
|
|
56
|
+
response_type=Response,
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
class DataExchangeResource(Resource):
|
|
61
|
+
def __init__(self, client: EpaPmClient) -> None:
|
|
62
|
+
super().__init__(client)
|
|
63
|
+
self.custom_fields = DataExchangeCustomFieldsResource(client)
|
|
64
|
+
|
|
65
|
+
def get(self) -> DataExchangeSettings:
|
|
66
|
+
"""Get your data-exchange settings."""
|
|
67
|
+
return self._client._request("GET", "dataExchangeSettings", response_type=DataExchangeSettings)
|
|
68
|
+
|
|
69
|
+
def update(self, data: DataExchangeSettings) -> Response:
|
|
70
|
+
"""Update your data-exchange settings."""
|
|
71
|
+
return self._client._request("PUT", "dataExchangeSettings", data=data, response_type=Response)
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class AsyncDataExchangeCustomFieldsResource(AsyncResource):
|
|
75
|
+
async def list(self) -> Response:
|
|
76
|
+
return await self._client._arequest("GET", "dataExchangeSettings/customField/list", response_type=Response)
|
|
77
|
+
|
|
78
|
+
async def create(self, data: CustomField) -> Response:
|
|
79
|
+
return await self._client._arequest(
|
|
80
|
+
"POST", "dataExchangeSettings/customField", data=data, response_type=Response
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
async def get(self, custom_field_id: int) -> CustomField:
|
|
84
|
+
return await self._client._arequest(
|
|
85
|
+
"GET", f"dataExchangeSettings/customField/{custom_field_id}", response_type=CustomField
|
|
86
|
+
)
|
|
87
|
+
|
|
88
|
+
async def update(self, custom_field_id: int, data: CustomField) -> Response:
|
|
89
|
+
return await self._client._arequest(
|
|
90
|
+
"PUT",
|
|
91
|
+
f"dataExchangeSettings/customField/{custom_field_id}",
|
|
92
|
+
data=data,
|
|
93
|
+
response_type=Response,
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
async def delete(self, custom_field_id: int) -> Response:
|
|
97
|
+
return await self._client._arequest(
|
|
98
|
+
"DELETE", f"dataExchangeSettings/customField/{custom_field_id}", response_type=Response
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
class AsyncDataExchangeResource(AsyncResource):
|
|
103
|
+
def __init__(self, client: EpaPmAsyncClient) -> None:
|
|
104
|
+
super().__init__(client)
|
|
105
|
+
self.custom_fields = AsyncDataExchangeCustomFieldsResource(client)
|
|
106
|
+
|
|
107
|
+
async def get(self) -> DataExchangeSettings:
|
|
108
|
+
return await self._client._arequest("GET", "dataExchangeSettings", response_type=DataExchangeSettings)
|
|
109
|
+
|
|
110
|
+
async def update(self, data: DataExchangeSettings) -> Response:
|
|
111
|
+
return await self._client._arequest("PUT", "dataExchangeSettings", data=data, response_type=Response)
|
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
"""Green power resource — offsite purchases and onsite renewable generation.
|
|
2
|
+
|
|
3
|
+
Two sub-namespaces:
|
|
4
|
+
|
|
5
|
+
- ``green_power.offsite`` for purchased green power
|
|
6
|
+
(``/property/{id}/offsiteGreenPowerPurchases`` and
|
|
7
|
+
``/offsiteGreenPowerPurchases/{id}``)
|
|
8
|
+
- ``green_power.onsite`` for onsite solar/wind meter generation details
|
|
9
|
+
(``/meter/{id}/onsiteRenewableDetails`` and
|
|
10
|
+
``/meter/{id}/onsiteRenewableOptionalInfo``)
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
from typing import TYPE_CHECKING
|
|
16
|
+
|
|
17
|
+
from epa_pm_api_wrapper.models import (
|
|
18
|
+
OffsiteGreenPowerPurchase,
|
|
19
|
+
OnsiteRenewableDetail,
|
|
20
|
+
OnsiteRenewableDetails,
|
|
21
|
+
OnsiteRenewableOptionalInfo,
|
|
22
|
+
Response,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
from ._base import AsyncResource, Resource
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from epa_pm_api_wrapper.client import EpaPmAsyncClient, EpaPmClient
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class OffsiteGreenPowerResource(Resource):
|
|
32
|
+
def list(self, property_id: int) -> Response:
|
|
33
|
+
"""List offsite green power purchases for a property."""
|
|
34
|
+
return self._client._request(
|
|
35
|
+
"GET",
|
|
36
|
+
f"property/{property_id}/offsiteGreenPowerPurchases",
|
|
37
|
+
response_type=Response,
|
|
38
|
+
)
|
|
39
|
+
|
|
40
|
+
def add(self, property_id: int, data: OffsiteGreenPowerPurchase) -> Response:
|
|
41
|
+
"""Add an offsite green power purchase to a property."""
|
|
42
|
+
return self._client._request(
|
|
43
|
+
"POST",
|
|
44
|
+
f"property/{property_id}/offsiteGreenPowerPurchases",
|
|
45
|
+
data=data,
|
|
46
|
+
response_type=Response,
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
def get(self, purchase_id: int) -> OffsiteGreenPowerPurchase:
|
|
50
|
+
"""Get a specific offsite green power purchase."""
|
|
51
|
+
return self._client._request(
|
|
52
|
+
"GET",
|
|
53
|
+
f"offsiteGreenPowerPurchases/{purchase_id}",
|
|
54
|
+
response_type=OffsiteGreenPowerPurchase,
|
|
55
|
+
)
|
|
56
|
+
|
|
57
|
+
def update(self, purchase_id: int, data: OffsiteGreenPowerPurchase) -> Response:
|
|
58
|
+
"""Update an offsite green power purchase."""
|
|
59
|
+
return self._client._request(
|
|
60
|
+
"PUT",
|
|
61
|
+
f"offsiteGreenPowerPurchases/{purchase_id}",
|
|
62
|
+
data=data,
|
|
63
|
+
response_type=Response,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
def delete(self, purchase_id: int) -> Response:
|
|
67
|
+
"""Delete an offsite green power purchase."""
|
|
68
|
+
return self._client._request("DELETE", f"offsiteGreenPowerPurchases/{purchase_id}", response_type=Response)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
class OnsiteRenewableResource(Resource):
|
|
72
|
+
def list_details(self, meter_id: int) -> OnsiteRenewableDetails:
|
|
73
|
+
"""List onsite renewable detail records for a solar/wind meter (1000 per call)."""
|
|
74
|
+
return self._client._request(
|
|
75
|
+
"GET",
|
|
76
|
+
f"meter/{meter_id}/onsiteRenewableDetails",
|
|
77
|
+
response_type=OnsiteRenewableDetails,
|
|
78
|
+
)
|
|
79
|
+
|
|
80
|
+
def add_detail(self, meter_id: int, data: OnsiteRenewableDetail) -> Response:
|
|
81
|
+
"""Add an onsite renewable detail record to a meter."""
|
|
82
|
+
return self._client._request(
|
|
83
|
+
"POST",
|
|
84
|
+
f"meter/{meter_id}/onsiteRenewableDetails",
|
|
85
|
+
data=data,
|
|
86
|
+
response_type=Response,
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
def get_detail(self, detail_id: int) -> OnsiteRenewableDetail:
|
|
90
|
+
"""Get a specific onsite renewable detail record."""
|
|
91
|
+
return self._client._request("GET", f"onsiteRenewableDetails/{detail_id}", response_type=OnsiteRenewableDetail)
|
|
92
|
+
|
|
93
|
+
def update_detail(self, detail_id: int, data: OnsiteRenewableDetail) -> Response:
|
|
94
|
+
"""Update a specific onsite renewable detail record."""
|
|
95
|
+
return self._client._request(
|
|
96
|
+
"PUT",
|
|
97
|
+
f"onsiteRenewableDetails/{detail_id}",
|
|
98
|
+
data=data,
|
|
99
|
+
response_type=Response,
|
|
100
|
+
)
|
|
101
|
+
|
|
102
|
+
def delete_detail(self, detail_id: int) -> Response:
|
|
103
|
+
"""Delete a specific onsite renewable detail record."""
|
|
104
|
+
return self._client._request("DELETE", f"onsiteRenewableDetails/{detail_id}", response_type=Response)
|
|
105
|
+
|
|
106
|
+
def get_optional_info(self, meter_id: int) -> OnsiteRenewableOptionalInfo:
|
|
107
|
+
"""Get optional onsite renewable info attached to a meter."""
|
|
108
|
+
return self._client._request(
|
|
109
|
+
"GET",
|
|
110
|
+
f"meter/{meter_id}/onsiteRenewableOptionalInfo",
|
|
111
|
+
response_type=OnsiteRenewableOptionalInfo,
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
def create_optional_info(self, meter_id: int, data: OnsiteRenewableOptionalInfo) -> Response:
|
|
115
|
+
"""Add optional onsite renewable info to a meter."""
|
|
116
|
+
return self._client._request(
|
|
117
|
+
"POST",
|
|
118
|
+
f"meter/{meter_id}/onsiteRenewableOptionalInfo",
|
|
119
|
+
data=data,
|
|
120
|
+
response_type=Response,
|
|
121
|
+
)
|
|
122
|
+
|
|
123
|
+
def update_optional_info(self, meter_id: int, data: OnsiteRenewableOptionalInfo) -> Response:
|
|
124
|
+
"""Update optional onsite renewable info on a meter."""
|
|
125
|
+
return self._client._request(
|
|
126
|
+
"PUT",
|
|
127
|
+
f"meter/{meter_id}/onsiteRenewableOptionalInfo",
|
|
128
|
+
data=data,
|
|
129
|
+
response_type=Response,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class GreenPowerResource(Resource):
|
|
134
|
+
def __init__(self, client: EpaPmClient) -> None:
|
|
135
|
+
super().__init__(client)
|
|
136
|
+
self.offsite = OffsiteGreenPowerResource(client)
|
|
137
|
+
self.onsite = OnsiteRenewableResource(client)
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
class AsyncOffsiteGreenPowerResource(AsyncResource):
|
|
141
|
+
async def list(self, property_id: int) -> Response:
|
|
142
|
+
return await self._client._arequest(
|
|
143
|
+
"GET",
|
|
144
|
+
f"property/{property_id}/offsiteGreenPowerPurchases",
|
|
145
|
+
response_type=Response,
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
async def add(self, property_id: int, data: OffsiteGreenPowerPurchase) -> Response:
|
|
149
|
+
return await self._client._arequest(
|
|
150
|
+
"POST",
|
|
151
|
+
f"property/{property_id}/offsiteGreenPowerPurchases",
|
|
152
|
+
data=data,
|
|
153
|
+
response_type=Response,
|
|
154
|
+
)
|
|
155
|
+
|
|
156
|
+
async def get(self, purchase_id: int) -> OffsiteGreenPowerPurchase:
|
|
157
|
+
return await self._client._arequest(
|
|
158
|
+
"GET",
|
|
159
|
+
f"offsiteGreenPowerPurchases/{purchase_id}",
|
|
160
|
+
response_type=OffsiteGreenPowerPurchase,
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
async def update(self, purchase_id: int, data: OffsiteGreenPowerPurchase) -> Response:
|
|
164
|
+
return await self._client._arequest(
|
|
165
|
+
"PUT",
|
|
166
|
+
f"offsiteGreenPowerPurchases/{purchase_id}",
|
|
167
|
+
data=data,
|
|
168
|
+
response_type=Response,
|
|
169
|
+
)
|
|
170
|
+
|
|
171
|
+
async def delete(self, purchase_id: int) -> Response:
|
|
172
|
+
return await self._client._arequest(
|
|
173
|
+
"DELETE", f"offsiteGreenPowerPurchases/{purchase_id}", response_type=Response
|
|
174
|
+
)
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
class AsyncOnsiteRenewableResource(AsyncResource):
|
|
178
|
+
async def list_details(self, meter_id: int) -> OnsiteRenewableDetails:
|
|
179
|
+
return await self._client._arequest(
|
|
180
|
+
"GET",
|
|
181
|
+
f"meter/{meter_id}/onsiteRenewableDetails",
|
|
182
|
+
response_type=OnsiteRenewableDetails,
|
|
183
|
+
)
|
|
184
|
+
|
|
185
|
+
async def add_detail(self, meter_id: int, data: OnsiteRenewableDetail) -> Response:
|
|
186
|
+
return await self._client._arequest(
|
|
187
|
+
"POST",
|
|
188
|
+
f"meter/{meter_id}/onsiteRenewableDetails",
|
|
189
|
+
data=data,
|
|
190
|
+
response_type=Response,
|
|
191
|
+
)
|
|
192
|
+
|
|
193
|
+
async def get_detail(self, detail_id: int) -> OnsiteRenewableDetail:
|
|
194
|
+
return await self._client._arequest(
|
|
195
|
+
"GET", f"onsiteRenewableDetails/{detail_id}", response_type=OnsiteRenewableDetail
|
|
196
|
+
)
|
|
197
|
+
|
|
198
|
+
async def update_detail(self, detail_id: int, data: OnsiteRenewableDetail) -> Response:
|
|
199
|
+
return await self._client._arequest(
|
|
200
|
+
"PUT",
|
|
201
|
+
f"onsiteRenewableDetails/{detail_id}",
|
|
202
|
+
data=data,
|
|
203
|
+
response_type=Response,
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
async def delete_detail(self, detail_id: int) -> Response:
|
|
207
|
+
return await self._client._arequest("DELETE", f"onsiteRenewableDetails/{detail_id}", response_type=Response)
|
|
208
|
+
|
|
209
|
+
async def get_optional_info(self, meter_id: int) -> OnsiteRenewableOptionalInfo:
|
|
210
|
+
return await self._client._arequest(
|
|
211
|
+
"GET",
|
|
212
|
+
f"meter/{meter_id}/onsiteRenewableOptionalInfo",
|
|
213
|
+
response_type=OnsiteRenewableOptionalInfo,
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
async def create_optional_info(self, meter_id: int, data: OnsiteRenewableOptionalInfo) -> Response:
|
|
217
|
+
return await self._client._arequest(
|
|
218
|
+
"POST",
|
|
219
|
+
f"meter/{meter_id}/onsiteRenewableOptionalInfo",
|
|
220
|
+
data=data,
|
|
221
|
+
response_type=Response,
|
|
222
|
+
)
|
|
223
|
+
|
|
224
|
+
async def update_optional_info(self, meter_id: int, data: OnsiteRenewableOptionalInfo) -> Response:
|
|
225
|
+
return await self._client._arequest(
|
|
226
|
+
"PUT",
|
|
227
|
+
f"meter/{meter_id}/onsiteRenewableOptionalInfo",
|
|
228
|
+
data=data,
|
|
229
|
+
response_type=Response,
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
class AsyncGreenPowerResource(AsyncResource):
|
|
234
|
+
def __init__(self, client: EpaPmAsyncClient) -> None:
|
|
235
|
+
super().__init__(client)
|
|
236
|
+
self.offsite = AsyncOffsiteGreenPowerResource(client)
|
|
237
|
+
self.onsite = AsyncOnsiteRenewableResource(client)
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"""Home Energy Yardstick resource — `/hey` endpoint.
|
|
2
|
+
|
|
3
|
+
Single endpoint: ``POST /hey``. Returns scoring metrics for a residential
|
|
4
|
+
property based on the supplied design and meter data. Test environment only.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
from epa_pm_api_wrapper.models import Hey, PropertyMetrics
|
|
10
|
+
|
|
11
|
+
from ._base import AsyncResource, Resource
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class HeyResource(Resource):
|
|
15
|
+
def evaluate(self, design: Hey) -> PropertyMetrics:
|
|
16
|
+
"""Run Home Energy Yardstick against the supplied design and meter data."""
|
|
17
|
+
return self._client._request("POST", "hey", data=design, response_type=PropertyMetrics)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
class AsyncHeyResource(AsyncResource):
|
|
21
|
+
async def evaluate(self, design: Hey) -> PropertyMetrics:
|
|
22
|
+
return await self._client._arequest("POST", "hey", data=design, response_type=PropertyMetrics)
|