diff --git a/lib/__init__.py b/lib/__init__.py
index 97bfe48..a3b85a6 100644
--- a/lib/__init__.py
+++ b/lib/__init__.py
@@ -1,3 +1,4 @@
+from .utils import query_error
from .books import Book
from .person import PersonDialog
from .read import ReadDialog
diff --git a/lib/books.py b/lib/books.py
index 2da875d..5291a3a 100644
--- a/lib/books.py
+++ b/lib/books.py
@@ -1,12 +1,11 @@
-import json
-import os
+
import xml.dom.minidom
from typing import Dict, List, cast
from PyQt6.QtCore import QCoreApplication
from PyQt6.QtSql import QSqlQuery
-from main import query_error
+from lib import query_error
class Book:
@@ -130,7 +129,6 @@ class Book:
query.bindValue(":content", section)
if not query.exec():
query_error(query)
- section_id = query.lastInsertId()
return book_id
def parse_section(self, src: str, href: str) -> None:
diff --git a/lib/person.py b/lib/person.py
index 37abbd6..4724dfb 100644
--- a/lib/person.py
+++ b/lib/person.py
@@ -2,7 +2,7 @@ import json
import os
import secrets
import smtplib
-from datetime import datetime, timedelta
+from datetime import datetime
from email import policy
from email.message import EmailMessage
from html.parser import HTMLParser
@@ -10,13 +10,12 @@ from io import StringIO
from typing import Any, List
import css_inline
-from PyQt6.QtCore import QResource, QSize, Qt, QUrl, pyqtSlot
+from lib import query_error
+from PyQt6.QtCore import QResource, Qt, QUrl, pyqtSlot
from PyQt6.QtGui import QStandardItem, QStandardItemModel
from PyQt6.QtMultimedia import QMediaDevices, QSoundEffect
from PyQt6.QtSql import QSqlQuery, QSqlQueryModel
-from PyQt6.QtWidgets import QDialog, QDialogButtonBox, QStyledItemDelegate
-
-from main import query_error
+from PyQt6.QtWidgets import QDialog, QDialogButtonBox
from ui.PersonDialog import Ui_PersonDialog
@@ -51,7 +50,7 @@ class blockHandler(HTMLParser):
return
def handle_starttag(self, tag: str, attrs: Any) -> None:
- if not tag in self.tags:
+ if tag not in self.tags:
return
self.active += 1
if tag in self.space:
@@ -60,7 +59,7 @@ class blockHandler(HTMLParser):
return
def handle_endtag(self, tag: str) -> None:
- if not tag in self.tags:
+ if tag not in self.tags:
return
self.active -= 1
self.text += f"{tag}>"
@@ -457,7 +456,6 @@ class PersonDialog(QDialog, Ui_PersonDialog):
query.bindValue(":session_id", session_id)
if not query.exec():
query_error(query)
- first = True
if not query.next():
return ""
html += "
" + self.tr("Notes") + "
\n"
diff --git a/lib/read.py b/lib/read.py
index e81b8f6..97a6f74 100644
--- a/lib/read.py
+++ b/lib/read.py
@@ -1,42 +1,18 @@
import json
-import re
from typing import Any, Dict, List, Optional, cast
import requests
-from PyQt6.QtCore import (
- QFile,
- QIODeviceBase,
- QPoint,
- QRect,
- QResource,
- Qt,
- QTimer,
- QUrl,
- pyqtSignal,
- pyqtSlot,
-)
-from PyQt6.QtGui import (
- QBrush,
- QColor,
- QKeyEvent,
- QMouseEvent,
- QPainter,
- QPainterPath,
- QPaintEvent,
- QTextBlockFormat,
- QTextCharFormat,
- QTextCursor,
- QTextDocument,
- QTextListFormat,
-)
-from PyQt6.QtSql import QSqlDatabase, QSqlQuery, QSqlQueryModel
-from PyQt6.QtWidgets import QDialog, QPushButton, QTextEdit, QWidget
+from lib import query_error
+from PyQt6.QtCore import QPoint, QResource, Qt, QTimer, pyqtSignal, pyqtSlot
+from PyQt6.QtGui import (QBrush, QColor, QKeyEvent, QPainter, QPainterPath,
+ QPaintEvent, QTextCharFormat, QTextCursor)
+from PyQt6.QtSql import QSqlQuery
+from PyQt6.QtWidgets import QDialog, QTextEdit, QWidget
+from ui.ReadDialog import Ui_ReadDialog
from lib.preferences import Preferences
from lib.session import SessionDialog
from lib.sounds import SoundOff
-from main import query_error
-from ui.ReadDialog import Ui_ReadDialog
class ReadDialog(QDialog, Ui_ReadDialog):
@@ -630,7 +606,6 @@ class ReadDialog(QDialog, Ui_ReadDialog):
def scrollTo(self, position: int) -> None:
cursor = self.paraEdit.textCursor()
cursor.setPosition(position)
- rect = self.paraEdit.cursorRect(cursor)
return
def savePosition(self) -> None:
diff --git a/lib/session.py b/lib/session.py
index 34338ef..3284aae 100644
--- a/lib/session.py
+++ b/lib/session.py
@@ -1,20 +1,12 @@
from datetime import datetime, timedelta
-from typing import Optional, cast
+from typing import cast
-from PyQt6.QtCore import QModelIndex, Qt, QTime, QTimer, pyqtSignal, pyqtSlot
-from PyQt6.QtGui import (
- QBrush,
- QPalette,
- QStandardItem,
- QStandardItemModel,
- QTextBlockFormat,
- QTextCursor,
- QTextDocument,
-)
+from lib import query_error
+from PyQt6.QtCore import QModelIndex, Qt, QTimer, pyqtSlot
+from PyQt6.QtGui import (QStandardItem, QStandardItemModel, QTextBlockFormat,
+ QTextCursor, QTextDocument)
from PyQt6.QtSql import QSqlQuery
-from PyQt6.QtWidgets import QCheckBox, QDialog, QListView, QMessageBox
-
-from main import query_error
+from PyQt6.QtWidgets import QDialog, QMessageBox
from ui.SessionDialog import Ui_SessionDialog
diff --git a/lib/utils.py b/lib/utils.py
new file mode 100644
index 0000000..80eced1
--- /dev/null
+++ b/lib/utils.py
@@ -0,0 +1,21 @@
+"""Utility Functions."""
+from typing import NoReturn
+
+from PyQt6.QtCore import QCoreApplication
+from PyQt6.QtSql import QSqlQuery
+
+translate = QCoreApplication.translate
+
+
+def query_error(query: QSqlQuery) -> NoReturn:
+ """Standarized query error reporter."""
+ print(
+ translate("MainWindow", "SQL Error:\n")
+ + "{}\n{}\n{}:{}".format(
+ query.executedQuery(),
+ query.boundValues(),
+ query.lastError().type(),
+ query.lastError().text(),
+ )
+ )
+ raise Exception(translate("MainWindow", "SQL Error"))
diff --git a/main.py b/main.py
index c3cab8c..e715cee 100755
--- a/main.py
+++ b/main.py
@@ -9,56 +9,22 @@
import os
import re
import sys
-from datetime import datetime, timedelta
from typing import Optional
-from PyQt6.QtCore import (
- QCoreApplication,
- QEvent,
- QModelIndex,
- QResource,
- Qt,
- QTimer,
- pyqtSignal,
- pyqtSlot,
-)
-from PyQt6.QtGui import (
- QAction,
- QFont,
- QTextCharFormat,
- QTextCursor,
- QTextDocument,
- QTextListFormat,
-)
+from PyQt6.QtCore import (QCoreApplication, QEvent, QModelIndex, QResource,
+ pyqtSignal, pyqtSlot)
from PyQt6.QtSql import QSqlDatabase, QSqlQuery, QSqlQueryModel
-from PyQt6.QtWidgets import (
- QApplication,
- QFileDialog,
- QMainWindow,
- QMessageBox,
- QPushButton,
-)
+from PyQt6.QtWidgets import QApplication, QFileDialog, QMainWindow
+
-from lib import *
from lib.preferences import Preferences
+from lib import PersonDialog, Book, SessionDialog, ReadDialog, query_error
+
from ui.MainWindow import Ui_MainWindow
translate = QCoreApplication.translate
-def query_error(query: QSqlQuery) -> None:
- print(
- translate("MainWindow", "SQL Error:\n")
- + "{}\n{}\n{}:{}".format(
- query.executedQuery(),
- query.boundValues(),
- query.lastError().type(),
- query.lastError().text(),
- )
- )
- raise Exception(translate("MainWindow", "SQL Error"))
-
-
class MainWindow(QMainWindow, Ui_MainWindow):
def __init__(self) -> None:
super(MainWindow, self).__init__()
@@ -97,7 +63,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
@pyqtSlot(QModelIndex)
def selectedPerson(self, index: QModelIndex) -> None:
- person_id = index.siblingAtColumn(0).data()
self.actionEditPerson.setEnabled(True)
book_id = index.siblingAtColumn(3).data()
if not book_id or book_id < 0:
@@ -324,7 +289,7 @@ def main() -> int:
)
schema_update(db)
Preferences()
- window: QMainWindow = MainWindow()
+ window = MainWindow() # noqa: F841
return app.exec()
diff --git a/setup.cfg b/setup.cfg
new file mode 100644
index 0000000..4a486f7
--- /dev/null
+++ b/setup.cfg
@@ -0,0 +1,5 @@
+[pydocstyle]
+ignore = D100,D101,D102,D103,D107
+
+[flake8]
+ignore = E501,W503