added Link.get_unread

This commit is contained in:
Wojciech Kwolek 2022-01-09 04:48:57 +01:00
parent 9d6d267802
commit 4c678da1fe
3 changed files with 39 additions and 5 deletions

4
.gitignore vendored
View File

@ -1,2 +1,4 @@
*.sqlite3
.env
.env
*.pyc

17
main.py
View File

@ -1,3 +1,4 @@
from pprint import pprint
import logging
import os
import sqlite3
@ -39,7 +40,7 @@ class Bot:
@property
def db(self):
return sqlite3.connect(self.settings.db)
return sqlite3.connect(self.settings.db, detect_types=sqlite3.PARSE_DECLTYPES)
def _init_db(self):
with self.db as db:
@ -49,8 +50,8 @@ class Bot:
id INTEGER PRIMARY KEY AUTOINCREMENT,
link TEXT,
user_id TEXT,
read_at DATETIME,
added_at DATETIME
read_at TIMESTAMP,
added_at TIMESTAMP
);
""")
@ -62,11 +63,19 @@ class Bot:
def cmd_test(self, update: Update, context: CallbackContext):
l = Link(
link="2137",
user_id="papiez"
user_id=update.effective_user.id
)
with self.db as db:
l.create(db)
def cmd_unread(self, update: Update, context: CallbackContext):
# TODO: ignore messages from group
user_id = update.effective_user.id
with self.db as db:
links = Link.get_unread(db, user_id)
pprint(list(links))
def run(self):
self.updater.start_polling()

View File

@ -1,6 +1,8 @@
from os import read
import sqlite3
from dataclasses import dataclass
from datetime import datetime
from typing import Tuple
@dataclass
@ -23,3 +25,24 @@ class Link:
assert len(r[0]) == 1
assert int(r[0][0])
self.id = r[0][0]
@classmethod
def _from_tuple(cls, tuple) -> 'Link':
id, link, user_id, read_at, added_at = tuple
return cls(
id=id,
link=link,
user_id=user_id,
read_at=read_at,
added_at=added_at
)
@classmethod
def _get(cls, db: sqlite3.Connection, where: str, values: Tuple = ()) -> 'Link':
cur = db.cursor()
rows = cur.execute(f"SELECT * FROM links WHERE {where}", values)
return map(cls._from_tuple, rows)
@classmethod
def get_unread(cls, db: sqlite3.Connection, user_id: str):
return cls._get(db, "user_id = ? AND read_at IS NULL", (user_id,))