Skip to content

Commit

Permalink
feat(gui): add option to hide days with opinion
Browse files Browse the repository at this point in the history
Closes #65
  • Loading branch information
nritsche committed Nov 4, 2020
1 parent 15264b5 commit 3935db4
Show file tree
Hide file tree
Showing 9 changed files with 83 additions and 9 deletions.
25 changes: 24 additions & 1 deletion bondia/gui.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,9 @@ def __init__(self, template, width_drawer_widgets, data_loader, config_plots):
self._opinion_header = pn.pane.Markdown(
"####Opinion", width=width_drawer_widgets
)
self._day_filter_opinion = pn.widgets.Checkbox(
name="Hide days I have voted for", disabled=self.current_user is None
)

# TODO: remove after https://github.com/holoviz/panel/commit/203a16c10cb8fd4c55ec7887fade561ecc222938
pn.pane.Alert.priority = 0
Expand Down Expand Up @@ -104,7 +107,17 @@ def populate_template(self, template):

def update_days(day_selector, event):
"""Update days depending on selected revision."""
day_selector.value = self._choose_lsd()
if self._day_filter_opinion.value and self.current_user is not None:
day_selector.options = opinion.get_days_without_opinion(
list(self._data.days(self.rev_selector.value)),
self.rev_selector.value,
self.current_user,
)
else:
day_selector.options = list(self._data.days(self.rev_selector.value))

if self.day_selector.options:
day_selector.value = self._choose_lsd()

# Add a title over the plots showing the selected day and rev (and keep it updated)
data_description = pn.pane.Markdown(
Expand All @@ -123,6 +136,12 @@ def update_data_description_day(data_description, event):
data_description, callbacks={"value": update_data_description_day}
)

# Checkbox to show only days w/o opinion
template.add_panel("day_filter_opinion_checkbox", self._day_filter_opinion)
self._day_filter_opinion.link(
self.day_selector, callbacks={"value": update_days}
)

# Fill the template with components
template.add_panel("data_description", data_description)
template.add_panel("data_description1", data_description)
Expand Down Expand Up @@ -222,6 +241,10 @@ def toggle_plot(event, toggle_plot):

def _click_opinion(self, event, decision):
lsd = self.day_selector.value
if lsd is None:
self._opinion_warning.alert_type = "danger"
self._opinion_warning.object = "No data selected."
return
try:
opinion.insert(
self.current_user,
Expand Down
43 changes: 35 additions & 8 deletions bondia/opinion.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@


def get(lsd, revision, user):
if lsd is None:
return None
user = user.capitalize()
try:
return (
Expand All @@ -40,6 +42,8 @@ def get(lsd, revision, user):


def insert(user, lsd, revision, decision):
if lsd is None:
return
user = user.capitalize()
try:
existing_decision = (
Expand Down Expand Up @@ -82,6 +86,36 @@ def insert(user, lsd, revision, decision):
existing_decision.save()


def get_days_with_opinion(revision, user):
user = user.capitalize()
days_with_opinion = (
DataFlagOpinion.select(DataFlagOpinion.lsd)
.join(MediaWikiUser)
.switch(DataFlagOpinion)
.join(DataRevision)
.where(MediaWikiUser.user_name == user, DataRevision.name == revision)
)
return [d.lsd for d in days_with_opinion]


def get_days_without_opinion(days, revision, user):
user = user.capitalize()
days_with_opinion = get_days_with_opinion(revision, user)
logger.debug(
f"Days w/ opinion for user {user}, rev {revision}: {days_with_opinion}."
)
days_without_opinion = []

for d in days:
if d.lsd not in days_with_opinion:
days_without_opinion.append(d)

logger.debug(
f"Days w/o opinion for user {user}, rev {revision}: {days_without_opinion}."
)
return days_without_opinion


def get_day_without_opinion(last_selected_day, days, revision, user):
"""
Find a day the user hasn't voted on.
Expand All @@ -105,14 +139,7 @@ def get_day_without_opinion(last_selected_day, days, revision, user):
If `last_selected_day` is None, the latest day without an opinion by that user will be returned.
"""
user = user.capitalize()
days_with_opinion = (
DataFlagOpinion.select(DataFlagOpinion.lsd)
.join(MediaWikiUser)
.switch(DataFlagOpinion)
.join(DataRevision)
.where(MediaWikiUser.user_name == user, DataRevision.name == revision)
)
days_with_opinion = [d.lsd for d in days_with_opinion]
days_with_opinion = get_days_with_opinion(revision, user)
logger.debug(
f"Days w/ opinion for user {user}, rev {revision}: {days_with_opinion}."
)
Expand Down
2 changes: 2 additions & 0 deletions bondia/plot/delayspectrum.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ def __init__(self, data, config, **params):
"helper_lines",
)
def view(self):
if self.lsd is None:
return panel.pane.Markdown("No data selected.")
try:
spectrum = self.data.load_file(self.revision, self.lsd, "delayspectrum")
except DataError as err:
Expand Down
14 changes: 14 additions & 0 deletions bondia/plot/ringmap.py
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,10 @@ def _finalise_config(self):

@param.depends("lsd", watch=True)
def update_freqs(self):
if self.lsd is None:
# Anyways make sure watchers are triggered
self.param.trigger("frequency")
return
try:
rm = self.data.load_file(self.revision, self.lsd, "ringmap")
except DataError as err:
Expand All @@ -126,6 +130,10 @@ def update_freqs(self):

@param.depends("frequency", watch=True)
def update_beam(self):
if self.lsd is None:
# Anyways make sure watchers are triggered
self.param.trigger("beam")
return
try:
rm = self.data.load_file(self.revision, self.lsd, "ringmap")
except DataError as err:
Expand All @@ -139,6 +147,10 @@ def update_beam(self):

@param.depends("beam", watch=True)
def update_pol(self):
if self.lsd is None:
# Anyways make sure watchers are triggered
self.param.trigger("polarization")
return
try:
rm = self.data.load_file(self.revision, self.lsd, "ringmap")
except DataError as err:
Expand Down Expand Up @@ -186,6 +198,8 @@ def param_control(self):
"flags",
)
def view(self):
if self.lsd is None:
return panel.pane.Markdown("No data selected.")
try:
container = self.data.load_file(self.revision, self.lsd, "ringmap")
except DataError as err:
Expand Down
4 changes: 4 additions & 0 deletions bondia/plot/sensitivity.py
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ def __init__(self, data, config, **params):

@param.depends("lsd", watch=True)
def update_pol(self):
if self.lsd is None:
return
try:
rm = self.data.load_file(self.revision, self.lsd, "sensitivity")
except DataError as err:
Expand All @@ -86,6 +88,8 @@ def update_pol(self):
"mask_rfi",
)
def view(self):
if self.lsd is None:
return panel.pane.Markdown("No data selected.")
try:
sens_container = self.data.load_file(self.revision, self.lsd, "sensitivity")
except DataError as err:
Expand Down
1 change: 1 addition & 0 deletions bondia/templates/material.html
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
<hr>
<div align="center"><p><h4>Select Day</h4></p>
{{ embed(roots.day_selector) | indent(8) }}</div>
{{ embed(roots.day_filter_opinion_checkbox) }}
<hr>
<div>{{ embed(roots.plot_selector) | indent(8) }}</div>
<hr>
Expand Down
1 change: 1 addition & 0 deletions bondia/templates/mdl.html
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@
<div><h4>Select Data</h4></div>
{{ embed(roots.rev_selector) }}
{{ embed(roots.day_selector) }}
{{ embed(roots.day_filter_opinion_checkbox) }}
<hr>
<div><h4>Select Plots</h4></div>
<div>{{ embed(roots.toggle_delay_spectrum) }}</div>
Expand Down
1 change: 1 addition & 0 deletions bondia/templates/mdl_tabs.html
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
<div align="center"><h4>Select Data</h4></div>
{{ embed(roots.rev_selector) }}
{{ embed(roots.day_selector) }}
{{ embed(roots.day_filter_opinion_checkbox) }}
<hr>
<div align="center"><h4>Select Plots</h4></div>
<div>{{ embed(roots.toggle_delay_spectrum) }}</div>
Expand Down
1 change: 1 addition & 0 deletions bondia/templates/mwc.html
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@
<p><h4>Select Data</h4></p>
{{ embed(roots.rev_selector) }}
{{ embed(roots.day_selector) }}
{{ embed(roots.day_filter_opinion_checkbox) }}
<hr>
<div align="center"><p><h4>Select Plots</h4></p></div>
<div>{{ embed(roots.toggle_delay_spectrum) }}</div>
Expand Down

0 comments on commit 3935db4

Please sign in to comment.