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,277 @@
1
+ """Property use resource — `/propertyUse`, `/useDetails`, and `/customUse` endpoints.
2
+
3
+ Sub-namespaces:
4
+
5
+ - ``client.property_use.use_details`` for use-detail revisions
6
+ (``/propertyUse/{id}/useDetails``, ``/useDetails/{id}``, and the revision listing)
7
+ - ``client.property_use.custom_use`` for property-level user-defined details
8
+ (``/customUse/{propertyId}/...``, ``/customUse/details/{id}``)
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ from typing import TYPE_CHECKING, cast
14
+
15
+ from epa_pm_api_wrapper.models import (
16
+ CustomUse,
17
+ CustomUseDetailsType,
18
+ PropertyUse,
19
+ Response,
20
+ UseAttributeBase,
21
+ UseDetails,
22
+ )
23
+
24
+ from ._base import AsyncResource, Resource
25
+
26
+ if TYPE_CHECKING:
27
+ from epa_pm_api_wrapper.client import EpaPmAsyncClient, EpaPmClient
28
+
29
+
30
+ class UseDetailsResource(Resource):
31
+ """Use-detail revisions for a property use.
32
+
33
+ Each ``add_revision`` call creates a new dated revision; the list endpoint
34
+ returns the revision history within an optional date window.
35
+ """
36
+
37
+ def add_revision(self, property_use_id: int, data: UseDetails) -> Response:
38
+ """Add a new use-detail revision to a property use."""
39
+ return self._client._request(
40
+ "POST", f"propertyUse/{property_use_id}/useDetails", data=data, response_type=Response
41
+ )
42
+
43
+ def revisions(
44
+ self,
45
+ property_use_id: int,
46
+ current_as_of_start: str | None = None,
47
+ current_as_of_end: str | None = None,
48
+ ) -> Response:
49
+ """List historical revisions of use details for a property use within a date window."""
50
+ return self._client._request(
51
+ "GET",
52
+ f"propertyUse/{property_use_id}/useDetailsRevisions",
53
+ params={"currentAsOfStart": current_as_of_start, "currentAsOfEnd": current_as_of_end},
54
+ response_type=Response,
55
+ )
56
+
57
+ def get(self, use_details_id: int) -> UseAttributeBase:
58
+ """Get a single use-details record by ID.
59
+
60
+ The body is a single use-detail element (e.g. ``<numberOfComputers>``,
61
+ ``<totalGrossFloorArea>``); xsdata resolves the root element to the
62
+ matching concrete subtype. The declared return type is
63
+ :class:`UseAttributeBase` (the shared base) for typing convenience.
64
+ """
65
+ return cast(UseAttributeBase, self._client._request_polymorphic("GET", f"useDetails/{use_details_id}"))
66
+
67
+ def update(self, use_details_id: int, data: UseDetails) -> Response:
68
+ """Correct a single use-details record."""
69
+ return self._client._request("PUT", f"useDetails/{use_details_id}", data=data, response_type=Response)
70
+
71
+ def what_changed(self, customer_id: int, date: str) -> Response:
72
+ """List a connected customer's use-detail records modified on/after ``date``."""
73
+ return self._client._request(
74
+ "GET",
75
+ f"customer/{customer_id}/useDetails/whatChanged",
76
+ params={"date": date},
77
+ response_type=Response,
78
+ )
79
+
80
+
81
+ class CustomUseResource(Resource):
82
+ """User-defined property-use tracking attached to a property as a whole."""
83
+
84
+ def get(self, property_id: int) -> CustomUse:
85
+ """Get the custom-use record (if any) for a property."""
86
+ return self._client._request("GET", f"customUse/{property_id}", response_type=CustomUse)
87
+
88
+ def revisions(
89
+ self,
90
+ property_id: int,
91
+ current_as_of_start: str | None = None,
92
+ current_as_of_end: str | None = None,
93
+ ) -> Response:
94
+ """List the revision history for custom-use details on a property."""
95
+ return self._client._request(
96
+ "GET",
97
+ f"customUse/{property_id}/detailRevisions",
98
+ params={"currentAsOfStart": current_as_of_start, "currentAsOfEnd": current_as_of_end},
99
+ response_type=Response,
100
+ )
101
+
102
+ def add_revision(self, property_id: int, data: CustomUse) -> Response:
103
+ """Add a new revision of custom-use details to a property."""
104
+ return self._client._request("POST", f"customUse/{property_id}/details", data=data, response_type=Response)
105
+
106
+ def get_detail(self, detail_id: int) -> CustomUseDetailsType:
107
+ """Get a specific custom-use detail record.
108
+
109
+ Returns ``<customUseDetail1>`` or ``<customUseDetail2>``; xsdata
110
+ resolves the root element to the matching concrete subtype. Declared
111
+ as :class:`CustomUseDetailsType` (the shared base).
112
+ """
113
+ return cast(
114
+ CustomUseDetailsType,
115
+ self._client._request_polymorphic("GET", f"customUse/details/{detail_id}"),
116
+ )
117
+
118
+ def update_detail(self, detail_id: int, data: CustomUse) -> Response:
119
+ """Update a specific custom-use detail record."""
120
+ return self._client._request("PUT", f"customUse/details/{detail_id}", data=data, response_type=Response)
121
+
122
+ def delete_detail(self, detail_id: int) -> Response:
123
+ """Delete a specific custom-use detail record."""
124
+ return self._client._request("DELETE", f"customUse/details/{detail_id}", response_type=Response)
125
+
126
+
127
+ class PropertyUseResource(Resource):
128
+ def __init__(self, client: EpaPmClient) -> None:
129
+ super().__init__(client)
130
+ self.use_details = UseDetailsResource(client)
131
+ self.custom_use = CustomUseResource(client)
132
+
133
+ def list(self, property_id: int) -> Response:
134
+ """List property uses under a property."""
135
+ return self._client._request("GET", f"property/{property_id}/propertyUse/list", response_type=Response)
136
+
137
+ def create(self, property_id: int, data: PropertyUse) -> Response:
138
+ """Create a new property use under a property.
139
+
140
+ ``data`` is the concrete property-use subtype (Office, Hotel,
141
+ VehicleDealership, etc.). xsdata serializes the matching root element.
142
+ """
143
+ return self._client._request("POST", f"property/{property_id}/propertyUse", data=data, response_type=Response)
144
+
145
+ def what_changed(self, customer_id: int, date: str) -> Response:
146
+ """List property uses under a connected customer modified on/after the given date (YYYY-MM-DD)."""
147
+ return self._client._request(
148
+ "GET",
149
+ f"customer/{customer_id}/propertyUse/whatChanged",
150
+ params={"date": date},
151
+ response_type=Response,
152
+ )
153
+
154
+ def get(self, property_use_id: int) -> PropertyUse:
155
+ """Get details for a specific property use.
156
+
157
+ The API returns a use-specific element (e.g. ``<vehicleDealership>``,
158
+ ``<office>``, ``<hotel>``); xsdata resolves the root element to the
159
+ matching concrete subtype. The declared return type is
160
+ :class:`PropertyUse` for typing convenience.
161
+ """
162
+ return cast(PropertyUse, self._client._request_polymorphic("GET", f"propertyUse/{property_use_id}"))
163
+
164
+ def update(self, property_use_id: int, data: PropertyUse) -> Response:
165
+ """Update a property use's name."""
166
+ return self._client._request("PUT", f"propertyUse/{property_use_id}", data=data, response_type=Response)
167
+
168
+ def delete(self, property_use_id: int) -> Response:
169
+ """Delete a property use."""
170
+ return self._client._request("DELETE", f"propertyUse/{property_use_id}", response_type=Response)
171
+
172
+
173
+ class AsyncUseDetailsResource(AsyncResource):
174
+ async def add_revision(self, property_use_id: int, data: UseDetails) -> Response:
175
+ return await self._client._arequest(
176
+ "POST", f"propertyUse/{property_use_id}/useDetails", data=data, response_type=Response
177
+ )
178
+
179
+ async def revisions(
180
+ self,
181
+ property_use_id: int,
182
+ current_as_of_start: str | None = None,
183
+ current_as_of_end: str | None = None,
184
+ ) -> Response:
185
+ return await self._client._arequest(
186
+ "GET",
187
+ f"propertyUse/{property_use_id}/useDetailsRevisions",
188
+ params={"currentAsOfStart": current_as_of_start, "currentAsOfEnd": current_as_of_end},
189
+ response_type=Response,
190
+ )
191
+
192
+ async def get(self, use_details_id: int) -> UseAttributeBase:
193
+ return cast(
194
+ UseAttributeBase,
195
+ await self._client._arequest_polymorphic("GET", f"useDetails/{use_details_id}"),
196
+ )
197
+
198
+ async def update(self, use_details_id: int, data: UseDetails) -> Response:
199
+ return await self._client._arequest("PUT", f"useDetails/{use_details_id}", data=data, response_type=Response)
200
+
201
+ async def what_changed(self, customer_id: int, date: str) -> Response:
202
+ return await self._client._arequest(
203
+ "GET",
204
+ f"customer/{customer_id}/useDetails/whatChanged",
205
+ params={"date": date},
206
+ response_type=Response,
207
+ )
208
+
209
+
210
+ class AsyncCustomUseResource(AsyncResource):
211
+ async def get(self, property_id: int) -> CustomUse:
212
+ return await self._client._arequest("GET", f"customUse/{property_id}", response_type=CustomUse)
213
+
214
+ async def revisions(
215
+ self,
216
+ property_id: int,
217
+ current_as_of_start: str | None = None,
218
+ current_as_of_end: str | None = None,
219
+ ) -> Response:
220
+ return await self._client._arequest(
221
+ "GET",
222
+ f"customUse/{property_id}/detailRevisions",
223
+ params={"currentAsOfStart": current_as_of_start, "currentAsOfEnd": current_as_of_end},
224
+ response_type=Response,
225
+ )
226
+
227
+ async def add_revision(self, property_id: int, data: CustomUse) -> Response:
228
+ return await self._client._arequest(
229
+ "POST", f"customUse/{property_id}/details", data=data, response_type=Response
230
+ )
231
+
232
+ async def get_detail(self, detail_id: int) -> CustomUseDetailsType:
233
+ return cast(
234
+ CustomUseDetailsType,
235
+ await self._client._arequest_polymorphic("GET", f"customUse/details/{detail_id}"),
236
+ )
237
+
238
+ async def update_detail(self, detail_id: int, data: CustomUse) -> Response:
239
+ return await self._client._arequest("PUT", f"customUse/details/{detail_id}", data=data, response_type=Response)
240
+
241
+ async def delete_detail(self, detail_id: int) -> Response:
242
+ return await self._client._arequest("DELETE", f"customUse/details/{detail_id}", response_type=Response)
243
+
244
+
245
+ class AsyncPropertyUseResource(AsyncResource):
246
+ def __init__(self, client: EpaPmAsyncClient) -> None:
247
+ super().__init__(client)
248
+ self.use_details = AsyncUseDetailsResource(client)
249
+ self.custom_use = AsyncCustomUseResource(client)
250
+
251
+ async def list(self, property_id: int) -> Response:
252
+ return await self._client._arequest("GET", f"property/{property_id}/propertyUse/list", response_type=Response)
253
+
254
+ async def create(self, property_id: int, data: PropertyUse) -> Response:
255
+ return await self._client._arequest(
256
+ "POST", f"property/{property_id}/propertyUse", data=data, response_type=Response
257
+ )
258
+
259
+ async def what_changed(self, customer_id: int, date: str) -> Response:
260
+ return await self._client._arequest(
261
+ "GET",
262
+ f"customer/{customer_id}/propertyUse/whatChanged",
263
+ params={"date": date},
264
+ response_type=Response,
265
+ )
266
+
267
+ async def get(self, property_use_id: int) -> PropertyUse:
268
+ return cast(
269
+ PropertyUse,
270
+ await self._client._arequest_polymorphic("GET", f"propertyUse/{property_use_id}"),
271
+ )
272
+
273
+ async def update(self, property_use_id: int, data: PropertyUse) -> Response:
274
+ return await self._client._arequest("PUT", f"propertyUse/{property_use_id}", data=data, response_type=Response)
275
+
276
+ async def delete(self, property_use_id: int) -> Response:
277
+ return await self._client._arequest("DELETE", f"propertyUse/{property_use_id}", response_type=Response)
@@ -0,0 +1,169 @@
1
+ """Report resource — `/reports` and `/reports/templates` endpoints.
2
+
3
+ ``report.templates`` is a sub-namespace for template management; ``report``
4
+ itself covers the report instances and the metrics catalog.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from typing import TYPE_CHECKING
10
+
11
+ from epa_pm_api_wrapper.models import (
12
+ Report,
13
+ ReportMetrics,
14
+ ReportStatus,
15
+ ReportTemplate,
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 ReportTemplatesResource(Resource):
26
+ def list(self, template_type: str | None = None) -> Response:
27
+ """List report templates available to the authenticated account."""
28
+ return self._client._request("GET", "reports/templates", params={"type": template_type}, response_type=Response)
29
+
30
+ def get(self, template_id: int) -> ReportTemplate:
31
+ """Get a specific report template."""
32
+ return self._client._request("GET", f"reports/templates/{template_id}", response_type=ReportTemplate)
33
+
34
+ def create(self, template: ReportTemplate) -> Response:
35
+ """Create a new custom report template."""
36
+ return self._client._request("POST", "reports/templates", data=template, response_type=Response)
37
+
38
+ def update(self, template_id: int, template: ReportTemplate) -> Response:
39
+ """Update an existing custom report template."""
40
+ return self._client._request("PUT", f"reports/templates/{template_id}", data=template, response_type=Response)
41
+
42
+ def delete(self, template_id: int) -> Response:
43
+ """Delete a custom report template."""
44
+ return self._client._request("DELETE", f"reports/templates/{template_id}", response_type=Response)
45
+
46
+
47
+ class ReportResource(Resource):
48
+ def __init__(self, client: EpaPmClient) -> None:
49
+ super().__init__(client)
50
+ self.templates = ReportTemplatesResource(client)
51
+
52
+ def list(self, report_type: str | None = None) -> Response:
53
+ """List reports in the authenticated account."""
54
+ return self._client._request("GET", "reports", params={"type": report_type}, response_type=Response)
55
+
56
+ def get(self, report_id: int) -> Report:
57
+ """Get a specific report."""
58
+ return self._client._request("GET", f"reports/{report_id}", response_type=Report)
59
+
60
+ def update(self, report_id: int, report: Report) -> Response:
61
+ """Update an existing report."""
62
+ return self._client._request("PUT", f"reports/{report_id}", data=report, response_type=Response)
63
+
64
+ def generate(self, report_id: int) -> Response:
65
+ """Trigger generation of a report. Poll ``status`` for completion."""
66
+ return self._client._request("POST", f"reports/{report_id}/generate", response_type=Response)
67
+
68
+ def status(self, report_id: int) -> ReportStatus:
69
+ """Get the generation status of a report."""
70
+ return self._client._request("GET", f"reports/{report_id}/status", response_type=ReportStatus)
71
+
72
+ def download(self, report_id: int, report_format: str = "XML") -> bytes:
73
+ """Download a generated report's results as raw bytes.
74
+
75
+ ``report_format`` is the EPA-defined format string (e.g. ``"XML"``, ``"EXCEL"``).
76
+ The report must already have been generated successfully; otherwise this raises
77
+ ``EpaPmApiError``. The caller is responsible for interpreting the bytes
78
+ according to the requested format.
79
+ """
80
+ url = f"{self._client.base_url}/reports/{report_id}/download"
81
+ resp = self._client.client.request("GET", url, params={"type": report_format})
82
+ self._client._raise_for_response(resp)
83
+ return resp.content
84
+
85
+ def metrics(
86
+ self,
87
+ group_ids: str | None = None,
88
+ available_to_custom_metrics: bool | None = None,
89
+ ) -> ReportMetrics:
90
+ """List metrics available for inclusion in a report template.
91
+
92
+ ``group_ids`` is a comma-separated string of metric group IDs to filter by.
93
+ ``available_to_custom_metrics`` filters to metrics usable in custom metrics.
94
+ """
95
+ params = {
96
+ "groupIds": group_ids,
97
+ "availableToCustomMetrics": ("true" if available_to_custom_metrics else "false")
98
+ if available_to_custom_metrics is not None
99
+ else None,
100
+ }
101
+ return self._client._request("GET", "reports/metrics", params=params, response_type=ReportMetrics)
102
+
103
+
104
+ class AsyncReportTemplatesResource(AsyncResource):
105
+ async def list(self, template_type: str | None = None) -> Response:
106
+ return await self._client._arequest(
107
+ "GET", "reports/templates", params={"type": template_type}, response_type=Response
108
+ )
109
+
110
+ async def get(self, template_id: int) -> ReportTemplate:
111
+ return await self._client._arequest("GET", f"reports/templates/{template_id}", response_type=ReportTemplate)
112
+
113
+ async def create(self, template: ReportTemplate) -> Response:
114
+ return await self._client._arequest("POST", "reports/templates", data=template, response_type=Response)
115
+
116
+ async def update(self, template_id: int, template: ReportTemplate) -> Response:
117
+ return await self._client._arequest(
118
+ "PUT", f"reports/templates/{template_id}", data=template, response_type=Response
119
+ )
120
+
121
+ async def delete(self, template_id: int) -> Response:
122
+ return await self._client._arequest("DELETE", f"reports/templates/{template_id}", response_type=Response)
123
+
124
+
125
+ class AsyncReportResource(AsyncResource):
126
+ def __init__(self, client: EpaPmAsyncClient) -> None:
127
+ super().__init__(client)
128
+ self.templates = AsyncReportTemplatesResource(client)
129
+
130
+ async def list(self, report_type: str | None = None) -> Response:
131
+ return await self._client._arequest("GET", "reports", params={"type": report_type}, response_type=Response)
132
+
133
+ async def get(self, report_id: int) -> Report:
134
+ return await self._client._arequest("GET", f"reports/{report_id}", response_type=Report)
135
+
136
+ async def update(self, report_id: int, report: Report) -> Response:
137
+ return await self._client._arequest("PUT", f"reports/{report_id}", data=report, response_type=Response)
138
+
139
+ async def generate(self, report_id: int) -> Response:
140
+ return await self._client._arequest("POST", f"reports/{report_id}/generate", response_type=Response)
141
+
142
+ async def status(self, report_id: int) -> ReportStatus:
143
+ return await self._client._arequest("GET", f"reports/{report_id}/status", response_type=ReportStatus)
144
+
145
+ async def download(self, report_id: int, report_format: str = "XML") -> bytes:
146
+ """Download a generated report's results as raw bytes.
147
+
148
+ ``report_format`` is the EPA-defined format string (e.g. ``"XML"``, ``"EXCEL"``).
149
+ The report must already have been generated successfully; otherwise this raises
150
+ ``EpaPmApiError``. The caller is responsible for interpreting the bytes
151
+ according to the requested format.
152
+ """
153
+ url = f"{self._client.base_url}/reports/{report_id}/download"
154
+ resp = await self._client.client.request("GET", url, params={"type": report_format})
155
+ self._client._raise_for_response(resp)
156
+ return resp.content
157
+
158
+ async def metrics(
159
+ self,
160
+ group_ids: str | None = None,
161
+ available_to_custom_metrics: bool | None = None,
162
+ ) -> ReportMetrics:
163
+ params = {
164
+ "groupIds": group_ids,
165
+ "availableToCustomMetrics": ("true" if available_to_custom_metrics else "false")
166
+ if available_to_custom_metrics is not None
167
+ else None,
168
+ }
169
+ return await self._client._arequest("GET", "reports/metrics", params=params, response_type=ReportMetrics)
@@ -0,0 +1,139 @@
1
+ """Connection / share resource — `/connect`, `/share`, `/disconnect`,
2
+ `/unshare`, `/notification` endpoints.
3
+
4
+ Pending-list reads list inbound requests waiting for action; the response
5
+ methods (`respond_to_*`) accept or reject a specific pending request by
6
+ posting a ``SharingResponse`` body. Unshare/disconnect tear down existing
7
+ relationships.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from epa_pm_api_wrapper.models import (
13
+ NotificationList,
14
+ PendingList,
15
+ Response,
16
+ SharingResponse,
17
+ TerminateSharingResponse,
18
+ )
19
+
20
+ from ._base import AsyncResource, Resource
21
+
22
+
23
+ class ShareResource(Resource):
24
+ # ---- Pending lists ----
25
+
26
+ def pending_connections(self) -> PendingList:
27
+ """List pending customer connection requests."""
28
+ return self._client._request("GET", "connect/account/pending/list", response_type=PendingList)
29
+
30
+ def pending_property_shares(self) -> PendingList:
31
+ """List pending property share requests from connected customers."""
32
+ return self._client._request("GET", "share/property/pending/list", response_type=PendingList)
33
+
34
+ def pending_meter_shares(self) -> PendingList:
35
+ """List pending meter share requests from connected customers."""
36
+ return self._client._request("GET", "share/meter/pending/list", response_type=PendingList)
37
+
38
+ # ---- Responses to pending requests ----
39
+
40
+ def respond_to_connection(self, account_id: int, response: SharingResponse) -> Response:
41
+ """Accept or reject a pending connection request from a customer."""
42
+ return self._client._request("POST", f"connect/account/{account_id}", data=response, response_type=Response)
43
+
44
+ def respond_to_property_share(self, property_id: int, response: SharingResponse) -> Response:
45
+ """Accept or reject a pending property share request."""
46
+ return self._client._request("POST", f"share/property/{property_id}", data=response, response_type=Response)
47
+
48
+ def respond_to_meter_share(self, meter_id: int, response: SharingResponse) -> Response:
49
+ """Accept or reject a pending meter share request."""
50
+ return self._client._request("POST", f"share/meter/{meter_id}", data=response, response_type=Response)
51
+
52
+ # ---- Tearing down existing relationships ----
53
+
54
+ def disconnect(self, account_id: int, keep_shares: bool = False) -> Response:
55
+ """Terminate an existing connection.
56
+
57
+ ``keep_shares=False`` (the default) also removes property and meter shares.
58
+ """
59
+ return self._client._request(
60
+ "POST",
61
+ f"disconnect/account/{account_id}",
62
+ params={"keepShares": "true" if keep_shares else "false"},
63
+ response_type=Response,
64
+ )
65
+
66
+ def unshare_property(self, property_id: int, response: TerminateSharingResponse) -> Response:
67
+ """Remove an existing property share. Associated meter shares are also removed."""
68
+ return self._client._request(
69
+ "POST",
70
+ f"unshare/property/{property_id}",
71
+ data=response,
72
+ response_type=Response,
73
+ )
74
+
75
+ def unshare_meter(self, meter_id: int, response: TerminateSharingResponse) -> Response:
76
+ """Remove an existing meter share."""
77
+ return self._client._request("POST", f"unshare/meter/{meter_id}", data=response, response_type=Response)
78
+
79
+ # ---- Notifications about disconnect/unshare events ----
80
+
81
+ def notifications(self, clear: bool = False) -> NotificationList:
82
+ """List notifications for disconnect/unshare events.
83
+
84
+ Pass ``clear=True`` to mark them as read after retrieval.
85
+ """
86
+ return self._client._request(
87
+ "GET",
88
+ "notification/list",
89
+ params={"clear": "true" if clear else "false"},
90
+ response_type=NotificationList,
91
+ )
92
+
93
+
94
+ class AsyncShareResource(AsyncResource):
95
+ async def pending_connections(self) -> PendingList:
96
+ return await self._client._arequest("GET", "connect/account/pending/list", response_type=PendingList)
97
+
98
+ async def pending_property_shares(self) -> PendingList:
99
+ return await self._client._arequest("GET", "share/property/pending/list", response_type=PendingList)
100
+
101
+ async def pending_meter_shares(self) -> PendingList:
102
+ return await self._client._arequest("GET", "share/meter/pending/list", response_type=PendingList)
103
+
104
+ async def respond_to_connection(self, account_id: int, response: SharingResponse) -> Response:
105
+ return await self._client._arequest(
106
+ "POST", f"connect/account/{account_id}", data=response, response_type=Response
107
+ )
108
+
109
+ async def respond_to_property_share(self, property_id: int, response: SharingResponse) -> Response:
110
+ return await self._client._arequest(
111
+ "POST", f"share/property/{property_id}", data=response, response_type=Response
112
+ )
113
+
114
+ async def respond_to_meter_share(self, meter_id: int, response: SharingResponse) -> Response:
115
+ return await self._client._arequest("POST", f"share/meter/{meter_id}", data=response, response_type=Response)
116
+
117
+ async def disconnect(self, account_id: int, keep_shares: bool = False) -> Response:
118
+ return await self._client._arequest(
119
+ "POST",
120
+ f"disconnect/account/{account_id}",
121
+ params={"keepShares": "true" if keep_shares else "false"},
122
+ response_type=Response,
123
+ )
124
+
125
+ async def unshare_property(self, property_id: int, response: TerminateSharingResponse) -> Response:
126
+ return await self._client._arequest(
127
+ "POST", f"unshare/property/{property_id}", data=response, response_type=Response
128
+ )
129
+
130
+ async def unshare_meter(self, meter_id: int, response: TerminateSharingResponse) -> Response:
131
+ return await self._client._arequest("POST", f"unshare/meter/{meter_id}", data=response, response_type=Response)
132
+
133
+ async def notifications(self, clear: bool = False) -> NotificationList:
134
+ return await self._client._arequest(
135
+ "GET",
136
+ "notification/list",
137
+ params={"clear": "true" if clear else "false"},
138
+ response_type=NotificationList,
139
+ )
@@ -0,0 +1,34 @@
1
+ """Target Finder resource — `/targetFinder` endpoint.
2
+
3
+ Estimates annual energy metrics from a property design. Single endpoint:
4
+ ``POST /targetFinder?measurementSystem={EPA|EU}``.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from epa_pm_api_wrapper.models import PropertyMetrics, TargetFinder
10
+
11
+ from ._base import AsyncResource, Resource
12
+
13
+
14
+ class TargetFinderResource(Resource):
15
+ def evaluate(self, design: TargetFinder, measurement_system: str = "EPA") -> PropertyMetrics:
16
+ """Run Target Finder against a candidate design and return the resulting metrics."""
17
+ return self._client._request(
18
+ "POST",
19
+ "targetFinder",
20
+ data=design,
21
+ params={"measurementSystem": measurement_system},
22
+ response_type=PropertyMetrics,
23
+ )
24
+
25
+
26
+ class AsyncTargetFinderResource(AsyncResource):
27
+ async def evaluate(self, design: TargetFinder, measurement_system: str = "EPA") -> PropertyMetrics:
28
+ return await self._client._arequest(
29
+ "POST",
30
+ "targetFinder",
31
+ data=design,
32
+ params={"measurementSystem": measurement_system},
33
+ response_type=PropertyMetrics,
34
+ )