Add StatusBar information
Updated workers.py to hold "current" values. Status bar is three widgets, status label, progressbar and load button. Fixes: #8, #9
This commit is contained in:
@@ -1,12 +1,10 @@
|
||||
from typing import Any, cast
|
||||
|
||||
from PySide6.QtCore import (
|
||||
QByteArray,
|
||||
QDate,
|
||||
QModelIndex,
|
||||
QPersistentModelIndex,
|
||||
QPoint,
|
||||
QSettings,
|
||||
Qt,
|
||||
Signal,
|
||||
Slot,
|
||||
@@ -15,19 +13,25 @@ from PySide6.QtGui import (
|
||||
QCloseEvent,
|
||||
QColor,
|
||||
)
|
||||
from PySide6.QtSql import QSqlTableModel
|
||||
from PySide6.QtSql import QSqlQuery, QSqlTableModel
|
||||
from PySide6.QtWidgets import (
|
||||
QAbstractItemView,
|
||||
QHBoxLayout,
|
||||
QHeaderView,
|
||||
QLabel,
|
||||
QMainWindow,
|
||||
QProgressBar,
|
||||
QPushButton,
|
||||
QSizePolicy,
|
||||
QStyledItemDelegate,
|
||||
QStyleOptionViewItem,
|
||||
QWidget,
|
||||
)
|
||||
|
||||
from docketModel import docketModel
|
||||
from lib.utils import QStyleOptionViewItemInit, readGeometry, writeGeometry
|
||||
from lib.utils import QStyleOptionViewItemInit, query_error, readGeometry, writeGeometry
|
||||
from ui.MainWindow import Ui_MainWindow
|
||||
from workers import updateThread
|
||||
from workers import loadCases, updateThread
|
||||
|
||||
|
||||
class dateDelegate(QStyledItemDelegate):
|
||||
@@ -115,7 +119,8 @@ class casesModel(QSqlTableModel):
|
||||
|
||||
class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
show_entries = Signal(int)
|
||||
|
||||
update_status = Signal()
|
||||
|
||||
loadThread = None
|
||||
|
||||
def __init__(self) -> None:
|
||||
@@ -169,6 +174,28 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
self.docketView.horizontalHeader().setSectionResizeMode(
|
||||
1, QHeaderView.ResizeMode.Stretch
|
||||
)
|
||||
|
||||
widget = QWidget()
|
||||
layout = QHBoxLayout(widget)
|
||||
self.status = QLabel("Status")
|
||||
layout.addWidget(self.status)
|
||||
layout.addStretch()
|
||||
self.progress = QProgressBar()
|
||||
self.progress.setRange(0,100)
|
||||
self.progress.setValue(0)
|
||||
self.progress.setMinimumWidth(150)
|
||||
self.progress.setMaximumWidth(150)
|
||||
self.progress.setSizePolicy(QSizePolicy.Policy.Fixed, QSizePolicy.Policy.Preferred)
|
||||
layout.addWidget(self.progress)
|
||||
self.loadButton = QPushButton()
|
||||
self.loadButton.setObjectName("loadButton")
|
||||
self.loadButton.setText("Load Cases")
|
||||
layout.addWidget(self.loadButton)
|
||||
self.statusbar.addWidget(widget,10)
|
||||
|
||||
self.loadButton.clicked.connect(self.loadCases)
|
||||
self.update_status.connect(self.statusBarUpdate)
|
||||
self.update_status.emit()
|
||||
return
|
||||
|
||||
def closeEvent(self, event: QCloseEvent) -> None:
|
||||
@@ -176,6 +203,48 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
||||
super().closeEvent(event)
|
||||
return
|
||||
|
||||
@Slot()
|
||||
def loadCases(self) -> None:
|
||||
if self.loadThread is None:
|
||||
self.loadThread = loadCases()
|
||||
self.loadThread.caseLoaded.connect(self.progress.setValue)
|
||||
self.loadThread.finished.connect(self.loadCasesDone)
|
||||
self.loadButton.setEnabled(False)
|
||||
self.loadThread.start()
|
||||
return
|
||||
@Slot()
|
||||
def loadCasesDone(self) -> None:
|
||||
self.loadButton.setEnabled(True)
|
||||
self.update_status.emit()
|
||||
return
|
||||
|
||||
@Slot()
|
||||
def statusBarUpdate(self) -> None:
|
||||
if self.loadThread is None:
|
||||
year = ''
|
||||
max = 'unknown'
|
||||
else:
|
||||
year = self.loadThread.year
|
||||
max = self.loadThread.number
|
||||
query = QSqlQuery()
|
||||
query.prepare("SELECT COUNT(*) AS number_active FROM cases WHERE active=1")
|
||||
if not query.exec():
|
||||
query_error(query)
|
||||
if query.next():
|
||||
active = query.value('number_active')
|
||||
query.prepare("select SUBSTRING(docket_id,1,2) AS year, "
|
||||
"SUBSTRING(docket_id,3,1) AS type, "
|
||||
"MAX(CAST(SUBSTRING(docket_id,4) AS INTEGER)) AS number "
|
||||
"FROM cases "
|
||||
"GROUP BY year, type "
|
||||
"ORDER BY type, year, number"
|
||||
"LIMIT 2")
|
||||
#if not query.exec():
|
||||
# query_error(query)
|
||||
msg=f"Oldest: {year}, Active: {active}, Max. Case: {max}"
|
||||
self.status.setText(msg)
|
||||
return
|
||||
|
||||
@Slot(QModelIndex) # type: ignore
|
||||
def rowClicked(self, index: QModelIndex) -> None:
|
||||
if not index.isValid():
|
||||
|
||||
68
workers.py
68
workers.py
@@ -4,7 +4,7 @@ import re
|
||||
import dateparser
|
||||
import requests
|
||||
from bs4 import BeautifulSoup, Tag
|
||||
from PySide6.QtCore import QDateTime, QThread
|
||||
from PySide6.QtCore import QDateTime, QThread, Signal
|
||||
from PySide6.QtSql import QSqlDatabase, QSqlQuery
|
||||
|
||||
from lib.utils import query_error
|
||||
@@ -223,9 +223,17 @@ def update_db(case_id: str, db: QSqlDatabase) -> int:
|
||||
#
|
||||
# If there is a linked case, we need to get the ID for that case.
|
||||
if linked is not None:
|
||||
#
|
||||
# If this case is on the Emergency Docket and it is linked to
|
||||
# a case on the regular docket, then this case is no longer active
|
||||
#
|
||||
deactivate = False
|
||||
|
||||
linked = linked.replace("Linked with ", "")
|
||||
for did in linked.split(","):
|
||||
did = did.strip()
|
||||
if re.match(r"\d+-\d+$", did):
|
||||
deactivate = True
|
||||
query.prepare("SELECT * FROM cases WHERE docket_id = :did")
|
||||
query.bindValue(":did", linked)
|
||||
if not query.exec():
|
||||
@@ -255,6 +263,14 @@ def update_db(case_id: str, db: QSqlDatabase) -> int:
|
||||
query.bindValue(":rhs", linked_id)
|
||||
if not query.exec():
|
||||
query_error(query)
|
||||
if re.match(r"\d+-\d+$", docket_id):
|
||||
deactivate = False
|
||||
if deactivate:
|
||||
query.prepare("UPDATE cases SET active=0 WHERE case_id = :cid")
|
||||
query.bindValue(":cid", case_id)
|
||||
if not query.exec():
|
||||
query_error(query)
|
||||
|
||||
#
|
||||
# XXX - Process lower courts
|
||||
#
|
||||
@@ -295,15 +311,19 @@ class updateThread(QThread):
|
||||
|
||||
|
||||
class loadCases(QThread):
|
||||
caseLoaded = Signal(int)
|
||||
year = QDateTime.currentDateTime().toString("yy")
|
||||
number = 0
|
||||
|
||||
def run(self) -> None:
|
||||
db = QSqlDatabase.cloneDatabase("qt_sql_default_connection", "load")
|
||||
if not db.open():
|
||||
raise Exception("db.open()")
|
||||
year = QDateTime.currentDateTime().toString("yy")
|
||||
|
||||
query = QSqlQuery(db)
|
||||
query.prepare("SELECT * FROM history WHERE year = :year")
|
||||
print(f"year = {year}")
|
||||
query.bindValue(":year", year)
|
||||
print(f"year = {self.year}")
|
||||
query.bindValue(":year", self.year)
|
||||
if not query.exec():
|
||||
query_error(query)
|
||||
|
||||
@@ -312,48 +332,49 @@ class loadCases(QThread):
|
||||
"INSERT INTO history (year, edocket, number) "
|
||||
"VALUES (:year, 0, 1)"
|
||||
)
|
||||
query.bindValue(":year", year)
|
||||
query.bindValue(":year", self.year)
|
||||
if not query.exec():
|
||||
query_error(query)
|
||||
edocket = 0
|
||||
number = 1
|
||||
self.number = 1
|
||||
history_id = query.lastInsertId()
|
||||
else:
|
||||
history_id = query.value("history_id")
|
||||
edocket = query.value("edocket")
|
||||
number = query.value("number")
|
||||
self.number = query.value("number")
|
||||
count = 0
|
||||
|
||||
while year > "00" and count < 100:
|
||||
while self.year > "00" and count < 100:
|
||||
self.caseLoaded.emit(count)
|
||||
query.prepare("SELECT * FROM cases WHERE docket_id = :did")
|
||||
if edocket == 1:
|
||||
docket_id = f"{year}A{number}"
|
||||
docket_id = f"{self.year}A{self.number}"
|
||||
else:
|
||||
docket_id = f"{year}-{number}"
|
||||
docket_id = f"{self.year}-{self.number}"
|
||||
query.bindValue(":did", docket_id)
|
||||
if not query.exec():
|
||||
query_error(query)
|
||||
if query.next():
|
||||
if query.value("active") == 0:
|
||||
print("Already exists and is inactive")
|
||||
number += 1
|
||||
self.number += 1
|
||||
continue
|
||||
result = update_db(docket_id, db)
|
||||
print(f"result: {result}")
|
||||
if result < 0:
|
||||
year = f"{int(year) - 1:02d}"
|
||||
if number > 1:
|
||||
self.year = f"{int(self.year) - 1:02d}"
|
||||
if self.number > 1:
|
||||
query.prepare(
|
||||
"UPDATE history set number = :number WHERE history_id=:hid"
|
||||
)
|
||||
query.bindValue(":number", number - 1)
|
||||
query.bindValue(":number", self.number - 1)
|
||||
query.bindValue(":hid", history_id)
|
||||
if not query.exec():
|
||||
query_error(query)
|
||||
|
||||
query.prepare("SELECT * FROM history WHERE year = :year")
|
||||
print(f"year = {year}")
|
||||
query.bindValue(":year", year)
|
||||
print(f"year = {self.year}")
|
||||
query.bindValue(":year", self.year)
|
||||
if not query.exec():
|
||||
query_error(query)
|
||||
|
||||
@@ -362,29 +383,30 @@ class loadCases(QThread):
|
||||
"INSERT INTO history (year, edocket, number) "
|
||||
"VALUES (:year, 0, 1)"
|
||||
)
|
||||
query.bindValue(":year", year)
|
||||
query.bindValue(":year", self.year)
|
||||
if not query.exec():
|
||||
query_error(query)
|
||||
edocket = 0
|
||||
number = 1
|
||||
self.number = 1
|
||||
history_id = query.lastInsertId()
|
||||
else:
|
||||
history_id = query.value("history_id")
|
||||
edocket = query.value("edocket")
|
||||
number = query.value("number")
|
||||
self.number = query.value("number")
|
||||
continue
|
||||
|
||||
number += 1
|
||||
self.number += 1
|
||||
count += 1
|
||||
if number > 1:
|
||||
if self.number > 1:
|
||||
query.prepare(
|
||||
"UPDATE history SET number= :number WHERE year = :year"
|
||||
)
|
||||
query.bindValue(":number", number)
|
||||
query.bindValue(":year", year)
|
||||
query.bindValue(":number", self.number)
|
||||
query.bindValue(":year", self.year)
|
||||
if not query.exec():
|
||||
query_error(query)
|
||||
db.close()
|
||||
del db
|
||||
QSqlDatabase.removeDatabase("load")
|
||||
self.caseLoaded.emit(0)
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user