- реализовать создание portable-экземпляров и настройку счетов - обновить интерфейс и добавить обновление проекта через Git - добавить сборку и распространение сервиса - организовать материалы статей и описать актуальную версию - запрашивать тестовый пароль интерактивно и расширить проверки
def read_state(self, folder: str) -> sqlite3.Row | None:
| |
try:
| |
con = sqlite3.connect(self.database, timeout=3)
| |
con.row_factory = sqlite3.Row
| |
try:
| |
return con.execute(self.STATE_QUERY, (folder,)).fetchone()
| |
finally:
| |
con.close()
| |
except sqlite3.OperationalError as e:
| |
# База ещё не создана, занята или не совпадает схема - идём дальше
| |
# без данных, но причину печатаем, чтобы она не оставалась скрытой
| |
print(f'read_state({folder!r}): {e}')
| |
return None
|