Compare commits
8 Commits
543d0be7f2
...
8a6812e405
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8a6812e405 | ||
|
|
32cc0468e8 | ||
|
|
a8ffa6f231 | ||
|
|
7ff9146bd1 | ||
|
|
69d379ab10 | ||
|
|
ebc087f1f6 | ||
|
|
3d32ce2f34 | ||
|
|
b122ac06a9 |
@ -22,6 +22,7 @@ class Config(object):
|
||||
COLOUR_CURRENT_TAB = "#248f24"
|
||||
COLOUR_ENDING_TIMER = "#dc3545"
|
||||
COLOUR_EVEN_PLAYLIST = "#d9d9d9"
|
||||
COLOUR_LABEL_TEXT = "#000000"
|
||||
COLOUR_LONG_START = "#dc3545"
|
||||
COLOUR_NEXT_PLAYLIST = "#ffc107"
|
||||
COLOUR_NEXT_TAB = "#b38600"
|
||||
|
||||
@ -13,7 +13,7 @@ from mutagen.flac import FLAC # type: ignore
|
||||
from mutagen.mp3 import MP3 # type: ignore
|
||||
from pydub import AudioSegment, effects
|
||||
from pydub.utils import mediainfo
|
||||
from PyQt5.QtWidgets import QMessageBox
|
||||
from PyQt6.QtWidgets import QMainWindow, QMessageBox # type: ignore
|
||||
from tinytag import TinyTag # type: ignore
|
||||
from typing import Any, Dict, Optional, Union
|
||||
|
||||
@ -24,13 +24,14 @@ def ask_yes_no(title: str, question: str, default_yes: bool = False) -> bool:
|
||||
dlg = QMessageBox()
|
||||
dlg.setWindowTitle(title)
|
||||
dlg.setText(question)
|
||||
dlg.setStandardButtons(QMessageBox.Yes | QMessageBox.No)
|
||||
dlg.setIcon(QMessageBox.Question)
|
||||
dlg.setStandardButtons(
|
||||
QMessageBox.StandardButton.Yes | QMessageBox.StandardButton.No)
|
||||
dlg.setIcon(QMessageBox.Icon.Question)
|
||||
if default_yes:
|
||||
dlg.setDefaultButton(QMessageBox.Yes)
|
||||
button = dlg.exec_()
|
||||
dlg.setDefaultButton(QMessageBox.StandardButton.Yes)
|
||||
button = dlg.exec()
|
||||
|
||||
return button == QMessageBox.Yes
|
||||
return button == QMessageBox.StandardButton.Yes
|
||||
|
||||
|
||||
def fade_point(
|
||||
@ -353,16 +354,18 @@ def set_track_metadata(session, track):
|
||||
session.commit()
|
||||
|
||||
|
||||
def show_OK(title: str, msg: str) -> None:
|
||||
def show_OK(parent: QMainWindow, title: str, msg: str) -> None:
|
||||
"""Display a message to user"""
|
||||
|
||||
QMessageBox.information(None, title, msg, buttons=QMessageBox.Ok)
|
||||
QMessageBox.information(parent, title, msg,
|
||||
buttons=QMessageBox.StandardButton.Ok)
|
||||
|
||||
|
||||
def show_warning(title: str, msg: str) -> None:
|
||||
def show_warning(parent: QMainWindow, title: str, msg: str) -> None:
|
||||
"""Display a warning to user"""
|
||||
|
||||
QMessageBox.warning(None, title, msg, buttons=QMessageBox.Cancel)
|
||||
QMessageBox.warning(parent, title, msg,
|
||||
buttons=QMessageBox.StandardButton.Cancel)
|
||||
|
||||
|
||||
def trailing_silence(
|
||||
|
||||
@ -3,9 +3,9 @@ import urllib.parse
|
||||
from datetime import datetime
|
||||
from slugify import slugify # type: ignore
|
||||
from typing import Dict, Optional
|
||||
from PyQt5.QtCore import QUrl
|
||||
from PyQt5.QtWebEngineWidgets import QWebEngineView
|
||||
from PyQt5.QtWidgets import QTabWidget
|
||||
from PyQt6.QtCore import QUrl # type: ignore
|
||||
from PyQt6.QtWebEngineWidgets import QWebEngineView
|
||||
from PyQt6.QtWidgets import QTabWidget
|
||||
from config import Config
|
||||
|
||||
|
||||
|
||||
@ -10,7 +10,7 @@ from time import sleep
|
||||
|
||||
from log import log
|
||||
|
||||
from PyQt5.QtCore import (
|
||||
from PyQt6.QtCore import ( # type: ignore
|
||||
QRunnable,
|
||||
QThreadPool,
|
||||
)
|
||||
|
||||
@ -18,7 +18,7 @@ from typing import (
|
||||
Optional,
|
||||
)
|
||||
|
||||
from PyQt5.QtCore import (
|
||||
from PyQt6.QtCore import (
|
||||
pyqtSignal,
|
||||
QDate,
|
||||
QEvent,
|
||||
@ -29,14 +29,14 @@ from PyQt5.QtCore import (
|
||||
QTime,
|
||||
QTimer,
|
||||
)
|
||||
from PyQt5.QtGui import (
|
||||
from PyQt6.QtGui import (
|
||||
QColor,
|
||||
QFont,
|
||||
QMouseEvent,
|
||||
QPalette,
|
||||
QResizeEvent,
|
||||
)
|
||||
from PyQt5.QtWidgets import (
|
||||
from PyQt6.QtWidgets import (
|
||||
QApplication,
|
||||
QDialog,
|
||||
QFileDialog,
|
||||
@ -106,7 +106,7 @@ class CartButton(QPushButton):
|
||||
self.pgb.setTextVisible(False)
|
||||
self.pgb.setVisible(False)
|
||||
palette = self.pgb.palette()
|
||||
palette.setColor(QPalette.Highlight,
|
||||
palette.setColor(QPalette.ColorRole.Highlight,
|
||||
QColor(Config.COLOUR_CART_PROGRESSBAR))
|
||||
self.pgb.setPalette(palette)
|
||||
self.pgb.setGeometry(0, 0, self.width(), 10)
|
||||
@ -125,9 +125,9 @@ class CartButton(QPushButton):
|
||||
def event(self, event: QEvent) -> bool:
|
||||
"""Allow right click even when button is disabled"""
|
||||
|
||||
if event.type() == QEvent.MouseButtonRelease:
|
||||
if event.type() == QEvent.Type.MouseButtonRelease:
|
||||
mouse_event = cast(QMouseEvent, event)
|
||||
if mouse_event.button() == Qt.RightButton:
|
||||
if mouse_event.button() == Qt.MouseButton.RightButton:
|
||||
self.musicmuster.cart_edit(self, event)
|
||||
return True
|
||||
|
||||
@ -280,13 +280,6 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
|
||||
self.signals = MusicMusterSignals()
|
||||
|
||||
# Set colours that will be used by playlist row stripes
|
||||
palette = QPalette()
|
||||
palette.setColor(QPalette.Base, QColor(Config.COLOUR_EVEN_PLAYLIST))
|
||||
palette.setColor(QPalette.AlternateBase,
|
||||
QColor(Config.COLOUR_ODD_PLAYLIST))
|
||||
self.setPalette(palette)
|
||||
|
||||
self.set_main_window_size()
|
||||
self.lblSumPlaytime = QLabel("")
|
||||
self.statusbar.addPermanentWidget(self.lblSumPlaytime)
|
||||
@ -465,6 +458,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
if self.playing:
|
||||
event.ignore()
|
||||
helpers.show_warning(
|
||||
self,
|
||||
"Track playing",
|
||||
"Can't close application while track is playing")
|
||||
else:
|
||||
@ -574,6 +568,10 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
self.actionRenamePlaylist.triggered.connect(self.rename_playlist)
|
||||
self.actionResume.triggered.connect(self.resume)
|
||||
self.actionSave_as_template.triggered.connect(self.save_as_template)
|
||||
self.actionSearch_title_in_Songfacts.triggered.connect(
|
||||
lambda: self.tabPlaylist.currentWidget().lookup_row_in_songfacts())
|
||||
self.actionSearch_title_in_Wikipedia.triggered.connect(
|
||||
lambda: self.tabPlaylist.currentWidget().lookup_row_in_wikipedia())
|
||||
self.actionSearch.triggered.connect(self.search_playlist)
|
||||
self.actionSelect_next_track.triggered.connect(self.select_next_row)
|
||||
self.actionSelect_previous_track.triggered.connect(
|
||||
@ -843,7 +841,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
self,
|
||||
"About",
|
||||
f"MusicMuster {git_tag}\n\nDatabase: {dbname}",
|
||||
QMessageBox.Ok
|
||||
QMessageBox.StandardButton.Ok
|
||||
)
|
||||
|
||||
def get_one_track(self, session: scoped_session) -> Optional[Tracks]:
|
||||
@ -872,12 +870,12 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
"""Import track file"""
|
||||
|
||||
dlg = QFileDialog()
|
||||
dlg.setFileMode(QFileDialog.ExistingFiles)
|
||||
dlg.setViewMode(QFileDialog.Detail)
|
||||
dlg.setFileMode(QFileDialog.FileMode.ExistingFiles)
|
||||
dlg.setViewMode(QFileDialog.ViewMode.Detail)
|
||||
dlg.setDirectory(Config.IMPORT_DESTINATION)
|
||||
dlg.setNameFilter("Music files (*.flac *.mp3)")
|
||||
|
||||
if not dlg.exec_():
|
||||
if not dlg.exec():
|
||||
return
|
||||
|
||||
with Session() as session:
|
||||
@ -903,13 +901,14 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
txt += "\n"
|
||||
# Check whether to proceed if there were potential matches
|
||||
txt += "Proceed with import?"
|
||||
result = QMessageBox.question(self,
|
||||
result = QMessageBox.question(
|
||||
self,
|
||||
"Possible duplicates",
|
||||
txt,
|
||||
QMessageBox.Ok,
|
||||
QMessageBox.Cancel
|
||||
QMessageBox.StandardButton.Ok,
|
||||
QMessageBox.StandardButton.Cancel
|
||||
)
|
||||
if result == QMessageBox.Cancel:
|
||||
if result == QMessageBox.StandardButton.Cancel:
|
||||
return
|
||||
|
||||
# Import in separate thread
|
||||
@ -922,7 +921,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
self.import_thread.finished.connect(self.import_thread.deleteLater)
|
||||
self.worker.import_error.connect(
|
||||
lambda msg: helpers.show_warning(
|
||||
"Import error", "Error importing " + msg
|
||||
self, "Import error", "Error importing " + msg
|
||||
)
|
||||
)
|
||||
self.worker.importing.connect(
|
||||
@ -949,7 +948,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
|
||||
# Get header text
|
||||
dlg: QInputDialog = QInputDialog(self)
|
||||
dlg.setInputMode(QInputDialog.TextInput)
|
||||
dlg.setInputMode(QInputDialog.InputMode.TextInput)
|
||||
dlg.setLabelText("Header text:")
|
||||
dlg.resize(500, 100)
|
||||
ok = dlg.exec()
|
||||
@ -1335,7 +1334,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
while True:
|
||||
# Get name for new template
|
||||
dlg = QInputDialog(self)
|
||||
dlg.setInputMode(QInputDialog.TextInput)
|
||||
dlg.setInputMode(QInputDialog.InputMode.TextInput)
|
||||
dlg.setLabelText("Template name:")
|
||||
dlg.resize(500, 100)
|
||||
ok = dlg.exec()
|
||||
@ -1345,13 +1344,14 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
template_name = dlg.textValue()
|
||||
if template_name not in template_names:
|
||||
break
|
||||
helpers.show_warning("Duplicate template",
|
||||
helpers.show_warning(self,
|
||||
"Duplicate template",
|
||||
"Template name already in use"
|
||||
)
|
||||
Playlists.save_as_template(session,
|
||||
self.visible_playlist_tab().playlist_id,
|
||||
template_name)
|
||||
helpers.show_OK("Template", "Template saved")
|
||||
helpers.show_OK(self, "Template", "Template saved")
|
||||
|
||||
def search_playlist(self) -> None:
|
||||
"""Show text box to search playlist"""
|
||||
@ -1436,7 +1436,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
||||
"""Get name of playlist from user"""
|
||||
|
||||
dlg = QInputDialog(self)
|
||||
dlg.setInputMode(QInputDialog.TextInput)
|
||||
dlg.setInputMode(QInputDialog.InputMode.TextInput)
|
||||
dlg.setLabelText("Playlist name:")
|
||||
if default:
|
||||
dlg.setTextValue(default)
|
||||
@ -1732,11 +1732,11 @@ class CartDialog(QDialog):
|
||||
"""File select"""
|
||||
|
||||
dlg = QFileDialog()
|
||||
dlg.setFileMode(QFileDialog.ExistingFile)
|
||||
dlg.setViewMode(QFileDialog.Detail)
|
||||
dlg.setFileMode(QFileDialog.FileMode.ExistingFile)
|
||||
dlg.setViewMode(QFileDialog.ViewMode.Detail)
|
||||
dlg.setDirectory(Config.CART_DIRECTORY)
|
||||
dlg.setNameFilter("Music files (*.flac *.mp3)")
|
||||
if dlg.exec_():
|
||||
if dlg.exec():
|
||||
self.path = dlg.selectedFiles()[0]
|
||||
self.ui.lblPath.setText(self.path)
|
||||
|
||||
@ -1800,7 +1800,7 @@ class DbDialog(QDialog):
|
||||
track = None
|
||||
item = self.ui.matchList.currentItem()
|
||||
if item:
|
||||
track = item.data(Qt.UserRole)
|
||||
track = item.data(Qt.ItemDataRole.UserRole)
|
||||
self.add_track(track)
|
||||
|
||||
def add_selected_and_close(self) -> None:
|
||||
@ -1851,13 +1851,13 @@ class DbDialog(QDialog):
|
||||
f"[{helpers.ms_to_mmss(track.duration)}] "
|
||||
f"({helpers.get_relative_date(last_played)})"
|
||||
)
|
||||
t.setData(Qt.UserRole, track)
|
||||
t.setData(Qt.ItemDataRole.UserRole, track)
|
||||
self.ui.matchList.addItem(t)
|
||||
|
||||
def double_click(self, entry: QListWidgetItem) -> None:
|
||||
"""Add items that are double-clicked"""
|
||||
|
||||
track = entry.data(Qt.UserRole)
|
||||
track = entry.data(Qt.ItemDataRole.UserRole)
|
||||
self.add_track(track)
|
||||
# Select search text to make it easier for next search
|
||||
self.select_searchtext()
|
||||
@ -1875,7 +1875,7 @@ class DbDialog(QDialog):
|
||||
return
|
||||
|
||||
item = self.ui.matchList.currentItem()
|
||||
track = item.data(Qt.UserRole)
|
||||
track = item.data(Qt.ItemDataRole.UserRole)
|
||||
self.ui.dbPath.setText(track.path)
|
||||
|
||||
def title_artist_toggle(self) -> None:
|
||||
@ -1925,7 +1925,7 @@ class SelectPlaylistDialog(QDialog):
|
||||
for playlist in playlists:
|
||||
p = QListWidgetItem()
|
||||
p.setText(playlist.name)
|
||||
p.setData(Qt.UserRole, playlist)
|
||||
p.setData(Qt.ItemDataRole.UserRole, playlist)
|
||||
self.ui.lstPlaylists.addItem(p)
|
||||
|
||||
def __del__(self): # review
|
||||
@ -1940,13 +1940,13 @@ class SelectPlaylistDialog(QDialog):
|
||||
record.update(self.session, {'f_int': self.width()})
|
||||
|
||||
def list_doubleclick(self, entry): # review
|
||||
self.playlist = entry.data(Qt.UserRole)
|
||||
self.playlist = entry.data(Qt.ItemDataRole.UserRole)
|
||||
self.accept()
|
||||
|
||||
def open(self): # review
|
||||
if self.ui.lstPlaylists.selectedItems():
|
||||
item = self.ui.lstPlaylists.currentItem()
|
||||
self.playlist = item.data(Qt.UserRole)
|
||||
self.playlist = item.data(Qt.ItemDataRole.UserRole)
|
||||
self.accept()
|
||||
|
||||
|
||||
@ -1979,10 +1979,19 @@ if __name__ == "__main__":
|
||||
update_bitrates(session)
|
||||
engine.dispose()
|
||||
else:
|
||||
# Normal run
|
||||
try:
|
||||
Base.metadata.create_all(engine)
|
||||
app = QApplication(sys.argv)
|
||||
# PyQt6 defaults to a grey for labels
|
||||
palette = app.palette()
|
||||
palette.setColor(QPalette.ColorRole.WindowText,
|
||||
QColor(Config.COLOUR_LABEL_TEXT))
|
||||
# Set colours that will be used by playlist row stripes
|
||||
palette.setColor(QPalette.ColorRole.Base,
|
||||
QColor(Config.COLOUR_EVEN_PLAYLIST))
|
||||
palette.setColor(QPalette.ColorRole.AlternateBase,
|
||||
QColor(Config.COLOUR_ODD_PLAYLIST))
|
||||
app.setPalette(palette)
|
||||
win = Window()
|
||||
win.show()
|
||||
status = app.exec()
|
||||
|
||||
265
app/playlists.py
265
app/playlists.py
@ -4,13 +4,13 @@ import stackprinter # type: ignore
|
||||
import subprocess
|
||||
import threading
|
||||
|
||||
import obsws_python as obs
|
||||
import obsws_python as obs # type: ignore
|
||||
|
||||
from collections import namedtuple
|
||||
from datetime import datetime, timedelta
|
||||
from typing import Callable, cast, List, Optional, TYPE_CHECKING, Union
|
||||
|
||||
from PyQt5.QtCore import (
|
||||
from PyQt6.QtCore import (
|
||||
QEvent,
|
||||
QModelIndex,
|
||||
QObject,
|
||||
@ -18,17 +18,17 @@ from PyQt5.QtCore import (
|
||||
Qt,
|
||||
QTimer,
|
||||
)
|
||||
from PyQt5.QtGui import (
|
||||
from PyQt6.QtGui import (
|
||||
QAction,
|
||||
QBrush,
|
||||
QColor,
|
||||
QFont,
|
||||
QDropEvent,
|
||||
QKeyEvent
|
||||
)
|
||||
from PyQt5.QtWidgets import (
|
||||
from PyQt6.QtWidgets import (
|
||||
QAbstractItemDelegate,
|
||||
QAbstractItemView,
|
||||
QAction,
|
||||
QApplication,
|
||||
QLineEdit,
|
||||
QMainWindow,
|
||||
@ -36,6 +36,7 @@ from PyQt5.QtWidgets import (
|
||||
QMessageBox,
|
||||
QPlainTextEdit,
|
||||
QStyledItemDelegate,
|
||||
QStyleOptionViewItem,
|
||||
QTableWidget,
|
||||
QTableWidgetItem,
|
||||
QWidget
|
||||
@ -112,23 +113,30 @@ class NoSelectDelegate(QStyledItemDelegate):
|
||||
- closes the edit on control-return
|
||||
"""
|
||||
|
||||
def createEditor(self, parent, option, index):
|
||||
def createEditor(self, parent: QWidget, option: QStyleOptionViewItem,
|
||||
index: QModelIndex):
|
||||
"""
|
||||
Intercept createEditor call and make row just a little bit taller
|
||||
"""
|
||||
|
||||
if isinstance(self.parent(), PlaylistTab):
|
||||
p = cast(PlaylistTab, self.parent())
|
||||
if isinstance(index.data(), str):
|
||||
# Make row just a little bit taller
|
||||
row = index.row()
|
||||
row_height = self.parent().rowHeight(row)
|
||||
self.parent().setRowHeight(row,
|
||||
row_height + Config.MINIMUM_ROW_HEIGHT)
|
||||
row_height = p.rowHeight(row)
|
||||
p.setRowHeight(row, row_height + Config.MINIMUM_ROW_HEIGHT)
|
||||
return QPlainTextEdit(parent)
|
||||
return super().createEditor(parent, option, index)
|
||||
|
||||
def eventFilter(self, editor: QObject, event: QEvent):
|
||||
"""By default, QPlainTextEdit doesn't handle enter or return"""
|
||||
|
||||
if event.type() == QEvent.KeyPress:
|
||||
if event.type() == QEvent.Type.KeyPress:
|
||||
key_event = cast(QKeyEvent, event)
|
||||
if key_event.key() == Qt.Key_Return:
|
||||
if key_event.modifiers() == Qt.ControlModifier:
|
||||
if key_event.key() == Qt.Key.Key_Return:
|
||||
if key_event.modifiers() == (
|
||||
Qt.KeyboardModifier.ControlModifier
|
||||
):
|
||||
self.commitData.emit(editor)
|
||||
self.closeEditor.emit(editor)
|
||||
|
||||
@ -136,12 +144,12 @@ class NoSelectDelegate(QStyledItemDelegate):
|
||||
|
||||
|
||||
class PlaylistTab(QTableWidget):
|
||||
# Qt.UserRoles
|
||||
ROW_TRACK_ID = Qt.UserRole
|
||||
ROW_DURATION = Qt.UserRole + 1
|
||||
PLAYLISTROW_ID = Qt.UserRole + 2
|
||||
TRACK_PATH = Qt.UserRole + 3
|
||||
PLAYED = Qt.UserRole + 4
|
||||
# Qt.ItemDataRole.UserRoles
|
||||
ROW_TRACK_ID = Qt.ItemDataRole.UserRole
|
||||
ROW_DURATION = Qt.ItemDataRole.UserRole + 1
|
||||
PLAYLISTROW_ID = Qt.ItemDataRole.UserRole + 2
|
||||
TRACK_PATH = Qt.ItemDataRole.UserRole + 3
|
||||
PLAYED = Qt.ItemDataRole.UserRole + 4
|
||||
|
||||
def __init__(self, musicmuster: "Window",
|
||||
session: scoped_session,
|
||||
@ -154,11 +162,13 @@ class PlaylistTab(QTableWidget):
|
||||
# Set up widget
|
||||
self.menu = QMenu()
|
||||
self.setItemDelegate(NoSelectDelegate(self))
|
||||
self.setEditTriggers(QAbstractItemView.DoubleClicked)
|
||||
self.setEditTriggers(QAbstractItemView.EditTrigger.DoubleClicked)
|
||||
self.setAlternatingRowColors(True)
|
||||
self.setSelectionMode(QAbstractItemView.ExtendedSelection)
|
||||
self.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||
self.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
|
||||
self.setSelectionMode(
|
||||
QAbstractItemView.SelectionMode.ExtendedSelection)
|
||||
self.setSelectionBehavior(
|
||||
QAbstractItemView.SelectionBehavior.SelectRows)
|
||||
self.setVerticalScrollMode(QAbstractItemView.ScrollMode.ScrollPerPixel)
|
||||
self.setRowCount(0)
|
||||
self.setColumnCount(len(columns))
|
||||
self.v_header = self.verticalHeader()
|
||||
@ -183,11 +193,10 @@ class PlaylistTab(QTableWidget):
|
||||
self.viewport().setAcceptDrops(True)
|
||||
self.setDragDropOverwriteMode(False)
|
||||
self.setDropIndicatorShown(True)
|
||||
self.setDragDropMode(QAbstractItemView.InternalMove)
|
||||
self.setDragDropMode(QAbstractItemView.DragDropMode.InternalMove)
|
||||
self.setDragEnabled(False)
|
||||
|
||||
# This property defines how the widget shows a context menu
|
||||
self.setContextMenuPolicy(Qt.CustomContextMenu)
|
||||
self.setContextMenuPolicy(Qt.ContextMenuPolicy.CustomContextMenu)
|
||||
# This signal is emitted when the widget's contextMenuPolicy is
|
||||
# Qt::CustomContextMenu, and the user has requested a context
|
||||
# menu on the widget.
|
||||
@ -222,41 +231,37 @@ class PlaylistTab(QTableWidget):
|
||||
if not event.source() == self:
|
||||
return # We don't accept external drops
|
||||
|
||||
drop_row: int = self._drop_on(event)
|
||||
|
||||
rows: List = sorted(set(item.row() for item in self.selectedItems()))
|
||||
rows_to_move = [
|
||||
[QTableWidgetItem(
|
||||
self.item(row_index, column_index) # type: ignore
|
||||
) for
|
||||
column_index in range(self.columnCount())]
|
||||
for row_index in rows
|
||||
]
|
||||
for row_index in reversed(rows):
|
||||
self.removeRow(row_index)
|
||||
if row_index < drop_row:
|
||||
drop_row -= 1
|
||||
|
||||
for row_index, data in enumerate(rows_to_move):
|
||||
row_index += drop_row
|
||||
self.insertRow(row_index)
|
||||
for column_index, column_data in enumerate(data):
|
||||
self.setItem(row_index, column_index, column_data)
|
||||
row_set = set([mi.row() for mi in self.selectedIndexes()])
|
||||
targetRow = self.indexAt(event.position().toPoint()).row()
|
||||
row_set.discard(targetRow)
|
||||
rows = list(sorted(row_set))
|
||||
if not rows:
|
||||
return
|
||||
if targetRow == -1:
|
||||
targetRow = self.rowCount()
|
||||
for _ in range(len(rows)):
|
||||
self.insertRow(targetRow)
|
||||
rowMapping = dict() # Src row to target row.
|
||||
for idx, row in enumerate(rows):
|
||||
if row < targetRow:
|
||||
rowMapping[row] = targetRow + idx
|
||||
else:
|
||||
rowMapping[row + len(rows)] = targetRow + idx
|
||||
colCount = self.columnCount()
|
||||
for srcRow, tgtRow in sorted(rowMapping.items()):
|
||||
for col in range(0, colCount):
|
||||
self.setItem(tgtRow, col, self.takeItem(srcRow, col))
|
||||
for row in reversed(sorted(rowMapping.keys())):
|
||||
self.removeRow(row)
|
||||
event.accept()
|
||||
# The above doesn't handle column spans, which we use in note
|
||||
# rows. Check and fix:
|
||||
for row in range(drop_row, drop_row + len(rows_to_move)):
|
||||
if not self._get_row_track_id(row):
|
||||
self.setSpan(row, HEADER_NOTES_COLUMN, 1, len(columns))
|
||||
|
||||
# Scroll to drop zone
|
||||
self.scrollToItem(self.item(row, 1))
|
||||
self.scrollToItem(self.item(targetRow, 1),
|
||||
QAbstractItemView.ScrollHint.PositionAtCenter)
|
||||
|
||||
# Reset drag mode to allow row selection by dragging
|
||||
self.setDragEnabled(False)
|
||||
|
||||
super().dropEvent(event)
|
||||
|
||||
with Session() as session:
|
||||
self.save_playlist(session)
|
||||
self._update_start_end_times(session)
|
||||
@ -377,6 +382,13 @@ class PlaylistTab(QTableWidget):
|
||||
play controls and update display.
|
||||
"""
|
||||
|
||||
# If edit was cancelled (eg, by pressing ESC), the signal will
|
||||
# still be connected
|
||||
try:
|
||||
self.cellChanged.disconnect(self._cell_changed)
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
self.edit_cell_type = None
|
||||
self.musicmuster.enable_play_next_controls()
|
||||
self.musicmuster.actionSetNext.setEnabled(True)
|
||||
@ -451,6 +463,19 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
# # ########## Externally called functions ##########
|
||||
|
||||
def clear_next(self) -> None:
|
||||
"""
|
||||
Unmark next track
|
||||
"""
|
||||
|
||||
row_number = self._get_next_track_row_number()
|
||||
if not row_number:
|
||||
return
|
||||
self._set_row_colour_default(row_number)
|
||||
self.clear_selection()
|
||||
|
||||
self.musicmuster.set_next_plr_id(None, self)
|
||||
|
||||
def clear_selection(self) -> None:
|
||||
"""Unselect all tracks and reset drag mode"""
|
||||
|
||||
@ -608,6 +633,30 @@ class PlaylistTab(QTableWidget):
|
||||
self.save_playlist(session)
|
||||
self._update_start_end_times(session)
|
||||
|
||||
def lookup_row_in_songfacts(self) -> None:
|
||||
"""
|
||||
If there is a selected row and it is a track row,
|
||||
look up its title in songfacts.
|
||||
|
||||
If multiple rows are selected, only consider the first one.
|
||||
|
||||
Otherwise return.
|
||||
"""
|
||||
|
||||
self._look_up_row(website="songfacts")
|
||||
|
||||
def lookup_row_in_wikipedia(self) -> None:
|
||||
"""
|
||||
If there is a selected row and it is a track row,
|
||||
look up its title in wikipedia.
|
||||
|
||||
If multiple rows are selected, only consider the first one.
|
||||
|
||||
Otherwise return.
|
||||
"""
|
||||
|
||||
self._look_up_row(website="wikipedia")
|
||||
|
||||
def play_ended(self) -> None:
|
||||
"""
|
||||
Called by musicmuster when play has ended.
|
||||
@ -710,7 +759,8 @@ class PlaylistTab(QTableWidget):
|
||||
if scroll_to_top:
|
||||
row0_item = self.item(0, 0)
|
||||
if row0_item:
|
||||
self.scrollToItem(row0_item, QAbstractItemView.PositionAtTop)
|
||||
self.scrollToItem(row0_item,
|
||||
QAbstractItemView.ScrollHint.PositionAtTop)
|
||||
|
||||
# Set widths
|
||||
self._set_column_widths(session)
|
||||
@ -739,19 +789,6 @@ class PlaylistTab(QTableWidget):
|
||||
for row in sorted(row_numbers, reverse=True):
|
||||
self.removeRow(row)
|
||||
|
||||
def clear_next(self) -> None:
|
||||
"""
|
||||
Unmark next track
|
||||
"""
|
||||
|
||||
row_number = self._get_next_track_row_number()
|
||||
if not row_number:
|
||||
return
|
||||
self._set_row_colour_default(row_number)
|
||||
self.clear_selection()
|
||||
|
||||
self.musicmuster.set_next_plr_id(None, self)
|
||||
|
||||
def save_playlist(self, session: scoped_session) -> None:
|
||||
"""
|
||||
Get the PlaylistRow objects for each row in the display. Correct
|
||||
@ -974,11 +1011,6 @@ class PlaylistTab(QTableWidget):
|
||||
# ----------------------
|
||||
self.menu.addSeparator()
|
||||
|
||||
# Look up in songfacts
|
||||
if track_row:
|
||||
self._add_context_menu("Songfacts",
|
||||
lambda: self._songfacts(row_number))
|
||||
|
||||
# Remove track from row
|
||||
if track_row and not current and not next_row:
|
||||
self._add_context_menu('Remove track from row',
|
||||
@ -1047,7 +1079,7 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
item = self.itemAt(pos)
|
||||
self._build_context_menu(item)
|
||||
self.menu.exec_(self.mapToGlobal(pos))
|
||||
self.menu.exec(self.mapToGlobal(pos))
|
||||
|
||||
def _copy_path(self, row_number: int) -> None:
|
||||
"""
|
||||
@ -1069,8 +1101,8 @@ class PlaylistTab(QTableWidget):
|
||||
track_path = track_path.replace(old, new)
|
||||
|
||||
cb = QApplication.clipboard()
|
||||
cb.clear(mode=cb.Clipboard)
|
||||
cb.setText(track_path, mode=cb.Clipboard)
|
||||
cb.clear(mode=cb.Mode.Clipboard)
|
||||
cb.setText(track_path, mode=cb.Mode.Clipboard)
|
||||
|
||||
def _delete_rows(self) -> None:
|
||||
"""
|
||||
@ -1114,18 +1146,6 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
self._update_start_end_times(session)
|
||||
|
||||
def _drop_on(self, event):
|
||||
"""
|
||||
https://stackoverflow.com/questions/26227885/drag-and-drop-rows-within-qtablewidget
|
||||
"""
|
||||
|
||||
index = self.indexAt(event.pos())
|
||||
if not index.isValid():
|
||||
return self.rowCount()
|
||||
|
||||
return (index.row() + 1 if self._is_below(event.pos(), index)
|
||||
else index.row())
|
||||
|
||||
def _find_next_track_row(self, session: scoped_session,
|
||||
starting_row: Optional[int] = None) \
|
||||
-> Optional[int]:
|
||||
@ -1371,28 +1391,43 @@ class PlaylistTab(QTableWidget):
|
||||
txt = f"Can't find {track_id=}"
|
||||
|
||||
info: QMessageBox = QMessageBox(self)
|
||||
info.setIcon(QMessageBox.Information)
|
||||
info.setIcon(QMessageBox.Icon.Information)
|
||||
info.setText(txt)
|
||||
info.setStandardButtons(QMessageBox.Ok)
|
||||
info.setDefaultButton(QMessageBox.Cancel)
|
||||
info.setStandardButtons(QMessageBox.StandardButton.Ok)
|
||||
info.setDefaultButton(QMessageBox.StandardButton.Cancel)
|
||||
info.exec()
|
||||
|
||||
def _is_below(self, pos, index): # review
|
||||
def _look_up_row(self, website: str) -> None:
|
||||
"""
|
||||
https://stackoverflow.com/questions/26227885/drag-and-drop-rows-within-qtablewidget
|
||||
If there is a selected row and it is a track row,
|
||||
look up its title in the passed website
|
||||
|
||||
If multiple rows are selected, only consider the first one.
|
||||
|
||||
Otherwise return.
|
||||
"""
|
||||
|
||||
rect = self.visualRect(index)
|
||||
margin = 2
|
||||
if pos.y() - rect.top() < margin:
|
||||
return False
|
||||
elif rect.bottom() - pos.y() < margin:
|
||||
return True
|
||||
return (
|
||||
rect.contains(pos, True) and not
|
||||
(int(self.model().flags(index)) & Qt.ItemIsDropEnabled)
|
||||
and pos.y() >= rect.center().y() # noqa W503
|
||||
selected_row = self._get_selected_row()
|
||||
if not selected_row:
|
||||
return
|
||||
|
||||
if not self._get_row_track_id(selected_row):
|
||||
return
|
||||
|
||||
title = self._get_row_title(selected_row)
|
||||
|
||||
if website == "wikipedia":
|
||||
QTimer.singleShot(
|
||||
0,
|
||||
lambda: self.musicmuster.tabInfolist.open_in_wikipedia(title)
|
||||
)
|
||||
elif website == "songfacts":
|
||||
QTimer.singleShot(
|
||||
0,
|
||||
lambda: self.musicmuster.tabInfolist.open_in_songfacts(title)
|
||||
)
|
||||
else:
|
||||
return
|
||||
|
||||
def _mark_unplayed(self) -> None:
|
||||
"""
|
||||
@ -1613,7 +1648,8 @@ class PlaylistTab(QTableWidget):
|
||||
padding_required -= 1
|
||||
|
||||
scroll_item = self.item(top_row, 0)
|
||||
self.scrollToItem(scroll_item, QAbstractItemView.PositionAtTop)
|
||||
self.scrollToItem(scroll_item,
|
||||
QAbstractItemView.ScrollHint.PositionAtTop)
|
||||
|
||||
def _search(self, next: bool = True) -> None:
|
||||
"""
|
||||
@ -1690,11 +1726,6 @@ class PlaylistTab(QTableWidget):
|
||||
self.musicmuster.lblSumPlaytime.setText("")
|
||||
return
|
||||
|
||||
# If only one row is selected and it's a track row, show
|
||||
# Wikipedia page for that track
|
||||
if len(selected_rows) == 1:
|
||||
QTimer.singleShot(0, lambda: self._wikipedia(selected_rows[0]))
|
||||
|
||||
ms = 0
|
||||
for row_number in selected_rows:
|
||||
ms += self._get_row_duration(row_number)
|
||||
@ -2113,13 +2144,6 @@ class PlaylistTab(QTableWidget):
|
||||
|
||||
return item
|
||||
|
||||
def _songfacts(self, row_number: int) -> None:
|
||||
"""Look up passed row title in songfacts and display info tab"""
|
||||
|
||||
title = self._get_row_title(row_number)
|
||||
|
||||
self.musicmuster.tabInfolist.open_in_songfacts(title)
|
||||
|
||||
def _track_time_between_rows(self, session: scoped_session,
|
||||
from_plr: PlaylistRows,
|
||||
to_plr: PlaylistRows) -> int:
|
||||
@ -2282,12 +2306,3 @@ class PlaylistTab(QTableWidget):
|
||||
self._get_row_duration(row_number))
|
||||
|
||||
self._update_section_headers(session)
|
||||
|
||||
def _wikipedia(self, row_number: int) -> None:
|
||||
"""Look up passed row title in Wikipedia and display info tab"""
|
||||
|
||||
title = self._get_row_title(row_number)
|
||||
if not title:
|
||||
return
|
||||
|
||||
self.musicmuster.tabInfolist.open_in_wikipedia(title)
|
||||
|
||||
@ -13,8 +13,6 @@
|
||||
<property name="windowTitle">
|
||||
<string>Dialog</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_2">
|
||||
<item row="0" column="0">
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label">
|
||||
@ -23,17 +21,13 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="0" column="1">
|
||||
<item row="0" column="1" colspan="2">
|
||||
<widget class="QLineEdit" name="searchString"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<item row="1" column="0" colspan="3">
|
||||
<widget class="QListWidget" name="matchList"/>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout_2">
|
||||
<item>
|
||||
<item row="2" column="0" colspan="2">
|
||||
<widget class="QLabel" name="lblNote">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Fixed" vsizetype="Preferred">
|
||||
@ -58,13 +52,18 @@
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<item row="2" column="2">
|
||||
<widget class="QLineEdit" name="txtNote"/>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item>
|
||||
<item row="3" column="0" colspan="3">
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="dbPath">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QRadioButton" name="radioTitle">
|
||||
<property name="text">
|
||||
@ -121,13 +120,6 @@
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
<item row="3" column="0">
|
||||
<widget class="QLabel" name="dbPath">
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
|
||||
@ -1,12 +1,13 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'ui/dlg_SelectPlaylist.ui'
|
||||
# Form implementation generated from reading ui file 'app/ui/dlg_SelectPlaylist.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.11.3
|
||||
# Created by: PyQt6 UI code generator 6.5.0
|
||||
#
|
||||
# WARNING! All changes made in this file will be lost!
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||
# run again. Do not edit this file unless you know what you are doing.
|
||||
|
||||
|
||||
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
|
||||
class Ui_dlgSelectPlaylist(object):
|
||||
def setupUi(self, dlgSelectPlaylist):
|
||||
@ -14,21 +15,20 @@ class Ui_dlgSelectPlaylist(object):
|
||||
dlgSelectPlaylist.resize(276, 150)
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(dlgSelectPlaylist)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.lstPlaylists = QtWidgets.QListWidget(dlgSelectPlaylist)
|
||||
self.lstPlaylists = QtWidgets.QListWidget(parent=dlgSelectPlaylist)
|
||||
self.lstPlaylists.setObjectName("lstPlaylists")
|
||||
self.verticalLayout.addWidget(self.lstPlaylists)
|
||||
self.buttonBox = QtWidgets.QDialogButtonBox(dlgSelectPlaylist)
|
||||
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
|
||||
self.buttonBox = QtWidgets.QDialogButtonBox(parent=dlgSelectPlaylist)
|
||||
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
|
||||
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
|
||||
self.buttonBox.setObjectName("buttonBox")
|
||||
self.verticalLayout.addWidget(self.buttonBox)
|
||||
|
||||
self.retranslateUi(dlgSelectPlaylist)
|
||||
self.buttonBox.accepted.connect(dlgSelectPlaylist.accept)
|
||||
self.buttonBox.rejected.connect(dlgSelectPlaylist.reject)
|
||||
self.buttonBox.accepted.connect(dlgSelectPlaylist.accept) # type: ignore
|
||||
self.buttonBox.rejected.connect(dlgSelectPlaylist.reject) # type: ignore
|
||||
QtCore.QMetaObject.connectSlotsByName(dlgSelectPlaylist)
|
||||
|
||||
def retranslateUi(self, dlgSelectPlaylist):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
dlgSelectPlaylist.setWindowTitle(_translate("dlgSelectPlaylist", "Dialog"))
|
||||
|
||||
|
||||
@ -1,81 +1,68 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'app/ui/dlg_SearchDatabase.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.6
|
||||
# Created by: PyQt6 UI code generator 6.5.0
|
||||
#
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||
# run again. Do not edit this file unless you know what you are doing.
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||
|
||||
|
||||
class Ui_Dialog(object):
|
||||
def setupUi(self, Dialog):
|
||||
Dialog.setObjectName("Dialog")
|
||||
Dialog.resize(584, 377)
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout(Dialog)
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.gridLayout = QtWidgets.QGridLayout()
|
||||
self.gridLayout = QtWidgets.QGridLayout(Dialog)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.label = QtWidgets.QLabel(Dialog)
|
||||
self.label = QtWidgets.QLabel(parent=Dialog)
|
||||
self.label.setObjectName("label")
|
||||
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
|
||||
self.searchString = QtWidgets.QLineEdit(Dialog)
|
||||
self.searchString = QtWidgets.QLineEdit(parent=Dialog)
|
||||
self.searchString.setObjectName("searchString")
|
||||
self.gridLayout.addWidget(self.searchString, 0, 1, 1, 1)
|
||||
self.verticalLayout.addLayout(self.gridLayout)
|
||||
self.matchList = QtWidgets.QListWidget(Dialog)
|
||||
self.gridLayout.addWidget(self.searchString, 0, 1, 1, 2)
|
||||
self.matchList = QtWidgets.QListWidget(parent=Dialog)
|
||||
self.matchList.setObjectName("matchList")
|
||||
self.verticalLayout.addWidget(self.matchList)
|
||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||
self.lblNote = QtWidgets.QLabel(Dialog)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Fixed, QtWidgets.QSizePolicy.Preferred)
|
||||
self.gridLayout.addWidget(self.matchList, 1, 0, 1, 3)
|
||||
self.lblNote = QtWidgets.QLabel(parent=Dialog)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Fixed, QtWidgets.QSizePolicy.Policy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.lblNote.sizePolicy().hasHeightForWidth())
|
||||
self.lblNote.setSizePolicy(sizePolicy)
|
||||
self.lblNote.setMaximumSize(QtCore.QSize(46, 16777215))
|
||||
self.lblNote.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)
|
||||
self.lblNote.setAlignment(QtCore.Qt.AlignmentFlag.AlignLeading|QtCore.Qt.AlignmentFlag.AlignLeft|QtCore.Qt.AlignmentFlag.AlignTop)
|
||||
self.lblNote.setObjectName("lblNote")
|
||||
self.horizontalLayout_2.addWidget(self.lblNote)
|
||||
self.txtNote = QtWidgets.QLineEdit(Dialog)
|
||||
self.gridLayout.addWidget(self.lblNote, 2, 0, 1, 2)
|
||||
self.txtNote = QtWidgets.QLineEdit(parent=Dialog)
|
||||
self.txtNote.setObjectName("txtNote")
|
||||
self.horizontalLayout_2.addWidget(self.txtNote)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout_2)
|
||||
self.gridLayout.addWidget(self.txtNote, 2, 2, 1, 1)
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.radioTitle = QtWidgets.QRadioButton(Dialog)
|
||||
self.dbPath = QtWidgets.QLabel(parent=Dialog)
|
||||
self.dbPath.setText("")
|
||||
self.dbPath.setObjectName("dbPath")
|
||||
self.horizontalLayout.addWidget(self.dbPath)
|
||||
self.radioTitle = QtWidgets.QRadioButton(parent=Dialog)
|
||||
self.radioTitle.setChecked(True)
|
||||
self.radioTitle.setObjectName("radioTitle")
|
||||
self.horizontalLayout.addWidget(self.radioTitle)
|
||||
self.radioArtist = QtWidgets.QRadioButton(Dialog)
|
||||
self.radioArtist = QtWidgets.QRadioButton(parent=Dialog)
|
||||
self.radioArtist.setObjectName("radioArtist")
|
||||
self.horizontalLayout.addWidget(self.radioArtist)
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
|
||||
self.horizontalLayout.addItem(spacerItem)
|
||||
self.btnAdd = QtWidgets.QPushButton(Dialog)
|
||||
self.btnAdd = QtWidgets.QPushButton(parent=Dialog)
|
||||
self.btnAdd.setDefault(True)
|
||||
self.btnAdd.setObjectName("btnAdd")
|
||||
self.horizontalLayout.addWidget(self.btnAdd)
|
||||
self.btnAddClose = QtWidgets.QPushButton(Dialog)
|
||||
self.btnAddClose = QtWidgets.QPushButton(parent=Dialog)
|
||||
self.btnAddClose.setObjectName("btnAddClose")
|
||||
self.horizontalLayout.addWidget(self.btnAddClose)
|
||||
self.btnClose = QtWidgets.QPushButton(Dialog)
|
||||
self.btnClose = QtWidgets.QPushButton(parent=Dialog)
|
||||
self.btnClose.setObjectName("btnClose")
|
||||
self.horizontalLayout.addWidget(self.btnClose)
|
||||
self.verticalLayout.addLayout(self.horizontalLayout)
|
||||
self.dbPath = QtWidgets.QLabel(Dialog)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Maximum, QtWidgets.QSizePolicy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.dbPath.sizePolicy().hasHeightForWidth())
|
||||
self.dbPath.setSizePolicy(sizePolicy)
|
||||
self.dbPath.setText("")
|
||||
self.dbPath.setObjectName("dbPath")
|
||||
self.verticalLayout.addWidget(self.dbPath)
|
||||
self.gridLayout.addLayout(self.horizontalLayout, 3, 0, 1, 3)
|
||||
self.lblNote.setBuddy(self.txtNote)
|
||||
|
||||
self.retranslateUi(Dialog)
|
||||
|
||||
@ -1,33 +1,31 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'ui/downloadcsv.ui'
|
||||
# Form implementation generated from reading ui file 'app/ui/downloadcsv.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.6
|
||||
# Created by: PyQt6 UI code generator 6.5.0
|
||||
#
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||
# run again. Do not edit this file unless you know what you are doing.
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||
|
||||
|
||||
class Ui_DateSelect(object):
|
||||
def setupUi(self, DateSelect):
|
||||
DateSelect.setObjectName("DateSelect")
|
||||
DateSelect.resize(280, 166)
|
||||
self.buttonBox = QtWidgets.QDialogButtonBox(DateSelect)
|
||||
self.buttonBox = QtWidgets.QDialogButtonBox(parent=DateSelect)
|
||||
self.buttonBox.setGeometry(QtCore.QRect(70, 110, 191, 32))
|
||||
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
|
||||
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok)
|
||||
self.buttonBox.setOrientation(QtCore.Qt.Orientation.Horizontal)
|
||||
self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.StandardButton.Cancel|QtWidgets.QDialogButtonBox.StandardButton.Ok)
|
||||
self.buttonBox.setObjectName("buttonBox")
|
||||
self.dateTimeEdit = QtWidgets.QDateTimeEdit(DateSelect)
|
||||
self.dateTimeEdit = QtWidgets.QDateTimeEdit(parent=DateSelect)
|
||||
self.dateTimeEdit.setGeometry(QtCore.QRect(70, 60, 194, 28))
|
||||
self.dateTimeEdit.setCalendarPopup(True)
|
||||
self.dateTimeEdit.setObjectName("dateTimeEdit")
|
||||
self.label = QtWidgets.QLabel(DateSelect)
|
||||
self.label = QtWidgets.QLabel(parent=DateSelect)
|
||||
self.label.setGeometry(QtCore.QRect(10, 20, 261, 19))
|
||||
self.label.setObjectName("label")
|
||||
self.label_2 = QtWidgets.QLabel(DateSelect)
|
||||
self.label_2 = QtWidgets.QLabel(parent=DateSelect)
|
||||
self.label_2.setGeometry(QtCore.QRect(15, 66, 51, 19))
|
||||
self.label_2.setObjectName("label_2")
|
||||
|
||||
|
||||
@ -551,10 +551,12 @@ padding-left: 8px;</string>
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>40</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
<property name="styleSheet">
|
||||
<string notr="true">color: black;</string>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>00:00</string>
|
||||
</property>
|
||||
@ -600,7 +602,6 @@ padding-left: 8px;</string>
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>40</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
@ -649,7 +650,6 @@ padding-left: 8px;</string>
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>40</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
@ -681,15 +681,9 @@ padding-left: 8px;</string>
|
||||
<property name="frameShadow">
|
||||
<enum>QFrame::Raised</enum>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout_5">
|
||||
<item row="0" column="0">
|
||||
<widget class="QLabel" name="label_6">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>10</y>
|
||||
<width>31</width>
|
||||
<height>19</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>End</string>
|
||||
</property>
|
||||
@ -697,20 +691,13 @@ padding-left: 8px;</string>
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item row="1" column="0">
|
||||
<widget class="QLabel" name="label_end_timer">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>10</x>
|
||||
<y>48</y>
|
||||
<width>132</width>
|
||||
<height>54</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<family>FreeSans</family>
|
||||
<pointsize>40</pointsize>
|
||||
<weight>50</weight>
|
||||
<bold>false</bold>
|
||||
</font>
|
||||
</property>
|
||||
@ -721,6 +708,8 @@ padding-left: 8px;</string>
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
@ -823,7 +812,7 @@ padding-left: 8px;</string>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1280</width>
|
||||
<height>26</height>
|
||||
<height>29</height>
|
||||
</rect>
|
||||
</property>
|
||||
<widget class="QMenu" name="menuFile">
|
||||
@ -880,6 +869,9 @@ padding-left: 8px;</string>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionSelect_next_track"/>
|
||||
<addaction name="actionSelect_previous_track"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="actionSearch_title_in_Wikipedia"/>
|
||||
<addaction name="actionSearch_title_in_Songfacts"/>
|
||||
</widget>
|
||||
<widget class="QMenu" name="menuHelp">
|
||||
<property name="title">
|
||||
@ -958,7 +950,7 @@ padding-left: 8px;</string>
|
||||
<string>F&ade</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+S</string>
|
||||
<string>Ctrl+Z</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionStop">
|
||||
@ -1205,6 +1197,22 @@ padding-left: 8px;</string>
|
||||
<string>Ctrl+R</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSearch_title_in_Wikipedia">
|
||||
<property name="text">
|
||||
<string>Search title in Wikipedia</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+W</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="actionSearch_title_in_Songfacts">
|
||||
<property name="text">
|
||||
<string>Search title in Songfacts</string>
|
||||
</property>
|
||||
<property name="shortcut">
|
||||
<string>Ctrl+S</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
|
||||
@ -1,14 +1,12 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'app/ui/main_window.ui'
|
||||
#
|
||||
# Created by: PyQt5 UI code generator 5.15.9
|
||||
# Created by: PyQt6 UI code generator 6.5.0
|
||||
#
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
|
||||
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
|
||||
# run again. Do not edit this file unless you know what you are doing.
|
||||
|
||||
|
||||
from PyQt5 import QtCore, QtGui, QtWidgets
|
||||
from PyQt6 import QtCore, QtGui, QtWidgets
|
||||
|
||||
|
||||
class Ui_MainWindow(object):
|
||||
@ -17,10 +15,10 @@ class Ui_MainWindow(object):
|
||||
MainWindow.resize(1280, 857)
|
||||
MainWindow.setMinimumSize(QtCore.QSize(1280, 0))
|
||||
icon = QtGui.QIcon()
|
||||
icon.addPixmap(QtGui.QPixmap(":/icons/musicmuster"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
icon.addPixmap(QtGui.QPixmap(":/icons/musicmuster"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
|
||||
MainWindow.setWindowIcon(icon)
|
||||
MainWindow.setStyleSheet("")
|
||||
self.centralwidget = QtWidgets.QWidget(MainWindow)
|
||||
self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
|
||||
self.centralwidget.setObjectName("centralwidget")
|
||||
self.gridLayout_4 = QtWidgets.QGridLayout(self.centralwidget)
|
||||
self.gridLayout_4.setObjectName("gridLayout_4")
|
||||
@ -28,8 +26,8 @@ class Ui_MainWindow(object):
|
||||
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
|
||||
self.verticalLayout_3 = QtWidgets.QVBoxLayout()
|
||||
self.verticalLayout_3.setObjectName("verticalLayout_3")
|
||||
self.previous_track_2 = QtWidgets.QLabel(self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
self.previous_track_2 = QtWidgets.QLabel(parent=self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.previous_track_2.sizePolicy().hasHeightForWidth())
|
||||
@ -41,11 +39,11 @@ class Ui_MainWindow(object):
|
||||
self.previous_track_2.setFont(font)
|
||||
self.previous_track_2.setStyleSheet("background-color: #f8d7da;\n"
|
||||
"border: 1px solid rgb(85, 87, 83);")
|
||||
self.previous_track_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.previous_track_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
|
||||
self.previous_track_2.setObjectName("previous_track_2")
|
||||
self.verticalLayout_3.addWidget(self.previous_track_2)
|
||||
self.current_track_2 = QtWidgets.QLabel(self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
self.current_track_2 = QtWidgets.QLabel(parent=self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.current_track_2.sizePolicy().hasHeightForWidth())
|
||||
@ -57,11 +55,11 @@ class Ui_MainWindow(object):
|
||||
self.current_track_2.setFont(font)
|
||||
self.current_track_2.setStyleSheet("background-color: #d4edda;\n"
|
||||
"border: 1px solid rgb(85, 87, 83);")
|
||||
self.current_track_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.current_track_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
|
||||
self.current_track_2.setObjectName("current_track_2")
|
||||
self.verticalLayout_3.addWidget(self.current_track_2)
|
||||
self.next_track_2 = QtWidgets.QLabel(self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
self.next_track_2 = QtWidgets.QLabel(parent=self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.next_track_2.sizePolicy().hasHeightForWidth())
|
||||
@ -73,14 +71,14 @@ class Ui_MainWindow(object):
|
||||
self.next_track_2.setFont(font)
|
||||
self.next_track_2.setStyleSheet("background-color: #fff3cd;\n"
|
||||
"border: 1px solid rgb(85, 87, 83);")
|
||||
self.next_track_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.next_track_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
|
||||
self.next_track_2.setObjectName("next_track_2")
|
||||
self.verticalLayout_3.addWidget(self.next_track_2)
|
||||
self.horizontalLayout_3.addLayout(self.verticalLayout_3)
|
||||
self.verticalLayout = QtWidgets.QVBoxLayout()
|
||||
self.verticalLayout.setObjectName("verticalLayout")
|
||||
self.hdrPreviousTrack = QtWidgets.QLabel(self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
self.hdrPreviousTrack = QtWidgets.QLabel(parent=self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.hdrPreviousTrack.sizePolicy().hasHeightForWidth())
|
||||
@ -97,8 +95,8 @@ class Ui_MainWindow(object):
|
||||
self.hdrPreviousTrack.setWordWrap(False)
|
||||
self.hdrPreviousTrack.setObjectName("hdrPreviousTrack")
|
||||
self.verticalLayout.addWidget(self.hdrPreviousTrack)
|
||||
self.hdrCurrentTrack = QtWidgets.QPushButton(self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
self.hdrCurrentTrack = QtWidgets.QPushButton(parent=self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.hdrCurrentTrack.sizePolicy().hasHeightForWidth())
|
||||
@ -115,8 +113,8 @@ class Ui_MainWindow(object):
|
||||
self.hdrCurrentTrack.setFlat(True)
|
||||
self.hdrCurrentTrack.setObjectName("hdrCurrentTrack")
|
||||
self.verticalLayout.addWidget(self.hdrCurrentTrack)
|
||||
self.hdrNextTrack = QtWidgets.QPushButton(self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
|
||||
self.hdrNextTrack = QtWidgets.QPushButton(parent=self.centralwidget)
|
||||
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.hdrNextTrack.sizePolicy().hasHeightForWidth())
|
||||
@ -133,74 +131,74 @@ class Ui_MainWindow(object):
|
||||
self.hdrNextTrack.setObjectName("hdrNextTrack")
|
||||
self.verticalLayout.addWidget(self.hdrNextTrack)
|
||||
self.horizontalLayout_3.addLayout(self.verticalLayout)
|
||||
self.frame_2 = QtWidgets.QFrame(self.centralwidget)
|
||||
self.frame_2 = QtWidgets.QFrame(parent=self.centralwidget)
|
||||
self.frame_2.setMaximumSize(QtCore.QSize(230, 16777215))
|
||||
self.frame_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||
self.frame_2.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
self.frame_2.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||
self.frame_2.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||
self.frame_2.setObjectName("frame_2")
|
||||
self.gridLayout_2 = QtWidgets.QGridLayout(self.frame_2)
|
||||
self.gridLayout_2.setObjectName("gridLayout_2")
|
||||
self.lblTOD = QtWidgets.QLabel(self.frame_2)
|
||||
self.lblTOD = QtWidgets.QLabel(parent=self.frame_2)
|
||||
self.lblTOD.setMinimumSize(QtCore.QSize(208, 109))
|
||||
font = QtGui.QFont()
|
||||
font.setPointSize(35)
|
||||
self.lblTOD.setFont(font)
|
||||
self.lblTOD.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.lblTOD.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
||||
self.lblTOD.setObjectName("lblTOD")
|
||||
self.gridLayout_2.addWidget(self.lblTOD, 0, 0, 1, 1)
|
||||
self.horizontalLayout_3.addWidget(self.frame_2)
|
||||
self.gridLayout_4.addLayout(self.horizontalLayout_3, 0, 0, 1, 1)
|
||||
self.frame_4 = QtWidgets.QFrame(self.centralwidget)
|
||||
self.frame_4 = QtWidgets.QFrame(parent=self.centralwidget)
|
||||
self.frame_4.setMinimumSize(QtCore.QSize(0, 16))
|
||||
self.frame_4.setAutoFillBackground(False)
|
||||
self.frame_4.setStyleSheet("background-color: rgb(154, 153, 150)")
|
||||
self.frame_4.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||
self.frame_4.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
self.frame_4.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||
self.frame_4.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||
self.frame_4.setObjectName("frame_4")
|
||||
self.gridLayout_4.addWidget(self.frame_4, 1, 0, 1, 1)
|
||||
self.frame_6 = QtWidgets.QFrame(self.centralwidget)
|
||||
self.frame_6 = QtWidgets.QFrame(parent=self.centralwidget)
|
||||
self.frame_6.setMinimumSize(QtCore.QSize(0, 16))
|
||||
self.frame_6.setAutoFillBackground(False)
|
||||
self.frame_6.setStyleSheet("background-color: rgb(154, 153, 150)")
|
||||
self.frame_6.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||
self.frame_6.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
self.frame_6.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||
self.frame_6.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||
self.frame_6.setObjectName("frame_6")
|
||||
self.gridLayout_4.addWidget(self.frame_6, 3, 0, 1, 1)
|
||||
self.splitter = QtWidgets.QSplitter(self.centralwidget)
|
||||
self.splitter.setOrientation(QtCore.Qt.Vertical)
|
||||
self.splitter = QtWidgets.QSplitter(parent=self.centralwidget)
|
||||
self.splitter.setOrientation(QtCore.Qt.Orientation.Vertical)
|
||||
self.splitter.setObjectName("splitter")
|
||||
self.tabPlaylist = QtWidgets.QTabWidget(self.splitter)
|
||||
self.tabPlaylist = QtWidgets.QTabWidget(parent=self.splitter)
|
||||
self.tabPlaylist.setDocumentMode(False)
|
||||
self.tabPlaylist.setTabsClosable(True)
|
||||
self.tabPlaylist.setMovable(True)
|
||||
self.tabPlaylist.setObjectName("tabPlaylist")
|
||||
self.tabInfolist = InfoTabs(self.splitter)
|
||||
self.tabInfolist = InfoTabs(parent=self.splitter)
|
||||
self.tabInfolist.setDocumentMode(False)
|
||||
self.tabInfolist.setTabsClosable(True)
|
||||
self.tabInfolist.setMovable(True)
|
||||
self.tabInfolist.setObjectName("tabInfolist")
|
||||
self.gridLayout_4.addWidget(self.splitter, 4, 0, 1, 1)
|
||||
self.frame_5 = QtWidgets.QFrame(self.centralwidget)
|
||||
self.frame_5 = QtWidgets.QFrame(parent=self.centralwidget)
|
||||
self.frame_5.setStyleSheet("background-color: rgb(192, 191, 188)")
|
||||
self.frame_5.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||
self.frame_5.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
self.frame_5.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||
self.frame_5.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||
self.frame_5.setObjectName("frame_5")
|
||||
self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.frame_5)
|
||||
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
|
||||
self.horizontalLayout = QtWidgets.QHBoxLayout()
|
||||
self.horizontalLayout.setObjectName("horizontalLayout")
|
||||
self.frame = QtWidgets.QFrame(self.frame_5)
|
||||
self.frame = QtWidgets.QFrame(parent=self.frame_5)
|
||||
self.frame.setMinimumSize(QtCore.QSize(321, 0))
|
||||
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
self.frame.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||
self.frame.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||
self.frame.setObjectName("frame")
|
||||
self.gridLayout = QtWidgets.QGridLayout(self.frame)
|
||||
self.gridLayout.setObjectName("gridLayout")
|
||||
self.label_x = QtWidgets.QLabel(self.frame)
|
||||
self.label_x.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.label_x = QtWidgets.QLabel(parent=self.frame)
|
||||
self.label_x.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
|
||||
self.label_x.setObjectName("label_x")
|
||||
self.gridLayout.addWidget(self.label_x, 0, 0, 1, 1)
|
||||
self.label_track_length = QtWidgets.QLabel(self.frame)
|
||||
self.label_track_length = QtWidgets.QLabel(parent=self.frame)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("FreeSans")
|
||||
font.setPointSize(16)
|
||||
@ -208,11 +206,11 @@ class Ui_MainWindow(object):
|
||||
self.label_track_length.setScaledContents(False)
|
||||
self.label_track_length.setObjectName("label_track_length")
|
||||
self.gridLayout.addWidget(self.label_track_length, 0, 1, 1, 1)
|
||||
self.label_x_2 = QtWidgets.QLabel(self.frame)
|
||||
self.label_x_2.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.label_x_2 = QtWidgets.QLabel(parent=self.frame)
|
||||
self.label_x_2.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
|
||||
self.label_x_2.setObjectName("label_x_2")
|
||||
self.gridLayout.addWidget(self.label_x_2, 0, 2, 1, 1)
|
||||
self.label_start_time = QtWidgets.QLabel(self.frame)
|
||||
self.label_start_time = QtWidgets.QLabel(parent=self.frame)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("FreeSans")
|
||||
font.setPointSize(16)
|
||||
@ -220,11 +218,11 @@ class Ui_MainWindow(object):
|
||||
self.label_start_time.setScaledContents(False)
|
||||
self.label_start_time.setObjectName("label_start_time")
|
||||
self.gridLayout.addWidget(self.label_start_time, 0, 3, 1, 1)
|
||||
self.label_7 = QtWidgets.QLabel(self.frame)
|
||||
self.label_7.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.label_7 = QtWidgets.QLabel(parent=self.frame)
|
||||
self.label_7.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
|
||||
self.label_7.setObjectName("label_7")
|
||||
self.gridLayout.addWidget(self.label_7, 1, 0, 1, 1)
|
||||
self.label_fade_length = QtWidgets.QLabel(self.frame)
|
||||
self.label_fade_length = QtWidgets.QLabel(parent=self.frame)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("FreeSans")
|
||||
font.setPointSize(16)
|
||||
@ -232,11 +230,11 @@ class Ui_MainWindow(object):
|
||||
self.label_fade_length.setScaledContents(False)
|
||||
self.label_fade_length.setObjectName("label_fade_length")
|
||||
self.gridLayout.addWidget(self.label_fade_length, 1, 1, 1, 1)
|
||||
self.label_8 = QtWidgets.QLabel(self.frame)
|
||||
self.label_8.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter)
|
||||
self.label_8 = QtWidgets.QLabel(parent=self.frame)
|
||||
self.label_8.setAlignment(QtCore.Qt.AlignmentFlag.AlignRight|QtCore.Qt.AlignmentFlag.AlignTrailing|QtCore.Qt.AlignmentFlag.AlignVCenter)
|
||||
self.label_8.setObjectName("label_8")
|
||||
self.gridLayout.addWidget(self.label_8, 1, 2, 1, 1)
|
||||
self.label_end_time = QtWidgets.QLabel(self.frame)
|
||||
self.label_end_time = QtWidgets.QLabel(parent=self.frame)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("FreeSans")
|
||||
font.setPointSize(16)
|
||||
@ -244,126 +242,125 @@ class Ui_MainWindow(object):
|
||||
self.label_end_time.setScaledContents(False)
|
||||
self.label_end_time.setObjectName("label_end_time")
|
||||
self.gridLayout.addWidget(self.label_end_time, 1, 3, 1, 1)
|
||||
self.btnFade = QtWidgets.QPushButton(self.frame)
|
||||
self.btnFade = QtWidgets.QPushButton(parent=self.frame)
|
||||
icon1 = QtGui.QIcon()
|
||||
icon1.addPixmap(QtGui.QPixmap(":/icons/fade"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
icon1.addPixmap(QtGui.QPixmap(":/icons/fade"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
|
||||
self.btnFade.setIcon(icon1)
|
||||
self.btnFade.setIconSize(QtCore.QSize(30, 30))
|
||||
self.btnFade.setObjectName("btnFade")
|
||||
self.gridLayout.addWidget(self.btnFade, 2, 0, 1, 2)
|
||||
self.btnStop = QtWidgets.QPushButton(self.frame)
|
||||
self.btnStop = QtWidgets.QPushButton(parent=self.frame)
|
||||
icon2 = QtGui.QIcon()
|
||||
icon2.addPixmap(QtGui.QPixmap(":/icons/stopsign"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
icon2.addPixmap(QtGui.QPixmap(":/icons/stopsign"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
|
||||
self.btnStop.setIcon(icon2)
|
||||
self.btnStop.setIconSize(QtCore.QSize(30, 30))
|
||||
self.btnStop.setObjectName("btnStop")
|
||||
self.gridLayout.addWidget(self.btnStop, 2, 2, 1, 2)
|
||||
self.horizontalLayout.addWidget(self.frame)
|
||||
self.frame_elapsed = QtWidgets.QFrame(self.frame_5)
|
||||
self.frame_elapsed = QtWidgets.QFrame(parent=self.frame_5)
|
||||
self.frame_elapsed.setMinimumSize(QtCore.QSize(0, 112))
|
||||
self.frame_elapsed.setStyleSheet("")
|
||||
self.frame_elapsed.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||
self.frame_elapsed.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
self.frame_elapsed.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||
self.frame_elapsed.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||
self.frame_elapsed.setObjectName("frame_elapsed")
|
||||
self.verticalLayout_4 = QtWidgets.QVBoxLayout(self.frame_elapsed)
|
||||
self.verticalLayout_4.setObjectName("verticalLayout_4")
|
||||
self.label = QtWidgets.QLabel(self.frame_elapsed)
|
||||
self.label.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label = QtWidgets.QLabel(parent=self.frame_elapsed)
|
||||
self.label.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
||||
self.label.setObjectName("label")
|
||||
self.verticalLayout_4.addWidget(self.label)
|
||||
self.label_elapsed_timer = QtWidgets.QLabel(self.frame_elapsed)
|
||||
self.label_elapsed_timer = QtWidgets.QLabel(parent=self.frame_elapsed)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("FreeSans")
|
||||
font.setPointSize(40)
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.label_elapsed_timer.setFont(font)
|
||||
self.label_elapsed_timer.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label_elapsed_timer.setStyleSheet("color: black;")
|
||||
self.label_elapsed_timer.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
||||
self.label_elapsed_timer.setObjectName("label_elapsed_timer")
|
||||
self.verticalLayout_4.addWidget(self.label_elapsed_timer)
|
||||
self.horizontalLayout.addWidget(self.frame_elapsed)
|
||||
self.frame_fade = QtWidgets.QFrame(self.frame_5)
|
||||
self.frame_fade = QtWidgets.QFrame(parent=self.frame_5)
|
||||
self.frame_fade.setMinimumSize(QtCore.QSize(0, 112))
|
||||
self.frame_fade.setStyleSheet("")
|
||||
self.frame_fade.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||
self.frame_fade.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
self.frame_fade.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||
self.frame_fade.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||
self.frame_fade.setObjectName("frame_fade")
|
||||
self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.frame_fade)
|
||||
self.verticalLayout_2.setObjectName("verticalLayout_2")
|
||||
self.label_4 = QtWidgets.QLabel(self.frame_fade)
|
||||
self.label_4.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label_4 = QtWidgets.QLabel(parent=self.frame_fade)
|
||||
self.label_4.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
||||
self.label_4.setObjectName("label_4")
|
||||
self.verticalLayout_2.addWidget(self.label_4)
|
||||
self.label_fade_timer = QtWidgets.QLabel(self.frame_fade)
|
||||
self.label_fade_timer = QtWidgets.QLabel(parent=self.frame_fade)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("FreeSans")
|
||||
font.setPointSize(40)
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.label_fade_timer.setFont(font)
|
||||
self.label_fade_timer.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label_fade_timer.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
||||
self.label_fade_timer.setObjectName("label_fade_timer")
|
||||
self.verticalLayout_2.addWidget(self.label_fade_timer)
|
||||
self.horizontalLayout.addWidget(self.frame_fade)
|
||||
self.frame_silent = QtWidgets.QFrame(self.frame_5)
|
||||
self.frame_silent = QtWidgets.QFrame(parent=self.frame_5)
|
||||
self.frame_silent.setMinimumSize(QtCore.QSize(0, 112))
|
||||
self.frame_silent.setStyleSheet("")
|
||||
self.frame_silent.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||
self.frame_silent.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
self.frame_silent.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||
self.frame_silent.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||
self.frame_silent.setObjectName("frame_silent")
|
||||
self.verticalLayout_5 = QtWidgets.QVBoxLayout(self.frame_silent)
|
||||
self.verticalLayout_5.setObjectName("verticalLayout_5")
|
||||
self.label_5 = QtWidgets.QLabel(self.frame_silent)
|
||||
self.label_5.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label_5 = QtWidgets.QLabel(parent=self.frame_silent)
|
||||
self.label_5.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
||||
self.label_5.setObjectName("label_5")
|
||||
self.verticalLayout_5.addWidget(self.label_5)
|
||||
self.label_silent_timer = QtWidgets.QLabel(self.frame_silent)
|
||||
self.label_silent_timer = QtWidgets.QLabel(parent=self.frame_silent)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("FreeSans")
|
||||
font.setPointSize(40)
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.label_silent_timer.setFont(font)
|
||||
self.label_silent_timer.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label_silent_timer.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
||||
self.label_silent_timer.setObjectName("label_silent_timer")
|
||||
self.verticalLayout_5.addWidget(self.label_silent_timer)
|
||||
self.horizontalLayout.addWidget(self.frame_silent)
|
||||
self.frame_end = QtWidgets.QFrame(self.frame_5)
|
||||
self.frame_end = QtWidgets.QFrame(parent=self.frame_5)
|
||||
self.frame_end.setMinimumSize(QtCore.QSize(0, 112))
|
||||
self.frame_end.setStyleSheet("")
|
||||
self.frame_end.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||
self.frame_end.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
self.frame_end.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||
self.frame_end.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||
self.frame_end.setObjectName("frame_end")
|
||||
self.label_6 = QtWidgets.QLabel(self.frame_end)
|
||||
self.label_6.setGeometry(QtCore.QRect(10, 10, 31, 19))
|
||||
self.label_6.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.gridLayout_5 = QtWidgets.QGridLayout(self.frame_end)
|
||||
self.gridLayout_5.setObjectName("gridLayout_5")
|
||||
self.label_6 = QtWidgets.QLabel(parent=self.frame_end)
|
||||
self.label_6.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
||||
self.label_6.setObjectName("label_6")
|
||||
self.label_end_timer = QtWidgets.QLabel(self.frame_end)
|
||||
self.label_end_timer.setGeometry(QtCore.QRect(10, 48, 132, 54))
|
||||
self.gridLayout_5.addWidget(self.label_6, 0, 0, 1, 1)
|
||||
self.label_end_timer = QtWidgets.QLabel(parent=self.frame_end)
|
||||
font = QtGui.QFont()
|
||||
font.setFamily("FreeSans")
|
||||
font.setPointSize(40)
|
||||
font.setBold(False)
|
||||
font.setWeight(50)
|
||||
self.label_end_timer.setFont(font)
|
||||
self.label_end_timer.setAlignment(QtCore.Qt.AlignCenter)
|
||||
self.label_end_timer.setAlignment(QtCore.Qt.AlignmentFlag.AlignCenter)
|
||||
self.label_end_timer.setObjectName("label_end_timer")
|
||||
self.gridLayout_5.addWidget(self.label_end_timer, 1, 0, 1, 1)
|
||||
self.horizontalLayout.addWidget(self.frame_end)
|
||||
self.frame_3 = QtWidgets.QFrame(self.frame_5)
|
||||
self.frame_3 = QtWidgets.QFrame(parent=self.frame_5)
|
||||
self.frame_3.setMinimumSize(QtCore.QSize(152, 112))
|
||||
self.frame_3.setMaximumSize(QtCore.QSize(184, 16777215))
|
||||
self.frame_3.setFrameShape(QtWidgets.QFrame.StyledPanel)
|
||||
self.frame_3.setFrameShadow(QtWidgets.QFrame.Raised)
|
||||
self.frame_3.setFrameShape(QtWidgets.QFrame.Shape.StyledPanel)
|
||||
self.frame_3.setFrameShadow(QtWidgets.QFrame.Shadow.Raised)
|
||||
self.frame_3.setObjectName("frame_3")
|
||||
self.gridLayout_3 = QtWidgets.QGridLayout(self.frame_3)
|
||||
self.gridLayout_3.setObjectName("gridLayout_3")
|
||||
self.btnDrop3db = QtWidgets.QPushButton(self.frame_3)
|
||||
self.btnDrop3db = QtWidgets.QPushButton(parent=self.frame_3)
|
||||
self.btnDrop3db.setMinimumSize(QtCore.QSize(132, 36))
|
||||
self.btnDrop3db.setMaximumSize(QtCore.QSize(164, 16777215))
|
||||
self.btnDrop3db.setCheckable(True)
|
||||
self.btnDrop3db.setObjectName("btnDrop3db")
|
||||
self.gridLayout_3.addWidget(self.btnDrop3db, 0, 0, 1, 1)
|
||||
self.btnHidePlayed = QtWidgets.QPushButton(self.frame_3)
|
||||
self.btnHidePlayed = QtWidgets.QPushButton(parent=self.frame_3)
|
||||
self.btnHidePlayed.setMinimumSize(QtCore.QSize(132, 36))
|
||||
self.btnHidePlayed.setMaximumSize(QtCore.QSize(164, 16777215))
|
||||
self.btnHidePlayed.setCheckable(True)
|
||||
@ -372,139 +369,143 @@ class Ui_MainWindow(object):
|
||||
self.horizontalLayout.addWidget(self.frame_3)
|
||||
self.horizontalLayout_2.addLayout(self.horizontalLayout)
|
||||
self.gridLayout_4.addWidget(self.frame_5, 5, 0, 1, 1)
|
||||
self.cartsWidget = QtWidgets.QWidget(self.centralwidget)
|
||||
self.cartsWidget = QtWidgets.QWidget(parent=self.centralwidget)
|
||||
self.cartsWidget.setObjectName("cartsWidget")
|
||||
self.horizontalLayout_Carts = QtWidgets.QHBoxLayout(self.cartsWidget)
|
||||
self.horizontalLayout_Carts.setObjectName("horizontalLayout_Carts")
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
|
||||
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum)
|
||||
self.horizontalLayout_Carts.addItem(spacerItem)
|
||||
self.gridLayout_4.addWidget(self.cartsWidget, 2, 0, 1, 1)
|
||||
MainWindow.setCentralWidget(self.centralwidget)
|
||||
self.menubar = QtWidgets.QMenuBar(MainWindow)
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 26))
|
||||
self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
|
||||
self.menubar.setGeometry(QtCore.QRect(0, 0, 1280, 29))
|
||||
self.menubar.setObjectName("menubar")
|
||||
self.menuFile = QtWidgets.QMenu(self.menubar)
|
||||
self.menuFile = QtWidgets.QMenu(parent=self.menubar)
|
||||
self.menuFile.setObjectName("menuFile")
|
||||
self.menuPlaylist = QtWidgets.QMenu(self.menubar)
|
||||
self.menuPlaylist = QtWidgets.QMenu(parent=self.menubar)
|
||||
self.menuPlaylist.setObjectName("menuPlaylist")
|
||||
self.menuSearc_h = QtWidgets.QMenu(self.menubar)
|
||||
self.menuSearc_h = QtWidgets.QMenu(parent=self.menubar)
|
||||
self.menuSearc_h.setObjectName("menuSearc_h")
|
||||
self.menuHelp = QtWidgets.QMenu(self.menubar)
|
||||
self.menuHelp = QtWidgets.QMenu(parent=self.menubar)
|
||||
self.menuHelp.setObjectName("menuHelp")
|
||||
MainWindow.setMenuBar(self.menubar)
|
||||
self.statusbar = QtWidgets.QStatusBar(MainWindow)
|
||||
self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
|
||||
self.statusbar.setEnabled(True)
|
||||
self.statusbar.setStyleSheet("background-color: rgb(211, 215, 207);")
|
||||
self.statusbar.setObjectName("statusbar")
|
||||
MainWindow.setStatusBar(self.statusbar)
|
||||
self.actionPlay_next = QtWidgets.QAction(MainWindow)
|
||||
self.actionPlay_next = QtGui.QAction(parent=MainWindow)
|
||||
icon3 = QtGui.QIcon()
|
||||
icon3.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon-play.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
icon3.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon-play.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
|
||||
self.actionPlay_next.setIcon(icon3)
|
||||
self.actionPlay_next.setObjectName("actionPlay_next")
|
||||
self.actionSkipToNext = QtWidgets.QAction(MainWindow)
|
||||
self.actionSkipToNext = QtGui.QAction(parent=MainWindow)
|
||||
icon4 = QtGui.QIcon()
|
||||
icon4.addPixmap(QtGui.QPixmap(":/icons/next"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
icon4.addPixmap(QtGui.QPixmap(":/icons/next"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
|
||||
self.actionSkipToNext.setIcon(icon4)
|
||||
self.actionSkipToNext.setObjectName("actionSkipToNext")
|
||||
self.actionInsertTrack = QtWidgets.QAction(MainWindow)
|
||||
self.actionInsertTrack = QtGui.QAction(parent=MainWindow)
|
||||
icon5 = QtGui.QIcon()
|
||||
icon5.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon_search_database.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
icon5.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon_search_database.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
|
||||
self.actionInsertTrack.setIcon(icon5)
|
||||
self.actionInsertTrack.setObjectName("actionInsertTrack")
|
||||
self.actionAdd_file = QtWidgets.QAction(MainWindow)
|
||||
self.actionAdd_file = QtGui.QAction(parent=MainWindow)
|
||||
icon6 = QtGui.QIcon()
|
||||
icon6.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon_open_file.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
icon6.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon_open_file.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
|
||||
self.actionAdd_file.setIcon(icon6)
|
||||
self.actionAdd_file.setObjectName("actionAdd_file")
|
||||
self.actionFade = QtWidgets.QAction(MainWindow)
|
||||
self.actionFade = QtGui.QAction(parent=MainWindow)
|
||||
icon7 = QtGui.QIcon()
|
||||
icon7.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon-fade.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
icon7.addPixmap(QtGui.QPixmap("app/ui/../../../../.designer/backup/icon-fade.png"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
|
||||
self.actionFade.setIcon(icon7)
|
||||
self.actionFade.setObjectName("actionFade")
|
||||
self.actionStop = QtWidgets.QAction(MainWindow)
|
||||
self.actionStop = QtGui.QAction(parent=MainWindow)
|
||||
icon8 = QtGui.QIcon()
|
||||
icon8.addPixmap(QtGui.QPixmap(":/icons/stop"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
icon8.addPixmap(QtGui.QPixmap(":/icons/stop"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
|
||||
self.actionStop.setIcon(icon8)
|
||||
self.actionStop.setObjectName("actionStop")
|
||||
self.action_Clear_selection = QtWidgets.QAction(MainWindow)
|
||||
self.action_Clear_selection = QtGui.QAction(parent=MainWindow)
|
||||
self.action_Clear_selection.setObjectName("action_Clear_selection")
|
||||
self.action_Resume_previous = QtWidgets.QAction(MainWindow)
|
||||
self.action_Resume_previous = QtGui.QAction(parent=MainWindow)
|
||||
icon9 = QtGui.QIcon()
|
||||
icon9.addPixmap(QtGui.QPixmap(":/icons/previous"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
|
||||
icon9.addPixmap(QtGui.QPixmap(":/icons/previous"), QtGui.QIcon.Mode.Normal, QtGui.QIcon.State.Off)
|
||||
self.action_Resume_previous.setIcon(icon9)
|
||||
self.action_Resume_previous.setObjectName("action_Resume_previous")
|
||||
self.actionE_xit = QtWidgets.QAction(MainWindow)
|
||||
self.actionE_xit = QtGui.QAction(parent=MainWindow)
|
||||
self.actionE_xit.setObjectName("actionE_xit")
|
||||
self.actionTest = QtWidgets.QAction(MainWindow)
|
||||
self.actionTest = QtGui.QAction(parent=MainWindow)
|
||||
self.actionTest.setObjectName("actionTest")
|
||||
self.actionOpenPlaylist = QtWidgets.QAction(MainWindow)
|
||||
self.actionOpenPlaylist = QtGui.QAction(parent=MainWindow)
|
||||
self.actionOpenPlaylist.setObjectName("actionOpenPlaylist")
|
||||
self.actionNewPlaylist = QtWidgets.QAction(MainWindow)
|
||||
self.actionNewPlaylist = QtGui.QAction(parent=MainWindow)
|
||||
self.actionNewPlaylist.setObjectName("actionNewPlaylist")
|
||||
self.actionTestFunction = QtWidgets.QAction(MainWindow)
|
||||
self.actionTestFunction = QtGui.QAction(parent=MainWindow)
|
||||
self.actionTestFunction.setObjectName("actionTestFunction")
|
||||
self.actionSkipToFade = QtWidgets.QAction(MainWindow)
|
||||
self.actionSkipToFade = QtGui.QAction(parent=MainWindow)
|
||||
self.actionSkipToFade.setObjectName("actionSkipToFade")
|
||||
self.actionSkipToEnd = QtWidgets.QAction(MainWindow)
|
||||
self.actionSkipToEnd = QtGui.QAction(parent=MainWindow)
|
||||
self.actionSkipToEnd.setObjectName("actionSkipToEnd")
|
||||
self.actionClosePlaylist = QtWidgets.QAction(MainWindow)
|
||||
self.actionClosePlaylist = QtGui.QAction(parent=MainWindow)
|
||||
self.actionClosePlaylist.setEnabled(True)
|
||||
self.actionClosePlaylist.setObjectName("actionClosePlaylist")
|
||||
self.actionRenamePlaylist = QtWidgets.QAction(MainWindow)
|
||||
self.actionRenamePlaylist = QtGui.QAction(parent=MainWindow)
|
||||
self.actionRenamePlaylist.setEnabled(True)
|
||||
self.actionRenamePlaylist.setObjectName("actionRenamePlaylist")
|
||||
self.actionDeletePlaylist = QtWidgets.QAction(MainWindow)
|
||||
self.actionDeletePlaylist = QtGui.QAction(parent=MainWindow)
|
||||
self.actionDeletePlaylist.setEnabled(True)
|
||||
self.actionDeletePlaylist.setObjectName("actionDeletePlaylist")
|
||||
self.actionMoveSelected = QtWidgets.QAction(MainWindow)
|
||||
self.actionMoveSelected = QtGui.QAction(parent=MainWindow)
|
||||
self.actionMoveSelected.setObjectName("actionMoveSelected")
|
||||
self.actionExport_playlist = QtWidgets.QAction(MainWindow)
|
||||
self.actionExport_playlist = QtGui.QAction(parent=MainWindow)
|
||||
self.actionExport_playlist.setObjectName("actionExport_playlist")
|
||||
self.actionSetNext = QtWidgets.QAction(MainWindow)
|
||||
self.actionSetNext = QtGui.QAction(parent=MainWindow)
|
||||
self.actionSetNext.setObjectName("actionSetNext")
|
||||
self.actionSelect_next_track = QtWidgets.QAction(MainWindow)
|
||||
self.actionSelect_next_track = QtGui.QAction(parent=MainWindow)
|
||||
self.actionSelect_next_track.setObjectName("actionSelect_next_track")
|
||||
self.actionSelect_previous_track = QtWidgets.QAction(MainWindow)
|
||||
self.actionSelect_previous_track = QtGui.QAction(parent=MainWindow)
|
||||
self.actionSelect_previous_track.setObjectName("actionSelect_previous_track")
|
||||
self.actionSelect_played_tracks = QtWidgets.QAction(MainWindow)
|
||||
self.actionSelect_played_tracks = QtGui.QAction(parent=MainWindow)
|
||||
self.actionSelect_played_tracks.setObjectName("actionSelect_played_tracks")
|
||||
self.actionMoveUnplayed = QtWidgets.QAction(MainWindow)
|
||||
self.actionMoveUnplayed = QtGui.QAction(parent=MainWindow)
|
||||
self.actionMoveUnplayed.setObjectName("actionMoveUnplayed")
|
||||
self.actionAdd_note = QtWidgets.QAction(MainWindow)
|
||||
self.actionAdd_note = QtGui.QAction(parent=MainWindow)
|
||||
self.actionAdd_note.setObjectName("actionAdd_note")
|
||||
self.actionEnable_controls = QtWidgets.QAction(MainWindow)
|
||||
self.actionEnable_controls = QtGui.QAction(parent=MainWindow)
|
||||
self.actionEnable_controls.setObjectName("actionEnable_controls")
|
||||
self.actionImport = QtWidgets.QAction(MainWindow)
|
||||
self.actionImport = QtGui.QAction(parent=MainWindow)
|
||||
self.actionImport.setObjectName("actionImport")
|
||||
self.actionDownload_CSV_of_played_tracks = QtWidgets.QAction(MainWindow)
|
||||
self.actionDownload_CSV_of_played_tracks = QtGui.QAction(parent=MainWindow)
|
||||
self.actionDownload_CSV_of_played_tracks.setObjectName("actionDownload_CSV_of_played_tracks")
|
||||
self.actionSearch = QtWidgets.QAction(MainWindow)
|
||||
self.actionSearch = QtGui.QAction(parent=MainWindow)
|
||||
self.actionSearch.setObjectName("actionSearch")
|
||||
self.actionInsertSectionHeader = QtWidgets.QAction(MainWindow)
|
||||
self.actionInsertSectionHeader = QtGui.QAction(parent=MainWindow)
|
||||
self.actionInsertSectionHeader.setObjectName("actionInsertSectionHeader")
|
||||
self.actionRemove = QtWidgets.QAction(MainWindow)
|
||||
self.actionRemove = QtGui.QAction(parent=MainWindow)
|
||||
self.actionRemove.setObjectName("actionRemove")
|
||||
self.actionFind_next = QtWidgets.QAction(MainWindow)
|
||||
self.actionFind_next = QtGui.QAction(parent=MainWindow)
|
||||
self.actionFind_next.setObjectName("actionFind_next")
|
||||
self.actionFind_previous = QtWidgets.QAction(MainWindow)
|
||||
self.actionFind_previous = QtGui.QAction(parent=MainWindow)
|
||||
self.actionFind_previous.setObjectName("actionFind_previous")
|
||||
self.action_About = QtWidgets.QAction(MainWindow)
|
||||
self.action_About = QtGui.QAction(parent=MainWindow)
|
||||
self.action_About.setObjectName("action_About")
|
||||
self.actionSave_as_template = QtWidgets.QAction(MainWindow)
|
||||
self.actionSave_as_template = QtGui.QAction(parent=MainWindow)
|
||||
self.actionSave_as_template.setObjectName("actionSave_as_template")
|
||||
self.actionNew_from_template = QtWidgets.QAction(MainWindow)
|
||||
self.actionNew_from_template = QtGui.QAction(parent=MainWindow)
|
||||
self.actionNew_from_template.setObjectName("actionNew_from_template")
|
||||
self.actionDebug = QtWidgets.QAction(MainWindow)
|
||||
self.actionDebug = QtGui.QAction(parent=MainWindow)
|
||||
self.actionDebug.setObjectName("actionDebug")
|
||||
self.actionAdd_cart = QtWidgets.QAction(MainWindow)
|
||||
self.actionAdd_cart = QtGui.QAction(parent=MainWindow)
|
||||
self.actionAdd_cart.setObjectName("actionAdd_cart")
|
||||
self.actionMark_for_moving = QtWidgets.QAction(MainWindow)
|
||||
self.actionMark_for_moving = QtGui.QAction(parent=MainWindow)
|
||||
self.actionMark_for_moving.setObjectName("actionMark_for_moving")
|
||||
self.actionPaste = QtWidgets.QAction(MainWindow)
|
||||
self.actionPaste = QtGui.QAction(parent=MainWindow)
|
||||
self.actionPaste.setObjectName("actionPaste")
|
||||
self.actionResume = QtWidgets.QAction(MainWindow)
|
||||
self.actionResume = QtGui.QAction(parent=MainWindow)
|
||||
self.actionResume.setObjectName("actionResume")
|
||||
self.actionSearch_title_in_Wikipedia = QtGui.QAction(parent=MainWindow)
|
||||
self.actionSearch_title_in_Wikipedia.setObjectName("actionSearch_title_in_Wikipedia")
|
||||
self.actionSearch_title_in_Songfacts = QtGui.QAction(parent=MainWindow)
|
||||
self.actionSearch_title_in_Songfacts.setObjectName("actionSearch_title_in_Songfacts")
|
||||
self.menuFile.addAction(self.actionNewPlaylist)
|
||||
self.menuFile.addAction(self.actionNew_from_template)
|
||||
self.menuFile.addAction(self.actionOpenPlaylist)
|
||||
@ -545,6 +546,9 @@ class Ui_MainWindow(object):
|
||||
self.menuSearc_h.addSeparator()
|
||||
self.menuSearc_h.addAction(self.actionSelect_next_track)
|
||||
self.menuSearc_h.addAction(self.actionSelect_previous_track)
|
||||
self.menuSearc_h.addSeparator()
|
||||
self.menuSearc_h.addAction(self.actionSearch_title_in_Wikipedia)
|
||||
self.menuSearc_h.addAction(self.actionSearch_title_in_Songfacts)
|
||||
self.menuHelp.addAction(self.action_About)
|
||||
self.menuHelp.addAction(self.actionDebug)
|
||||
self.menubar.addAction(self.menuFile.menuAction())
|
||||
@ -598,7 +602,7 @@ class Ui_MainWindow(object):
|
||||
self.actionAdd_file.setText(_translate("MainWindow", "Add &file"))
|
||||
self.actionAdd_file.setShortcut(_translate("MainWindow", "Ctrl+F"))
|
||||
self.actionFade.setText(_translate("MainWindow", "F&ade"))
|
||||
self.actionFade.setShortcut(_translate("MainWindow", "Ctrl+S"))
|
||||
self.actionFade.setShortcut(_translate("MainWindow", "Ctrl+Z"))
|
||||
self.actionStop.setText(_translate("MainWindow", "S&top"))
|
||||
self.actionStop.setShortcut(_translate("MainWindow", "Ctrl+Alt+S"))
|
||||
self.action_Clear_selection.setText(_translate("MainWindow", "Clear &selection"))
|
||||
@ -650,5 +654,8 @@ class Ui_MainWindow(object):
|
||||
self.actionPaste.setShortcut(_translate("MainWindow", "Ctrl+V"))
|
||||
self.actionResume.setText(_translate("MainWindow", "Resume"))
|
||||
self.actionResume.setShortcut(_translate("MainWindow", "Ctrl+R"))
|
||||
self.actionSearch_title_in_Wikipedia.setText(_translate("MainWindow", "Search title in Wikipedia"))
|
||||
self.actionSearch_title_in_Wikipedia.setShortcut(_translate("MainWindow", "Ctrl+W"))
|
||||
self.actionSearch_title_in_Songfacts.setText(_translate("MainWindow", "Search title in Songfacts"))
|
||||
self.actionSearch_title_in_Songfacts.setShortcut(_translate("MainWindow", "Ctrl+S"))
|
||||
from infotabs import InfoTabs
|
||||
import icons_rc
|
||||
|
||||
438
poetry.lock
generated
438
poetry.lock
generated
@ -2,19 +2,20 @@
|
||||
|
||||
[[package]]
|
||||
name = "alembic"
|
||||
version = "1.9.3"
|
||||
version = "1.10.3"
|
||||
description = "A database migration tool for SQLAlchemy."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "alembic-1.9.3-py3-none-any.whl", hash = "sha256:ed2f73ea9c986f43af8ad7502c5f60d6bb1400bcd6d29f230e760e08884cb476"},
|
||||
{file = "alembic-1.9.3.tar.gz", hash = "sha256:8fd6aaea56f5a703a190d25a705dfa91d7c313bb71de2f9c68f5abdcaf5df164"},
|
||||
{file = "alembic-1.10.3-py3-none-any.whl", hash = "sha256:b2e0a6cfd3a8ce936a1168320bcbe94aefa3f4463cd773a968a55071beb3cd37"},
|
||||
{file = "alembic-1.10.3.tar.gz", hash = "sha256:32a69b13a613aeb7e8093f242da60eff9daed13c0df02fff279c1b06c32965d2"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
Mako = "*"
|
||||
SQLAlchemy = ">=1.3.0"
|
||||
typing-extensions = ">=4"
|
||||
|
||||
[package.extras]
|
||||
tz = ["python-dateutil"]
|
||||
@ -49,25 +50,6 @@ six = "*"
|
||||
[package.extras]
|
||||
test = ["astroid", "pytest"]
|
||||
|
||||
[[package]]
|
||||
name = "attrs"
|
||||
version = "22.2.0"
|
||||
description = "Classes Without Boilerplate"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"},
|
||||
{file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"]
|
||||
dev = ["attrs[docs,tests]"]
|
||||
docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"]
|
||||
tests = ["attrs[tests-no-zope]", "zope.interface"]
|
||||
tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"]
|
||||
|
||||
[[package]]
|
||||
name = "backcall"
|
||||
version = "0.2.0"
|
||||
@ -118,14 +100,14 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "exceptiongroup"
|
||||
version = "1.1.0"
|
||||
version = "1.1.1"
|
||||
description = "Backport of PEP 654 (exception groups)"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"},
|
||||
{file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"},
|
||||
{file = "exceptiongroup-1.1.1-py3-none-any.whl", hash = "sha256:232c37c63e4f682982c8b6459f33a8981039e5fb8756b2074364e5055c498c9e"},
|
||||
{file = "exceptiongroup-1.1.1.tar.gz", hash = "sha256:d484c3090ba2889ae2928419117447a14daf3c1231d5e30d0aae34f354f01785"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
@ -275,14 +257,14 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "ipdb"
|
||||
version = "0.13.11"
|
||||
version = "0.13.13"
|
||||
description = "IPython-enabled pdb"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*"
|
||||
files = [
|
||||
{file = "ipdb-0.13.11-py3-none-any.whl", hash = "sha256:f74c2f741c18b909eaf89f19fde973f745ac721744aa1465888ce45813b63a9c"},
|
||||
{file = "ipdb-0.13.11.tar.gz", hash = "sha256:c23b6736f01fd4586cc2ecbebdf79a5eb454796853e1cd8f2ed3b7b91d4a3e93"},
|
||||
{file = "ipdb-0.13.13-py3-none-any.whl", hash = "sha256:45529994741c4ab6d2388bfa5d7b725c2cf7fe9deffabdb8a6113aa5ed449ed4"},
|
||||
{file = "ipdb-0.13.13.tar.gz", hash = "sha256:e3ac6018ef05126d442af680aad863006ec19d02290561ac88b8b1c0b0cfc726"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@ -292,14 +274,14 @@ tomli = {version = "*", markers = "python_version > \"3.6\" and python_version <
|
||||
|
||||
[[package]]
|
||||
name = "ipython"
|
||||
version = "8.9.0"
|
||||
version = "8.12.0"
|
||||
description = "IPython: Productive Interactive Computing"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.8"
|
||||
files = [
|
||||
{file = "ipython-8.9.0-py3-none-any.whl", hash = "sha256:9c207b0ef2d276d1bfcfeb9a62804336abbe4b170574ea061500952319b1d78c"},
|
||||
{file = "ipython-8.9.0.tar.gz", hash = "sha256:71618e82e6d59487bea059626e7c79fb4a5b760d1510d02fab1160db6fdfa1f7"},
|
||||
{file = "ipython-8.12.0-py3-none-any.whl", hash = "sha256:1c183bf61b148b00bcebfa5d9b39312733ae97f6dad90d7e9b4d86c8647f498c"},
|
||||
{file = "ipython-8.12.0.tar.gz", hash = "sha256:a950236df04ad75b5bc7f816f9af3d74dc118fd42f2ff7e80e8e60ca1f182e2d"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@ -311,13 +293,14 @@ jedi = ">=0.16"
|
||||
matplotlib-inline = "*"
|
||||
pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""}
|
||||
pickleshare = "*"
|
||||
prompt-toolkit = ">=3.0.30,<3.1.0"
|
||||
prompt-toolkit = ">=3.0.30,<3.0.37 || >3.0.37,<3.1.0"
|
||||
pygments = ">=2.4.0"
|
||||
stack-data = "*"
|
||||
traitlets = ">=5"
|
||||
typing-extensions = {version = "*", markers = "python_version < \"3.10\""}
|
||||
|
||||
[package.extras]
|
||||
all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.20)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"]
|
||||
all = ["black", "curio", "docrepr", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.21)", "pandas", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"]
|
||||
black = ["black"]
|
||||
doc = ["docrepr", "ipykernel", "matplotlib", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"]
|
||||
kernel = ["ipykernel"]
|
||||
@ -327,7 +310,7 @@ notebook = ["ipywidgets", "notebook"]
|
||||
parallel = ["ipyparallel"]
|
||||
qtconsole = ["qtconsole"]
|
||||
test = ["pytest (<7.1)", "pytest-asyncio", "testpath"]
|
||||
test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.20)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"]
|
||||
test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pandas", "pytest (<7.1)", "pytest-asyncio", "testpath", "trio"]
|
||||
|
||||
[[package]]
|
||||
name = "jedi"
|
||||
@ -351,62 +334,62 @@ testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"]
|
||||
|
||||
[[package]]
|
||||
name = "line-profiler"
|
||||
version = "4.0.2"
|
||||
version = "4.0.3"
|
||||
description = "Line-by-line profiler"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "line_profiler-4.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0de5f977c6387e1a9799fdb09e62707e28d9e7be2911ac1fa8132e19dbf2e4ac"},
|
||||
{file = "line_profiler-4.0.2-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:967a31032dbc7345b936fc516de59ab92b43913bf9a3a81b4888329f16665222"},
|
||||
{file = "line_profiler-4.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ba3d088b17a9c902e95c0cb23017f1df1356e33e5b01a4f65c2cba710b78c17"},
|
||||
{file = "line_profiler-4.0.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:5978f48e47328df82d5f3959ba03b1d099c927d4c4bd1ea65bcdd7960af506d6"},
|
||||
{file = "line_profiler-4.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3ceefb2443504021d3b509a25af2c1232d9866bf0022e97e248fce492e7c2ca7"},
|
||||
{file = "line_profiler-4.0.2-cp310-cp310-win32.whl", hash = "sha256:38218ffb3a7140843615aa3ba2f90dc0a61d1ebb4b8734ed4e66b9f5386c5811"},
|
||||
{file = "line_profiler-4.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:1c45d54f8fbeb95016cd83e3e6ee3ae0746b05da612b4d3b2d7600dd3bdf5cee"},
|
||||
{file = "line_profiler-4.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:76b4778bbafc12ba44846622a083a7a2e2a0214d63bb37478bd42b0a2f226c0c"},
|
||||
{file = "line_profiler-4.0.2-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b18e84e5d5245337bd157989a1d6d79c08f402caaeb73fe020d927f0cd1cab0"},
|
||||
{file = "line_profiler-4.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d78ef5527b00c849e4edb42012c4bb036776b46b24ddd64ba4c49f02e79a4fc3"},
|
||||
{file = "line_profiler-4.0.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:784e1af0901fffcfc5e4172b0eeb4753475d7493aa10898e7742598bd37afa64"},
|
||||
{file = "line_profiler-4.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:657e5638e2b14140f720a296ae0e5404a3ec3b57f8993de38b8b8d4d364ad232"},
|
||||
{file = "line_profiler-4.0.2-cp311-cp311-win32.whl", hash = "sha256:1ea823094d3fa4c19bda80f97e23c8968f0de0a26ce0292f940b351886d0006c"},
|
||||
{file = "line_profiler-4.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:c4be7c7f6995af1b4c98fc7d64910389e139052f04502f75195a8eb783b6c3da"},
|
||||
{file = "line_profiler-4.0.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:6f78d3b7055694e0a375bd2f7ff96c96479beea8ee500e4e4a1e0e8339b46280"},
|
||||
{file = "line_profiler-4.0.2-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9caea9600d5a6bfd5b3d8833afb3f1866f8a22f0839d1f17c6fcf5e87edea6fa"},
|
||||
{file = "line_profiler-4.0.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3765aed8434623797b135bdf41239957ca386ffcce4d7f8e5f639757673aa01"},
|
||||
{file = "line_profiler-4.0.2-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:803c926aaebc036d6af6f3c428fc5e5eb07d0708a86563b31c5efc170ba55a63"},
|
||||
{file = "line_profiler-4.0.2-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:dc25a5483711e9f106cc7820027b0df5adedec4473e492d2d37f95d76aca1b41"},
|
||||
{file = "line_profiler-4.0.2-cp36-cp36m-win32.whl", hash = "sha256:0cd9e0679e14fa79efcbd23e50027ea7b91dbd73b3f563556be450acedda0dd2"},
|
||||
{file = "line_profiler-4.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:3dd66972da651cb48acff95cb5e953c1bbb8d15b84e8d2f03b24c132c2618d1b"},
|
||||
{file = "line_profiler-4.0.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:518818bea6ff084ffffe1e7f65d345f389259a5d2b12ed4d75b9a62b79ac3268"},
|
||||
{file = "line_profiler-4.0.2-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6eb20bbc089d166523349af733e8670dde4a94ca4a9eb4a44081f4bc0365552"},
|
||||
{file = "line_profiler-4.0.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d2dcffabf9794678a709888684541f39b3b6ff2b1fd06365df5a56578f73973"},
|
||||
{file = "line_profiler-4.0.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f3f8d91b6e8a86790436713a5853aa57718fe378796d452619531cabb54ae8eb"},
|
||||
{file = "line_profiler-4.0.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:541a5798c1debc6be52090e26096c6a9faf8c9e6608f49d1b7fc6ddba1a16dea"},
|
||||
{file = "line_profiler-4.0.2-cp37-cp37m-win32.whl", hash = "sha256:4904d263a16e8561ad312b7fa97f19cbf730c4d053c7535b9ea7674a7b2002c9"},
|
||||
{file = "line_profiler-4.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6970818772e69215734221226a3a94cf1dc5cfc63e700694a42c998b5b2ce22d"},
|
||||
{file = "line_profiler-4.0.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7c9585da4003666167373ac219cdaeeaecafa3f8e16ced302e05f3da3956cffc"},
|
||||
{file = "line_profiler-4.0.2-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14e9e17e7462325a9f8334815294ac6a319ffa471db0b3c85affd2eeb72f4ab0"},
|
||||
{file = "line_profiler-4.0.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37a03c75f478d132555f79216966cea7c5038d3e76311a209cb85d3a2c109c6d"},
|
||||
{file = "line_profiler-4.0.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:224dff75befa6589673efd11cbb23b5de9086c075eae37aa03d9a426d6b00aac"},
|
||||
{file = "line_profiler-4.0.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:930e47bf506cbaeaafd0333289236b0ade553c2bfe11ac09ae276a92813b60a3"},
|
||||
{file = "line_profiler-4.0.2-cp38-cp38-win32.whl", hash = "sha256:53c4dd01c8f6066db200edb9b99fd6038dcf5582588d0a90c8747713e1cc9cce"},
|
||||
{file = "line_profiler-4.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:90a957e45bbc15a261d866f5ab46092f61fd7a025701820309ef04f18cdaaf4c"},
|
||||
{file = "line_profiler-4.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:99e7e78ad515d2f9e70d2536e403c2c26b3990a21ebb070296b22b14e709f1f2"},
|
||||
{file = "line_profiler-4.0.2-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d715e31962e84100ff3d09caec5a26e940b31675020cee55608be62a236dffc6"},
|
||||
{file = "line_profiler-4.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac262bd6d87dbdd4959941a699131e4f4daeb03f308eb785775dd61e52a272f1"},
|
||||
{file = "line_profiler-4.0.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:1a6aa784790a299676409420f1707d6c72456703499503f283fa62106549b928"},
|
||||
{file = "line_profiler-4.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:3b3ffca66ee09fd6c2b1b31336b8510c1142d9f5bd3397fa38ee0648af6272d9"},
|
||||
{file = "line_profiler-4.0.2-cp39-cp39-win32.whl", hash = "sha256:c3df5fb8a2a2c9b43498f3214cbac871fa7303572c19fe8157f2d95986fc9c4b"},
|
||||
{file = "line_profiler-4.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:b1f0a6e00d24a1064ee4fbe3ae62406e71b11065aab7aa448c1242035125e74e"},
|
||||
{file = "line_profiler-4.0.2.tar.gz", hash = "sha256:25e8c9d4248dc48905801851ff8a75b9c74827a0871d118d1104d8e43d7fb0fc"},
|
||||
{file = "line_profiler-4.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52780098491df001a1315c1bc3d8199edd440698f1aef4e78875f9f2181f79bb"},
|
||||
{file = "line_profiler-4.0.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f170232f15d48fb4e7ca46fe4147a54dd930baa7ef07c04c38b53e0e826028b8"},
|
||||
{file = "line_profiler-4.0.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a727ddd521246fecd9a8aa918c81d2e7ebeef2c56af86be500280ec7ec720d1"},
|
||||
{file = "line_profiler-4.0.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:9bc4bf53a2c79c935a5e59645a6f5d9cc8618a4aded0d2116db5d4ebecab6dae"},
|
||||
{file = "line_profiler-4.0.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6eb244400492ffcbec0e6d5a52693828960a4c29f7d43c50190e4902bacad5be"},
|
||||
{file = "line_profiler-4.0.3-cp310-cp310-win32.whl", hash = "sha256:a4b7e84d800bb466e461d827eaadbf0bce1476b76a29b92d24f524db028ae4e1"},
|
||||
{file = "line_profiler-4.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c5b579c7d1b3661e56c63f5052f96c81b7453e503e0c2950df79776181cc8007"},
|
||||
{file = "line_profiler-4.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e18ce062d652dc04eb0ebe5df13d78fb4d83979b459f8bca476059f3a71636d1"},
|
||||
{file = "line_profiler-4.0.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e9f56be58b78bcfdc505987730b1a0099f8b2693c392879d0a8d1dd81a437d0"},
|
||||
{file = "line_profiler-4.0.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12bf7dc576707760d58efb221f4ee36cc9ec3e514733186c807fe6839c65a9e6"},
|
||||
{file = "line_profiler-4.0.3-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:ac886a51df9a5cec9dd9f483a63b88d1ecfff50151a9177f54931787e1c08575"},
|
||||
{file = "line_profiler-4.0.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:779a41bd7cceb5487abc1e985cf90bc0be7a61f369c32e9971e3b244153373da"},
|
||||
{file = "line_profiler-4.0.3-cp311-cp311-win32.whl", hash = "sha256:467de51ae6f154865f40e7d645462c8bbf9dedb6c432b1af173c099d79b81c2e"},
|
||||
{file = "line_profiler-4.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:eb1d5e90862ac5385fdb002c40fe45bbf0396025dabc0565ac97efc622122274"},
|
||||
{file = "line_profiler-4.0.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:fbe0036a306835978270a66c460c7b57869fe985ca620613321971d396de295f"},
|
||||
{file = "line_profiler-4.0.3-cp36-cp36m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1fed42c6d070804d95990ad633f97778bc744f7569cb2b5a2cf5be05e932763"},
|
||||
{file = "line_profiler-4.0.3-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4ae74a784e3c878bb52cb819a971315547cec2cab8705571318995c045aae27"},
|
||||
{file = "line_profiler-4.0.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:0f281672166f7d403b927f3a8af1fa28125be6309d0e8a3910770037b5abc7be"},
|
||||
{file = "line_profiler-4.0.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:5a2654510d872e36c0737cc9358a94307c1db52bf906b3c92569c9bc067b896e"},
|
||||
{file = "line_profiler-4.0.3-cp36-cp36m-win32.whl", hash = "sha256:7fa9bec2d79374e32441fa46d284e4241f73d5e23b91cb3286c5573c29c2f218"},
|
||||
{file = "line_profiler-4.0.3-cp36-cp36m-win_amd64.whl", hash = "sha256:0783704f6bdd6d1029c193bb270b9e540f5b97ded662c74885b609d4bc016bfa"},
|
||||
{file = "line_profiler-4.0.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a3337db24f51bda9f7c2fc5a135fc657c5cc818ba5905195a4f79f7489048bae"},
|
||||
{file = "line_profiler-4.0.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6a19e39be62aa7d849fab9a7f61591365b41ae87fbf4321de5442cb460f1fb5"},
|
||||
{file = "line_profiler-4.0.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:659c3f99359825034a5becb7de2e19eeee96bbe60fface73059b446124b942d4"},
|
||||
{file = "line_profiler-4.0.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:3873394ea9d66d05da6ed0f9f92e7463c44b716aadd034a603faad60a73577c6"},
|
||||
{file = "line_profiler-4.0.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:fdaac2e769e7d64cd3d19c4df5d26287e1cd362f47a1d3b42edd7c8420f40101"},
|
||||
{file = "line_profiler-4.0.3-cp37-cp37m-win32.whl", hash = "sha256:d1bce3d49c8a0f89a04c41d95f256a48ee744d2cbca0c5fd859c928cddcccf3e"},
|
||||
{file = "line_profiler-4.0.3-cp37-cp37m-win_amd64.whl", hash = "sha256:81404b2530e2f4cb0e69f8b624957caef2b313227380e6aa7d3ccef494941f91"},
|
||||
{file = "line_profiler-4.0.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0a5dad6fa4ebc70676574941a564cdae4e664bf54fd68a8f19799167a927a3db"},
|
||||
{file = "line_profiler-4.0.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c60c0f5e14e17cf19d0f45dc25b406a47da57c667de6263281758fae0ec76ca0"},
|
||||
{file = "line_profiler-4.0.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af5259ba7f7ef73f9b02874fcfda2b0b7b0093e64b148bcf0d444bfb1d08fdcc"},
|
||||
{file = "line_profiler-4.0.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8ed41b4dc4bb5cea01e423928c50e354452eb1eb1b29b8b3ec94ee02b045fdf9"},
|
||||
{file = "line_profiler-4.0.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:878479d3df35f6a3be83cb7ea5ee3df8f51003da6eca291242ebfecaf8cf940f"},
|
||||
{file = "line_profiler-4.0.3-cp38-cp38-win32.whl", hash = "sha256:b1ba5076d8cf9fc7e18bb79884915d78f856a9f03e999e9c25ace462c4745bcb"},
|
||||
{file = "line_profiler-4.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:b35795dc56dae57e1bca9d3ed7f03ca5ad86de578da29434dcb3fcc590009120"},
|
||||
{file = "line_profiler-4.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:48ce36c8fb17a64a494fb3ba0c591dd0fd2318bbe99c5c49da35f93257a5bc1a"},
|
||||
{file = "line_profiler-4.0.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1847946c78be769d3b053879bc2df6e7eed7800e2e3b35a297043d656b4bb2f9"},
|
||||
{file = "line_profiler-4.0.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:506ab549197844629834c5db4414517f474d862a90dc3920800f823db48e7601"},
|
||||
{file = "line_profiler-4.0.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:5e9c5c6ea82ad587ebe127a1f18b37634ce9e2d8b2065c2cb382dc5576551503"},
|
||||
{file = "line_profiler-4.0.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db98ff49c1f4753959bb1e9b9835626cb817d1add6d480311938c373e9c4c5f7"},
|
||||
{file = "line_profiler-4.0.3-cp39-cp39-win32.whl", hash = "sha256:9e7fbe5280927d1c647b43516aedc2f21b0bfad27f6bc531ebca9df7c77f2f7f"},
|
||||
{file = "line_profiler-4.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:6906259a2732c18f3f8c3f03cbe3899a640d4dd998d09a4c91d41140fd8bc686"},
|
||||
{file = "line_profiler-4.0.3.tar.gz", hash = "sha256:deb2eb9e9119d911debe23edcec8ea68a2cd70c9e3f753c96aaf4a86ca497e7e"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
all = ["Cython", "IPython", "IPython", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cmake", "coverage[toml]", "ninja", "pytest", "pytest-cov", "scikit-build", "ubelt"]
|
||||
all-strict = ["Cython (==3.0.0a11)", "IPython (==0.13)", "IPython (==0.13)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.8.1)", "cmake (==3.21.2)", "coverage[toml] (==5.3)", "ninja (==1.10.2)", "pytest (==4.6.11)", "pytest-cov (==2.10.1)", "scikit-build (==0.11.1)", "ubelt (==1.0.1)"]
|
||||
build = ["Cython", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cmake", "ninja", "scikit-build"]
|
||||
build-strict = ["Cython (==3.0.0a11)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.8.1)", "cmake (==3.21.2)", "ninja (==1.10.2)", "scikit-build (==0.11.1)"]
|
||||
all = ["Cython", "Cython", "IPython", "IPython", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cmake", "coverage[toml]", "ninja", "pytest", "pytest-cov", "scikit-build", "ubelt"]
|
||||
all-strict = ["Cython (==0.29.24)", "Cython (==3.0.0a11)", "IPython (==0.13)", "IPython (==0.13)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.8.1)", "cmake (==3.21.2)", "coverage[toml] (==5.3)", "ninja (==1.10.2)", "pytest (==4.6.11)", "pytest-cov (==2.10.1)", "scikit-build (==0.11.1)", "ubelt (==1.0.1)"]
|
||||
build = ["Cython", "Cython", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cibuildwheel", "cmake", "ninja", "scikit-build"]
|
||||
build-strict = ["Cython (==0.29.24)", "Cython (==3.0.0a11)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.11.2)", "cibuildwheel (==2.8.1)", "cmake (==3.21.2)", "ninja (==1.10.2)", "scikit-build (==0.11.1)"]
|
||||
ipython = ["IPython", "IPython"]
|
||||
ipython-strict = ["IPython (==0.13)", "IPython (==0.13)"]
|
||||
tests = ["IPython", "IPython", "coverage[toml]", "pytest", "pytest-cov", "ubelt"]
|
||||
@ -434,24 +417,24 @@ testing = ["pytest"]
|
||||
|
||||
[[package]]
|
||||
name = "markdown-it-py"
|
||||
version = "2.1.0"
|
||||
version = "2.2.0"
|
||||
description = "Python port of markdown-it. Markdown parsing, done right!"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "markdown-it-py-2.1.0.tar.gz", hash = "sha256:cf7e59fed14b5ae17c0006eff14a2d9a00ed5f3a846148153899a0224e2c07da"},
|
||||
{file = "markdown_it_py-2.1.0-py3-none-any.whl", hash = "sha256:93de681e5c021a432c63147656fe21790bc01231e0cd2da73626f1aa3ac0fe27"},
|
||||
{file = "markdown-it-py-2.2.0.tar.gz", hash = "sha256:7c9a5e412688bc771c67432cbfebcdd686c93ce6484913dccf06cb5a0bea35a1"},
|
||||
{file = "markdown_it_py-2.2.0-py3-none-any.whl", hash = "sha256:5a35f8d1870171d9acc47b99612dc146129b631baf04970128b568f190d0cc30"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
mdurl = ">=0.1,<1.0"
|
||||
|
||||
[package.extras]
|
||||
benchmarking = ["psutil", "pytest", "pytest-benchmark (>=3.2,<4.0)"]
|
||||
code-style = ["pre-commit (==2.6)"]
|
||||
compare = ["commonmark (>=0.9.1,<0.10.0)", "markdown (>=3.3.6,<3.4.0)", "mistletoe (>=0.8.1,<0.9.0)", "mistune (>=2.0.2,<2.1.0)", "panflute (>=2.1.3,<2.2.0)"]
|
||||
linkify = ["linkify-it-py (>=1.0,<2.0)"]
|
||||
benchmarking = ["psutil", "pytest", "pytest-benchmark"]
|
||||
code-style = ["pre-commit (>=3.0,<4.0)"]
|
||||
compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"]
|
||||
linkify = ["linkify-it-py (>=1,<3)"]
|
||||
plugins = ["mdit-py-plugins"]
|
||||
profiling = ["gprof2dot"]
|
||||
rtd = ["attrs", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"]
|
||||
@ -740,14 +723,14 @@ testing = ["pytest", "pytest-benchmark"]
|
||||
|
||||
[[package]]
|
||||
name = "prompt-toolkit"
|
||||
version = "3.0.36"
|
||||
version = "3.0.38"
|
||||
description = "Library for building powerful interactive command lines in Python"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.6.2"
|
||||
python-versions = ">=3.7.0"
|
||||
files = [
|
||||
{file = "prompt_toolkit-3.0.36-py3-none-any.whl", hash = "sha256:aa64ad242a462c5ff0363a7b9cfe696c20d55d9fc60c11fd8e632d064804d305"},
|
||||
{file = "prompt_toolkit-3.0.36.tar.gz", hash = "sha256:3e163f254bef5a03b146397d7c1963bd3e2812f0964bb9a24e6ec761fd28db63"},
|
||||
{file = "prompt_toolkit-3.0.38-py3-none-any.whl", hash = "sha256:45ea77a2f7c60418850331366c81cf6b5b9cf4c7fd34616f733c5427e6abbb1f"},
|
||||
{file = "prompt_toolkit-3.0.38.tar.gz", hash = "sha256:23ac5d50538a9a38c8bde05fecb47d0b403ecd0662857a86f886f798563d5b9b"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@ -932,49 +915,125 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "pyqt5-sip"
|
||||
version = "12.11.1"
|
||||
version = "12.12.0"
|
||||
description = "The sip module support for PyQt5"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "PyQt5_sip-12.11.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a40a39a6136a90e10c31510295c2be924564fc6260691501cdde669bdc5edea5"},
|
||||
{file = "PyQt5_sip-12.11.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:19b06164793177146c7f7604fe8389f44221a7bde196f2182457eb3e4229fa88"},
|
||||
{file = "PyQt5_sip-12.11.1-cp310-cp310-win32.whl", hash = "sha256:3afb1d1c07adcfef5c8bb12356a2ec2ec094f324af4417735d43b1ecaf1bb1a4"},
|
||||
{file = "PyQt5_sip-12.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:54dad6c2e5dab14e46f6822a889bbb1515bbd2061762273af10d26566d649bd9"},
|
||||
{file = "PyQt5_sip-12.11.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7218f6a1cefeb0b2fc26b89f15011f841aa4cd77786ccd863bf9792347fa38a8"},
|
||||
{file = "PyQt5_sip-12.11.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6b1113538082a7dd63b908587f61ce28ba4c7b8341e801fdf305d53a50a878ab"},
|
||||
{file = "PyQt5_sip-12.11.1-cp311-cp311-win32.whl", hash = "sha256:ac5f7ed06213d3bb203e33037f7c1a0716584c21f4f0922dcc044750e3659b80"},
|
||||
{file = "PyQt5_sip-12.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:4f0497e2f5eeaea9f5a67b0e55c501168efa86df4e53aace2a46498b87bc55c1"},
|
||||
{file = "PyQt5_sip-12.11.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b355d56483edc79dcba30be947a6b700856bb74beb90539e14cc4d92b9bad152"},
|
||||
{file = "PyQt5_sip-12.11.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:dd163d9cffc4a56ebb9dd6908c0f0cb0caff8080294d41f4fb60fc3be63ca434"},
|
||||
{file = "PyQt5_sip-12.11.1-cp37-cp37m-win32.whl", hash = "sha256:b714f550ea6ddae94fd7acae531971e535f4a4e7277b62eb44e7c649cf3f03d0"},
|
||||
{file = "PyQt5_sip-12.11.1-cp37-cp37m-win_amd64.whl", hash = "sha256:d09b2586235deab7a5f2e28e4bde9a70c0b3730fa84f2590804a9932414136a3"},
|
||||
{file = "PyQt5_sip-12.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9a6f9c058564d0ac573561036299f54c452ae78b7d2a65d7c2d01685e6dca50d"},
|
||||
{file = "PyQt5_sip-12.11.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fc920c0e0d5050474d2d6282b478e4957548bf1dce58e1b0678914514dc70064"},
|
||||
{file = "PyQt5_sip-12.11.1-cp38-cp38-win32.whl", hash = "sha256:3358c584832f0ac9fd1ad3623d8a346c705f43414df1fcd0cb285a6ef51fec08"},
|
||||
{file = "PyQt5_sip-12.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:f9691c6f4d899ca762dd54442a1be158c3e52017f583183da6ef37d5bae86595"},
|
||||
{file = "PyQt5_sip-12.11.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0bc81cb9e171d29302d393775f95cfa01b7a15f61b199ab1812976e5c4cb2cb9"},
|
||||
{file = "PyQt5_sip-12.11.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b077fb4383536f51382f5516f0347328a4f338c6ccc4c268cc358643bef1b838"},
|
||||
{file = "PyQt5_sip-12.11.1-cp39-cp39-win32.whl", hash = "sha256:5c152878443c3e951d5db7df53509d444708dc06a121c267b548146be06b87f8"},
|
||||
{file = "PyQt5_sip-12.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd935cc46dfdbb89c21042c1db2e46a71f25693af57272f146d6d9418e2934f1"},
|
||||
{file = "PyQt5_sip-12.11.1.tar.gz", hash = "sha256:97d3fbda0f61edb1be6529ec2d5c7202ae83aee4353e4b264a159f8c9ada4369"},
|
||||
{file = "PyQt5_sip-12.12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4e683dcbdc9e7d36d7ccba82cf20e4835b54bb212470a8467f1d4b620ddeef6a"},
|
||||
{file = "PyQt5_sip-12.12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7ca01f0508782374ad3621296780fbb31ac3c6f6c8ba1e7051cc4c08354c46a3"},
|
||||
{file = "PyQt5_sip-12.12.0-cp310-cp310-win32.whl", hash = "sha256:7741a57bf7980ef16ee975ea9790f95616d532053e4a4f16bf35449333cbcc5b"},
|
||||
{file = "PyQt5_sip-12.12.0-cp310-cp310-win_amd64.whl", hash = "sha256:660416500991c4eaf20730c2ec4897cd75b476fae9c80fe09fa0f98750693516"},
|
||||
{file = "PyQt5_sip-12.12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e77e683916f44b82f880155e0c13566ad285c5708c53287d67b4c2971c4579a3"},
|
||||
{file = "PyQt5_sip-12.12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e19fcd0536cb74eda5dfab24490cb20966d371069a95f81f56cb9de7c18c2bee"},
|
||||
{file = "PyQt5_sip-12.12.0-cp311-cp311-win32.whl", hash = "sha256:da0c653c3a9843e0bb3bdd43c773c07458a0ae78bd056ebcad0b59ce1aa91e1c"},
|
||||
{file = "PyQt5_sip-12.12.0-cp311-cp311-win_amd64.whl", hash = "sha256:56d08c822a8b4f0950285d1b316d81c3b80bf3ba8d98efc035a205051f03a05d"},
|
||||
{file = "PyQt5_sip-12.12.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d763dde46d5754c44aed1fbd9ef030c0850b8b341834b4d274d64f8fb1b25a05"},
|
||||
{file = "PyQt5_sip-12.12.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:21639b03429baae810119239592762da9a30fa0fe3b1c2e26f456cf1a77a3cc0"},
|
||||
{file = "PyQt5_sip-12.12.0-cp37-cp37m-win32.whl", hash = "sha256:d33ec957b9c104b56756cc10f82e544d41d64d0e2048c95ba1b64ef6d1ad55dc"},
|
||||
{file = "PyQt5_sip-12.12.0-cp37-cp37m-win_amd64.whl", hash = "sha256:1b0203381b895097c41cd1ca6bba7d88fd0d2fa8c3dde6d55c1bb95141080f35"},
|
||||
{file = "PyQt5_sip-12.12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:96ec94a7239f83e30b4c37a7f89c75df3504918a372d968e773532b5fbc7d268"},
|
||||
{file = "PyQt5_sip-12.12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6e4becfdbbe1da70887cd6baa0ef1ec394d81a39522e54a3118d1757e2fd0e06"},
|
||||
{file = "PyQt5_sip-12.12.0-cp38-cp38-win32.whl", hash = "sha256:bc0df0e4a95e2dc394009cf473098deb318ba6c5208390acc762889a253ef802"},
|
||||
{file = "PyQt5_sip-12.12.0-cp38-cp38-win_amd64.whl", hash = "sha256:d26078f436952d774c51599b90d5aa4b9533406f7d65e0d80931a87a24268836"},
|
||||
{file = "PyQt5_sip-12.12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:d66df3702adf375ec8d4d69ec2a80f57ea899180b1db62188c6313a2f81085da"},
|
||||
{file = "PyQt5_sip-12.12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:382a85ae7218de9b5ed136d0d865b49c09063e1ca428ed6901b1a5860223b444"},
|
||||
{file = "PyQt5_sip-12.12.0-cp39-cp39-win32.whl", hash = "sha256:a04933dacbba804623c5861d214e217e7e3454beab84566ba5e02c86fb86eded"},
|
||||
{file = "PyQt5_sip-12.12.0-cp39-cp39-win_amd64.whl", hash = "sha256:1e91834cc98fda25c232666ca2e77b14520b47b1cee8d38bc93dbe0cd951443e"},
|
||||
{file = "PyQt5_sip-12.12.0.tar.gz", hash = "sha256:01bc2d443325505b07d35e4a70d239b4f97b77486e29117fb67f927a15cd8061"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyqt5-stubs"
|
||||
version = "5.15.6.0"
|
||||
description = "PEP561 stub files for the PyQt5 framework"
|
||||
category = "dev"
|
||||
name = "pyqt6"
|
||||
version = "6.5.0"
|
||||
description = "Python bindings for the Qt cross platform application toolkit"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">= 3.5"
|
||||
python-versions = ">=3.6.1"
|
||||
files = [
|
||||
{file = "PyQt5-stubs-5.15.6.0.tar.gz", hash = "sha256:91270ac23ebf38a1dc04cd97aa852cd08af82dc839100e5395af1447e3e99707"},
|
||||
{file = "PyQt5_stubs-5.15.6.0-py3-none-any.whl", hash = "sha256:7fb8177c72489a8911f021b7bd7c33f12c87f6dba92dcef3fdcdb5d9400f0f3f"},
|
||||
{file = "PyQt6-6.5.0-cp37-abi3-macosx_10_14_universal2.whl", hash = "sha256:e3c8289d9a509be897265981b77eb29e64ce29e9d221fdf52545c2c95e819c9b"},
|
||||
{file = "PyQt6-6.5.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:2b0d9628134811fbfc988d1757111ca8e25cb697f136fa54c969fb1a4d4a61d1"},
|
||||
{file = "PyQt6-6.5.0-cp37-abi3-win_amd64.whl", hash = "sha256:99ea0e68f548509b7ef97cded0feeaf3dca7d1fe719388569407326be3be38c2"},
|
||||
{file = "PyQt6-6.5.0.tar.gz", hash = "sha256:b97cb4be9b2c8997904ea668cf3b0a4ae5822196f7792590d05ecde6216a9fbc"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
dev = ["mypy (==0.930)", "pytest", "pytest-xvfb"]
|
||||
[package.dependencies]
|
||||
PyQt6-Qt6 = ">=6.5.0"
|
||||
PyQt6-sip = ">=13.4,<14"
|
||||
|
||||
[[package]]
|
||||
name = "pyqt6-qt6"
|
||||
version = "6.5.0"
|
||||
description = "The subset of a Qt installation needed by PyQt6."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "PyQt6_Qt6-6.5.0-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:1178fcd5e9590fec4261e06a753a8fa028222ec0bd9a0788b3bd37720fbbe6cf"},
|
||||
{file = "PyQt6_Qt6-6.5.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:9d82d8af986a0eef55905f309fdda4303d1354eba10175824ae62ab6547f7a96"},
|
||||
{file = "PyQt6_Qt6-6.5.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:5f40ef19eb632731828283361f800928517650c74c914c093af9a364d6843953"},
|
||||
{file = "PyQt6_Qt6-6.5.0-py3-none-win_amd64.whl", hash = "sha256:8c1f898f4d02a31615fe7613a38f82b489fb2c8554965c917d551470731635a8"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyqt6-sip"
|
||||
version = "13.5.0"
|
||||
description = "The sip module support for PyQt6"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "PyQt6_sip-13.5.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:447c0df1c8796d2dbb9e5c1cef2ba2a59a38a2bce2fa438246c096a52530f331"},
|
||||
{file = "PyQt6_sip-13.5.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:cd56a17e51bc84203219023e956ac42ba8aa4195adb1126476f0cb751a22e986"},
|
||||
{file = "PyQt6_sip-13.5.0-cp310-cp310-win_amd64.whl", hash = "sha256:c69072f4afc8e75799d3166f5d3b405eaa7bba998f61e3c8f0dd3a78a234015c"},
|
||||
{file = "PyQt6_sip-13.5.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6fed31d93b2ee8115621f2aeb686068ad1b75084df6af5262c4a1818064014d6"},
|
||||
{file = "PyQt6_sip-13.5.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ee6a198346f1d9e2b675232b6d19d1517652594d7fdc72bb32d0bced6cb2e08d"},
|
||||
{file = "PyQt6_sip-13.5.0-cp311-cp311-win_amd64.whl", hash = "sha256:5a12a24ca84c482a8baa07081f73e11cee17c0c9220021319eada087d2ea8267"},
|
||||
{file = "PyQt6_sip-13.5.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:34e9d5a6f2d77fd7829ce93f59406193547dc77316b63a979bf8de84bb2d7d97"},
|
||||
{file = "PyQt6_sip-13.5.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1ffb48367e0a8bcfe6142c039a433905d606785f7085c3dff3f7801f0afd9fec"},
|
||||
{file = "PyQt6_sip-13.5.0-cp37-cp37m-win_amd64.whl", hash = "sha256:42e802b99293eff99061115b122801574682b950c2f01e68ac14162f35239bce"},
|
||||
{file = "PyQt6_sip-13.5.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d79d1c557d35747feef11e943723d9a662a819070fedf96e85920bfd5ad48d1"},
|
||||
{file = "PyQt6_sip-13.5.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6e72061953b0bd07d6b41c710bb654788ca61a8f336d169b59c96fd15fdf681a"},
|
||||
{file = "PyQt6_sip-13.5.0-cp38-cp38-win_amd64.whl", hash = "sha256:640011d5642ee94dce6cfde234631830ca7164bef138772c4ad05b80dcb88e10"},
|
||||
{file = "PyQt6_sip-13.5.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2cbc73dd3a2e0d6669b47fbf0ed5494a3cda996a2d0db465eea2a825a0c12733"},
|
||||
{file = "PyQt6_sip-13.5.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:289c37bf808ecc110c6f85afe29083f90170dbdfb76db412281acabefc0b7ede"},
|
||||
{file = "PyQt6_sip-13.5.0-cp39-cp39-win_amd64.whl", hash = "sha256:bf705dbbf77029c682234cdaa78970899d9d49b40b7b2d942b2af4f0f6c6d566"},
|
||||
{file = "PyQt6_sip-13.5.0.tar.gz", hash = "sha256:61c702b7f81796a27c294ba76f1cba3408161f06deb801373c42670ed36f722a"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyqt6-webengine"
|
||||
version = "6.5.0"
|
||||
description = "Python bindings for the Qt WebEngine framework"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "PyQt6_WebEngine-6.5.0-cp37-abi3-macosx_10_14_universal2.whl", hash = "sha256:45849365b1ba196724dc6a520ceed3ddaca4e9c09da28eac3c448d26cefdf001"},
|
||||
{file = "PyQt6_WebEngine-6.5.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:26ff8d3362328bed09f8f1155c48122b83daf35998d6d299de1dbfcd9d4fc47c"},
|
||||
{file = "PyQt6_WebEngine-6.5.0-cp37-abi3-win_amd64.whl", hash = "sha256:83a7e97a518d4001fb6c22e26a71e28d6d3b38c40ee0cbe21abfa46982b203d3"},
|
||||
{file = "PyQt6_WebEngine-6.5.0.tar.gz", hash = "sha256:8ba9db56c4c181a2a2fab1673ca35e5b63dc69113f085027ddc43c710b6d6ee9"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
PyQt6 = ">=6.2.0"
|
||||
PyQt6-sip = ">=13.4,<14"
|
||||
PyQt6-WebEngine-Qt6 = ">=6.5.0"
|
||||
|
||||
[[package]]
|
||||
name = "pyqt6-webengine-qt6"
|
||||
version = "6.5.0"
|
||||
description = "The subset of a Qt installation needed by PyQt6-WebEngine."
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "PyQt6_WebEngine_Qt6-6.5.0-py3-none-macosx_10_14_x86_64.whl", hash = "sha256:8d7eee4e864c89d6865ff95394dec3aa5b6620ac20412d09a313e83a5baaecb5"},
|
||||
{file = "PyQt6_WebEngine_Qt6-6.5.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:ee2300d372cf38bfb2e426e5036f58bfcaf121e460dc7f89913dc7bd6c3c8953"},
|
||||
{file = "PyQt6_WebEngine_Qt6-6.5.0-py3-none-manylinux_2_28_x86_64.whl", hash = "sha256:6f2be9044060ed3e9e0c55e0d8863fae08c815e994bcf17f2ff24945a2264ff7"},
|
||||
{file = "PyQt6_WebEngine_Qt6-6.5.0-py3-none-win_amd64.whl", hash = "sha256:5acadcc6608df8d9eba385e04ced2fc88e7eb92e366556ee4ac3c57a02c00088"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "pyqtwebengine"
|
||||
@ -1012,18 +1071,17 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "pytest"
|
||||
version = "7.2.1"
|
||||
version = "7.3.0"
|
||||
description = "pytest: simple powerful testing with Python"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "pytest-7.2.1-py3-none-any.whl", hash = "sha256:c7c6ca206e93355074ae32f7403e8ea12163b1163c976fee7d4d84027c162be5"},
|
||||
{file = "pytest-7.2.1.tar.gz", hash = "sha256:d45e0952f3727241918b8fd0f376f5ff6b301cc0777c6f9a556935c92d8a7d42"},
|
||||
{file = "pytest-7.3.0-py3-none-any.whl", hash = "sha256:933051fa1bfbd38a21e73c3960cebdad4cf59483ddba7696c48509727e17f201"},
|
||||
{file = "pytest-7.3.0.tar.gz", hash = "sha256:58ecc27ebf0ea643ebfdf7fb1249335da761a00c9f955bcd922349bcb68ee57d"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
attrs = ">=19.2.0"
|
||||
colorama = {version = "*", markers = "sys_platform == \"win32\""}
|
||||
exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""}
|
||||
iniconfig = "*"
|
||||
@ -1032,7 +1090,7 @@ pluggy = ">=0.12,<2.0"
|
||||
tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""}
|
||||
|
||||
[package.extras]
|
||||
testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"]
|
||||
testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"]
|
||||
|
||||
[[package]]
|
||||
name = "pytest-qt"
|
||||
@ -1099,19 +1157,19 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "rich"
|
||||
version = "13.3.1"
|
||||
version = "13.3.3"
|
||||
description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7.0"
|
||||
files = [
|
||||
{file = "rich-13.3.1-py3-none-any.whl", hash = "sha256:8aa57747f3fc3e977684f0176a88e789be314a99f99b43b75d1e9cb5dc6db9e9"},
|
||||
{file = "rich-13.3.1.tar.gz", hash = "sha256:125d96d20c92b946b983d0d392b84ff945461e5a06d3867e9f9e575f8697b67f"},
|
||||
{file = "rich-13.3.3-py3-none-any.whl", hash = "sha256:540c7d6d26a1178e8e8b37e9ba44573a3cd1464ff6348b99ee7061b95d1c6333"},
|
||||
{file = "rich-13.3.3.tar.gz", hash = "sha256:dc84400a9d842b3a9c5ff74addd8eb798d155f36c1c91303888e0a66850d2a15"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
markdown-it-py = ">=2.1.0,<3.0.0"
|
||||
pygments = ">=2.14.0,<3.0.0"
|
||||
markdown-it-py = ">=2.2.0,<3.0.0"
|
||||
pygments = ">=2.13.0,<3.0.0"
|
||||
|
||||
[package.extras]
|
||||
jupyter = ["ipywidgets (>=7.5.1,<9)"]
|
||||
@ -1147,53 +1205,53 @@ files = [
|
||||
|
||||
[[package]]
|
||||
name = "sqlalchemy"
|
||||
version = "1.4.46"
|
||||
version = "1.4.47"
|
||||
description = "Database Abstraction Library"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7"
|
||||
files = [
|
||||
{file = "SQLAlchemy-1.4.46-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:7001f16a9a8e06488c3c7154827c48455d1c1507d7228d43e781afbc8ceccf6d"},
|
||||
{file = "SQLAlchemy-1.4.46-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:c7a46639ba058d320c9f53a81db38119a74b8a7a1884df44d09fbe807d028aaf"},
|
||||
{file = "SQLAlchemy-1.4.46-cp27-cp27m-win32.whl", hash = "sha256:c04144a24103135ea0315d459431ac196fe96f55d3213bfd6d39d0247775c854"},
|
||||
{file = "SQLAlchemy-1.4.46-cp27-cp27m-win_amd64.whl", hash = "sha256:7b81b1030c42b003fc10ddd17825571603117f848814a344d305262d370e7c34"},
|
||||
{file = "SQLAlchemy-1.4.46-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:939f9a018d2ad04036746e15d119c0428b1e557470361aa798e6e7d7f5875be0"},
|
||||
{file = "SQLAlchemy-1.4.46-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:b7f4b6aa6e87991ec7ce0e769689a977776db6704947e562102431474799a857"},
|
||||
{file = "SQLAlchemy-1.4.46-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5dbf17ac9a61e7a3f1c7ca47237aac93cabd7f08ad92ac5b96d6f8dea4287fc1"},
|
||||
{file = "SQLAlchemy-1.4.46-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7f8267682eb41a0584cf66d8a697fef64b53281d01c93a503e1344197f2e01fe"},
|
||||
{file = "SQLAlchemy-1.4.46-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64cb0ad8a190bc22d2112001cfecdec45baffdf41871de777239da6a28ed74b6"},
|
||||
{file = "SQLAlchemy-1.4.46-cp310-cp310-win32.whl", hash = "sha256:5f752676fc126edc1c4af0ec2e4d2adca48ddfae5de46bb40adbd3f903eb2120"},
|
||||
{file = "SQLAlchemy-1.4.46-cp310-cp310-win_amd64.whl", hash = "sha256:31de1e2c45e67a5ec1ecca6ec26aefc299dd5151e355eb5199cd9516b57340be"},
|
||||
{file = "SQLAlchemy-1.4.46-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:d68e1762997bfebf9e5cf2a9fd0bcf9ca2fdd8136ce7b24bbd3bbfa4328f3e4a"},
|
||||
{file = "SQLAlchemy-1.4.46-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d112b0f3c1bc5ff70554a97344625ef621c1bfe02a73c5d97cac91f8cd7a41e"},
|
||||
{file = "SQLAlchemy-1.4.46-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:69fac0a7054d86b997af12dc23f581cf0b25fb1c7d1fed43257dee3af32d3d6d"},
|
||||
{file = "SQLAlchemy-1.4.46-cp311-cp311-win32.whl", hash = "sha256:887865924c3d6e9a473dc82b70977395301533b3030d0f020c38fd9eba5419f2"},
|
||||
{file = "SQLAlchemy-1.4.46-cp311-cp311-win_amd64.whl", hash = "sha256:984ee13543a346324319a1fb72b698e521506f6f22dc37d7752a329e9cd00a32"},
|
||||
{file = "SQLAlchemy-1.4.46-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:9167d4227b56591a4cc5524f1b79ccd7ea994f36e4c648ab42ca995d28ebbb96"},
|
||||
{file = "SQLAlchemy-1.4.46-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d61e9ecc849d8d44d7f80894ecff4abe347136e9d926560b818f6243409f3c86"},
|
||||
{file = "SQLAlchemy-1.4.46-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3ec187acf85984263299a3f15c34a6c0671f83565d86d10f43ace49881a82718"},
|
||||
{file = "SQLAlchemy-1.4.46-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9883f5fae4fd8e3f875adc2add69f8b945625811689a6c65866a35ee9c0aea23"},
|
||||
{file = "SQLAlchemy-1.4.46-cp36-cp36m-win32.whl", hash = "sha256:535377e9b10aff5a045e3d9ada8a62d02058b422c0504ebdcf07930599890eb0"},
|
||||
{file = "SQLAlchemy-1.4.46-cp36-cp36m-win_amd64.whl", hash = "sha256:18cafdb27834fa03569d29f571df7115812a0e59fd6a3a03ccb0d33678ec8420"},
|
||||
{file = "SQLAlchemy-1.4.46-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:a1ad90c97029cc3ab4ffd57443a20fac21d2ec3c89532b084b073b3feb5abff3"},
|
||||
{file = "SQLAlchemy-1.4.46-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4847f4b1d822754e35707db913396a29d874ee77b9c3c3ef3f04d5a9a6209618"},
|
||||
{file = "SQLAlchemy-1.4.46-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c5a99282848b6cae0056b85da17392a26b2d39178394fc25700bcf967e06e97a"},
|
||||
{file = "SQLAlchemy-1.4.46-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d4b1cc7835b39835c75cf7c20c926b42e97d074147c902a9ebb7cf2c840dc4e2"},
|
||||
{file = "SQLAlchemy-1.4.46-cp37-cp37m-win32.whl", hash = "sha256:c522e496f9b9b70296a7675272ec21937ccfc15da664b74b9f58d98a641ce1b6"},
|
||||
{file = "SQLAlchemy-1.4.46-cp37-cp37m-win_amd64.whl", hash = "sha256:ae067ab639fa499f67ded52f5bc8e084f045d10b5ac7bb928ae4ca2b6c0429a5"},
|
||||
{file = "SQLAlchemy-1.4.46-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:e3c1808008124850115a3f7e793a975cfa5c8a26ceeeb9ff9cbb4485cac556df"},
|
||||
{file = "SQLAlchemy-1.4.46-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d4d164df3d83d204c69f840da30b292ac7dc54285096c6171245b8d7807185aa"},
|
||||
{file = "SQLAlchemy-1.4.46-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:b33ffbdbbf5446cf36cd4cc530c9d9905d3c2fe56ed09e25c22c850cdb9fac92"},
|
||||
{file = "SQLAlchemy-1.4.46-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d94682732d1a0def5672471ba42a29ff5e21bb0aae0afa00bb10796fc1e28dd"},
|
||||
{file = "SQLAlchemy-1.4.46-cp38-cp38-win32.whl", hash = "sha256:f8cb80fe8d14307e4124f6fad64dfd87ab749c9d275f82b8b4ec84c84ecebdbe"},
|
||||
{file = "SQLAlchemy-1.4.46-cp38-cp38-win_amd64.whl", hash = "sha256:07e48cbcdda6b8bc7a59d6728bd3f5f574ffe03f2c9fb384239f3789c2d95c2e"},
|
||||
{file = "SQLAlchemy-1.4.46-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:1b1e5e96e2789d89f023d080bee432e2fef64d95857969e70d3cadec80bd26f0"},
|
||||
{file = "SQLAlchemy-1.4.46-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a3714e5b33226131ac0da60d18995a102a17dddd42368b7bdd206737297823ad"},
|
||||
{file = "SQLAlchemy-1.4.46-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:955162ad1a931fe416eded6bb144ba891ccbf9b2e49dc7ded39274dd9c5affc5"},
|
||||
{file = "SQLAlchemy-1.4.46-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6e4cb5c63f705c9d546a054c60d326cbde7421421e2d2565ce3e2eee4e1a01f"},
|
||||
{file = "SQLAlchemy-1.4.46-cp39-cp39-win32.whl", hash = "sha256:51e1ba2884c6a2b8e19109dc08c71c49530006c1084156ecadfaadf5f9b8b053"},
|
||||
{file = "SQLAlchemy-1.4.46-cp39-cp39-win_amd64.whl", hash = "sha256:315676344e3558f1f80d02535f410e80ea4e8fddba31ec78fe390eff5fb8f466"},
|
||||
{file = "SQLAlchemy-1.4.46.tar.gz", hash = "sha256:6913b8247d8a292ef8315162a51931e2b40ce91681f1b6f18f697045200c4a30"},
|
||||
{file = "SQLAlchemy-1.4.47-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:dcfb480bfc9e1fab726003ae00a6bfc67a29bad275b63a4e36d17fe7f13a624e"},
|
||||
{file = "SQLAlchemy-1.4.47-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:28fda5a69d6182589892422c5a9b02a8fd1125787aab1d83f1392aa955bf8d0a"},
|
||||
{file = "SQLAlchemy-1.4.47-cp27-cp27m-win32.whl", hash = "sha256:45e799c1a41822eba6bee4e59b0e38764e1a1ee69873ab2889079865e9ea0e23"},
|
||||
{file = "SQLAlchemy-1.4.47-cp27-cp27m-win_amd64.whl", hash = "sha256:10edbb92a9ef611f01b086e271a9f6c1c3e5157c3b0c5ff62310fb2187acbd4a"},
|
||||
{file = "SQLAlchemy-1.4.47-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:7a4df53472c9030a8ddb1cce517757ba38a7a25699bbcabd57dcc8a5d53f324e"},
|
||||
{file = "SQLAlchemy-1.4.47-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:511d4abc823152dec49461209607bbfb2df60033c8c88a3f7c93293b8ecbb13d"},
|
||||
{file = "SQLAlchemy-1.4.47-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dbe57f39f531c5d68d5594ea4613daa60aba33bb51a8cc42f96f17bbd6305e8d"},
|
||||
{file = "SQLAlchemy-1.4.47-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca8ab6748e3ec66afccd8b23ec2f92787a58d5353ce9624dccd770427ee67c82"},
|
||||
{file = "SQLAlchemy-1.4.47-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299b5c5c060b9fbe51808d0d40d8475f7b3873317640b9b7617c7f988cf59fda"},
|
||||
{file = "SQLAlchemy-1.4.47-cp310-cp310-win32.whl", hash = "sha256:684e5c773222781775c7f77231f412633d8af22493bf35b7fa1029fdf8066d10"},
|
||||
{file = "SQLAlchemy-1.4.47-cp310-cp310-win_amd64.whl", hash = "sha256:2bba39b12b879c7b35cde18b6e14119c5f1a16bd064a48dd2ac62d21366a5e17"},
|
||||
{file = "SQLAlchemy-1.4.47-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:795b5b9db573d3ed61fae74285d57d396829e3157642794d3a8f72ec2a5c719b"},
|
||||
{file = "SQLAlchemy-1.4.47-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:989c62b96596b7938cbc032e39431e6c2d81b635034571d6a43a13920852fb65"},
|
||||
{file = "SQLAlchemy-1.4.47-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e3b67bda733da1dcdccaf354e71ef01b46db483a4f6236450d3f9a61efdba35a"},
|
||||
{file = "SQLAlchemy-1.4.47-cp311-cp311-win32.whl", hash = "sha256:9a198f690ac12a3a807e03a5a45df6a30cd215935f237a46f4248faed62e69c8"},
|
||||
{file = "SQLAlchemy-1.4.47-cp311-cp311-win_amd64.whl", hash = "sha256:03be6f3cb66e69fb3a09b5ea89d77e4bc942f3bf84b207dba84666a26799c166"},
|
||||
{file = "SQLAlchemy-1.4.47-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:16ee6fea316790980779268da47a9260d5dd665c96f225d28e7750b0bb2e2a04"},
|
||||
{file = "SQLAlchemy-1.4.47-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:557675e0befafa08d36d7a9284e8761c97490a248474d778373fb96b0d7fd8de"},
|
||||
{file = "SQLAlchemy-1.4.47-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb2797fee8a7914fb2c3dc7de404d3f96eb77f20fc60e9ee38dc6b0ca720f2c2"},
|
||||
{file = "SQLAlchemy-1.4.47-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28297aa29e035f29cba6b16aacd3680fbc6a9db682258d5f2e7b49ec215dbe40"},
|
||||
{file = "SQLAlchemy-1.4.47-cp36-cp36m-win32.whl", hash = "sha256:998e782c8d9fd57fa8704d149ccd52acf03db30d7dd76f467fd21c1c21b414fa"},
|
||||
{file = "SQLAlchemy-1.4.47-cp36-cp36m-win_amd64.whl", hash = "sha256:dde4d02213f1deb49eaaf8be8a6425948963a7af84983b3f22772c63826944de"},
|
||||
{file = "SQLAlchemy-1.4.47-cp37-cp37m-macosx_10_15_x86_64.whl", hash = "sha256:e98ef1babe34f37f443b7211cd3ee004d9577a19766e2dbacf62fce73c76245a"},
|
||||
{file = "SQLAlchemy-1.4.47-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:14a3879853208a242b5913f3a17c6ac0eae9dc210ff99c8f10b19d4a1ed8ed9b"},
|
||||
{file = "SQLAlchemy-1.4.47-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:7120a2f72599d4fed7c001fa1cbbc5b4d14929436135768050e284f53e9fbe5e"},
|
||||
{file = "SQLAlchemy-1.4.47-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:048509d7f3ac27b83ad82fd96a1ab90a34c8e906e4e09c8d677fc531d12c23c5"},
|
||||
{file = "SQLAlchemy-1.4.47-cp37-cp37m-win32.whl", hash = "sha256:6572d7c96c2e3e126d0bb27bfb1d7e2a195b68d951fcc64c146b94f088e5421a"},
|
||||
{file = "SQLAlchemy-1.4.47-cp37-cp37m-win_amd64.whl", hash = "sha256:a6c3929df5eeaf3867724003d5c19fed3f0c290f3edc7911616616684f200ecf"},
|
||||
{file = "SQLAlchemy-1.4.47-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:71d4bf7768169c4502f6c2b0709a02a33703544f611810fb0c75406a9c576ee1"},
|
||||
{file = "SQLAlchemy-1.4.47-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dd45c60cc4f6d68c30d5179e2c2c8098f7112983532897566bb69c47d87127d3"},
|
||||
{file = "SQLAlchemy-1.4.47-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0fdbb8e9d4e9003f332a93d6a37bca48ba8095086c97a89826a136d8eddfc455"},
|
||||
{file = "SQLAlchemy-1.4.47-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f216a51451a0a0466e082e163591f6dcb2f9ec182adb3f1f4b1fd3688c7582c"},
|
||||
{file = "SQLAlchemy-1.4.47-cp38-cp38-win32.whl", hash = "sha256:bd988b3362d7e586ef581eb14771bbb48793a4edb6fcf62da75d3f0f3447060b"},
|
||||
{file = "SQLAlchemy-1.4.47-cp38-cp38-win_amd64.whl", hash = "sha256:32ab09f2863e3de51529aa84ff0e4fe89a2cb1bfbc11e225b6dbc60814e44c94"},
|
||||
{file = "SQLAlchemy-1.4.47-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:07764b240645627bc3e82596435bd1a1884646bfc0721642d24c26b12f1df194"},
|
||||
{file = "SQLAlchemy-1.4.47-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e2a42017984099ef6f56438a6b898ce0538f6fadddaa902870c5aa3e1d82583"},
|
||||
{file = "SQLAlchemy-1.4.47-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6b6d807c76c20b4bc143a49ad47782228a2ac98bdcdcb069da54280e138847fc"},
|
||||
{file = "SQLAlchemy-1.4.47-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a94632ba26a666e7be0a7d7cc3f7acab622a04259a3aa0ee50ff6d44ba9df0d"},
|
||||
{file = "SQLAlchemy-1.4.47-cp39-cp39-win32.whl", hash = "sha256:f80915681ea9001f19b65aee715115f2ad310730c8043127cf3e19b3009892dd"},
|
||||
{file = "SQLAlchemy-1.4.47-cp39-cp39-win_amd64.whl", hash = "sha256:fc700b862e0a859a37faf85367e205e7acaecae5a098794aff52fdd8aea77b12"},
|
||||
{file = "SQLAlchemy-1.4.47.tar.gz", hash = "sha256:95fc02f7fc1f3199aaa47a8a757437134cf618e9d994c84effd53f530c38586f"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@ -1222,14 +1280,14 @@ sqlcipher = ["sqlcipher3-binary"]
|
||||
|
||||
[[package]]
|
||||
name = "sqlalchemy2-stubs"
|
||||
version = "0.0.2a32"
|
||||
version = "0.0.2a33"
|
||||
description = "Typing Stubs for SQLAlchemy 1.4"
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=3.6"
|
||||
files = [
|
||||
{file = "sqlalchemy2-stubs-0.0.2a32.tar.gz", hash = "sha256:2a2cfab71d35ac63bf21ad841d8610cd93a3bd4c6562848c538fa975585c2739"},
|
||||
{file = "sqlalchemy2_stubs-0.0.2a32-py3-none-any.whl", hash = "sha256:7f5fb30b0cf7c6b74c50c1d94df77ff32007afee8d80499752eb3fedffdbdfb8"},
|
||||
{file = "sqlalchemy2-stubs-0.0.2a33.tar.gz", hash = "sha256:5a35a096964dfd985651662b7f175fe1ddcbf5ed4f2d0203e637cec38bed64b4"},
|
||||
{file = "sqlalchemy2_stubs-0.0.2a33-py3-none-any.whl", hash = "sha256:9809e7d8ea72cd92ac35aca4b43f588ae24b20376c55a0ef0112a08a6b537180"},
|
||||
]
|
||||
|
||||
[package.dependencies]
|
||||
@ -1350,38 +1408,38 @@ test = ["argcomplete (>=2.0)", "pre-commit", "pytest", "pytest-mock"]
|
||||
|
||||
[[package]]
|
||||
name = "types-psutil"
|
||||
version = "5.9.5.6"
|
||||
version = "5.9.5.11"
|
||||
description = "Typing stubs for psutil"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = "*"
|
||||
files = [
|
||||
{file = "types-psutil-5.9.5.6.tar.gz", hash = "sha256:65f93589711ca48859602c955c4247c834d96d4d33a9cbe4142d89593ef33b3c"},
|
||||
{file = "types_psutil-5.9.5.6-py3-none-any.whl", hash = "sha256:07acd57594ff254285250ef70be0fe4efe0b11a30065b6dce62a856235a8ca10"},
|
||||
{file = "types-psutil-5.9.5.11.tar.gz", hash = "sha256:3d59da0758f056bfb59fef757366e538c5dd5473d81c35b38956624ae2484f31"},
|
||||
{file = "types_psutil-5.9.5.11-py3-none-any.whl", hash = "sha256:01cc541b187a11e758d336c4cc89abf71d0098627fa95d5cfaca536be31a7d1a"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "typing-extensions"
|
||||
version = "4.4.0"
|
||||
version = "4.5.0"
|
||||
description = "Backported and Experimental Type Hints for Python 3.7+"
|
||||
category = "dev"
|
||||
category = "main"
|
||||
optional = false
|
||||
python-versions = ">=3.7"
|
||||
files = [
|
||||
{file = "typing_extensions-4.4.0-py3-none-any.whl", hash = "sha256:16fa4864408f655d35ec496218b85f79b3437c829e93320c7c9215ccfd92489e"},
|
||||
{file = "typing_extensions-4.4.0.tar.gz", hash = "sha256:1511434bb92bf8dd198c12b1cc812e800d4181cfcb867674e0f8279cc93087aa"},
|
||||
{file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"},
|
||||
{file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"},
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "urllib3"
|
||||
version = "1.26.14"
|
||||
version = "1.26.15"
|
||||
description = "HTTP library with thread-safe connection pooling, file post, and more."
|
||||
category = "dev"
|
||||
optional = false
|
||||
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*"
|
||||
files = [
|
||||
{file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"},
|
||||
{file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"},
|
||||
{file = "urllib3-1.26.15-py2.py3-none-any.whl", hash = "sha256:aa751d169e23c7479ce47a0cb0da579e3ede798f994f5816a74e4f4500dcea42"},
|
||||
{file = "urllib3-1.26.15.tar.gz", hash = "sha256:8a388717b9476f934a21484e8c8e61875ab60644d29b9b39e11e4b9dc1c6b305"},
|
||||
]
|
||||
|
||||
[package.extras]
|
||||
@ -1421,4 +1479,4 @@ test = ["websockets"]
|
||||
[metadata]
|
||||
lock-version = "2.0"
|
||||
python-versions = "^3.9"
|
||||
content-hash = "cfa9b80c408bc44f03400ff98c97ae0ec799ab39f6e70fa1bf1119dd89402fa1"
|
||||
content-hash = "5b77f72eb2ceb776d3aaf74c918b162984b5348dff61b9267d5e3ab68388cf1c"
|
||||
|
||||
@ -9,14 +9,12 @@ python = "^3.9"
|
||||
tinytag = "^1.7.0"
|
||||
SQLAlchemy = "^1.4.31"
|
||||
python-vlc = "^3.0.12118"
|
||||
PyQt5 = "^5.15.6"
|
||||
mysqlclient = "^2.1.0"
|
||||
mutagen = "^1.45.1"
|
||||
alembic = "^1.7.5"
|
||||
psutil = "^5.9.0"
|
||||
PyQtWebEngine = "^5.15.5"
|
||||
pydub = "^0.25.1"
|
||||
PyQt5-sip = "^12.9.1"
|
||||
types-psutil = "^5.8.22"
|
||||
python-slugify = "^6.1.2"
|
||||
thefuzz = "^0.19.0"
|
||||
@ -25,10 +23,11 @@ pyfzf = "^0.3.1"
|
||||
pydymenu = "^0.5.2"
|
||||
stackprinter = "^0.2.10"
|
||||
obsws-python = "^1.4.2"
|
||||
pyqt6 = "^6.5.0"
|
||||
pyqt6-webengine = "^6.5.0"
|
||||
|
||||
[tool.poetry.dev-dependencies]
|
||||
ipdb = "^0.13.9"
|
||||
PyQt5-stubs = "^5.15.2"
|
||||
pytest = "^7.0.1"
|
||||
pytest-qt = "^4.0.2"
|
||||
pydub-stubs = "^0.25.1"
|
||||
|
||||
17
web.py
Executable file
17
web.py
Executable file
@ -0,0 +1,17 @@
|
||||
#!/usr/bin/env python3
|
||||
import sys
|
||||
from pprint import pprint
|
||||
from PyQt6.QtWidgets import QApplication, QLabel
|
||||
from PyQt6.QtGui import QColor, QPalette
|
||||
|
||||
app = QApplication(sys.argv)
|
||||
pal = app.palette()
|
||||
pal.setColor(QPalette.ColorRole.WindowText, QColor("#000000"))
|
||||
app.setPalette(pal)
|
||||
|
||||
label = QLabel("my label")
|
||||
label.resize(300, 200)
|
||||
|
||||
label.show()
|
||||
|
||||
sys.exit(app.exec())
|
||||
Loading…
Reference in New Issue
Block a user