Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue/55 get sites details #63

Merged
merged 6 commits into from
Sep 13, 2023
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 11 additions & 1 deletion src/get_data.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
from nowcasting_datamodel.models.gsp import LocationSQL, GSPYieldSQL, GSPYield
from nowcasting_datamodel.models import MLModelSQL
from nowcasting_datamodel.models.metric import DatetimeIntervalSQL, MetricSQL, MetricValueSQL
from pvsite_datamodel.sqlmodels import UserSQL, SiteGroupSQL
from pvsite_datamodel.sqlmodels import UserSQL, SiteGroupSQL, SiteSQL
from pvsite_datamodel.read import get_site_group_by_name

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -126,3 +126,13 @@ def update_user_site_group(session: Session, email: str, site_group_name: str) -
site_group = get_site_group_by_name(session=session, site_group_name=site_group_name)
user.site_group_uuid = site_group.site_group_uuid
session.commit()

def get_site_by_client_site_id(session: Session, client_site_id: str) -> List[SiteSQL]:
"""Get site by client site id.
:param session: database session
:param client_site_id: client site id
"""
query = session.query(SiteSQL)
query = query.filter(SiteSQL.client_site_id == client_site_id)
site = query.one_or_none()
return site
60 changes: 53 additions & 7 deletions src/sites_toolbox.py
Original file line number Diff line number Diff line change
@@ -1,22 +1,24 @@
"""This module contains the sites toolbox for the OCF dashboard"""
import os
import streamlit as st
from datetime import datetime, timedelta, time, timezone
from datetime import datetime as dt, timedelta, time, timezone
from pvsite_datamodel.connection import DatabaseConnection
from pvsite_datamodel.read import (
get_all_sites,
get_user_by_email,
get_site_by_uuid,
)
from get_data import (
get_all_users,
get_all_site_groups,
get_site_by_client_site_id,
update_user_site_group,
)


import plotly.graph_objects as go


# get details for one user
def get_user_details(session, email):
"""Get the user details from the database"""
user_details = get_user_by_email(session=session, email=email)
Expand All @@ -28,6 +30,36 @@ def get_user_details(session, email):
]
return user_sites, user_site_group, user_site_count

# get details for one site

def get_site_details(session, site_selection):
"""Get the site details for one site"""
peterdudfield marked this conversation as resolved.
Show resolved Hide resolved
site_uuid = get_site_by_uuid(session=session, site_uuid=site_selection)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

should this be site=get_site_by_uuid(session=session, site_uuid=site_selection)

site_details = {"site_uuid": str(site_uuid.site_uuid),
"client_site_id": str(site_uuid.client_site_id),
"client_site_name": str(site_uuid.client_site_name),
"site_group_name": str(site_uuid.site_groups[0].site_group_name),
"latitude": str(site_uuid.latitude),
"longitude": str(site_uuid.longitude),
"DNO": str(site_uuid.dno),
"GSP": str(site_uuid.gsp),
"tilt": str(site_uuid.tilt),
"orientation": str(site_uuid.orientation),
"capacity": (f'{site_uuid.capacity_kw} kw'),
"date_added": (site_uuid.created_utc.strftime("%Y-%m-%d"))}
return site_details

def select_site_id(dbsession, query_method):
if query_method == "site_uuid":
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

could you add a function description to say what this does

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

worth perhaps still adding a function descirption, but just do this in a seperate PR

site_list = [str(site.site_uuid) for site in get_all_sites(session=dbsession)]
selected_id = st.selectbox("Sites by site_uuid", site_list)
elif query_method == "client_site_id":
site_list= [str(site.client_site_id) for site in get_all_sites(session=dbsession)]
selected_id = st.selectbox("Sites by client_site_id", site_list)
selected_id = get_site_by_client_site_id(session=dbsession, client_site_id = selected_id)
selected_id = str(selected_id.site_uuid)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

add else:
raise ValueError, if query_method not in ....

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

maybe selected_id is actually selected_site_uuid

return selected_id


def sites_toolbox_page():
st.markdown(
Expand All @@ -49,17 +81,14 @@ def sites_toolbox_page():
# get the user details
users = get_all_users(session=session)
user_list = [user.email for user in users]
sites = get_all_sites(session=session)
# site_uuids = [str(site.site_uuid) for site in sites]
site_groups = get_all_site_groups(session=session)
# site_group_name = [site_groups.site_group_name for site_groups in site_groups]


st.markdown(
f'<h1 style="color:#63BCAF;font-size:32px;">{"Get User Details"}</h1>',
unsafe_allow_html=True,
)
email = st.selectbox("Enter email of user you want to know about.", user_list)

# getting user details
if st.button("Get user details"):
user_sites, user_site_group, user_site_count = get_user_details(
session=session, email=email
Expand All @@ -76,3 +105,20 @@ def sites_toolbox_page():
)
if st.button("Close user details"):
st.empty()

# getting site details
st.markdown(
f'<h1 style="color:#63BCAF;font-size:32px;">{"Get Site Details"}</h1>',
unsafe_allow_html=True,
)
query_method = st.radio("Select site by", ("site_uuid", "client_site_id"))

site_id = select_site_id(dbsession=session, query_method=query_method)

if st.button("Get site details"):
site_details = get_site_details(session=session, site_selection=site_id)
site_id = site_details["client_site_id"] if query_method == "client_site_id" else site_details["site_uuid"]
st.write("Here are the site details for site", site_id, ":", site_details)
if st.button("Close site details"):
st.empty()

35 changes: 34 additions & 1 deletion tests/test_sites_toolbox.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""Test the toolbox functions"""
from sites_toolbox import get_user_details
from sites_toolbox import get_user_details, get_site_details, select_site_id
from pvsite_datamodel.write.user_and_site import make_site, make_site_group, make_user

def test_get_user_details(db_session):
Expand All @@ -17,3 +17,36 @@ def test_get_user_details(db_session):
assert user_sites == [{"site_uuid": str(site.site_uuid), "client_site_id": str(site.client_site_id)}for site in user.site_group.sites]
assert user_site_group == "test_site_group"
assert user_site_count == 2

# test for get_site_details
def test_get_site_details(db_session):
"""Test the get site details function"""
site = make_site(db_session=db_session, ml_id=1)

site_details = get_site_details(session=db_session, site_selection=str(site.site_uuid))

assert site_details == {"site_uuid": str(site.site_uuid),
"client_site_id": str(site.client_site_id),
"client_site_name": str(site.client_site_name),
"site_group_name": str(site.site_groups[0].site_group_name),
rachel-labri-tipton marked this conversation as resolved.
Show resolved Hide resolved
"latitude": str(site.latitude),
"longitude": str(site.longitude),
"DNO": str(site.dno),
"GSP": str(site.gsp),
"tilt": str(site.tilt),
"orientation": str(site.orientation),
"capacity": (f'{site.capacity_kw} kw'),
"date_added": (site.created_utc.strftime("%Y-%m-%d"))}


# test for select_site_id
def test_select_site_id(db_session):
"""Test the select site id function"""
site = make_site(db_session=db_session, ml_id=1)

selected_id = select_site_id(dbsession=db_session, query_method="site_uuid")

assert selected_id == str(site.site_uuid)

selected_id = select_site_id(dbsession=db_session, query_method="client_site_id")
assert selected_id == str(site.site_uuid)
Loading