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,30 @@
|
|
|
1
|
+
"""Top-level package for EPA PM API Wrapper."""
|
|
2
|
+
|
|
3
|
+
from epa_pm_api_wrapper.client import EpaPmAsyncClient, EpaPmClient
|
|
4
|
+
from epa_pm_api_wrapper.exceptions import (
|
|
5
|
+
EpaErrorDetail,
|
|
6
|
+
EpaPmApiError,
|
|
7
|
+
EpaPmAuthError,
|
|
8
|
+
EpaPmError,
|
|
9
|
+
)
|
|
10
|
+
from epa_pm_api_wrapper.models import (
|
|
11
|
+
AcceptRejectType,
|
|
12
|
+
MeterConsumption,
|
|
13
|
+
MeterData,
|
|
14
|
+
SharingResponse,
|
|
15
|
+
)
|
|
16
|
+
from epa_pm_api_wrapper.retry import RetryConfig
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"AcceptRejectType",
|
|
20
|
+
"EpaErrorDetail",
|
|
21
|
+
"EpaPmApiError",
|
|
22
|
+
"EpaPmAsyncClient",
|
|
23
|
+
"EpaPmAuthError",
|
|
24
|
+
"EpaPmClient",
|
|
25
|
+
"EpaPmError",
|
|
26
|
+
"MeterConsumption",
|
|
27
|
+
"MeterData",
|
|
28
|
+
"RetryConfig",
|
|
29
|
+
"SharingResponse",
|
|
30
|
+
]
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
"""Console script for epa_pm_api_wrapper.
|
|
2
|
+
|
|
3
|
+
The CLI is intentionally a thin exploration tool — read-only commands for
|
|
4
|
+
the most common ad-hoc lookups (accounts, properties, meters, consumption,
|
|
5
|
+
catalogs). For programmatic use of the full ~70-endpoint surface, instantiate
|
|
6
|
+
:class:`EpaPmClient` directly.
|
|
7
|
+
|
|
8
|
+
Each command takes ``--username`` / ``--password`` / ``--test`` (with matching
|
|
9
|
+
``EPA_PM_USERNAME`` / ``EPA_PM_PASSWORD`` / ``EPA_PM_TEST`` environment
|
|
10
|
+
variables, also picked up from a `.env` file in the working directory).
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
import typer
|
|
14
|
+
from dotenv import load_dotenv
|
|
15
|
+
from rich.console import Console
|
|
16
|
+
from rich.table import Table
|
|
17
|
+
|
|
18
|
+
from epa_pm_api_wrapper.client import EpaPmClient
|
|
19
|
+
|
|
20
|
+
# Load environment variables from .env file
|
|
21
|
+
load_dotenv()
|
|
22
|
+
|
|
23
|
+
app = typer.Typer()
|
|
24
|
+
console = Console()
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _client(username: str, password: str, test: bool) -> EpaPmClient:
|
|
28
|
+
return EpaPmClient(username=username, password=password, use_test_env=test)
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
_USERNAME = typer.Option(..., envvar="EPA_PM_USERNAME", help="EPA PM Username")
|
|
32
|
+
_PASSWORD = typer.Option(..., envvar="EPA_PM_PASSWORD", help="EPA PM Password", hide_input=True)
|
|
33
|
+
_TEST = typer.Option(False, "--test", envvar="EPA_PM_TEST", help="Use test environment")
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
@app.command()
|
|
37
|
+
def account(
|
|
38
|
+
username: str = _USERNAME,
|
|
39
|
+
password: str = _PASSWORD,
|
|
40
|
+
test: bool = _TEST,
|
|
41
|
+
) -> None:
|
|
42
|
+
"""Get account details."""
|
|
43
|
+
client = _client(username, password, test)
|
|
44
|
+
try:
|
|
45
|
+
acc = client.account.get()
|
|
46
|
+
console.print("[bold green]Account Details:[/bold green]")
|
|
47
|
+
console.print(f"ID: {acc.id}")
|
|
48
|
+
console.print(f"Username: {acc.username}")
|
|
49
|
+
console.print(f"Organization: {acc.organization.name}")
|
|
50
|
+
console.print(f"Primary Business: {acc.organization.primary_business}")
|
|
51
|
+
except Exception as e:
|
|
52
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
@app.command("list-properties")
|
|
56
|
+
def list_properties(
|
|
57
|
+
account_id: int = typer.Argument(..., help="Account ID to list properties for"),
|
|
58
|
+
username: str = _USERNAME,
|
|
59
|
+
password: str = _PASSWORD,
|
|
60
|
+
test: bool = _TEST,
|
|
61
|
+
) -> None:
|
|
62
|
+
"""List all properties accessible under an account."""
|
|
63
|
+
client = _client(username, password, test)
|
|
64
|
+
try:
|
|
65
|
+
response = client.property.list(account_id)
|
|
66
|
+
if not response.links or not response.links.link:
|
|
67
|
+
console.print("[yellow]No properties found.[/yellow]")
|
|
68
|
+
return
|
|
69
|
+
table = Table(title=f"Properties for account {account_id}")
|
|
70
|
+
table.add_column("ID", style="cyan")
|
|
71
|
+
table.add_column("Name")
|
|
72
|
+
for link in response.links.link:
|
|
73
|
+
table.add_row(str(link.id), link.hint or "")
|
|
74
|
+
console.print(table)
|
|
75
|
+
except Exception as e:
|
|
76
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@app.command("get-property")
|
|
80
|
+
def get_property(
|
|
81
|
+
property_id: int,
|
|
82
|
+
username: str = _USERNAME,
|
|
83
|
+
password: str = _PASSWORD,
|
|
84
|
+
test: bool = _TEST,
|
|
85
|
+
) -> None:
|
|
86
|
+
"""Get property details."""
|
|
87
|
+
client = _client(username, password, test)
|
|
88
|
+
try:
|
|
89
|
+
prop = client.property.get(property_id)
|
|
90
|
+
console.print("[bold green]Property Details:[/bold green]")
|
|
91
|
+
console.print(f"ID: {property_id}")
|
|
92
|
+
console.print(f"Name: {prop.name}")
|
|
93
|
+
console.print(f"Primary Function: {prop.primary_function}")
|
|
94
|
+
if prop.address:
|
|
95
|
+
addr = prop.address
|
|
96
|
+
console.print(f"Address: {addr.address1}, {addr.city}, {addr.state} {addr.postal_code}")
|
|
97
|
+
else:
|
|
98
|
+
console.print("Address: N/A")
|
|
99
|
+
except Exception as e:
|
|
100
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
@app.command("list-meters")
|
|
104
|
+
def list_meters(
|
|
105
|
+
property_id: int = typer.Argument(..., help="Property ID to list meters for"),
|
|
106
|
+
username: str = _USERNAME,
|
|
107
|
+
password: str = _PASSWORD,
|
|
108
|
+
test: bool = _TEST,
|
|
109
|
+
) -> None:
|
|
110
|
+
"""List meters on a property."""
|
|
111
|
+
client = _client(username, password, test)
|
|
112
|
+
try:
|
|
113
|
+
response = client.meter.list(property_id)
|
|
114
|
+
if not response.links or not response.links.link:
|
|
115
|
+
console.print("[yellow]No meters found.[/yellow]")
|
|
116
|
+
return
|
|
117
|
+
table = Table(title=f"Meters for property {property_id}")
|
|
118
|
+
table.add_column("ID", style="cyan")
|
|
119
|
+
table.add_column("Name")
|
|
120
|
+
for link in response.links.link:
|
|
121
|
+
table.add_row(str(link.id), link.hint or "")
|
|
122
|
+
console.print(table)
|
|
123
|
+
except Exception as e:
|
|
124
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
@app.command("get-meter")
|
|
128
|
+
def get_meter(
|
|
129
|
+
meter_id: int,
|
|
130
|
+
username: str = _USERNAME,
|
|
131
|
+
password: str = _PASSWORD,
|
|
132
|
+
test: bool = _TEST,
|
|
133
|
+
) -> None:
|
|
134
|
+
"""Get meter details."""
|
|
135
|
+
client = _client(username, password, test)
|
|
136
|
+
try:
|
|
137
|
+
meter = client.meter.get(meter_id)
|
|
138
|
+
console.print("[bold green]Meter Details:[/bold green]")
|
|
139
|
+
console.print(f"ID: {meter.id}")
|
|
140
|
+
console.print(f"Name: {meter.name}")
|
|
141
|
+
console.print(f"Type: {meter.type_value}")
|
|
142
|
+
console.print(f"Unit: {meter.unit_of_measure}")
|
|
143
|
+
console.print(f"Metered: {meter.metered}")
|
|
144
|
+
console.print(f"In Use: {meter.in_use}")
|
|
145
|
+
except Exception as e:
|
|
146
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
@app.command("get-consumption")
|
|
150
|
+
def get_consumption(
|
|
151
|
+
meter_id: int,
|
|
152
|
+
page: int = typer.Option(1, help="1-based page number (120 records per page)"),
|
|
153
|
+
start_date: str | None = typer.Option(None, help="ISO 8601 start date (YYYY-MM-DD)"),
|
|
154
|
+
end_date: str | None = typer.Option(None, help="ISO 8601 end date (YYYY-MM-DD)"),
|
|
155
|
+
username: str = _USERNAME,
|
|
156
|
+
password: str = _PASSWORD,
|
|
157
|
+
test: bool = _TEST,
|
|
158
|
+
) -> None:
|
|
159
|
+
"""Get consumption records for a meter."""
|
|
160
|
+
client = _client(username, password, test)
|
|
161
|
+
try:
|
|
162
|
+
data = client.consumption_data.get(meter_id, page=page, start_date=start_date, end_date=end_date)
|
|
163
|
+
records = data.meter_consumption or []
|
|
164
|
+
if not records:
|
|
165
|
+
console.print("[yellow]No consumption records in range.[/yellow]")
|
|
166
|
+
return
|
|
167
|
+
table = Table(title=f"Consumption for meter {meter_id} (page {page})")
|
|
168
|
+
table.add_column("ID", style="cyan")
|
|
169
|
+
table.add_column("Start Date")
|
|
170
|
+
table.add_column("End Date")
|
|
171
|
+
table.add_column("Usage", justify="right")
|
|
172
|
+
table.add_column("Estimated", justify="center")
|
|
173
|
+
for rec in records:
|
|
174
|
+
table.add_row(
|
|
175
|
+
str(rec.id),
|
|
176
|
+
str(rec.start_date) if rec.start_date else "",
|
|
177
|
+
str(rec.end_date) if rec.end_date else "",
|
|
178
|
+
str(rec.usage) if rec.usage is not None else "",
|
|
179
|
+
"yes" if rec.estimated_value else "no",
|
|
180
|
+
)
|
|
181
|
+
console.print(table)
|
|
182
|
+
except Exception as e:
|
|
183
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
@app.command("list-customers")
|
|
187
|
+
def list_customers(
|
|
188
|
+
username: str = _USERNAME,
|
|
189
|
+
password: str = _PASSWORD,
|
|
190
|
+
test: bool = _TEST,
|
|
191
|
+
) -> None:
|
|
192
|
+
"""List customers connected to your account."""
|
|
193
|
+
client = _client(username, password, test)
|
|
194
|
+
try:
|
|
195
|
+
response = client.customer.list()
|
|
196
|
+
if not response.links or not response.links.link:
|
|
197
|
+
console.print("[yellow]No connected customers.[/yellow]")
|
|
198
|
+
return
|
|
199
|
+
table = Table(title="Connected customers")
|
|
200
|
+
table.add_column("ID", style="cyan")
|
|
201
|
+
table.add_column("Name / Hint")
|
|
202
|
+
for link in response.links.link:
|
|
203
|
+
table.add_row(str(link.id), link.hint or "")
|
|
204
|
+
console.print(table)
|
|
205
|
+
except Exception as e:
|
|
206
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
207
|
+
|
|
208
|
+
|
|
209
|
+
@app.command("list-pending-shares")
|
|
210
|
+
def list_pending_shares(
|
|
211
|
+
username: str = _USERNAME,
|
|
212
|
+
password: str = _PASSWORD,
|
|
213
|
+
test: bool = _TEST,
|
|
214
|
+
) -> None:
|
|
215
|
+
"""List pending property and meter share requests."""
|
|
216
|
+
client = _client(username, password, test)
|
|
217
|
+
try:
|
|
218
|
+
prop_pending = client.share.pending_property_shares()
|
|
219
|
+
meter_pending = client.share.pending_meter_shares()
|
|
220
|
+
conn_pending = client.share.pending_connections()
|
|
221
|
+
|
|
222
|
+
console.print(f"[bold]Pending property shares:[/bold] {len(prop_pending.property)}")
|
|
223
|
+
console.print(f"[bold]Pending meter shares:[/bold] {len(meter_pending.meter)}")
|
|
224
|
+
console.print(f"[bold]Pending account connections:[/bold] {len(conn_pending.account)}")
|
|
225
|
+
except Exception as e:
|
|
226
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
@app.command("list-property-uses")
|
|
230
|
+
def list_property_uses(
|
|
231
|
+
property_id: int = typer.Argument(..., help="Property ID to list property uses for"),
|
|
232
|
+
username: str = _USERNAME,
|
|
233
|
+
password: str = _PASSWORD,
|
|
234
|
+
test: bool = _TEST,
|
|
235
|
+
) -> None:
|
|
236
|
+
"""List property uses defined for a property."""
|
|
237
|
+
client = _client(username, password, test)
|
|
238
|
+
try:
|
|
239
|
+
response = client.property_use.list(property_id)
|
|
240
|
+
if not response.links or not response.links.link:
|
|
241
|
+
console.print("[yellow]No property uses found.[/yellow]")
|
|
242
|
+
return
|
|
243
|
+
table = Table(title=f"Property uses for property {property_id}")
|
|
244
|
+
table.add_column("ID", style="cyan")
|
|
245
|
+
table.add_column("Name / Hint")
|
|
246
|
+
for link in response.links.link:
|
|
247
|
+
table.add_row(str(link.id), link.hint or "")
|
|
248
|
+
console.print(table)
|
|
249
|
+
except Exception as e:
|
|
250
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
@app.command("list-buildings")
|
|
254
|
+
def list_buildings(
|
|
255
|
+
property_id: int = typer.Argument(..., help="Property ID to list buildings for"),
|
|
256
|
+
username: str = _USERNAME,
|
|
257
|
+
password: str = _PASSWORD,
|
|
258
|
+
test: bool = _TEST,
|
|
259
|
+
) -> None:
|
|
260
|
+
"""List buildings under a property."""
|
|
261
|
+
client = _client(username, password, test)
|
|
262
|
+
try:
|
|
263
|
+
response = client.building.list(property_id)
|
|
264
|
+
if not response.links or not response.links.link:
|
|
265
|
+
console.print("[yellow]No buildings found.[/yellow]")
|
|
266
|
+
return
|
|
267
|
+
table = Table(title=f"Buildings for property {property_id}")
|
|
268
|
+
table.add_column("ID", style="cyan")
|
|
269
|
+
table.add_column("Name / Hint")
|
|
270
|
+
for link in response.links.link:
|
|
271
|
+
table.add_row(str(link.id), link.hint or "")
|
|
272
|
+
console.print(table)
|
|
273
|
+
except Exception as e:
|
|
274
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
275
|
+
|
|
276
|
+
|
|
277
|
+
@app.command("list-edu")
|
|
278
|
+
def list_edu(
|
|
279
|
+
property_id: int = typer.Argument(..., help="Property ID to list available EDUs for"),
|
|
280
|
+
username: str = _USERNAME,
|
|
281
|
+
password: str = _PASSWORD,
|
|
282
|
+
test: bool = _TEST,
|
|
283
|
+
) -> None:
|
|
284
|
+
"""List available Electric Distribution Utilities for a property."""
|
|
285
|
+
client = _client(username, password, test)
|
|
286
|
+
try:
|
|
287
|
+
edus = client.property.edu.list(property_id)
|
|
288
|
+
if not edus.edu:
|
|
289
|
+
console.print("[yellow]No EDUs available.[/yellow]")
|
|
290
|
+
return
|
|
291
|
+
table = Table(title=f"EDUs available for property {property_id}")
|
|
292
|
+
table.add_column("Code", style="cyan")
|
|
293
|
+
table.add_column("Name")
|
|
294
|
+
table.add_column("Preferred")
|
|
295
|
+
table.add_column("Selected")
|
|
296
|
+
for edu in edus.edu:
|
|
297
|
+
table.add_row(
|
|
298
|
+
edu.edu_code or "",
|
|
299
|
+
edu.name or "",
|
|
300
|
+
"yes" if edu.preferred else "no",
|
|
301
|
+
"yes" if edu.selected else "no",
|
|
302
|
+
)
|
|
303
|
+
console.print(table)
|
|
304
|
+
except Exception as e:
|
|
305
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
@app.command("list-federal-agencies")
|
|
309
|
+
def list_federal_agencies(
|
|
310
|
+
username: str = _USERNAME,
|
|
311
|
+
password: str = _PASSWORD,
|
|
312
|
+
test: bool = _TEST,
|
|
313
|
+
) -> None:
|
|
314
|
+
"""List federal agencies (catalog)."""
|
|
315
|
+
client = _client(username, password, test)
|
|
316
|
+
try:
|
|
317
|
+
catalog = client.property.federal_agency.list()
|
|
318
|
+
if not catalog.agency:
|
|
319
|
+
console.print("[yellow]No agencies in catalog.[/yellow]")
|
|
320
|
+
return
|
|
321
|
+
table = Table(title="Federal agencies")
|
|
322
|
+
table.add_column("ID", style="cyan")
|
|
323
|
+
table.add_column("Code")
|
|
324
|
+
table.add_column("Name")
|
|
325
|
+
table.add_column("Country")
|
|
326
|
+
for agency in catalog.agency:
|
|
327
|
+
table.add_row(
|
|
328
|
+
str(agency.id) if agency.id else "",
|
|
329
|
+
agency.code or "",
|
|
330
|
+
agency.name or "",
|
|
331
|
+
str(agency.country) if agency.country else "",
|
|
332
|
+
)
|
|
333
|
+
console.print(table)
|
|
334
|
+
except Exception as e:
|
|
335
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
336
|
+
|
|
337
|
+
|
|
338
|
+
@app.command("list-egrid-subregions")
|
|
339
|
+
def list_egrid_subregions(
|
|
340
|
+
username: str = _USERNAME,
|
|
341
|
+
password: str = _PASSWORD,
|
|
342
|
+
test: bool = _TEST,
|
|
343
|
+
) -> None:
|
|
344
|
+
"""List eGrid subregions (catalog)."""
|
|
345
|
+
client = _client(username, password, test)
|
|
346
|
+
try:
|
|
347
|
+
catalog = client.property.e_grid_subregion.list()
|
|
348
|
+
if not catalog.e_grid_subregion:
|
|
349
|
+
console.print("[yellow]No subregions in catalog.[/yellow]")
|
|
350
|
+
return
|
|
351
|
+
table = Table(title="eGrid subregions")
|
|
352
|
+
table.add_column("Code", style="cyan")
|
|
353
|
+
table.add_column("Name")
|
|
354
|
+
table.add_column("Country")
|
|
355
|
+
for sr in catalog.e_grid_subregion:
|
|
356
|
+
table.add_row(
|
|
357
|
+
sr.code or "",
|
|
358
|
+
sr.name or "",
|
|
359
|
+
str(sr.country) if sr.country else "",
|
|
360
|
+
)
|
|
361
|
+
console.print(table)
|
|
362
|
+
except Exception as e:
|
|
363
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
364
|
+
|
|
365
|
+
|
|
366
|
+
@app.command("list-reports")
|
|
367
|
+
def list_reports(
|
|
368
|
+
username: str = _USERNAME,
|
|
369
|
+
password: str = _PASSWORD,
|
|
370
|
+
test: bool = _TEST,
|
|
371
|
+
) -> None:
|
|
372
|
+
"""List reports in your account."""
|
|
373
|
+
client = _client(username, password, test)
|
|
374
|
+
try:
|
|
375
|
+
response = client.report.list()
|
|
376
|
+
if not response.links or not response.links.link:
|
|
377
|
+
console.print("[yellow]No reports found.[/yellow]")
|
|
378
|
+
return
|
|
379
|
+
table = Table(title="Reports")
|
|
380
|
+
table.add_column("ID", style="cyan")
|
|
381
|
+
table.add_column("Name / Hint")
|
|
382
|
+
for link in response.links.link:
|
|
383
|
+
table.add_row(str(link.id), link.hint or "")
|
|
384
|
+
console.print(table)
|
|
385
|
+
except Exception as e:
|
|
386
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
387
|
+
|
|
388
|
+
|
|
389
|
+
@app.command("list-report-templates")
|
|
390
|
+
def list_report_templates(
|
|
391
|
+
username: str = _USERNAME,
|
|
392
|
+
password: str = _PASSWORD,
|
|
393
|
+
test: bool = _TEST,
|
|
394
|
+
) -> None:
|
|
395
|
+
"""List report templates available to your account."""
|
|
396
|
+
client = _client(username, password, test)
|
|
397
|
+
try:
|
|
398
|
+
response = client.report.templates.list()
|
|
399
|
+
if not response.links or not response.links.link:
|
|
400
|
+
console.print("[yellow]No templates found.[/yellow]")
|
|
401
|
+
return
|
|
402
|
+
table = Table(title="Report templates")
|
|
403
|
+
table.add_column("ID", style="cyan")
|
|
404
|
+
table.add_column("Name / Hint")
|
|
405
|
+
for link in response.links.link:
|
|
406
|
+
table.add_row(str(link.id), link.hint or "")
|
|
407
|
+
console.print(table)
|
|
408
|
+
except Exception as e:
|
|
409
|
+
console.print(f"[bold red]Error:[/bold red] {e}")
|
|
410
|
+
|
|
411
|
+
|
|
412
|
+
if __name__ == "__main__":
|
|
413
|
+
app()
|