Skip to content

Commit

Permalink
Merge pull request nabaztag2018#132 from omevel/master
Browse files Browse the repository at this point in the history
Fixed nabaztag2018#127 + airquality interface cleanup
  • Loading branch information
Olivier Mével authored Jun 17, 2020
2 parents 39ea131 + 5915530 commit 7938a15
Show file tree
Hide file tree
Showing 16 changed files with 307 additions and 99 deletions.
11 changes: 6 additions & 5 deletions nabairqualityd/aqicn.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ class aqicnClient:
def __init__(self, indice, update=False):
"""Initialize the client object."""
self._airquality = 0
self._city = "paris"
self._indice = indice # 0:AQI 1:PM25
self._city = "-"
self._indice = indice
if update == True:
self.update()

Expand Down Expand Up @@ -49,12 +49,13 @@ def _fetch_airquality_data(self):
+ str(indice_aqi)
+ " (AQI) and "
+ str(indice_pm25)
+ " (PM25)"
+ " (PM25) selected ->"
+ str(self._indice)
)

if self._indice == "0":
if self._indice == "aqi":
indice_to_be_analyzed = indice_aqi
elif self._indice == "1":
elif self._indice == "pm25":
indice_to_be_analyzed = indice_pm25
else:
indice_to_be_analyzed = indice_aqi
Expand Down
43 changes: 27 additions & 16 deletions nabairqualityd/locale/fr_FR/LC_MESSAGES/django.po
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2020-02-04 12:20+0100\n"
"POT-Creation-Date: 2020-03-30 15:15+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <[email protected]>\n"
Expand All @@ -24,12 +24,11 @@ msgstr "Qualité de l'air"
#: templates/nabairqualityd/settings.html:9
msgid ""
"Air quality information is provided based on your IP adress. You can select "
"the type of information you want : Agregated index or just PM 2.5. Select "
"Disable to disable the visual animation."
"the type of information you want : Agregated index or just PM 2.5."
msgstr ""
"La qualité de l'air est donnée en fonction de votre adresse IP. Vous pouvez "
"sélectionner le type d'information que vous souhaitez utiliser : Index "
"agrégé ou simplement les particules fines (PM 2.5). Pour désactiver l'animation lumineuse, sélectionnez Aucun."
"agrégé ou simplement les particules fines (PM 2.5)."

#: templates/nabairqualityd/settings.html:10
msgid ""
Expand All @@ -42,36 +41,48 @@ msgid "Index"
msgstr "Indice"

#: templates/nabairqualityd/settings.html:16
msgid "Disable"
msgstr "Aucun"

#: templates/nabairqualityd/settings.html:17
msgid "AQI"
msgstr "AQI"

#: templates/nabairqualityd/settings.html:18
#: templates/nabairqualityd/settings.html:17
msgid "PM 2.5"
msgstr "PM 2.5"

#: templates/nabairqualityd/settings.html:24
#: templates/nabairqualityd/settings.html:23
msgid "Visual animation"
msgstr "Information visuelle"

#: templates/nabairqualityd/settings.html:26
msgid "Always-on"
msgstr "Toujours afficher"

#: templates/nabairqualityd/settings.html:27
msgid "Alert only"
msgstr "Afficher les alertes uniquement"

#: templates/nabairqualityd/settings.html:28
msgid "No visual animation"
msgstr "Aucune information visuelle"

#: templates/nabairqualityd/settings.html:34
msgid "Forecast"
msgstr "Prévision"

#: templates/nabairqualityd/settings.html:26
#: templates/nabairqualityd/settings.html:36
msgid "Today"
msgstr "Aujourd'hui"

#: templates/nabairqualityd/settings.html:33
#: templates/nabairqualityd/settings.html:43
msgid "Save"
msgstr "Enregistrer"

#: templates/nabairqualityd/settings.html:34
#: templates/nabairqualityd/settings.html:44
msgid "Reset"
msgstr "Annuler"

#: templates/nabairqualityd/settings.html:64
#: templates/nabairqualityd/settings.html:74
msgid "Unknown server error"
msgstr "Erreur inconnue du serveur"

#~ msgid "Do not display"
#~ msgstr "Ne pas afficher"
#~ msgid "Yes"
#~ msgstr "Oui"
23 changes: 23 additions & 0 deletions nabairqualityd/migrations/0004_auto_20200326_1617.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Generated by Django 3.0.3 on 2020-03-26 16:17

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('nabairqualityd', '0003_auto_20191211_0822'),
]

operations = [
migrations.AddField(
model_name='config',
name='visual_airquality',
field=models.TextField(default=0, null=True),
),
migrations.AlterField(
model_name='config',
name='index_airquality',
field=models.TextField(default=0, null=True),
),
]
27 changes: 27 additions & 0 deletions nabairqualityd/migrations/0005_auto_20200612_1416.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Generated by Django 3.0.3 on 2020-06-12 14:16

from django.db import migrations, models


class Migration(migrations.Migration):

dependencies = [
('nabairqualityd', '0004_auto_20200326_1617'),
]

operations = [
migrations.RemoveField(
model_name='config',
name='airquality',
),
migrations.AlterField(
model_name='config',
name='index_airquality',
field=models.TextField(default='aqi', null=True),
),
migrations.AlterField(
model_name='config',
name='visual_airquality',
field=models.TextField(default='nothing', null=True),
),
]
4 changes: 2 additions & 2 deletions nabairqualityd/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@

class Config(singleton_model.SingletonModel):

airquality = models.TextField(null=True)
localisation = models.TextField(null=True)
index_airquality = models.TextField(null=True)
index_airquality = models.TextField(default='aqi', null=True)
visual_airquality = models.TextField(default='nothing', null=True)

# necessaire pour declencher via le site web
next_performance_date = models.DateTimeField(null=True)
Expand Down
33 changes: 16 additions & 17 deletions nabairqualityd/nabairqualityd.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
from asgiref.sync import sync_to_async
from nabcommon.nabservice import NabInfoCachedService
from . import aqicn
import logging


class NabAirqualityd(NabInfoCachedService):
Expand Down Expand Up @@ -58,32 +57,26 @@ class NabAirqualityd(NabInfoCachedService):

ANIMATIONS = [ANIMATION_3, ANIMATION_2, ANIMATION_1]

def __init__(self):
self.index_airquality = 9
super().__init__()

async def get_config(self):
from . import models

config = await models.Config.load_async()
config = await models.Config.load_async()
return (
config.next_performance_date,
config.next_performance_type,
config.index_airquality,
(config.index_airquality,
config.visual_airquality),
)

async def update_next(self, next_date, next_args):
from . import models

config = await models.Config.load_async()
config.next_performance_date = next_date
config.next_performance_type = next_args
await config.save_async()

async def fetch_info_data(self, index_airquality):
logging.debug("index_airquality=" + str(index_airquality))
if index_airquality == "9":
return None
async def fetch_info_data(self, config_t):

index_airquality, visual_airquality = config_t
client = aqicn.aqicnClient(index_airquality)
await sync_to_async(client.update)()

Expand All @@ -97,20 +90,26 @@ async def fetch_info_data(self, index_airquality):
config.localisation = new_city
await config.save_async()

return client.get_data()
return {
"visual_airquality": visual_airquality,
"data": client.get_data(),
}


def get_animation(self, info_data):
if info_data is None:

if (info_data["visual_airquality"] == "nothing") or \
(info_data["visual_airquality"] == "alert" and info_data["data"] == 2):
return None
info_animation = NabAirqualityd.ANIMATIONS[info_data]
info_animation = NabAirqualityd.ANIMATIONS[info_data["data"]]
return info_animation

async def perform_additional(self, expiration, type, info_data, config_t):
if info_data is None:
return

if type == "today":
message = NabAirqualityd.MESSAGES[info_data]
message = NabAirqualityd.MESSAGES[info_data["data"]]
packet = (
'{"type":"message",'
'"signature":{"audio":["nabairqualityd/signature.mp3"]},'
Expand Down
18 changes: 14 additions & 4 deletions nabairqualityd/templates/nabairqualityd/settings.html
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,26 @@
<h5 class="card-title">{% trans "Air quality" %} - {{ config.localisation }}</h5>
</div>
<div class="card-body">
<p>{% trans "Air quality information is provided based on your IP adress. You can select the type of information you want : Agregated index or just PM 2.5. Select Disable to disable the visual animation." %}</p>
<p>{% trans "Air quality information is provided based on your IP adress. You can select the type of information you want : Agregated index or just PM 2.5." %}</p>
<p>{% trans "You can also ask your rabbit by saying such things as 'What is the air quality today ?'" %}</p>

<div class="form-group row">
<label for="airqualityIndexSel" class="col-6 col-form-label">{% trans "Index" %}</label>
<div class="col-6">
<select name="index_airquality" id="airqualityIndexSel">
<option value="9" {% if config.index_airquality == '9' %}selected{% endif %}>{% trans "Disable" %}</option>
<option value="0" {% if config.index_airquality == '0' %}selected{% endif %}>{% trans "AQI" %}</option>
<option value="1" {% if config.index_airquality == '1' %}selected{% endif %}>{% trans "PM 2.5" %}</option>
<option value="aqi" {% if config.index_airquality == 'aqi' %}selected{% endif %}>{% trans "AQI" %}</option>
<option value="pm25" {% if config.index_airquality == 'pm25' %}selected{% endif %}>{% trans "PM 2.5" %}</option>
</select>
</div>
</div>

<div class="form-group row">
<label for="airqualityVisual" class="col-6 col-form-label">{% trans "Visual animation" %}</label>
<div class="col-6">
<select name="visual_airquality" id="airqualityVisual">
<option value="always" {% if config.visual_airquality == 'always' %}selected{% endif %}>{% trans "Always-on" %}</option>
<option value="alert" {% if config.visual_airquality == 'alert' %}selected{% endif %}>{% trans "Alert only" %}</option>
<option value="nothing" {% if config.visual_airquality == 'nothing' %}selected{% endif %}>{% trans "No visual animation" %}</option>
</select>
</div>
</div>
Expand Down
14 changes: 9 additions & 5 deletions nabairqualityd/tests/nabairqualityd_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,25 +19,28 @@ def tearDown(self):
def test_fetch_info_data(self):
config = models.Config.load()
config.index_airquality = "aqi"
config.visual_airquality = "always"
config.localisation = None
config.save()
service = NabAirqualityd()
data = async_to_sync(service.fetch_info_data)("aqi")
info_data = async_to_sync(service.fetch_info_data)(("aqi", "always"))
config = models.Config.load()
self.assertIsNotNone(data)
self.assertTrue(data < 3)
self.assertTrue(data >= 0)
self.assertIsNotNone(info_data)
self.assertTrue("data" in info_data)
self.assertTrue(info_data["data"] < 4)
self.assertTrue(info_data["data"] >= 0)
self.assertIsNotNone(config.localisation)

def test_perform(self):
config = models.Config.load()
config.index_airquality = "aqi"
config.visual_airquality = "always"
config.localisation = None
config.save()
service = NabAirqualityd()
writer = MockWriter()
service.writer = writer
config_t = "aqi"
config_t = ("aqi", "always")
expiration = datetime.datetime(2019, 4, 22, 0, 0, 0)
async_to_sync(service.perform)(expiration, "today", config_t)
self.assertEqual(len(writer.written), 2)
Expand All @@ -55,6 +58,7 @@ def test_perform(self):
def test_asr(self):
config = models.Config.load()
config.index_airquality = "aqi"
config.visual_airquality = "always"
config.localisation = None
config.save()
service = NabAirqualityd()
Expand Down
3 changes: 3 additions & 0 deletions nabairqualityd/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,9 @@ def post(self, request, *args, **kwargs):
if "index_airquality" in request.POST:
index_airquality = request.POST["index_airquality"]
config.index_airquality = index_airquality
if "visual_airquality" in request.POST:
visual_airquality = request.POST["visual_airquality"]
config.visual_airquality = visual_airquality
config.save()
NabAirqualityd.signal_daemon()
context = self.get_context_data(**kwargs)
Expand Down
4 changes: 0 additions & 4 deletions nabmastodond/tests/nabmastodond_views_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ def test_get_settings(self):
self.assertTrue("config" in response.context)
config = Config.load()
self.assertEqual(response.context["config"], config)
self.assertEqual(config.instance, "mstdn.fr")
self.assertEqual(config.client_id, None)
self.assertEqual(config.client_secret, None)
self.assertEqual(config.redirect_uri, None)
Expand All @@ -37,7 +36,6 @@ def test_get_settings(self):
def test_post_connect(self):
c = Client()
config = Config.load()
self.assertEqual(config.instance, "mstdn.fr")
config.client_id = "test_client_id"
config.client_secret = "test_client_secret"
config.save()
Expand Down Expand Up @@ -106,7 +104,6 @@ def test_post_connect(self):
self.assertTrue("status" in response_json)
self.assertTrue("request_url" in response_json)
config = Config.load()
self.assertEqual(config.instance, "mstdn.fr")
self.assertNotEqual(config.client_id, ms2_client_id)
self.assertNotEqual(config.client_secret, ms2_client_secret)
self.assertEqual(
Expand All @@ -116,7 +113,6 @@ def test_post_connect(self):
def test_delete_connect(self):
c = Client()
config = Config.load()
self.assertEqual(config.instance, "mstdn.fr")
config.client_id = "test_client_id"
config.client_secret = "test_client_secret"
config.redirect_uri = "test_redirect_uri"
Expand Down
Loading

0 comments on commit 7938a15

Please sign in to comment.