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.
Files changed (654) hide show
  1. epa_pm_api_wrapper/__init__.py +30 -0
  2. epa_pm_api_wrapper/__main__.py +4 -0
  3. epa_pm_api_wrapper/cli.py +413 -0
  4. epa_pm_api_wrapper/client.py +507 -0
  5. epa_pm_api_wrapper/exceptions.py +67 -0
  6. epa_pm_api_wrapper/models/__init__.py +1451 -0
  7. epa_pm_api_wrapper/models/accept_reject_type.py +12 -0
  8. epa_pm_api_wrapper/models/account.py +15 -0
  9. epa_pm_api_wrapper/models/account_info.py +58 -0
  10. epa_pm_api_wrapper/models/account_type.py +122 -0
  11. epa_pm_api_wrapper/models/account_type_language_preference.py +9 -0
  12. epa_pm_api_wrapper/models/additional_identifier.py +58 -0
  13. epa_pm_api_wrapper/models/additional_identifier_type.py +60 -0
  14. epa_pm_api_wrapper/models/additional_identifier_type_group.py +10 -0
  15. epa_pm_api_wrapper/models/additional_identifier_types.py +19 -0
  16. epa_pm_api_wrapper/models/additional_identifiers.py +19 -0
  17. epa_pm_api_wrapper/models/address_type.py +84 -0
  18. epa_pm_api_wrapper/models/address_type_state.py +159 -0
  19. epa_pm_api_wrapper/models/adult_education.py +17 -0
  20. epa_pm_api_wrapper/models/agency_type.py +41 -0
  21. epa_pm_api_wrapper/models/agency_type_country.py +242 -0
  22. epa_pm_api_wrapper/models/alerts.py +16 -0
  23. epa_pm_api_wrapper/models/alerts_type.py +47 -0
  24. epa_pm_api_wrapper/models/alerts_type_alert.py +29 -0
  25. epa_pm_api_wrapper/models/all_energy_meters_type.py +32 -0
  26. epa_pm_api_wrapper/models/all_meter_types.py +130 -0
  27. epa_pm_api_wrapper/models/ambulatory_surgical_center.py +16 -0
  28. epa_pm_api_wrapper/models/amount_of_laundry_processed_annually.py +17 -0
  29. epa_pm_api_wrapper/models/amount_of_laundry_processed_annually_type.py +28 -0
  30. epa_pm_api_wrapper/models/amount_of_laundry_processed_annually_units_type.py +9 -0
  31. epa_pm_api_wrapper/models/annual_research_expenditure.py +16 -0
  32. epa_pm_api_wrapper/models/annual_research_expenditure_type.py +22 -0
  33. epa_pm_api_wrapper/models/annual_research_expenditure_type_value.py +10 -0
  34. epa_pm_api_wrapper/models/aquarium.py +17 -0
  35. epa_pm_api_wrapper/models/area_of_all_walk_in_refrigeration_units.py +19 -0
  36. epa_pm_api_wrapper/models/average_effluent_biological_oxygen_demand.py +16 -0
  37. epa_pm_api_wrapper/models/average_influent_biological_oxygen_demand.py +16 -0
  38. epa_pm_api_wrapper/models/average_number_of_residents.py +15 -0
  39. epa_pm_api_wrapper/models/average_number_of_vehicles_in_inventory.py +16 -0
  40. epa_pm_api_wrapper/models/bank_branch.py +16 -0
  41. epa_pm_api_wrapper/models/bank_branch_type.py +35 -0
  42. epa_pm_api_wrapper/models/bank_branch_type_use_details.py +58 -0
  43. epa_pm_api_wrapper/models/bar_nightclub.py +17 -0
  44. epa_pm_api_wrapper/models/barracks.py +17 -0
  45. epa_pm_api_wrapper/models/barracks_type.py +35 -0
  46. epa_pm_api_wrapper/models/barracks_type_use_details.py +58 -0
  47. epa_pm_api_wrapper/models/baseline_and_target.py +16 -0
  48. epa_pm_api_wrapper/models/baseline_and_target_type.py +27 -0
  49. epa_pm_api_wrapper/models/baseline_type.py +41 -0
  50. epa_pm_api_wrapper/models/billboard_metric_setting.py +21 -0
  51. epa_pm_api_wrapper/models/billboard_metric_type.py +33 -0
  52. epa_pm_api_wrapper/models/billboard_metrics.py +11 -0
  53. epa_pm_api_wrapper/models/billboard_metrics_type.py +26 -0
  54. epa_pm_api_wrapper/models/bowling_alley.py +40 -0
  55. epa_pm_api_wrapper/models/bowling_alley_use_details.py +58 -0
  56. epa_pm_api_wrapper/models/building.py +11 -0
  57. epa_pm_api_wrapper/models/casino.py +16 -0
  58. epa_pm_api_wrapper/models/category_type.py +17 -0
  59. epa_pm_api_wrapper/models/cegep.py +15 -0
  60. epa_pm_api_wrapper/models/cegep_type.py +35 -0
  61. epa_pm_api_wrapper/models/cegep_type_use_details.py +131 -0
  62. epa_pm_api_wrapper/models/ceiling_height.py +15 -0
  63. epa_pm_api_wrapper/models/ceiling_height_units_type.py +27 -0
  64. epa_pm_api_wrapper/models/clear_height.py +16 -0
  65. epa_pm_api_wrapper/models/clear_height_units_type.py +26 -0
  66. epa_pm_api_wrapper/models/college_university.py +15 -0
  67. epa_pm_api_wrapper/models/college_university_type.py +37 -0
  68. epa_pm_api_wrapper/models/college_university_type_use_details.py +131 -0
  69. epa_pm_api_wrapper/models/common_entrance.py +16 -0
  70. epa_pm_api_wrapper/models/community_center_and_social_meeting_hall.py +46 -0
  71. epa_pm_api_wrapper/models/community_center_and_social_meeting_hall_use_details.py +58 -0
  72. epa_pm_api_wrapper/models/completely_enclosed_footage.py +15 -0
  73. epa_pm_api_wrapper/models/construction_status_type.py +9 -0
  74. epa_pm_api_wrapper/models/contact_type.py +70 -0
  75. epa_pm_api_wrapper/models/convenience_store_with_gas_station.py +19 -0
  76. epa_pm_api_wrapper/models/convenience_store_with_gas_station_type.py +37 -0
  77. epa_pm_api_wrapper/models/convenience_store_with_gas_station_type_use_details.py +140 -0
  78. epa_pm_api_wrapper/models/convenience_store_without_gas_station.py +19 -0
  79. epa_pm_api_wrapper/models/convenience_store_without_gas_station_type.py +37 -0
  80. epa_pm_api_wrapper/models/convenience_store_without_gas_station_type_use_details.py +140 -0
  81. epa_pm_api_wrapper/models/convention_center.py +16 -0
  82. epa_pm_api_wrapper/models/cooking_facilities.py +15 -0
  83. epa_pm_api_wrapper/models/cooking_located_onsite.py +16 -0
  84. epa_pm_api_wrapper/models/cooling_equipment_redundancy.py +15 -0
  85. epa_pm_api_wrapper/models/cooling_equipment_redundancy_type.py +22 -0
  86. epa_pm_api_wrapper/models/cooling_equipment_redundancy_type_value.py +12 -0
  87. epa_pm_api_wrapper/models/country_code.py +16 -0
  88. epa_pm_api_wrapper/models/country_list.py +493 -0
  89. epa_pm_api_wrapper/models/courthouse.py +16 -0
  90. epa_pm_api_wrapper/models/courthouse_type.py +35 -0
  91. epa_pm_api_wrapper/models/courthouse_type_use_details.py +58 -0
  92. epa_pm_api_wrapper/models/custom_field.py +109 -0
  93. epa_pm_api_wrapper/models/custom_field_list.py +20 -0
  94. epa_pm_api_wrapper/models/custom_field_list_custom_field.py +17 -0
  95. epa_pm_api_wrapper/models/custom_field_valid_characters.py +15 -0
  96. epa_pm_api_wrapper/models/custom_field_when_to_prompt.py +15 -0
  97. epa_pm_api_wrapper/models/custom_metric.py +49 -0
  98. epa_pm_api_wrapper/models/custom_units_type.py +19 -0
  99. epa_pm_api_wrapper/models/custom_use.py +15 -0
  100. epa_pm_api_wrapper/models/custom_use_detail1.py +15 -0
  101. epa_pm_api_wrapper/models/custom_use_detail2.py +15 -0
  102. epa_pm_api_wrapper/models/custom_use_details_type.py +50 -0
  103. epa_pm_api_wrapper/models/custom_use_details_type_data_type.py +8 -0
  104. epa_pm_api_wrapper/models/custom_use_type.py +35 -0
  105. epa_pm_api_wrapper/models/custom_use_type_use_details.py +27 -0
  106. epa_pm_api_wrapper/models/customer.py +77 -0
  107. epa_pm_api_wrapper/models/customer_language_preference.py +9 -0
  108. epa_pm_api_wrapper/models/data_center.py +17 -0
  109. epa_pm_api_wrapper/models/data_center_type.py +35 -0
  110. epa_pm_api_wrapper/models/data_center_type_use_details.py +50 -0
  111. epa_pm_api_wrapper/models/data_exchange_settings.py +37 -0
  112. epa_pm_api_wrapper/models/data_exchange_settings_supported_meter_types.py +20 -0
  113. epa_pm_api_wrapper/models/data_exchange_settings_terms_of_use.py +40 -0
  114. epa_pm_api_wrapper/models/data_request.py +88 -0
  115. epa_pm_api_wrapper/models/data_request_locations.py +19 -0
  116. epa_pm_api_wrapper/models/data_request_locations_location.py +22 -0
  117. epa_pm_api_wrapper/models/data_request_requester_details.py +32 -0
  118. epa_pm_api_wrapper/models/data_request_status_type.py +13 -0
  119. epa_pm_api_wrapper/models/data_response.py +47 -0
  120. epa_pm_api_wrapper/models/data_response_properties.py +20 -0
  121. epa_pm_api_wrapper/models/data_type.py +9 -0
  122. epa_pm_api_wrapper/models/delivery_facility.py +16 -0
  123. epa_pm_api_wrapper/models/demand_tracking_type.py +35 -0
  124. epa_pm_api_wrapper/models/design.py +15 -0
  125. epa_pm_api_wrapper/models/design_base_type.py +83 -0
  126. epa_pm_api_wrapper/models/design_base_type_estimated_energy_list.py +17 -0
  127. epa_pm_api_wrapper/models/design_base_type_property_uses.py +709 -0
  128. epa_pm_api_wrapper/models/design_base_type_target.py +34 -0
  129. epa_pm_api_wrapper/models/design_unit_of_measure.py +37 -0
  130. epa_pm_api_wrapper/models/detail_type.py +22 -0
  131. epa_pm_api_wrapper/models/details_types.py +20 -0
  132. epa_pm_api_wrapper/models/disposal_destination_type.py +60 -0
  133. epa_pm_api_wrapper/models/distribution_center.py +17 -0
  134. epa_pm_api_wrapper/models/distribution_center_type.py +37 -0
  135. epa_pm_api_wrapper/models/distribution_center_type_use_details.py +76 -0
  136. epa_pm_api_wrapper/models/drinking_water_treatment_and_distribution.py +18 -0
  137. epa_pm_api_wrapper/models/drinking_water_treatment_and_distribution_type.py +37 -0
  138. epa_pm_api_wrapper/models/drinking_water_treatment_and_distribution_type_use_details.py +18 -0
  139. epa_pm_api_wrapper/models/e_grid_subregion.py +38 -0
  140. epa_pm_api_wrapper/models/e_grid_subregion_country.py +242 -0
  141. epa_pm_api_wrapper/models/e_grid_subregion_list.py +19 -0
  142. epa_pm_api_wrapper/models/edu.py +64 -0
  143. epa_pm_api_wrapper/models/edu_list.py +18 -0
  144. epa_pm_api_wrapper/models/electric_vehicle_charging_station.py +15 -0
  145. epa_pm_api_wrapper/models/empty_string.py +7 -0
  146. epa_pm_api_wrapper/models/empty_type.py +7 -0
  147. epa_pm_api_wrapper/models/enclosed_floor_area.py +15 -0
  148. epa_pm_api_wrapper/models/enclosed_mall.py +16 -0
  149. epa_pm_api_wrapper/models/energy_meter_assoc_and_config_type.py +25 -0
  150. epa_pm_api_wrapper/models/energy_performance_project.py +11 -0
  151. epa_pm_api_wrapper/models/energy_performance_project_type.py +136 -0
  152. epa_pm_api_wrapper/models/energy_power_station.py +20 -0
  153. epa_pm_api_wrapper/models/energy_uom_type.py +11 -0
  154. epa_pm_api_wrapper/models/enrollment.py +11 -0
  155. epa_pm_api_wrapper/models/error_type.py +29 -0
  156. epa_pm_api_wrapper/models/errors_type.py +25 -0
  157. epa_pm_api_wrapper/models/estimated_energy_list_type.py +19 -0
  158. epa_pm_api_wrapper/models/estimated_energy_type.py +58 -0
  159. epa_pm_api_wrapper/models/estimates_applied.py +15 -0
  160. epa_pm_api_wrapper/models/ev_charging_station_type.py +37 -0
  161. epa_pm_api_wrapper/models/ev_charging_station_type_use_details.py +41 -0
  162. epa_pm_api_wrapper/models/evaluation_period_type.py +35 -0
  163. epa_pm_api_wrapper/models/exterior_entrance_to_the_public.py +15 -0
  164. epa_pm_api_wrapper/models/fast_food_restaurant.py +17 -0
  165. epa_pm_api_wrapper/models/fast_food_restaurant_type.py +37 -0
  166. epa_pm_api_wrapper/models/fast_food_restaurant_type_use_details.py +84 -0
  167. epa_pm_api_wrapper/models/federal_agencies.py +19 -0
  168. epa_pm_api_wrapper/models/financial_office.py +16 -0
  169. epa_pm_api_wrapper/models/financial_office_type.py +35 -0
  170. epa_pm_api_wrapper/models/financial_office_type_use_details.py +58 -0
  171. epa_pm_api_wrapper/models/fire_station.py +16 -0
  172. epa_pm_api_wrapper/models/fire_station_type.py +35 -0
  173. epa_pm_api_wrapper/models/fire_station_type_use_details.py +92 -0
  174. epa_pm_api_wrapper/models/fitness_center_health_club_gym.py +42 -0
  175. epa_pm_api_wrapper/models/fitness_center_health_club_gym_use_details.py +58 -0
  176. epa_pm_api_wrapper/models/fixed_film_trickle_filtration_process.py +15 -0
  177. epa_pm_api_wrapper/models/floor_area_type_base.py +23 -0
  178. epa_pm_api_wrapper/models/food_sales.py +17 -0
  179. epa_pm_api_wrapper/models/food_sales_type.py +35 -0
  180. epa_pm_api_wrapper/models/food_sales_type_use_details.py +114 -0
  181. epa_pm_api_wrapper/models/food_service.py +17 -0
  182. epa_pm_api_wrapper/models/full_service_spa_floor_area.py +15 -0
  183. epa_pm_api_wrapper/models/generation_location_type.py +41 -0
  184. epa_pm_api_wrapper/models/government_subsidized_housing.py +16 -0
  185. epa_pm_api_wrapper/models/grant_dollars.py +11 -0
  186. epa_pm_api_wrapper/models/green_power_fuel_source_enum.py +13 -0
  187. epa_pm_api_wrapper/models/green_power_type_enum.py +15 -0
  188. epa_pm_api_wrapper/models/gross_floor_area_hotel_conference_space.py +18 -0
  189. epa_pm_api_wrapper/models/gross_floor_area_that_is_exhibit_space.py +19 -0
  190. epa_pm_api_wrapper/models/gross_floor_area_type.py +24 -0
  191. epa_pm_api_wrapper/models/gross_floor_area_units_type.py +8 -0
  192. epa_pm_api_wrapper/models/gross_floor_area_used_for_food_preparation.py +19 -0
  193. epa_pm_api_wrapper/models/gym_center_floor_area.py +15 -0
  194. epa_pm_api_wrapper/models/gymnasium_floor_area.py +15 -0
  195. epa_pm_api_wrapper/models/has_computer_lab.py +15 -0
  196. epa_pm_api_wrapper/models/has_dining_hall.py +15 -0
  197. epa_pm_api_wrapper/models/has_laboratory.py +15 -0
  198. epa_pm_api_wrapper/models/hey.py +11 -0
  199. epa_pm_api_wrapper/models/hey_type.py +29 -0
  200. epa_pm_api_wrapper/models/hey_type_meter.py +35 -0
  201. epa_pm_api_wrapper/models/hey_type_meter_meter_data.py +22 -0
  202. epa_pm_api_wrapper/models/hey_type_property_info.py +35 -0
  203. epa_pm_api_wrapper/models/hierarchy.py +16 -0
  204. epa_pm_api_wrapper/models/hierarchy_type.py +84 -0
  205. epa_pm_api_wrapper/models/highest_award_level.py +17 -0
  206. epa_pm_api_wrapper/models/highest_award_level_type.py +20 -0
  207. epa_pm_api_wrapper/models/highest_award_level_type_value.py +11 -0
  208. epa_pm_api_wrapper/models/hospital.py +22 -0
  209. epa_pm_api_wrapper/models/hospital_type.py +35 -0
  210. epa_pm_api_wrapper/models/hospital_type_use_details.py +132 -0
  211. epa_pm_api_wrapper/models/hotel.py +17 -0
  212. epa_pm_api_wrapper/models/hotel_type.py +41 -0
  213. epa_pm_api_wrapper/models/hotel_type_use_details.py +140 -0
  214. epa_pm_api_wrapper/models/hours_per_day_guests_onsite.py +16 -0
  215. epa_pm_api_wrapper/models/hours_per_day_guests_onsite_type.py +22 -0
  216. epa_pm_api_wrapper/models/hours_per_day_guests_onsite_type_value.py +9 -0
  217. epa_pm_api_wrapper/models/ice_curling_rink.py +27 -0
  218. epa_pm_api_wrapper/models/ice_curling_rink_type.py +35 -0
  219. epa_pm_api_wrapper/models/ice_curling_rink_type_use_details.py +78 -0
  220. epa_pm_api_wrapper/models/ice_events.py +15 -0
  221. epa_pm_api_wrapper/models/individual_meter.py +86 -0
  222. epa_pm_api_wrapper/models/indoor_arena.py +17 -0
  223. epa_pm_api_wrapper/models/indoor_arena_type.py +35 -0
  224. epa_pm_api_wrapper/models/indoor_arena_type_use_details.py +104 -0
  225. epa_pm_api_wrapper/models/international_weather_station_list.py +26 -0
  226. epa_pm_api_wrapper/models/irrigation_area_type.py +28 -0
  227. epa_pm_api_wrapper/models/irrigation_area_type_base.py +30 -0
  228. epa_pm_api_wrapper/models/irrigation_area_units_type.py +10 -0
  229. epa_pm_api_wrapper/models/is_high_school.py +16 -0
  230. epa_pm_api_wrapper/models/is_tertiary_care.py +17 -0
  231. epa_pm_api_wrapper/models/it_energy_configuration_type.py +20 -0
  232. epa_pm_api_wrapper/models/it_energy_configuration_type_value.py +14 -0
  233. epa_pm_api_wrapper/models/it_energy_meter_configuration.py +16 -0
  234. epa_pm_api_wrapper/models/k12_school.py +16 -0
  235. epa_pm_api_wrapper/models/k12_school_type.py +35 -0
  236. epa_pm_api_wrapper/models/k12_school_type_use_details.py +126 -0
  237. epa_pm_api_wrapper/models/laboratory.py +17 -0
  238. epa_pm_api_wrapper/models/laundry_facility.py +16 -0
  239. epa_pm_api_wrapper/models/length_of_all_commercial_kitchen_hoods.py +19 -0
  240. epa_pm_api_wrapper/models/length_of_all_open_closed_refrigeration_units.py +21 -0
  241. epa_pm_api_wrapper/models/length_of_use_detail_type.py +26 -0
  242. epa_pm_api_wrapper/models/length_units_type.py +8 -0
  243. epa_pm_api_wrapper/models/library.py +17 -0
  244. epa_pm_api_wrapper/models/library_type.py +35 -0
  245. epa_pm_api_wrapper/models/library_type_use_details.py +58 -0
  246. epa_pm_api_wrapper/models/license.py +60 -0
  247. epa_pm_api_wrapper/models/license_list.py +19 -0
  248. epa_pm_api_wrapper/models/licensed_bed_capacity.py +19 -0
  249. epa_pm_api_wrapper/models/lifestyle_center.py +18 -0
  250. epa_pm_api_wrapper/models/link_type.py +52 -0
  251. epa_pm_api_wrapper/models/links_type.py +19 -0
  252. epa_pm_api_wrapper/models/log.py +11 -0
  253. epa_pm_api_wrapper/models/log_type.py +79 -0
  254. epa_pm_api_wrapper/models/mailing_center_post_office.py +16 -0
  255. epa_pm_api_wrapper/models/mailing_center_post_office_type.py +37 -0
  256. epa_pm_api_wrapper/models/mailing_center_post_office_type_use_details.py +74 -0
  257. epa_pm_api_wrapper/models/manufacturing_industrial_plant.py +17 -0
  258. epa_pm_api_wrapper/models/manufacturing_industrial_plant_type.py +37 -0
  259. epa_pm_api_wrapper/models/manufacturing_industrial_plant_type_use_details.py +49 -0
  260. epa_pm_api_wrapper/models/mapping.py +11 -0
  261. epa_pm_api_wrapper/models/mapping_type.py +23 -0
  262. epa_pm_api_wrapper/models/maximum_number_of_floors.py +15 -0
  263. epa_pm_api_wrapper/models/maximum_resident_capacity.py +15 -0
  264. epa_pm_api_wrapper/models/medical_office.py +16 -0
  265. epa_pm_api_wrapper/models/medical_office_type.py +35 -0
  266. epa_pm_api_wrapper/models/medical_office_type_use_details.py +82 -0
  267. epa_pm_api_wrapper/models/meter.py +11 -0
  268. epa_pm_api_wrapper/models/meter_category_type.py +9 -0
  269. epa_pm_api_wrapper/models/meter_consumption.py +15 -0
  270. epa_pm_api_wrapper/models/meter_consumption_type.py +110 -0
  271. epa_pm_api_wrapper/models/meter_data.py +11 -0
  272. epa_pm_api_wrapper/models/meter_data_type.py +41 -0
  273. epa_pm_api_wrapper/models/meter_delivery.py +11 -0
  274. epa_pm_api_wrapper/models/meter_delivery_type.py +68 -0
  275. epa_pm_api_wrapper/models/meter_list_type.py +23 -0
  276. epa_pm_api_wrapper/models/meter_property_association_list.py +18 -0
  277. epa_pm_api_wrapper/models/meter_property_association_list_type.py +38 -0
  278. epa_pm_api_wrapper/models/meter_property_use_association_list.py +16 -0
  279. epa_pm_api_wrapper/models/meter_type.py +131 -0
  280. epa_pm_api_wrapper/models/meter_type_unit_of_measure.py +40 -0
  281. epa_pm_api_wrapper/models/metric.py +71 -0
  282. epa_pm_api_wrapper/models/months_in_use.py +15 -0
  283. epa_pm_api_wrapper/models/months_in_use_type.py +21 -0
  284. epa_pm_api_wrapper/models/months_main_indoor_ice_rink_in_use.py +15 -0
  285. epa_pm_api_wrapper/models/months_school_in_use_type.py +21 -0
  286. epa_pm_api_wrapper/models/movie_theater.py +15 -0
  287. epa_pm_api_wrapper/models/multifamily_housing.py +16 -0
  288. epa_pm_api_wrapper/models/multifamily_housing_type.py +37 -0
  289. epa_pm_api_wrapper/models/multifamily_housing_type_use_details.py +124 -0
  290. epa_pm_api_wrapper/models/museum.py +26 -0
  291. epa_pm_api_wrapper/models/museum_type.py +35 -0
  292. epa_pm_api_wrapper/models/museum_type_use_details.py +78 -0
  293. epa_pm_api_wrapper/models/non_refrigerated_warehouse.py +16 -0
  294. epa_pm_api_wrapper/models/non_refrigerated_warehouse_type.py +37 -0
  295. epa_pm_api_wrapper/models/non_refrigerated_warehouse_type_use_details.py +76 -0
  296. epa_pm_api_wrapper/models/notification_list.py +16 -0
  297. epa_pm_api_wrapper/models/notification_list_type.py +19 -0
  298. epa_pm_api_wrapper/models/notification_type.py +106 -0
  299. epa_pm_api_wrapper/models/number_of_annual_emergency_incidents.py +17 -0
  300. epa_pm_api_wrapper/models/number_of_bedrooms.py +15 -0
  301. epa_pm_api_wrapper/models/number_of_cash_registers.py +15 -0
  302. epa_pm_api_wrapper/models/number_of_commercial_refrigeration_units.py +16 -0
  303. epa_pm_api_wrapper/models/number_of_commercial_washing_machines.py +16 -0
  304. epa_pm_api_wrapper/models/number_of_computers.py +15 -0
  305. epa_pm_api_wrapper/models/number_of_concert_show_events_per_year.py +15 -0
  306. epa_pm_api_wrapper/models/number_of_cooking_equipment_units.py +15 -0
  307. epa_pm_api_wrapper/models/number_of_curling_sheets.py +16 -0
  308. epa_pm_api_wrapper/models/number_of_dc_fast_ev_charging_stations.py +15 -0
  309. epa_pm_api_wrapper/models/number_of_emergency_vehicles.py +16 -0
  310. epa_pm_api_wrapper/models/number_of_fteworkers.py +16 -0
  311. epa_pm_api_wrapper/models/number_of_full_time_students_enrolled_january_to_april.py +16 -0
  312. epa_pm_api_wrapper/models/number_of_full_time_students_enrolled_may_to_august.py +16 -0
  313. epa_pm_api_wrapper/models/number_of_full_time_students_enrolled_september_to_december.py +16 -0
  314. epa_pm_api_wrapper/models/number_of_guest_meals_served_per_year.py +15 -0
  315. epa_pm_api_wrapper/models/number_of_hotel_rooms.py +15 -0
  316. epa_pm_api_wrapper/models/number_of_indoor_ice_rinks.py +18 -0
  317. epa_pm_api_wrapper/models/number_of_laundry_hookups_in_all_units.py +16 -0
  318. epa_pm_api_wrapper/models/number_of_laundry_hookups_in_common_area.py +16 -0
  319. epa_pm_api_wrapper/models/number_of_letters_packages_per_year.py +17 -0
  320. epa_pm_api_wrapper/models/number_of_level_one_ev_charging_stations.py +15 -0
  321. epa_pm_api_wrapper/models/number_of_level_two_ev_charging_stations.py +15 -0
  322. epa_pm_api_wrapper/models/number_of_mri_machines.py +15 -0
  323. epa_pm_api_wrapper/models/number_of_open_closed_refrigeration_units.py +27 -0
  324. epa_pm_api_wrapper/models/number_of_paint_bays.py +16 -0
  325. epa_pm_api_wrapper/models/number_of_people.py +15 -0
  326. epa_pm_api_wrapper/models/number_of_repair_bays.py +16 -0
  327. epa_pm_api_wrapper/models/number_of_residential_lift_systems.py +15 -0
  328. epa_pm_api_wrapper/models/number_of_residential_living_units.py +20 -0
  329. epa_pm_api_wrapper/models/number_of_residential_living_units_high_rise_setting.py +18 -0
  330. epa_pm_api_wrapper/models/number_of_residential_living_units_low_rise_setting.py +18 -0
  331. epa_pm_api_wrapper/models/number_of_residential_living_units_mid_rise_setting.py +18 -0
  332. epa_pm_api_wrapper/models/number_of_residential_washing_machines.py +15 -0
  333. epa_pm_api_wrapper/models/number_of_rooms.py +16 -0
  334. epa_pm_api_wrapper/models/number_of_special_other_events_per_year.py +16 -0
  335. epa_pm_api_wrapper/models/number_of_sporting_events_per_year.py +15 -0
  336. epa_pm_api_wrapper/models/number_of_staffed_beds.py +15 -0
  337. epa_pm_api_wrapper/models/number_of_sterilization_units.py +15 -0
  338. epa_pm_api_wrapper/models/number_of_surgical_operating_beds.py +16 -0
  339. epa_pm_api_wrapper/models/number_of_walk_in_refrigeration_units.py +16 -0
  340. epa_pm_api_wrapper/models/number_of_warming_heating_equipment_units.py +15 -0
  341. epa_pm_api_wrapper/models/number_of_weekdays_open.py +17 -0
  342. epa_pm_api_wrapper/models/number_of_weekdays_type.py +21 -0
  343. epa_pm_api_wrapper/models/number_of_weekly_ice_resurfacing_for_all_rinks.py +23 -0
  344. epa_pm_api_wrapper/models/number_of_weekly_ice_resurfacing_type.py +20 -0
  345. epa_pm_api_wrapper/models/number_of_workers.py +16 -0
  346. epa_pm_api_wrapper/models/nutrient_removal.py +16 -0
  347. epa_pm_api_wrapper/models/occupancy_type.py +27 -0
  348. epa_pm_api_wrapper/models/office.py +16 -0
  349. epa_pm_api_wrapper/models/office_type.py +35 -0
  350. epa_pm_api_wrapper/models/office_type_use_details.py +58 -0
  351. epa_pm_api_wrapper/models/offsite_green_power_purchase.py +11 -0
  352. epa_pm_api_wrapper/models/offsite_green_power_purchase_type.py +224 -0
  353. epa_pm_api_wrapper/models/offsite_green_power_purchase_type_amount_purchased.py +31 -0
  354. epa_pm_api_wrapper/models/offsite_green_power_purchase_type_amount_purchased_percentage.py +46 -0
  355. epa_pm_api_wrapper/models/offsite_green_power_purchase_type_amount_purchased_percentage_meters.py +21 -0
  356. epa_pm_api_wrapper/models/offsite_green_power_purchase_type_amount_purchased_quantity.py +31 -0
  357. epa_pm_api_wrapper/models/offsite_green_power_purchase_type_cost.py +31 -0
  358. epa_pm_api_wrapper/models/offsite_green_power_purchase_type_fuel_sources.py +22 -0
  359. epa_pm_api_wrapper/models/offsite_green_power_purchase_type_fuel_sources_fuel_source.py +35 -0
  360. epa_pm_api_wrapper/models/offsite_green_power_purchase_type_rated_capacity.py +31 -0
  361. epa_pm_api_wrapper/models/offsite_green_power_purchase_type_renewable_generation_technologies.py +21 -0
  362. epa_pm_api_wrapper/models/on_site_laundry_facility.py +15 -0
  363. epa_pm_api_wrapper/models/onsite_laundry_type.py +20 -0
  364. epa_pm_api_wrapper/models/onsite_laundry_type_value.py +10 -0
  365. epa_pm_api_wrapper/models/onsite_renewable_detail.py +11 -0
  366. epa_pm_api_wrapper/models/onsite_renewable_detail_type.py +60 -0
  367. epa_pm_api_wrapper/models/onsite_renewable_details.py +28 -0
  368. epa_pm_api_wrapper/models/onsite_renewable_optional_info.py +13 -0
  369. epa_pm_api_wrapper/models/onsite_renewable_optional_info_type.py +134 -0
  370. epa_pm_api_wrapper/models/onsite_renewable_optional_info_type_rated_capacity.py +31 -0
  371. epa_pm_api_wrapper/models/onsite_renewable_optional_info_type_renewable_generation_technologies.py +21 -0
  372. epa_pm_api_wrapper/models/onsite_usage_detail_type.py +70 -0
  373. epa_pm_api_wrapper/models/open_footage.py +15 -0
  374. epa_pm_api_wrapper/models/open_on_weekends.py +16 -0
  375. epa_pm_api_wrapper/models/optional_floor_area_type.py +19 -0
  376. epa_pm_api_wrapper/models/organization_type.py +77 -0
  377. epa_pm_api_wrapper/models/other.py +16 -0
  378. epa_pm_api_wrapper/models/other_education.py +18 -0
  379. epa_pm_api_wrapper/models/other_entertainment_public_assembly.py +17 -0
  380. epa_pm_api_wrapper/models/other_lodging_residential.py +19 -0
  381. epa_pm_api_wrapper/models/other_mall.py +17 -0
  382. epa_pm_api_wrapper/models/other_public_services.py +21 -0
  383. epa_pm_api_wrapper/models/other_recreation.py +16 -0
  384. epa_pm_api_wrapper/models/other_restaurant_bar.py +17 -0
  385. epa_pm_api_wrapper/models/other_services.py +16 -0
  386. epa_pm_api_wrapper/models/other_speciality_hospital.py +17 -0
  387. epa_pm_api_wrapper/models/other_stadium.py +16 -0
  388. epa_pm_api_wrapper/models/other_stadium_type.py +35 -0
  389. epa_pm_api_wrapper/models/other_stadium_type_use_details.py +104 -0
  390. epa_pm_api_wrapper/models/other_technology_science.py +16 -0
  391. epa_pm_api_wrapper/models/other_type.py +35 -0
  392. epa_pm_api_wrapper/models/other_type_use_details.py +42 -0
  393. epa_pm_api_wrapper/models/other_utility.py +16 -0
  394. epa_pm_api_wrapper/models/outpatient_rehabilitation_physical_therapy.py +16 -0
  395. epa_pm_api_wrapper/models/owned_by.py +16 -0
  396. epa_pm_api_wrapper/models/owned_by_type.py +20 -0
  397. epa_pm_api_wrapper/models/owned_by_type_value.py +9 -0
  398. epa_pm_api_wrapper/models/parking.py +15 -0
  399. epa_pm_api_wrapper/models/parking_type.py +35 -0
  400. epa_pm_api_wrapper/models/parking_type_use_details.py +40 -0
  401. epa_pm_api_wrapper/models/partially_enclosed_footage.py +16 -0
  402. epa_pm_api_wrapper/models/ped.py +26 -0
  403. epa_pm_api_wrapper/models/pending_accounts_type.py +58 -0
  404. epa_pm_api_wrapper/models/pending_list.py +15 -0
  405. epa_pm_api_wrapper/models/pending_list_type.py +53 -0
  406. epa_pm_api_wrapper/models/pending_meters_type.py +104 -0
  407. epa_pm_api_wrapper/models/pending_properties_type.py +77 -0
  408. epa_pm_api_wrapper/models/percent_cooled.py +16 -0
  409. epa_pm_api_wrapper/models/percent_cooled_type.py +20 -0
  410. epa_pm_api_wrapper/models/percent_cooled_type_value.py +17 -0
  411. epa_pm_api_wrapper/models/percent_heated.py +16 -0
  412. epa_pm_api_wrapper/models/percent_heated_type.py +20 -0
  413. epa_pm_api_wrapper/models/percent_heated_type_value.py +17 -0
  414. epa_pm_api_wrapper/models/percent_of_gross_floor_area_that_is_common_space_only.py +16 -0
  415. epa_pm_api_wrapper/models/percent_of_lab_floor_area.py +16 -0
  416. epa_pm_api_wrapper/models/percent_office_cooled.py +11 -0
  417. epa_pm_api_wrapper/models/percent_office_cooled_type.py +20 -0
  418. epa_pm_api_wrapper/models/percent_office_cooled_type_value.py +9 -0
  419. epa_pm_api_wrapper/models/percent_office_heated.py +11 -0
  420. epa_pm_api_wrapper/models/percent_office_heated_type.py +20 -0
  421. epa_pm_api_wrapper/models/percent_office_heated_type_value.py +9 -0
  422. epa_pm_api_wrapper/models/percent_used_for_cold_storage.py +18 -0
  423. epa_pm_api_wrapper/models/performance_target_type.py +42 -0
  424. epa_pm_api_wrapper/models/performance_target_type_target_metric.py +10 -0
  425. epa_pm_api_wrapper/models/performance_target_type_target_value.py +107 -0
  426. epa_pm_api_wrapper/models/performing_arts.py +15 -0
  427. epa_pm_api_wrapper/models/period_type.py +8 -0
  428. epa_pm_api_wrapper/models/personal_services.py +17 -0
  429. epa_pm_api_wrapper/models/pgp.py +56 -0
  430. epa_pm_api_wrapper/models/pgp_list.py +18 -0
  431. epa_pm_api_wrapper/models/plant_data_type.py +28 -0
  432. epa_pm_api_wrapper/models/plant_data_type_value.py +71 -0
  433. epa_pm_api_wrapper/models/plant_design_flow_rate.py +16 -0
  434. epa_pm_api_wrapper/models/plant_design_flow_rate_type.py +22 -0
  435. epa_pm_api_wrapper/models/plant_design_flow_rate_units_type.py +8 -0
  436. epa_pm_api_wrapper/models/plant_type.py +17 -0
  437. epa_pm_api_wrapper/models/police_station.py +16 -0
  438. epa_pm_api_wrapper/models/pool_location.py +15 -0
  439. epa_pm_api_wrapper/models/pool_size.py +16 -0
  440. epa_pm_api_wrapper/models/pool_size_type.py +20 -0
  441. epa_pm_api_wrapper/models/pool_size_type_value.py +9 -0
  442. epa_pm_api_wrapper/models/pool_type.py +20 -0
  443. epa_pm_api_wrapper/models/pool_type_value.py +8 -0
  444. epa_pm_api_wrapper/models/precision_controls_for_temperature_and_humidity.py +16 -0
  445. epa_pm_api_wrapper/models/preschool_daycare.py +17 -0
  446. epa_pm_api_wrapper/models/preschool_daycare_type.py +35 -0
  447. epa_pm_api_wrapper/models/preschool_daycare_type_use_details.py +68 -0
  448. epa_pm_api_wrapper/models/primary_business_type.py +33 -0
  449. epa_pm_api_wrapper/models/primary_function_type.py +95 -0
  450. epa_pm_api_wrapper/models/prison.py +17 -0
  451. epa_pm_api_wrapper/models/professional_designation_list.py +23 -0
  452. epa_pm_api_wrapper/models/professional_designation_list_professional_designation.py +41 -0
  453. epa_pm_api_wrapper/models/property.py +11 -0
  454. epa_pm_api_wrapper/models/property_design_type.py +66 -0
  455. epa_pm_api_wrapper/models/property_metrics.py +15 -0
  456. epa_pm_api_wrapper/models/property_metrics_list.py +19 -0
  457. epa_pm_api_wrapper/models/property_metrics_type.py +58 -0
  458. epa_pm_api_wrapper/models/property_representation.py +59 -0
  459. epa_pm_api_wrapper/models/property_representation_property_representation_type.py +27 -0
  460. epa_pm_api_wrapper/models/property_type.py +192 -0
  461. epa_pm_api_wrapper/models/property_use.py +22 -0
  462. epa_pm_api_wrapper/models/race_track.py +16 -0
  463. epa_pm_api_wrapper/models/rated_capacity_uom_type.py +8 -0
  464. epa_pm_api_wrapper/models/rec_ownership_enum.py +10 -0
  465. epa_pm_api_wrapper/models/refrigerated_warehouse.py +17 -0
  466. epa_pm_api_wrapper/models/refrigerated_warehouse_type.py +37 -0
  467. epa_pm_api_wrapper/models/refrigerated_warehouse_type_use_details.py +66 -0
  468. epa_pm_api_wrapper/models/renewable_generation_technology_enum.py +11 -0
  469. epa_pm_api_wrapper/models/report.py +72 -0
  470. epa_pm_api_wrapper/models/report_error.py +53 -0
  471. epa_pm_api_wrapper/models/report_error_missing_metrics.py +21 -0
  472. epa_pm_api_wrapper/models/report_error_missing_metrics_property_missing_metric.py +43 -0
  473. epa_pm_api_wrapper/models/report_error_missing_metrics_property_missing_metric_metric.py +33 -0
  474. epa_pm_api_wrapper/models/report_metric_values_ws.py +57 -0
  475. epa_pm_api_wrapper/models/report_metrics.py +26 -0
  476. epa_pm_api_wrapper/models/report_metrics_group.py +36 -0
  477. epa_pm_api_wrapper/models/report_metrics_group_metrics.py +24 -0
  478. epa_pm_api_wrapper/models/report_metrics_group_metrics_metric.py +62 -0
  479. epa_pm_api_wrapper/models/report_properties.py +20 -0
  480. epa_pm_api_wrapper/models/report_status.py +11 -0
  481. epa_pm_api_wrapper/models/report_status_def.py +62 -0
  482. epa_pm_api_wrapper/models/report_status_type.py +33 -0
  483. epa_pm_api_wrapper/models/report_template.py +11 -0
  484. epa_pm_api_wrapper/models/report_template_type.py +63 -0
  485. epa_pm_api_wrapper/models/report_template_type_metrics.py +21 -0
  486. epa_pm_api_wrapper/models/report_type.py +17 -0
  487. epa_pm_api_wrapper/models/reporting_interval_type.py +15 -0
  488. epa_pm_api_wrapper/models/residence_hall_dormitory.py +16 -0
  489. epa_pm_api_wrapper/models/residence_hall_dormitory_type.py +37 -0
  490. epa_pm_api_wrapper/models/residence_hall_dormitory_type_use_details.py +58 -0
  491. epa_pm_api_wrapper/models/resident_population.py +16 -0
  492. epa_pm_api_wrapper/models/resident_population_type.py +20 -0
  493. epa_pm_api_wrapper/models/resident_population_type_value.py +12 -0
  494. epa_pm_api_wrapper/models/residential_care_facility.py +16 -0
  495. epa_pm_api_wrapper/models/residential_care_facility_type.py +37 -0
  496. epa_pm_api_wrapper/models/residential_care_facility_type_use_details.py +120 -0
  497. epa_pm_api_wrapper/models/response.py +11 -0
  498. epa_pm_api_wrapper/models/response_status.py +36 -0
  499. epa_pm_api_wrapper/models/response_status_errors.py +19 -0
  500. epa_pm_api_wrapper/models/response_type.py +59 -0
  501. epa_pm_api_wrapper/models/restaurant.py +20 -0
  502. epa_pm_api_wrapper/models/restaurant_type.py +35 -0
  503. epa_pm_api_wrapper/models/restaurant_type_use_details.py +84 -0
  504. epa_pm_api_wrapper/models/retail.py +17 -0
  505. epa_pm_api_wrapper/models/retail_type.py +35 -0
  506. epa_pm_api_wrapper/models/retail_type_use_details.py +130 -0
  507. epa_pm_api_wrapper/models/roller_rink.py +16 -0
  508. epa_pm_api_wrapper/models/school_district.py +15 -0
  509. epa_pm_api_wrapper/models/search_result_type.py +23 -0
  510. epa_pm_api_wrapper/models/search_results.py +15 -0
  511. epa_pm_api_wrapper/models/seating_capacity.py +16 -0
  512. epa_pm_api_wrapper/models/self_storage_facility.py +15 -0
  513. epa_pm_api_wrapper/models/self_storage_facility_type.py +37 -0
  514. epa_pm_api_wrapper/models/self_storage_facility_type_use_details.py +84 -0
  515. epa_pm_api_wrapper/models/send_data_response.py +43 -0
  516. epa_pm_api_wrapper/models/send_data_response_additional_email_addresses.py +17 -0
  517. epa_pm_api_wrapper/models/send_data_response_file_format.py +8 -0
  518. epa_pm_api_wrapper/models/senior_living_community.py +16 -0
  519. epa_pm_api_wrapper/models/senior_living_community_type.py +37 -0
  520. epa_pm_api_wrapper/models/senior_living_community_type_use_details.py +120 -0
  521. epa_pm_api_wrapper/models/share_level_type.py +12 -0
  522. epa_pm_api_wrapper/models/sharing_response.py +16 -0
  523. epa_pm_api_wrapper/models/sharing_response_type.py +34 -0
  524. epa_pm_api_wrapper/models/single_family_home.py +16 -0
  525. epa_pm_api_wrapper/models/single_family_home_type.py +35 -0
  526. epa_pm_api_wrapper/models/single_family_home_type_use_details.py +34 -0
  527. epa_pm_api_wrapper/models/single_store.py +15 -0
  528. epa_pm_api_wrapper/models/size_of_electronic_score_boards.py +15 -0
  529. epa_pm_api_wrapper/models/spectator_seating_capacity.py +16 -0
  530. epa_pm_api_wrapper/models/stadium_closed.py +17 -0
  531. epa_pm_api_wrapper/models/stadium_closed_type.py +35 -0
  532. epa_pm_api_wrapper/models/stadium_closed_type_use_details.py +104 -0
  533. epa_pm_api_wrapper/models/stadium_open.py +17 -0
  534. epa_pm_api_wrapper/models/stadium_open_type.py +35 -0
  535. epa_pm_api_wrapper/models/stadium_open_type_use_details.py +104 -0
  536. epa_pm_api_wrapper/models/state_code.py +159 -0
  537. epa_pm_api_wrapper/models/station.py +45 -0
  538. epa_pm_api_wrapper/models/status_type.py +8 -0
  539. epa_pm_api_wrapper/models/strip_mall.py +17 -0
  540. epa_pm_api_wrapper/models/student_seating_capacity.py +16 -0
  541. epa_pm_api_wrapper/models/supermarket.py +17 -0
  542. epa_pm_api_wrapper/models/supermarket_type.py +35 -0
  543. epa_pm_api_wrapper/models/supermarket_type_use_details.py +114 -0
  544. epa_pm_api_wrapper/models/supplemental_heating.py +15 -0
  545. epa_pm_api_wrapper/models/surgery_center_floor_area.py +16 -0
  546. epa_pm_api_wrapper/models/swimming_pool.py +15 -0
  547. epa_pm_api_wrapper/models/swimming_pool_type.py +35 -0
  548. epa_pm_api_wrapper/models/swimming_pool_type_use_details.py +34 -0
  549. epa_pm_api_wrapper/models/system_determined_string.py +7 -0
  550. epa_pm_api_wrapper/models/target_finder.py +11 -0
  551. epa_pm_api_wrapper/models/target_type_percentage_type.py +17 -0
  552. epa_pm_api_wrapper/models/target_type_percentage_values_type.py +107 -0
  553. epa_pm_api_wrapper/models/target_type_score_type.py +17 -0
  554. epa_pm_api_wrapper/models/target_type_score_values_type.py +106 -0
  555. epa_pm_api_wrapper/models/template_type.py +19 -0
  556. epa_pm_api_wrapper/models/template_type_value.py +15 -0
  557. epa_pm_api_wrapper/models/tenant_common_area_energy_type.py +21 -0
  558. epa_pm_api_wrapper/models/tenant_common_area_energy_use_information_type.py +31 -0
  559. epa_pm_api_wrapper/models/terminate_share_response_type.py +24 -0
  560. epa_pm_api_wrapper/models/terminate_sharing_response.py +16 -0
  561. epa_pm_api_wrapper/models/timeframe_type.py +103 -0
  562. epa_pm_api_wrapper/models/timeframe_type_baseline_period.py +18 -0
  563. epa_pm_api_wrapper/models/timeframe_type_compare_baseline_period.py +25 -0
  564. epa_pm_api_wrapper/models/timeframe_type_compare_current_period.py +25 -0
  565. epa_pm_api_wrapper/models/timeframe_type_current_period.py +18 -0
  566. epa_pm_api_wrapper/models/timeframe_type_current_vs_baseline.py +18 -0
  567. epa_pm_api_wrapper/models/timeframe_type_date_range.py +30 -0
  568. epa_pm_api_wrapper/models/timeframe_type_single_period.py +18 -0
  569. epa_pm_api_wrapper/models/timeframe_type_two_periods.py +24 -0
  570. epa_pm_api_wrapper/models/total_gross_floor_area.py +11 -0
  571. epa_pm_api_wrapper/models/total_ice_rink_surface_area_for_all_rinks.py +21 -0
  572. epa_pm_api_wrapper/models/transportation_terminal_station.py +16 -0
  573. epa_pm_api_wrapper/models/type_of_energy_star_partner.py +14 -0
  574. epa_pm_api_wrapper/models/type_of_meter.py +55 -0
  575. epa_pm_api_wrapper/models/type_of_waste_meter.py +122 -0
  576. epa_pm_api_wrapper/models/type_of_waste_meter_data_entry_method.py +18 -0
  577. epa_pm_api_wrapper/models/type_of_waste_meter_unit_of_measure.py +15 -0
  578. epa_pm_api_wrapper/models/un_auth_design_type.py +100 -0
  579. epa_pm_api_wrapper/models/un_auth_design_type_estimated_energy_list.py +17 -0
  580. epa_pm_api_wrapper/models/un_auth_design_type_property_uses.py +709 -0
  581. epa_pm_api_wrapper/models/un_auth_design_type_target.py +34 -0
  582. epa_pm_api_wrapper/models/ups_system_redundancy.py +16 -0
  583. epa_pm_api_wrapper/models/ups_system_redundancy_type.py +20 -0
  584. epa_pm_api_wrapper/models/ups_system_redundancy_type_value.py +12 -0
  585. epa_pm_api_wrapper/models/urgent_care_clinic_other_outpatient.py +17 -0
  586. epa_pm_api_wrapper/models/use_attribute_base.py +65 -0
  587. epa_pm_api_wrapper/models/use_attribute_base_default.py +9 -0
  588. epa_pm_api_wrapper/models/use_decimal_type.py +21 -0
  589. epa_pm_api_wrapper/models/use_details.py +1086 -0
  590. epa_pm_api_wrapper/models/use_integer_type.py +20 -0
  591. epa_pm_api_wrapper/models/use_string_type.py +19 -0
  592. epa_pm_api_wrapper/models/use_yes_no_type.py +20 -0
  593. epa_pm_api_wrapper/models/vehicle_dealership.py +16 -0
  594. epa_pm_api_wrapper/models/vehicle_dealership_type.py +37 -0
  595. epa_pm_api_wrapper/models/vehicle_dealership_type_use_details.py +84 -0
  596. epa_pm_api_wrapper/models/vehicle_repair_services.py +19 -0
  597. epa_pm_api_wrapper/models/vehicle_repair_services_type.py +37 -0
  598. epa_pm_api_wrapper/models/vehicle_repair_services_type_use_details.py +74 -0
  599. epa_pm_api_wrapper/models/verification.py +96 -0
  600. epa_pm_api_wrapper/models/veterinary_office.py +15 -0
  601. epa_pm_api_wrapper/models/vocational_school.py +16 -0
  602. epa_pm_api_wrapper/models/warning_type.py +29 -0
  603. epa_pm_api_wrapper/models/warnings_type.py +25 -0
  604. epa_pm_api_wrapper/models/waste_data.py +15 -0
  605. epa_pm_api_wrapper/models/waste_data_list.py +11 -0
  606. epa_pm_api_wrapper/models/waste_meter.py +11 -0
  607. epa_pm_api_wrapper/models/waste_meter_assoc_and_config_type.py +18 -0
  608. epa_pm_api_wrapper/models/waste_meter_data_type.py +32 -0
  609. epa_pm_api_wrapper/models/waste_meter_entry_type.py +113 -0
  610. epa_pm_api_wrapper/models/waste_meter_entry_type_average_percent_full.py +11 -0
  611. epa_pm_api_wrapper/models/waste_meter_type.py +81 -0
  612. epa_pm_api_wrapper/models/wastewater_treatment_plant.py +15 -0
  613. epa_pm_api_wrapper/models/wastewater_treatment_plant_type.py +37 -0
  614. epa_pm_api_wrapper/models/wastewater_treatment_plant_type_use_details.py +63 -0
  615. epa_pm_api_wrapper/models/water_meter_assoc_and_config_type.py +25 -0
  616. epa_pm_api_wrapper/models/weekly_building_occupied_hours.py +16 -0
  617. epa_pm_api_wrapper/models/weekly_operating_hours.py +19 -0
  618. epa_pm_api_wrapper/models/wholesale_club_supercenter.py +16 -0
  619. epa_pm_api_wrapper/models/wholesale_club_supercenter_type.py +37 -0
  620. epa_pm_api_wrapper/models/wholesale_club_supercenter_type_use_details.py +130 -0
  621. epa_pm_api_wrapper/models/worship_facility.py +19 -0
  622. epa_pm_api_wrapper/models/worship_facility_type.py +35 -0
  623. epa_pm_api_wrapper/models/worship_facility_type_use_details.py +102 -0
  624. epa_pm_api_wrapper/models/yes_no.py +8 -0
  625. epa_pm_api_wrapper/models/zoo.py +16 -0
  626. epa_pm_api_wrapper/py.typed +1 -0
  627. epa_pm_api_wrapper/resources/__init__.py +172 -0
  628. epa_pm_api_wrapper/resources/_base.py +22 -0
  629. epa_pm_api_wrapper/resources/account.py +37 -0
  630. epa_pm_api_wrapper/resources/association.py +145 -0
  631. epa_pm_api_wrapper/resources/building.py +89 -0
  632. epa_pm_api_wrapper/resources/consumption_data.py +142 -0
  633. epa_pm_api_wrapper/resources/custom_metric.py +91 -0
  634. epa_pm_api_wrapper/resources/customer.py +45 -0
  635. epa_pm_api_wrapper/resources/data_exchange.py +111 -0
  636. epa_pm_api_wrapper/resources/green_power.py +237 -0
  637. epa_pm_api_wrapper/resources/hey.py +22 -0
  638. epa_pm_api_wrapper/resources/hierarchy.py +59 -0
  639. epa_pm_api_wrapper/resources/identifier.py +92 -0
  640. epa_pm_api_wrapper/resources/meter.py +277 -0
  641. epa_pm_api_wrapper/resources/metrics.py +185 -0
  642. epa_pm_api_wrapper/resources/property.py +450 -0
  643. epa_pm_api_wrapper/resources/property_use.py +277 -0
  644. epa_pm_api_wrapper/resources/report.py +169 -0
  645. epa_pm_api_wrapper/resources/share.py +139 -0
  646. epa_pm_api_wrapper/resources/target_finder.py +34 -0
  647. epa_pm_api_wrapper/resources/verification.py +201 -0
  648. epa_pm_api_wrapper/resources/waste_data.py +124 -0
  649. epa_pm_api_wrapper/retry.py +219 -0
  650. epa_pm_api_wrapper-0.3.0.dist-info/METADATA +137 -0
  651. epa_pm_api_wrapper-0.3.0.dist-info/RECORD +654 -0
  652. epa_pm_api_wrapper-0.3.0.dist-info/WHEEL +4 -0
  653. epa_pm_api_wrapper-0.3.0.dist-info/entry_points.txt +2 -0
  654. 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)