WIP V3: remove functions, formatting
This commit is contained in:
parent
a8aa157484
commit
2861511f1f
@ -217,4 +217,5 @@ class TrackSequence:
|
|||||||
now = PlaylistTrack()
|
now = PlaylistTrack()
|
||||||
previous = PlaylistTrack()
|
previous = PlaylistTrack()
|
||||||
|
|
||||||
|
|
||||||
track_sequence = TrackSequence()
|
track_sequence = TrackSequence()
|
||||||
|
|||||||
@ -44,12 +44,12 @@ class Config(object):
|
|||||||
COLUMN_NAME_TITLE = "Title"
|
COLUMN_NAME_TITLE = "Title"
|
||||||
DBFS_SILENCE = -50
|
DBFS_SILENCE = -50
|
||||||
DEBUG_FUNCTIONS: List[Optional[str]] = []
|
DEBUG_FUNCTIONS: List[Optional[str]] = []
|
||||||
DEBUG_MODULES: List[Optional[str]] = ['dbconfig']
|
DEBUG_MODULES: List[Optional[str]] = ["dbconfig"]
|
||||||
DEFAULT_COLUMN_WIDTH = 200
|
DEFAULT_COLUMN_WIDTH = 200
|
||||||
DISPLAY_SQL = False
|
DISPLAY_SQL = False
|
||||||
EPOCH = datetime.datetime(1970, 1, 1)
|
EPOCH = datetime.datetime(1970, 1, 1)
|
||||||
ERRORS_FROM = ['noreply@midnighthax.com']
|
ERRORS_FROM = ["noreply@midnighthax.com"]
|
||||||
ERRORS_TO = ['kae@midnighthax.com']
|
ERRORS_TO = ["kae@midnighthax.com"]
|
||||||
FADE_CURVE_BACKGROUND = "lightyellow"
|
FADE_CURVE_BACKGROUND = "lightyellow"
|
||||||
FADE_CURVE_FOREGROUND = "blue"
|
FADE_CURVE_FOREGROUND = "blue"
|
||||||
FADE_CURVE_MS_BEFORE_FADE = 5000
|
FADE_CURVE_MS_BEFORE_FADE = 5000
|
||||||
@ -71,11 +71,11 @@ class Config(object):
|
|||||||
LOG_LEVEL_STDERR = logging.ERROR
|
LOG_LEVEL_STDERR = logging.ERROR
|
||||||
LOG_LEVEL_SYSLOG = logging.DEBUG
|
LOG_LEVEL_SYSLOG = logging.DEBUG
|
||||||
LOG_NAME = "musicmuster"
|
LOG_NAME = "musicmuster"
|
||||||
MAIL_PASSWORD = os.environ.get('MAIL_PASSWORD')
|
MAIL_PASSWORD = os.environ.get("MAIL_PASSWORD")
|
||||||
MAIL_PORT = int(os.environ.get('MAIL_PORT') or 25)
|
MAIL_PORT = int(os.environ.get("MAIL_PORT") or 25)
|
||||||
MAIL_SERVER = os.environ.get('MAIL_SERVER') or "woodlands.midnighthax.com"
|
MAIL_SERVER = os.environ.get("MAIL_SERVER") or "woodlands.midnighthax.com"
|
||||||
MAIL_USERNAME = os.environ.get('MAIL_USERNAME')
|
MAIL_USERNAME = os.environ.get("MAIL_USERNAME")
|
||||||
MAIL_USE_TLS = os.environ.get('MAIL_USE_TLS') is not None
|
MAIL_USE_TLS = os.environ.get("MAIL_USE_TLS") is not None
|
||||||
MAX_IMPORT_MATCHES = 5
|
MAX_IMPORT_MATCHES = 5
|
||||||
MAX_INFO_TABS = 5
|
MAX_INFO_TABS = 5
|
||||||
MAX_MISSING_FILES_TO_REPORT = 10
|
MAX_MISSING_FILES_TO_REPORT = 10
|
||||||
@ -86,7 +86,7 @@ class Config(object):
|
|||||||
OBS_PASSWORD = "auster"
|
OBS_PASSWORD = "auster"
|
||||||
OBS_PORT = 4455
|
OBS_PORT = 4455
|
||||||
PLAY_SETTLE = 500000
|
PLAY_SETTLE = 500000
|
||||||
ROOT = os.environ.get('ROOT') or "/home/kae/music"
|
ROOT = os.environ.get("ROOT") or "/home/kae/music"
|
||||||
ROWS_FROM_ZERO = True
|
ROWS_FROM_ZERO = True
|
||||||
IMPORT_DESTINATION = os.path.join(ROOT, "Singles")
|
IMPORT_DESTINATION = os.path.join(ROOT, "Singles")
|
||||||
SCROLL_TOP_MARGIN = 3
|
SCROLL_TOP_MARGIN = 3
|
||||||
|
|||||||
@ -489,7 +489,9 @@ class PlaylistRows(Base):
|
|||||||
session.flush()
|
session.flush()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def delete_rows(session: scoped_session, playlist_id: int, row_numbers: List[int]) -> None:
|
def delete_rows(
|
||||||
|
session: scoped_session, playlist_id: int, row_numbers: List[int]
|
||||||
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Delete passed rows in given playlist.
|
Delete passed rows in given playlist.
|
||||||
"""
|
"""
|
||||||
@ -497,7 +499,7 @@ class PlaylistRows(Base):
|
|||||||
session.execute(
|
session.execute(
|
||||||
delete(PlaylistRows).where(
|
delete(PlaylistRows).where(
|
||||||
PlaylistRows.playlist_id == playlist_id,
|
PlaylistRows.playlist_id == playlist_id,
|
||||||
PlaylistRows.plr_rownum.in_(row_numbers)
|
PlaylistRows.plr_rownum.in_(row_numbers),
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@ -740,10 +740,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
times a second; this function has much better resolution.
|
times a second; this function has much better resolution.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if (
|
if track_sequence.now.track_id is None or track_sequence.now.start_time is None:
|
||||||
track_sequence.now.track_id is None
|
|
||||||
or track_sequence.now.start_time is None
|
|
||||||
):
|
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
now = datetime.now()
|
now = datetime.now()
|
||||||
@ -900,8 +897,7 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
plrs_to_move = [
|
plrs_to_move = [
|
||||||
plr
|
plr
|
||||||
for plr in playlistrows
|
for plr in playlistrows
|
||||||
if plr.id
|
if plr.id not in [track_sequence.now.plr_id, track_sequence.next.plr_id]
|
||||||
not in [track_sequence.now.plr_id, track_sequence.next.plr_id]
|
|
||||||
]
|
]
|
||||||
|
|
||||||
rows_to_delete = [
|
rows_to_delete = [
|
||||||
|
|||||||
@ -726,7 +726,9 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
|
|
||||||
# Check to see whether any rows in track_sequence have moved
|
# Check to see whether any rows in track_sequence have moved
|
||||||
if track_sequence.previous.plr_rownum in row_map:
|
if track_sequence.previous.plr_rownum in row_map:
|
||||||
track_sequence.previous.plr_rownum = row_map[track_sequence.previous.plr_rownum]
|
track_sequence.previous.plr_rownum = row_map[
|
||||||
|
track_sequence.previous.plr_rownum
|
||||||
|
]
|
||||||
if track_sequence.now.plr_rownum in row_map:
|
if track_sequence.now.plr_rownum in row_map:
|
||||||
track_sequence.now.plr_rownum = row_map[track_sequence.now.plr_rownum]
|
track_sequence.now.plr_rownum = row_map[track_sequence.now.plr_rownum]
|
||||||
if track_sequence.next.plr_rownum in row_map:
|
if track_sequence.next.plr_rownum in row_map:
|
||||||
@ -937,7 +939,7 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
Sort selected rows by artist
|
Sort selected rows by artist
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.sort_by_attribute(row_numbers, 'artist')
|
self.sort_by_attribute(row_numbers, "artist")
|
||||||
|
|
||||||
def sort_by_attribute(self, row_numbers: List[int], attr_name: str) -> None:
|
def sort_by_attribute(self, row_numbers: List[int], attr_name: str) -> None:
|
||||||
"""
|
"""
|
||||||
@ -949,8 +951,8 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
# interested in
|
# interested in
|
||||||
shortlist_rows = {k: self.playlist_rows[k] for k in row_numbers}
|
shortlist_rows = {k: self.playlist_rows[k] for k in row_numbers}
|
||||||
sorted_list = [
|
sorted_list = [
|
||||||
plr.plr_rownum for plr in
|
plr.plr_rownum
|
||||||
sorted(shortlist_rows.values(), key=attrgetter(attr_name))
|
for plr in sorted(shortlist_rows.values(), key=attrgetter(attr_name))
|
||||||
]
|
]
|
||||||
self.move_rows(sorted_list, min(sorted_list))
|
self.move_rows(sorted_list, min(sorted_list))
|
||||||
|
|
||||||
@ -959,21 +961,21 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
Sort selected rows by duration
|
Sort selected rows by duration
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.sort_by_attribute(row_numbers, 'duration')
|
self.sort_by_attribute(row_numbers, "duration")
|
||||||
|
|
||||||
def sort_by_lastplayed(self, row_numbers: List[int]) -> None:
|
def sort_by_lastplayed(self, row_numbers: List[int]) -> None:
|
||||||
"""
|
"""
|
||||||
Sort selected rows by lastplayed
|
Sort selected rows by lastplayed
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.sort_by_attribute(row_numbers, 'lastplayed')
|
self.sort_by_attribute(row_numbers, "lastplayed")
|
||||||
|
|
||||||
def sort_by_title(self, row_numbers: List[int]) -> None:
|
def sort_by_title(self, row_numbers: List[int]) -> None:
|
||||||
"""
|
"""
|
||||||
Sort selected rows by title
|
Sort selected rows by title
|
||||||
"""
|
"""
|
||||||
|
|
||||||
self.sort_by_attribute(row_numbers, 'title')
|
self.sort_by_attribute(row_numbers, "title")
|
||||||
|
|
||||||
def supportedDropActions(self) -> Qt.DropAction:
|
def supportedDropActions(self) -> Qt.DropAction:
|
||||||
return Qt.DropAction.MoveAction | Qt.DropAction.CopyAction
|
return Qt.DropAction.MoveAction | Qt.DropAction.CopyAction
|
||||||
@ -999,7 +1001,10 @@ class PlaylistModel(QAbstractTableModel):
|
|||||||
continue
|
continue
|
||||||
|
|
||||||
# Set start time for next row if we have a current track
|
# Set start time for next row if we have a current track
|
||||||
if row_number == track_sequence.next.plr_rownum and track_sequence.now.end_time:
|
if (
|
||||||
|
row_number == track_sequence.next.plr_rownum
|
||||||
|
and track_sequence.now.end_time
|
||||||
|
):
|
||||||
stend.start_time = track_sequence.now.end_time
|
stend.start_time = track_sequence.now.end_time
|
||||||
stend.end_time = stend.start_time + timedelta(milliseconds=prd.duration)
|
stend.end_time = stend.start_time + timedelta(milliseconds=prd.duration)
|
||||||
next_start_time = stend.end_time
|
next_start_time = stend.end_time
|
||||||
|
|||||||
233
app/playlists.py
233
app/playlists.py
@ -284,13 +284,6 @@ class PlaylistTab(QTableView):
|
|||||||
return index.row()
|
return index.row()
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def get_selected_playlistrow_ids(self) -> list:
|
|
||||||
"""
|
|
||||||
Return a list of PlaylistRow ids of the selected rows
|
|
||||||
"""
|
|
||||||
|
|
||||||
return [self._get_row_plr_id(a) for a in self._get_selected_rows()]
|
|
||||||
|
|
||||||
# def lookup_row_in_songfacts(self) -> None:
|
# def lookup_row_in_songfacts(self) -> None:
|
||||||
# """
|
# """
|
||||||
# If there is a selected row and it is a track row,
|
# If there is a selected row and it is a track row,
|
||||||
@ -736,20 +729,6 @@ class PlaylistTab(QTableView):
|
|||||||
if self._get_row_track_id(check_row):
|
if self._get_row_track_id(check_row):
|
||||||
break
|
break
|
||||||
|
|
||||||
def _open_in_audacity(self, row_number: int) -> None:
|
|
||||||
"""Open track in Audacity. Audacity must be already running"""
|
|
||||||
|
|
||||||
track_path = self._get_row_track_path(row_number)
|
|
||||||
if not track_path:
|
|
||||||
log.error(
|
|
||||||
f"{self.playlist_id=} "
|
|
||||||
f"playlists._open_in_audactity({row_number=}): "
|
|
||||||
"track_path not set"
|
|
||||||
)
|
|
||||||
return
|
|
||||||
|
|
||||||
open_in_audacity(track_path)
|
|
||||||
|
|
||||||
def _rescan(self, row_number: int) -> None:
|
def _rescan(self, row_number: int) -> None:
|
||||||
"""Rescan track"""
|
"""Rescan track"""
|
||||||
|
|
||||||
@ -757,42 +736,42 @@ class PlaylistTab(QTableView):
|
|||||||
model.rescan_track(row_number)
|
model.rescan_track(row_number)
|
||||||
self.clear_selection()
|
self.clear_selection()
|
||||||
|
|
||||||
def _reset_next(self, old_plrid: int, new_plrid: int) -> None:
|
# def _reset_next(self, old_plrid: int, new_plrid: int) -> None:
|
||||||
"""
|
# """
|
||||||
Called when set_next_track_signal signal received.
|
# Called when set_next_track_signal signal received.
|
||||||
|
|
||||||
Actions required:
|
# Actions required:
|
||||||
- If old_plrid points to this playlist:
|
# - If old_plrid points to this playlist:
|
||||||
- Remove existing next track
|
# - Remove existing next track
|
||||||
- If new_plrid points to this playlist:
|
# - If new_plrid points to this playlist:
|
||||||
- Set track as next
|
# - Set track as next
|
||||||
- Display row as next track
|
# - Display row as next track
|
||||||
- Update start/stop times
|
# - Update start/stop times
|
||||||
"""
|
# """
|
||||||
|
|
||||||
with Session() as session:
|
# with Session() as session:
|
||||||
# Get plrs
|
# # Get plrs
|
||||||
old_plr = new_plr = None
|
# old_plr = new_plr = None
|
||||||
if old_plrid:
|
# if old_plrid:
|
||||||
old_plr = session.get(PlaylistRows, old_plrid)
|
# old_plr = session.get(PlaylistRows, old_plrid)
|
||||||
|
|
||||||
# Unmark next track
|
# # Unmark next track
|
||||||
if old_plr and old_plr.playlist_id == self.playlist_id:
|
# if old_plr and old_plr.playlist_id == self.playlist_id:
|
||||||
self._set_row_colour_default(old_plr.plr_rownum)
|
# self._set_row_colour_default(old_plr.plr_rownum)
|
||||||
|
|
||||||
# Mark next track
|
# # Mark next track
|
||||||
if new_plrid:
|
# if new_plrid:
|
||||||
new_plr = session.get(PlaylistRows, new_plrid)
|
# new_plr = session.get(PlaylistRows, new_plrid)
|
||||||
if not new_plr:
|
# if not new_plr:
|
||||||
log.error(f"_reset_next({new_plrid=}): plr not found")
|
# log.error(f"_reset_next({new_plrid=}): plr not found")
|
||||||
return
|
# return
|
||||||
if new_plr.playlist_id == self.playlist_id:
|
# if new_plr.playlist_id == self.playlist_id:
|
||||||
self._set_row_colour_next(new_plr.plr_rownum)
|
# self._set_row_colour_next(new_plr.plr_rownum)
|
||||||
|
|
||||||
# Update start/stop times
|
# # Update start/stop times
|
||||||
self._update_start_end_times(session)
|
# self._update_start_end_times(session)
|
||||||
|
|
||||||
self.clear_selection()
|
# self.clear_selection()
|
||||||
|
|
||||||
def _run_subprocess(self, args):
|
def _run_subprocess(self, args):
|
||||||
"""Run args in subprocess"""
|
"""Run args in subprocess"""
|
||||||
@ -827,66 +806,68 @@ class PlaylistTab(QTableView):
|
|||||||
scroll_item = self.item(top_row, 0)
|
scroll_item = self.item(top_row, 0)
|
||||||
self.scrollToItem(scroll_item, QAbstractItemView.ScrollHint.PositionAtTop)
|
self.scrollToItem(scroll_item, QAbstractItemView.ScrollHint.PositionAtTop)
|
||||||
|
|
||||||
def _search(self, next: bool = True) -> None:
|
# def _search(self, next: bool = True) -> None:
|
||||||
"""
|
# """
|
||||||
Select next/previous row containg self.search_string. Start from
|
# Select next/previous row containg self.search_string. Start from
|
||||||
top selected row if there is one, else from top.
|
# top selected row if there is one, else from top.
|
||||||
|
|
||||||
Wrap at last/first row.
|
# Wrap at last/first row.
|
||||||
"""
|
# """
|
||||||
|
|
||||||
if not self.search_text:
|
# if not self.search_text:
|
||||||
return
|
# return
|
||||||
|
|
||||||
selected_row = self._get_selected_row()
|
# selected_row = self._get_selected_row()
|
||||||
if next:
|
# if next:
|
||||||
if selected_row is not None and selected_row < self.rowCount() - 1:
|
# if selected_row is not None and selected_row < self.rowCount() - 1:
|
||||||
starting_row = selected_row + 1
|
# starting_row = selected_row + 1
|
||||||
else:
|
# else:
|
||||||
starting_row = 0
|
# starting_row = 0
|
||||||
else:
|
# else:
|
||||||
if selected_row is not None and selected_row > 0:
|
# if selected_row is not None and selected_row > 0:
|
||||||
starting_row = selected_row - 1
|
# starting_row = selected_row - 1
|
||||||
else:
|
# else:
|
||||||
starting_row = self.rowCount() - 1
|
# starting_row = self.rowCount() - 1
|
||||||
|
|
||||||
wrapped = False
|
# wrapped = False
|
||||||
match_row = None
|
# match_row = None
|
||||||
row_number = starting_row
|
# row_number = starting_row
|
||||||
needle = self.search_text.lower()
|
# needle = self.search_text.lower()
|
||||||
while True:
|
# while True:
|
||||||
# Check for match in title, artist or notes
|
# # Check for match in title, artist or notes
|
||||||
title = self._get_row_title(row_number)
|
# title = self._get_row_title(row_number)
|
||||||
if title and needle in title.lower():
|
# if title and needle in title.lower():
|
||||||
match_row = row_number
|
# match_row = row_number
|
||||||
break
|
# break
|
||||||
artist = self._get_row_artist(row_number)
|
# artist = self._get_row_artist(row_number)
|
||||||
if artist and needle in artist.lower():
|
# if artist and needle in artist.lower():
|
||||||
match_row = row_number
|
# match_row = row_number
|
||||||
break
|
# break
|
||||||
note = self._get_row_note(row_number)
|
# note = self._get_row_note(row_number)
|
||||||
if note and needle in note.lower():
|
# if note and needle in note.lower():
|
||||||
match_row = row_number
|
# match_row = row_number
|
||||||
break
|
# break
|
||||||
if next:
|
# if next:
|
||||||
row_number += 1
|
# row_number += 1
|
||||||
if wrapped and row_number >= starting_row:
|
# if wrapped and row_number >= starting_row:
|
||||||
break
|
# break
|
||||||
if row_number >= self.rowCount():
|
# if row_number >= self.rowCount():
|
||||||
row_number = 0
|
# row_number = 0
|
||||||
wrapped = True
|
# wrapped = True
|
||||||
else:
|
# else:
|
||||||
row_number -= 1
|
# row_number -= 1
|
||||||
if wrapped and row_number <= starting_row:
|
# if wrapped and row_number <= starting_row:
|
||||||
break
|
# break
|
||||||
if row_number < 0:
|
# if row_number < 0:
|
||||||
row_number = self.rowCount() - 1
|
# row_number = self.rowCount() - 1
|
||||||
wrapped = True
|
# wrapped = True
|
||||||
|
|
||||||
if match_row is not None:
|
# if match_row is not None:
|
||||||
self.selectRow(row_number)
|
# self.selectRow(row_number)
|
||||||
|
|
||||||
def selectionChanged(self, selected: QItemSelection, deselected: QItemSelection) -> None:
|
def selectionChanged(
|
||||||
|
self, selected: QItemSelection, deselected: QItemSelection
|
||||||
|
) -> None:
|
||||||
"""
|
"""
|
||||||
Toggle drag behaviour according to whether rows are selected
|
Toggle drag behaviour according to whether rows are selected
|
||||||
"""
|
"""
|
||||||
@ -927,29 +908,29 @@ class PlaylistTab(QTableView):
|
|||||||
else:
|
else:
|
||||||
self.setColumnWidth(column_number, Config.DEFAULT_COLUMN_WIDTH)
|
self.setColumnWidth(column_number, Config.DEFAULT_COLUMN_WIDTH)
|
||||||
|
|
||||||
def _set_row_note_colour(self, session: scoped_session, row_number: int) -> None:
|
# def _set_row_note_colour(self, session: scoped_session, row_number: int) -> None:
|
||||||
"""
|
# """
|
||||||
Set row note colour
|
# Set row note colour
|
||||||
"""
|
# """
|
||||||
|
|
||||||
# Sanity check: this should be a track row and thus have a
|
# # Sanity check: this should be a track row and thus have a
|
||||||
# track associated
|
# # track associated
|
||||||
if not self._get_row_track_id(row_number):
|
# if not self._get_row_track_id(row_number):
|
||||||
if os.environ["MM_ENV"] == "PRODUCTION":
|
# if os.environ["MM_ENV"] == "PRODUCTION":
|
||||||
send_mail(
|
# send_mail(
|
||||||
Config.ERRORS_TO,
|
# Config.ERRORS_TO,
|
||||||
Config.ERRORS_FROM,
|
# Config.ERRORS_FROM,
|
||||||
"playlists:_set_row_note_colour() on header row",
|
# "playlists:_set_row_note_colour() on header row",
|
||||||
stackprinter.format(),
|
# stackprinter.format(),
|
||||||
)
|
# )
|
||||||
# stackprinter.show(add_summary=True, style="darkbg")
|
# # stackprinter.show(add_summary=True, style="darkbg")
|
||||||
print(f"playists:_set_row_note_colour() called on track row ({row_number=}")
|
# print(f"playists:_set_row_note_colour() called on track row ({row_number=}")
|
||||||
return
|
# return
|
||||||
|
|
||||||
# Set colour
|
# # Set colour
|
||||||
note_text = self._get_row_note(row_number)
|
# note_text = self._get_row_note(row_number)
|
||||||
note_colour = NoteColours.get_colour(session, note_text)
|
# note_colour = NoteColours.get_colour(session, note_text)
|
||||||
self._set_cell_colour(row_number, ROW_NOTES, note_colour)
|
# self._set_cell_colour(row_number, ROW_NOTES, note_colour)
|
||||||
|
|
||||||
def _span_cells(self, row: int, column: int, rowSpan: int, columnSpan: int) -> None:
|
def _span_cells(self, row: int, column: int, rowSpan: int, columnSpan: int) -> None:
|
||||||
"""
|
"""
|
||||||
|
|||||||
@ -18,7 +18,6 @@ test_tracks = [
|
|||||||
|
|
||||||
|
|
||||||
def create_model_with_tracks(session: scoped_session) -> "playlistmodel.PlaylistModel":
|
def create_model_with_tracks(session: scoped_session) -> "playlistmodel.PlaylistModel":
|
||||||
|
|
||||||
playlist = Playlists(session, "test playlist")
|
playlist = Playlists(session, "test playlist")
|
||||||
model = playlistmodel.PlaylistModel(playlist.id)
|
model = playlistmodel.PlaylistModel(playlist.id)
|
||||||
|
|
||||||
@ -228,14 +227,12 @@ def test_insert_header_row_middle(monkeypatch, session):
|
|||||||
|
|
||||||
|
|
||||||
def test_create_model_with_tracks(monkeypatch, session):
|
def test_create_model_with_tracks(monkeypatch, session):
|
||||||
|
|
||||||
monkeypatch.setattr(playlistmodel, "Session", session)
|
monkeypatch.setattr(playlistmodel, "Session", session)
|
||||||
model = create_model_with_tracks(session)
|
model = create_model_with_tracks(session)
|
||||||
assert len(model.playlist_rows) == len(test_tracks)
|
assert len(model.playlist_rows) == len(test_tracks)
|
||||||
|
|
||||||
|
|
||||||
def test_timing_one_track(monkeypatch, session):
|
def test_timing_one_track(monkeypatch, session):
|
||||||
|
|
||||||
START_ROW = 0
|
START_ROW = 0
|
||||||
END_ROW = 2
|
END_ROW = 2
|
||||||
|
|
||||||
@ -267,4 +264,3 @@ def test_timing_one_track(monkeypatch, session):
|
|||||||
# model.edit_role(model.rowCount(), playlistmodel.Col.NOTE.value, prd)
|
# model.edit_role(model.rowCount(), playlistmodel.Col.NOTE.value, prd)
|
||||||
# == note_text
|
# == note_text
|
||||||
# )
|
# )
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user