Cleanups from running vulture
This commit is contained in:
parent
f2a27366d3
commit
94b2f473e9
@ -4,11 +4,9 @@ from typing import List, Optional
|
|||||||
|
|
||||||
|
|
||||||
class Config(object):
|
class Config(object):
|
||||||
AUDACITY_COMMAND = "/usr/bin/audacity"
|
|
||||||
AUDIO_SEGMENT_CHUNK_SIZE = 10
|
AUDIO_SEGMENT_CHUNK_SIZE = 10
|
||||||
BITRATE_LOW_THRESHOLD = 192
|
BITRATE_LOW_THRESHOLD = 192
|
||||||
BITRATE_OK_THRESHOLD = 300
|
BITRATE_OK_THRESHOLD = 300
|
||||||
CHECK_AUDACITY_AT_STARTUP = True
|
|
||||||
CART_DIRECTORY = "/home/kae/radio/CartTracks"
|
CART_DIRECTORY = "/home/kae/radio/CartTracks"
|
||||||
CARTS_COUNT = 10
|
CARTS_COUNT = 10
|
||||||
CARTS_HIDE = True
|
CARTS_HIDE = True
|
||||||
@ -21,19 +19,16 @@ class Config(object):
|
|||||||
COLOUR_CART_PROGRESSBAR = "#000000"
|
COLOUR_CART_PROGRESSBAR = "#000000"
|
||||||
COLOUR_CART_READY = "#ffc107"
|
COLOUR_CART_READY = "#ffc107"
|
||||||
COLOUR_CART_UNCONFIGURED = "#f2f2f2"
|
COLOUR_CART_UNCONFIGURED = "#f2f2f2"
|
||||||
COLOUR_CURRENT_HEADER = "#d4edda"
|
|
||||||
COLOUR_CURRENT_PLAYLIST = "#7eca8f"
|
COLOUR_CURRENT_PLAYLIST = "#7eca8f"
|
||||||
COLOUR_CURRENT_TAB = "#248f24"
|
COLOUR_CURRENT_TAB = "#248f24"
|
||||||
COLOUR_ENDING_TIMER = "#dc3545"
|
COLOUR_ENDING_TIMER = "#dc3545"
|
||||||
COLOUR_EVEN_PLAYLIST = "#d9d9d9"
|
COLOUR_EVEN_PLAYLIST = "#d9d9d9"
|
||||||
COLOUR_LONG_START = "#dc3545"
|
COLOUR_LONG_START = "#dc3545"
|
||||||
COLOUR_NEXT_HEADER = "#fff3cd"
|
|
||||||
COLOUR_NEXT_PLAYLIST = "#ffc107"
|
COLOUR_NEXT_PLAYLIST = "#ffc107"
|
||||||
COLOUR_NEXT_TAB = "#b38600"
|
COLOUR_NEXT_TAB = "#b38600"
|
||||||
COLOUR_NORMAL_TAB = "#000000"
|
COLOUR_NORMAL_TAB = "#000000"
|
||||||
COLOUR_NOTES_PLAYLIST = "#b8daff"
|
COLOUR_NOTES_PLAYLIST = "#b8daff"
|
||||||
COLOUR_ODD_PLAYLIST = "#f2f2f2"
|
COLOUR_ODD_PLAYLIST = "#f2f2f2"
|
||||||
COLOUR_PREVIOUS_HEADER = "#f8d7da"
|
|
||||||
COLOUR_UNREADABLE = "#dc3545"
|
COLOUR_UNREADABLE = "#dc3545"
|
||||||
COLOUR_WARNING_TIMER = "#ffc107"
|
COLOUR_WARNING_TIMER = "#ffc107"
|
||||||
COLUMN_NAME_ARTIST = "Artist"
|
COLUMN_NAME_ARTIST = "Artist"
|
||||||
@ -46,13 +41,10 @@ class Config(object):
|
|||||||
COLUMN_NAME_NOTES = "Notes"
|
COLUMN_NAME_NOTES = "Notes"
|
||||||
COLUMN_NAME_START_TIME = "Start"
|
COLUMN_NAME_START_TIME = "Start"
|
||||||
COLUMN_NAME_TITLE = "Title"
|
COLUMN_NAME_TITLE = "Title"
|
||||||
DBFS_FADE = -12
|
|
||||||
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
|
||||||
DEFAULT_IMPORT_DIRECTORY = "/home/kae/Nextcloud/tmp"
|
|
||||||
DEFAULT_OUTPUT_DIRECTORY = "/home/kae/music/Singles"
|
|
||||||
DISPLAY_SQL = False
|
DISPLAY_SQL = False
|
||||||
ERRORS_FROM = ['noreply@midnighthax.com']
|
ERRORS_FROM = ['noreply@midnighthax.com']
|
||||||
ERRORS_TO = ['kae@midnighthax.com']
|
ERRORS_TO = ['kae@midnighthax.com']
|
||||||
@ -78,7 +70,6 @@ class Config(object):
|
|||||||
ROOT = os.environ.get('ROOT') or "/home/kae/music"
|
ROOT = os.environ.get('ROOT') or "/home/kae/music"
|
||||||
IMPORT_DESTINATION = os.path.join(ROOT, "Singles")
|
IMPORT_DESTINATION = os.path.join(ROOT, "Singles")
|
||||||
SCROLL_TOP_MARGIN = 3
|
SCROLL_TOP_MARGIN = 3
|
||||||
TESTMODE = True
|
|
||||||
TEXT_NO_TRACK_NO_NOTE = "[Section header]"
|
TEXT_NO_TRACK_NO_NOTE = "[Section header]"
|
||||||
TOD_TIME_FORMAT = "%H:%M:%S"
|
TOD_TIME_FORMAT = "%H:%M:%S"
|
||||||
TIMER_MS = 500
|
TIMER_MS = 500
|
||||||
@ -86,6 +77,3 @@ class Config(object):
|
|||||||
VOLUME_VLC_DEFAULT = 75
|
VOLUME_VLC_DEFAULT = 75
|
||||||
VOLUME_VLC_DROP3db = 65
|
VOLUME_VLC_DROP3db = 65
|
||||||
WEB_ZOOM_FACTOR = 1.2
|
WEB_ZOOM_FACTOR = 1.2
|
||||||
|
|
||||||
|
|
||||||
config = Config
|
|
||||||
|
|||||||
@ -235,7 +235,7 @@ def normalise_track(path):
|
|||||||
stats = os.stat(path)
|
stats = os.stat(path)
|
||||||
try:
|
try:
|
||||||
# Copy original file
|
# Copy original file
|
||||||
fd, temp_path = tempfile.mkstemp()
|
_, temp_path = tempfile.mkstemp()
|
||||||
shutil.copyfile(path, temp_path)
|
shutil.copyfile(path, temp_path)
|
||||||
except Exception as err:
|
except Exception as err:
|
||||||
log.debug(
|
log.debug(
|
||||||
|
|||||||
@ -67,7 +67,7 @@ log.addHandler(stderr)
|
|||||||
log.addHandler(syslog)
|
log.addHandler(syslog)
|
||||||
|
|
||||||
|
|
||||||
def log_uncaught_exceptions(ex_cls, ex, tb):
|
def log_uncaught_exceptions(_ex_cls, ex, tb):
|
||||||
|
|
||||||
from helpers import send_mail
|
from helpers import send_mail
|
||||||
|
|
||||||
|
|||||||
@ -1,17 +1,16 @@
|
|||||||
#!/usr/bin/python3
|
#!/usr/bin/python3
|
||||||
#
|
|
||||||
import os.path
|
import os.path
|
||||||
import re
|
import re
|
||||||
import stackprinter
|
import stackprinter
|
||||||
#
|
|
||||||
from dbconfig import Session
|
from dbconfig import Session
|
||||||
#
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from typing import List, Optional
|
from typing import List, Optional
|
||||||
#
|
|
||||||
# from pydub import AudioSegment
|
|
||||||
from sqlalchemy.ext.associationproxy import association_proxy
|
from sqlalchemy.ext.associationproxy import association_proxy
|
||||||
# from sqlalchemy.ext.declarative import declarative_base, DeclarativeMeta
|
|
||||||
from sqlalchemy import (
|
from sqlalchemy import (
|
||||||
Boolean,
|
Boolean,
|
||||||
Column,
|
Column,
|
||||||
@ -23,22 +22,16 @@ from sqlalchemy import (
|
|||||||
Integer,
|
Integer,
|
||||||
select,
|
select,
|
||||||
String,
|
String,
|
||||||
UniqueConstraint,
|
|
||||||
update,
|
update,
|
||||||
)
|
)
|
||||||
# from sqlalchemy.exc import IntegrityError
|
|
||||||
from sqlalchemy.orm import (
|
from sqlalchemy.orm import (
|
||||||
backref,
|
|
||||||
declarative_base,
|
declarative_base,
|
||||||
relationship,
|
relationship,
|
||||||
RelationshipProperty
|
|
||||||
)
|
)
|
||||||
from sqlalchemy.orm.collections import attribute_mapped_collection
|
|
||||||
from sqlalchemy.orm.exc import (
|
from sqlalchemy.orm.exc import (
|
||||||
# MultipleResultsFound,
|
|
||||||
NoResultFound
|
NoResultFound
|
||||||
)
|
)
|
||||||
#
|
|
||||||
from config import Config
|
from config import Config
|
||||||
from helpers import (
|
from helpers import (
|
||||||
fade_point,
|
fade_point,
|
||||||
@ -48,7 +41,6 @@ from helpers import (
|
|||||||
trailing_silence,
|
trailing_silence,
|
||||||
)
|
)
|
||||||
from log import log
|
from log import log
|
||||||
#
|
|
||||||
Base = declarative_base()
|
Base = declarative_base()
|
||||||
|
|
||||||
|
|
||||||
@ -70,7 +62,7 @@ class Carts(Base):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def __init__(self, session: Session, cart_number: int, name: str = None,
|
def __init__(self, session: Session, cart_number: int, name: str = None,
|
||||||
duration: int = None, path: str = None,
|
duration: int = None, path: str = None,
|
||||||
enabled: bool = True) -> None:
|
enabled: bool = True) -> None:
|
||||||
"""Create new cart"""
|
"""Create new cart"""
|
||||||
|
|
||||||
@ -83,23 +75,6 @@ class Carts(Base):
|
|||||||
session.add(self)
|
session.add(self)
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_or_create(cls, session: Session, cart_number: int) -> "Carts":
|
|
||||||
"""
|
|
||||||
Return cart with passed cart number, or create a record if
|
|
||||||
none exists.
|
|
||||||
"""
|
|
||||||
|
|
||||||
try:
|
|
||||||
return (
|
|
||||||
session.execute(
|
|
||||||
select(Carts)
|
|
||||||
.where(Carts.cart_number == cart_number)
|
|
||||||
).scalar_one()
|
|
||||||
)
|
|
||||||
except NoResultFound:
|
|
||||||
return Carts(session, cart_number)
|
|
||||||
|
|
||||||
|
|
||||||
class NoteColours(Base):
|
class NoteColours(Base):
|
||||||
__tablename__ = 'notecolours'
|
__tablename__ = 'notecolours'
|
||||||
@ -470,19 +445,6 @@ class PlaylistRows(Base):
|
|||||||
# Delete won't take effect until commit()
|
# Delete won't take effect until commit()
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def delete_rows(session: Session, ids: List[int]) -> None:
|
|
||||||
"""
|
|
||||||
Delete passed ids
|
|
||||||
"""
|
|
||||||
|
|
||||||
session.execute(
|
|
||||||
delete(PlaylistRows)
|
|
||||||
.where(PlaylistRows.id.in_(ids))
|
|
||||||
)
|
|
||||||
# Delete won't take effect until commit()
|
|
||||||
session.commit()
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def fixup_rownumbers(session: Session, playlist_id: int) -> None:
|
def fixup_rownumbers(session: Session, playlist_id: int) -> None:
|
||||||
"""
|
"""
|
||||||
@ -501,19 +463,6 @@ class PlaylistRows(Base):
|
|||||||
# Ensure new row numbers are available to the caller
|
# Ensure new row numbers are available to the caller
|
||||||
session.commit()
|
session.commit()
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def get_plr(session: Session, row_number: int,
|
|
||||||
playlist_id: int) -> "PlaylistRows":
|
|
||||||
"""Return playlistrows object matching passed parameters"""
|
|
||||||
|
|
||||||
return (
|
|
||||||
select(PlaylistRows)
|
|
||||||
.where(
|
|
||||||
PlaylistRows.row_number == row_number,
|
|
||||||
PlaylistRows.playlist_id == playlist_id)
|
|
||||||
.limit(1)
|
|
||||||
).first()
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def get_track_plr(session: Session, track_id: int,
|
def get_track_plr(session: Session, track_id: int,
|
||||||
playlist_id: int) -> Optional["PlaylistRows"]:
|
playlist_id: int) -> Optional["PlaylistRows"]:
|
||||||
|
|||||||
@ -19,11 +19,8 @@ class Music:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self) -> None:
|
def __init__(self) -> None:
|
||||||
# self.current_track_start_time = None
|
|
||||||
# self.fading = 0
|
|
||||||
self.VLC = vlc.Instance()
|
self.VLC = vlc.Instance()
|
||||||
self.player = None
|
self.player = None
|
||||||
# self.track_path = None
|
|
||||||
self.max_volume = Config.VOLUME_VLC_DEFAULT
|
self.max_volume = Config.VOLUME_VLC_DEFAULT
|
||||||
|
|
||||||
def fade(self) -> None:
|
def fade(self) -> None:
|
||||||
@ -109,7 +106,6 @@ class Music:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
status = -1
|
status = -1
|
||||||
self.track_path = path
|
|
||||||
|
|
||||||
if Config.COLON_IN_PATH_FIX:
|
if Config.COLON_IN_PATH_FIX:
|
||||||
media = self.VLC.media_new_path(path)
|
media = self.VLC.media_new_path(path)
|
||||||
|
|||||||
@ -42,7 +42,6 @@ from models import (
|
|||||||
)
|
)
|
||||||
from config import Config
|
from config import Config
|
||||||
from playlists import PlaylistTab
|
from playlists import PlaylistTab
|
||||||
from sqlalchemy.orm.exc import DetachedInstanceError
|
|
||||||
from ui.dlg_cart_ui import Ui_DialogCartEdit # type: ignore
|
from ui.dlg_cart_ui import Ui_DialogCartEdit # type: ignore
|
||||||
from ui.dlg_search_database_ui import Ui_Dialog # type: ignore
|
from ui.dlg_search_database_ui import Ui_Dialog # type: ignore
|
||||||
from ui.dlg_SelectPlaylist_ui import Ui_dlgSelectPlaylist # type: ignore
|
from ui.dlg_SelectPlaylist_ui import Ui_dlgSelectPlaylist # type: ignore
|
||||||
@ -1039,7 +1038,6 @@ class Window(QMainWindow, Ui_MainWindow):
|
|||||||
)
|
)
|
||||||
fade_at = self.current_track.fade_at
|
fade_at = self.current_track.fade_at
|
||||||
silence_at = self.current_track.silence_at
|
silence_at = self.current_track.silence_at
|
||||||
length = self.current_track.duration
|
|
||||||
self.label_fade_length.setText(
|
self.label_fade_length.setText(
|
||||||
helpers.ms_to_mmss(silence_at - fade_at))
|
helpers.ms_to_mmss(silence_at - fade_at))
|
||||||
self.label_start_time.setText(
|
self.label_start_time.setText(
|
||||||
@ -1591,7 +1589,6 @@ class SelectPlaylistDialog(QDialog):
|
|||||||
self.ui.buttonBox.rejected.connect(self.close)
|
self.ui.buttonBox.rejected.connect(self.close)
|
||||||
self.session = session
|
self.session = session
|
||||||
self.playlist = None
|
self.playlist = None
|
||||||
self.plid = None
|
|
||||||
|
|
||||||
record = Settings.get_int_settings(
|
record = Settings.get_int_settings(
|
||||||
self.session, "select_playlist_dialog_width")
|
self.session, "select_playlist_dialog_width")
|
||||||
|
|||||||
@ -34,7 +34,6 @@ from PyQt5.QtWidgets import (
|
|||||||
QStyledItemDelegate,
|
QStyledItemDelegate,
|
||||||
QTableWidget,
|
QTableWidget,
|
||||||
QTableWidgetItem,
|
QTableWidgetItem,
|
||||||
QTextEdit,
|
|
||||||
QWidget
|
QWidget
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -65,8 +64,6 @@ MINIMUM_ROW_HEIGHT = 30
|
|||||||
|
|
||||||
|
|
||||||
class RowMeta:
|
class RowMeta:
|
||||||
CLEAR = 0
|
|
||||||
NOTE = 1
|
|
||||||
UNREADABLE = 2
|
UNREADABLE = 2
|
||||||
NEXT = 3
|
NEXT = 3
|
||||||
CURRENT = 4
|
CURRENT = 4
|
||||||
@ -973,12 +970,6 @@ class PlaylistTab(QTableWidget):
|
|||||||
|
|
||||||
self.selectRow(row)
|
self.selectRow(row)
|
||||||
|
|
||||||
def set_searchtext(self, text: Optional[str]) -> None:
|
|
||||||
"""Set the search text and find first match"""
|
|
||||||
|
|
||||||
self.search_text = text
|
|
||||||
self._find_next_match()
|
|
||||||
|
|
||||||
def set_selected_as_next(self) -> None:
|
def set_selected_as_next(self) -> None:
|
||||||
"""Sets the select track as next to play"""
|
"""Sets the select track as next to play"""
|
||||||
|
|
||||||
@ -1018,7 +1009,6 @@ class PlaylistTab(QTableWidget):
|
|||||||
p.row_number for p in PlaylistRows.get_played_rows(
|
p.row_number for p in PlaylistRows.get_played_rows(
|
||||||
session, self.playlist_id)
|
session, self.playlist_id)
|
||||||
]
|
]
|
||||||
unreadable: List[int] = self._get_unreadable_track_rows()
|
|
||||||
|
|
||||||
next_start_time = None
|
next_start_time = None
|
||||||
section_start_plr = None
|
section_start_plr = None
|
||||||
@ -1339,16 +1329,6 @@ class PlaylistTab(QTableWidget):
|
|||||||
return (index.row() + 1 if self._is_below(event.pos(), index)
|
return (index.row() + 1 if self._is_below(event.pos(), index)
|
||||||
else index.row())
|
else index.row())
|
||||||
|
|
||||||
def _find_next_match(self) -> None:
|
|
||||||
"""
|
|
||||||
Find next match of search_text. Start at first highlighted row
|
|
||||||
if there is one, else from top of playlist.
|
|
||||||
"""
|
|
||||||
|
|
||||||
start_row = self._get_selected_row()
|
|
||||||
if start_row is None:
|
|
||||||
start_row = 0
|
|
||||||
|
|
||||||
def _find_next_track_row(self, session: Session,
|
def _find_next_track_row(self, session: Session,
|
||||||
starting_row: int = None) -> Optional[int]:
|
starting_row: int = None) -> Optional[int]:
|
||||||
"""
|
"""
|
||||||
@ -1500,11 +1480,6 @@ class PlaylistTab(QTableWidget):
|
|||||||
[row for row in set([a.row() for a in self.selectedItems()])]
|
[row for row in set([a.row() for a in self.selectedItems()])]
|
||||||
)
|
)
|
||||||
|
|
||||||
def _get_unreadable_track_rows(self) -> List[int]:
|
|
||||||
"""Return rows marked as unreadable, or None"""
|
|
||||||
|
|
||||||
return self._meta_search(RowMeta.UNREADABLE, one=False)
|
|
||||||
|
|
||||||
def _info_row(self, track_id: int) -> None:
|
def _info_row(self, track_id: int) -> None:
|
||||||
"""Display popup with info re row"""
|
"""Display popup with info re row"""
|
||||||
|
|
||||||
|
|||||||
@ -4,7 +4,6 @@
|
|||||||
# the current directory contains a "better" version of the file than the
|
# the current directory contains a "better" version of the file than the
|
||||||
# parent (eg, bettet bitrate).
|
# parent (eg, bettet bitrate).
|
||||||
|
|
||||||
import glob
|
|
||||||
import os
|
import os
|
||||||
import pydymenu # type: ignore
|
import pydymenu # type: ignore
|
||||||
import shutil
|
import shutil
|
||||||
@ -21,7 +20,6 @@ from helpers import (
|
|||||||
|
|
||||||
from models import Tracks
|
from models import Tracks
|
||||||
from dbconfig import Session
|
from dbconfig import Session
|
||||||
from thefuzz import process # type: ignore
|
|
||||||
from sqlalchemy.exc import IntegrityError
|
from sqlalchemy.exc import IntegrityError
|
||||||
from typing import List
|
from typing import List
|
||||||
|
|
||||||
@ -35,15 +33,6 @@ source_dir = '/home/kae/music/Singles/tmp'
|
|||||||
parent_dir = os.path.dirname(source_dir)
|
parent_dir = os.path.dirname(source_dir)
|
||||||
# #########################################################
|
# #########################################################
|
||||||
|
|
||||||
|
|
||||||
def insensitive_glob(pattern):
|
|
||||||
"""Helper for case insensitive glob.glob()"""
|
|
||||||
|
|
||||||
def either(c):
|
|
||||||
return '[%s%s]' % (c.lower(), c.upper()) if c.isalpha() else c
|
|
||||||
return glob.glob(''.join(map(either, pattern)))
|
|
||||||
|
|
||||||
|
|
||||||
name_and_tags: List[str] = []
|
name_and_tags: List[str] = []
|
||||||
tags_not_name: List[str] = []
|
tags_not_name: List[str] = []
|
||||||
multiple_similar: List[str] = []
|
multiple_similar: List[str] = []
|
||||||
@ -137,10 +126,6 @@ def main():
|
|||||||
|
|
||||||
# Try to find a near match
|
# Try to find a near match
|
||||||
|
|
||||||
# stem = new_fname.split(".")[0]
|
|
||||||
# matches = insensitive_glob(os.path.join(parent_dir, stem) + '*')
|
|
||||||
# match_count = len(matches)
|
|
||||||
# if match_count == 0:
|
|
||||||
if process_no_matches:
|
if process_no_matches:
|
||||||
prompt = f"\n file={new_fname}\n title={new_title}\n artist={new_artist}: "
|
prompt = f"\n file={new_fname}\n title={new_title}\n artist={new_artist}: "
|
||||||
# Use fzf to search
|
# Use fzf to search
|
||||||
|
|||||||
@ -16,20 +16,6 @@ from log import log
|
|||||||
from models import Tracks
|
from models import Tracks
|
||||||
|
|
||||||
|
|
||||||
def create_track(session, path, normalise=None):
|
|
||||||
"""
|
|
||||||
Create track in database from passed path.
|
|
||||||
|
|
||||||
Return track.
|
|
||||||
"""
|
|
||||||
|
|
||||||
track = Tracks(session, path)
|
|
||||||
|
|
||||||
set_track_metadata(session, track)
|
|
||||||
if normalise or normalise is None and Config.NORMALISE_ON_IMPORT:
|
|
||||||
normalise_track(path)
|
|
||||||
|
|
||||||
|
|
||||||
def check_db(session):
|
def check_db(session):
|
||||||
"""
|
"""
|
||||||
Database consistency check.
|
Database consistency check.
|
||||||
@ -44,7 +30,7 @@ def check_db(session):
|
|||||||
db_paths = set([a.path for a in Tracks.get_all(session)])
|
db_paths = set([a.path for a in Tracks.get_all(session)])
|
||||||
|
|
||||||
os_paths_list = []
|
os_paths_list = []
|
||||||
for root, dirs, files in os.walk(Config.ROOT):
|
for root, _dirs, files in os.walk(Config.ROOT):
|
||||||
for f in files:
|
for f in files:
|
||||||
path = os.path.join(root, f)
|
path = os.path.join(root, f)
|
||||||
ext = os.path.splitext(f)[1]
|
ext = os.path.splitext(f)[1]
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user