From 8975664d0c86026a792baca252eb1c45ddfdbd5b Mon Sep 17 00:00:00 2001 From: Ben Kristinsson Date: Sun, 18 Sep 2022 14:37:42 +0200 Subject: [PATCH 1/7] select temp by id from db --- sudoisbot/sink/models.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sudoisbot/sink/models.py b/sudoisbot/sink/models.py index cc0e667..d260dbb 100644 --- a/sudoisbot/sink/models.py +++ b/sudoisbot/sink/models.py @@ -22,9 +22,9 @@ def dbconnect(**mysqlconf): class BaseModel(peewee.Model): @classmethod def get_last(cls, name): + # http://docs.peewee-orm.com/en/latest/peewee/querying.html return cls.select().where( - cls.name == name).order_by( - cls.time.desc()).get() + cls.name == name).order_by(-cls.id).get() @classmethod def get_last_many(cls, names): -- 2.40.1 From f2904f0a8a721f689eac6a3084ffd94a281ac661 Mon Sep 17 00:00:00 2001 From: Ben Kristinsson Date: Sun, 18 Sep 2022 14:53:00 +0200 Subject: [PATCH 2/7] install pymysql and upgrade peewee --- poetry.lock | 18 +++++++++++++++++- pyproject.toml | 3 ++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/poetry.lock b/poetry.lock index 171fd87..6cb5dd9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -580,6 +580,18 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "pymysql" +version = "1.0.2" +description = "Pure Python MySQL Driver" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +rsa = ["cryptography"] +ed25519 = ["PyNaCl (>=1.4.0)"] + [[package]] name = "pyparsing" version = "3.0.9" @@ -923,7 +935,7 @@ telegram = ["python-telegram-bot"] [metadata] lock-version = "1.1" python-versions = "^3.9" -content-hash = "fc8b29b88ed8498ad730df20f70aaee6f5dd6835930a434b48f90b23a11b7c3b" +content-hash = "91854d75e5de47e9f5218c09b2037aef57cef4550c1dae087f3e77b0e3b6ae74" [metadata.files] apscheduler = [ @@ -1282,6 +1294,10 @@ pylev = [ {file = "pylev-1.4.0-py2.py3-none-any.whl", hash = "sha256:7b2e2aa7b00e05bb3f7650eb506fc89f474f70493271a35c242d9a92188ad3dd"}, {file = "pylev-1.4.0.tar.gz", hash = "sha256:9e77e941042ad3a4cc305dcdf2b2dec1aec2fbe3dd9015d2698ad02b173006d1"}, ] +pymysql = [ + {file = "PyMySQL-1.0.2-py3-none-any.whl", hash = "sha256:41fc3a0c5013d5f039639442321185532e3e2c8924687abe6537de157d403641"}, + {file = "PyMySQL-1.0.2.tar.gz", hash = "sha256:816927a350f38d56072aeca5dfb10221fe1dc653745853d30a216637f5d7ad36"}, +] pyparsing = [ {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, diff --git a/pyproject.toml b/pyproject.toml index f82818f..9db1fd3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -14,10 +14,11 @@ loguru = "^0.6.0" PyYAML = "^6.0" pyzmq = "^23.2.1" sudoistemper = "^0.1.0" -peewee = "^3.15.1" +peewee = "^3.15.2" requests = "^2.28.1" python-dateutil = "^2.8.2" python-telegram-bot = { version = "^13.1", optional = true } +PyMySQL = "^1.0.2" [tool.poetry.group.dev.dependencies] autopep8 = "^1.7.0" -- 2.40.1 From d370d5174e047454c7e418b3fbce552f9a2832ed Mon Sep 17 00:00:00 2001 From: Ben Kristinsson Date: Sun, 18 Sep 2022 15:13:00 +0200 Subject: [PATCH 3/7] remove the debug timer --- sudoisbot/screen/screen_pub.py | 4 ---- 1 file changed, 4 deletions(-) diff --git a/sudoisbot/screen/screen_pub.py b/sudoisbot/screen/screen_pub.py index 1d119be..5b7db4f 100644 --- a/sudoisbot/screen/screen_pub.py +++ b/sudoisbot/screen/screen_pub.py @@ -96,11 +96,7 @@ class ScreenPublisher(Publisher): shortname = a.replace('room', 'r') try: - - t0 = time.time() result = Temperatures.get_last(a) - t1 = time.time() - print(f"query for: {t1-t0}s, name='{a}'") tempstr = f"{result.temp:.1f}" if result.temp < 10.0: tempstr = " " + tempstr -- 2.40.1 From 83cc0a2395605e59806406660b19a735060873ef Mon Sep 17 00:00:00 2001 From: Ben Kristinsson Date: Sun, 18 Sep 2022 15:14:16 +0200 Subject: [PATCH 4/7] removing unused imports --- sudoisbot/screen/screen_pub.py | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/sudoisbot/screen/screen_pub.py b/sudoisbot/screen/screen_pub.py index 5b7db4f..019cf60 100644 --- a/sudoisbot/screen/screen_pub.py +++ b/sudoisbot/screen/screen_pub.py @@ -2,13 +2,10 @@ # ansible for now -import argparse -from datetime import datetime, timezone, timedelta -from os import path -import sys +from datetime import datetime, timezone import random import time -from dataclasses import dataclass, field, asdict +from dataclasses import dataclass, field from itertools import islice from loguru import logger -- 2.40.1 From 4fe950859d0da72c499141936607f6f94b89f5f5 Mon Sep 17 00:00:00 2001 From: Ben Kristinsson Date: Sun, 18 Sep 2022 15:19:36 +0200 Subject: [PATCH 5/7] flake8 fixes --- sudoisbot/screen/screen_pub.py | 53 +++++++++++++++++----------------- 1 file changed, 26 insertions(+), 27 deletions(-) diff --git a/sudoisbot/screen/screen_pub.py b/sudoisbot/screen/screen_pub.py index 019cf60..f6c0f7a 100644 --- a/sudoisbot/screen/screen_pub.py +++ b/sudoisbot/screen/screen_pub.py @@ -13,15 +13,18 @@ from loguru import logger from sudoisbot.network.pub import Publisher from sudoisbot.sink.models import Temperatures, People, Weather, dbconnect + def chunk(it, size=10): it = iter(it) return list(iter(lambda: list(islice(it, size)), [])) + def bark(): - numberofwoofs = random.randint(1,3) + numberofwoofs = random.randint(1, 3) woofs = " " + ", ".join(["woof"] * numberofwoofs) return woofs + @dataclass class ScreenPublisher(Publisher): addr: str @@ -34,7 +37,6 @@ class ScreenPublisher(Publisher): statedir: str = "/dev/shm" msgs: list = field(default_factory=list) - no_loop: bool = False dry_run: bool = False @@ -80,13 +82,14 @@ class ScreenPublisher(Publisher): return " ".join(homebodies) except ValueError as e: + logger.error(e) return "- - -" def make_text(self): return random.choice(self.msgs + [self.align_center(bark())]) def make_temps(self): - l = list() + temps = list() for a in ['bedroom', 'study', 'livingroom', 'ls54', 'outdoor']: # .replace does not mutate original string @@ -97,14 +100,13 @@ class ScreenPublisher(Publisher): tempstr = f"{result.temp:.1f}" if result.temp < 10.0: tempstr = " " + tempstr - l.append(f"{shortname}: {tempstr} C") + temps.append(f"{shortname}: {tempstr} C") except KeyError: logger.trace(f"no recent temp for '{a}'") - l.append(f"{shortname}: -- C") + temps.append(f"{shortname}: -- C") - - fill = max([len(a) for a in l]) - chunks = chunk([a.rjust(fill) for a in l], 2) + fill = max([len(a) for a in temps]) + chunks = chunk([a.rjust(fill) for a in temps], 2) temp_rows = list() for row in chunks: @@ -115,21 +117,20 @@ class ScreenPublisher(Publisher): return "\n".join(temp_rows) def publish(self): - woof = " " + bark() + woof = " " + bark() # noqa - weth = self.make_weather() + weth = self.make_weather() temps = self.make_temps() - #folk = self.make_people() + # folk = self.make_people() folk = " " text = self.make_text() rain = self.make_rain(weth) text = f"{temps}\n{weth}\n{text}" - # add back logic to turn update intervals down pr stop when # nodody is home if len(folk) > 0: - update_interval = 15*60 # 15m + update_interval = 15*60 # 15m else: update_interval = 66*60*6 data = { @@ -158,23 +159,21 @@ class ScreenPublisher(Publisher): if self.no_loop: raise StopIteration + def main(args, config): - - db = dbconnect(**config['mysql']) - + dbconnect(**config['mysql']) addr = config['addr'] - - #people_home = config['people_home'] - kwargs = {**config['screen'], - **{ - 'rotation': args.rotation, - 'people': config['people'], - 'weather': config['weather'], - 'dry_run': args.dry_run, - 'no_loop': args.no_loop - }} - + # people_home = config['people_home'] + kwargs = { + **config['screen'], + **{ + 'rotation': args.rotation, + 'people': config['people'], + 'weather': config['weather'], + 'dry_run': args.dry_run, + 'no_loop': args.no_loop + }} with ScreenPublisher(addr=addr, **kwargs) as p: p.loop() -- 2.40.1 From de3448ec639c0abefdaa3ad6ccaccf45d74683b5 Mon Sep 17 00:00:00 2001 From: Ben Kristinsson Date: Sun, 18 Sep 2022 15:40:55 +0200 Subject: [PATCH 6/7] poetry update --- poetry.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6cb5dd9..5ea9588 100644 --- a/poetry.lock +++ b/poetry.lock @@ -325,7 +325,7 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- [[package]] name = "keyring" -version = "23.9.1" +version = "23.9.3" description = "Store and access your passwords safely." category = "dev" optional = false @@ -1154,8 +1154,8 @@ jsonschema = [ {file = "jsonschema-4.16.0.tar.gz", hash = "sha256:165059f076eff6971bae5b742fc029a7b4ef3f9bcf04c14e4776a7605de14b23"}, ] keyring = [ - {file = "keyring-23.9.1-py3-none-any.whl", hash = "sha256:3565b9e4ea004c96e158d2d332a49f466733d565bb24157a60fd2e49f41a0fd1"}, - {file = "keyring-23.9.1.tar.gz", hash = "sha256:39e4f6572238d2615a82fcaa485e608b84b503cf080dc924c43bbbacb11c1c18"}, + {file = "keyring-23.9.3-py3-none-any.whl", hash = "sha256:69732a15cb1433bdfbc3b980a8a36a04878a6cfd7cb99f497b573f31618001c0"}, + {file = "keyring-23.9.3.tar.gz", hash = "sha256:69b01dd83c42f590250fe7a1f503fc229b14de83857314b1933a3ddbf595c4a5"}, ] loguru = [ {file = "loguru-0.6.0-py3-none-any.whl", hash = "sha256:4e2414d534a2ab57573365b3e6d0234dfb1d84b68b7f3b948e6fb743860a77c3"}, -- 2.40.1 From 882b5e5525a205bdaa7eac91a688604371d4e2c2 Mon Sep 17 00:00:00 2001 From: Ben Kristinsson Date: Sun, 18 Sep 2022 15:44:31 +0200 Subject: [PATCH 7/7] adjust cwd and fix entrypoint in Dockerfile to run correctly --- Dockerfile | 6 ++++-- scripts/docker-run.sh | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Dockerfile b/Dockerfile index 93941fa..516c90a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -19,12 +19,13 @@ RUN apt-get update && \ chown -R -v ${USER_NAME}. /opt/${REPO_NAME} USER ${USER_NAME} -WORKDIR /opt/${REPO_NAME} +WORKDIR /home/${USER_NAME} ENV PATH="/home/${USER_NAME}/.local/bin:${PATH}" FROM base as builder ARG PIP_REPO_URL="https://git.sudo.is/api/packages/ben/pypi" ARG PIP_REPO_NAME="gitea" +WORKDIR /opt/${REPO_NAME} # --pre: enable installing pre-releases and dev-releases RUN python3 -m pip install poetry --pre && \ @@ -74,4 +75,5 @@ RUN ls -1 /opt/${REPO_NAME}/dist && \ HEALTHCHECK --start-period=5s --interval=15s --timeout=1s \ CMD ruok_${REPO_NAME} -ENTRYPOINT ['sudoisbot'] +ENTRYPOINT ["sudoisbot"] +CMD [] diff --git a/scripts/docker-run.sh b/scripts/docker-run.sh index a47592c..3edac74 100755 --- a/scripts/docker-run.sh +++ b/scripts/docker-run.sh @@ -2,6 +2,6 @@ set -e -source ./docker/docker.env +source ./scripts/docker.env docker run --rm -it ${repo_name}:${docker_tag} $* -- 2.40.1