Source code for nrgpy.cloud_api.sites

try:
    from nrgpy import logger
except ImportError:
    pass
from .auth import cloud_api, cloud_url_base
import pandas as pd
import requests


[docs]class CloudSites(cloud_api): """Find NRG Cloud sites associated with a user. Attributes ---------- client_id : str available in the NRG Cloud portal client_secret : str available in the NRG Cloud portal sites_list : list of dict sites_df : pandas dataframe Examples -------- >>> import nrgpy >>> client_id = 'go to https://cloud.nrgsystems.com for access' >>> client_secret = 'go to https://cloud.nrgsystems.com for access' >>> sites = nrgpy.CloudSites(client_id=client_id, client_secret=client_secret) >>> sites.sites_df siteId siteNumber siteDescription project loggerSerialNumber 0 33 6716 SunnyDog SunnyDog 820606716 1 213 1234 Suntastic South Suntastic 820601234 >>> sites.get_siteid(site_number=6716) 33 """ def __init__( self, client_id: str, client_secret: str, url_base: str = cloud_url_base ): """Initialize a cloud_sites object. Parameters ---------- client_id : str available in the NRG Cloud portal client_secret : str available in the NRG Cloud portal """ super().__init__(client_id, client_secret, url_base) self.get_sites()
[docs] def get_sites(self) -> None: """Retrieve list of sites user has access to.""" self.resp = requests.get(url=self.sites_url, headers=self.headers) try: self.sites_list = self.resp.json()["sites"] logger.info(f"{len(self.sites_list)} sites found") self.sites_df = pd.DataFrame(self.sites_list) except KeyError: logger.exception(f"unable to get sites for {self.client_id[:10]}") logger.debug(self.resp.text)
[docs] def get_siteid(self, site_number: str = "", logger_sn: str = "") -> None: """Get NRG Cloud site ID that corresponds to site number and/or logger SN Parameters ---------- site_number : int site number logger_sn : int serial number of logger (beginning with 8206) Returns ------- int corresponding site ID """ if site_number and logger_sn: matching_sites = [ site_dict for site_dict in self.sites_list if site_dict["siteNumber"] == site_number and site_dict["loggerSerialNumber"] == logger_sn ] if len(matching_sites) == 1: return matching_sites[0]["siteId"] else: logger.error( f"unable to get site matching site number {site_number} or logger serial {logger_sn}" #noqa E501 ) print( "No site matches this site number and logger serial number. " + "Confirm that you have entered the values correctly " + "and that you have access to this site." ) elif site_number: matching_sites = [ site_dict for site_dict in self.sites_list if site_dict["siteNumber"] == site_number ] if len(matching_sites) > 1: logger.error(f"more than 1 site matching site number {site_number}") print( "There is more than one site with that site number. " + "Please use the logger serial number." ) return None elif len(matching_sites) == 1: logger.info( f"found match for site number {site_number}: siteId {matching_sites[0]['siteId']}" #noqa E501 ) return matching_sites[0]["siteId"] else: logger.error(f"no site matches site number {site_number}") print( "No site matches this site number. " + "Confirm that you have entered the value correctly " + "and that you have access to this site." ) elif logger_sn: matching_sites = [ site_dict for site_dict in self.sites_list if site_dict["loggerSerialNumber"] == logger_sn ] if len(matching_sites) > 1: logger.error(f"more than 1 site matching serial number {logger_sn}") print( "There is more than one site with that logger serial number. " + "Please use the site number." ) return None elif len(matching_sites) == 1: logger.info( f"found match for serial number {logger_sn}: siteId {matching_sites[0]['siteId']}" #noqa E501 ) return matching_sites[0]["siteId"] else: logger.error(f"no site matches serial number {logger_sn}") print( "No site matches this logger serial number. " + "Confirm that you have entered the value correctly " + "and that you have access to this site." )
cloud_sites = CloudSites