diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index c008cb8..7182f0e 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -25,7 +25,7 @@ lint: - poetry run python setup.py check -mrs - poetry run black --check . - poetry run flake8 - - poetry run mypy sublime tests/**/*.py + - poetry run mypy sublime_music tests/**/*.py - poetry run cicd/custom_style_check.py test: diff --git a/setup.py b/setup.py index a5c0821..2fcbdee 100644 --- a/setup.py +++ b/setup.py @@ -75,5 +75,5 @@ setup( # "scripts" keyword. Entry points provide cross-platform support and # allow pip to create the appropriate form of executable for the target # platform. - entry_points={"console_scripts": ["sublime-music=sublime.__main__:main"]}, + entry_points={"console_scripts": ["sublime-music=sublime_music.__main__:main"]}, ) diff --git a/sublime_music/__main__.py b/sublime_music/__main__.py index 1e1174d..c9e6682 100644 --- a/sublime_music/__main__.py +++ b/sublime_music/__main__.py @@ -9,8 +9,8 @@ import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk # noqa: F401 -import sublime -from sublime.app import SublimeMusicApp +import sublime_music +from .app import SublimeMusicApp def main(): @@ -33,7 +33,7 @@ def main(): args, unknown_args = parser.parse_known_args() if args.version: - print(f"Sublime Music v{sublime.__version__}") # noqa: T001 + print(f"Sublime Music v{sublime_music.__version__}") # noqa: T001 return min_log_level = getattr(logging, args.loglevel.upper(), None) diff --git a/sublime_music/adapters/configure_server_form.py b/sublime_music/adapters/configure_server_form.py index a6b980f..c82fcaa 100644 --- a/sublime_music/adapters/configure_server_form.py +++ b/sublime_music/adapters/configure_server_form.py @@ -252,7 +252,7 @@ class ConfigureServerForm(Gtk.Box): def _set_verification_status( self, verifying: bool, is_valid: bool = False, error_text: str = None ): - from sublime.ui import util + from sublime_music.ui import util if verifying: if not self.verifying_in_progress: @@ -304,7 +304,7 @@ class ConfigureServerForm(Gtk.Box): def _verify_config(self, ratchet: int): self.emit("config-valid-changed", False) - from sublime.adapters import Result + from sublime_music.adapters import Result if self.required_config_parameter_keys.issubset(set(self.config_store.keys())): if self._verification_status_ratchet != ratchet: diff --git a/sublime_music/adapters/filesystem/adapter.py b/sublime_music/adapters/filesystem/adapter.py index c8eb381..171e907 100644 --- a/sublime_music/adapters/filesystem/adapter.py +++ b/sublime_music/adapters/filesystem/adapter.py @@ -9,7 +9,7 @@ from typing import Any, cast, Dict, Iterable, Optional, Sequence, Set, Tuple from gi.repository import Gtk from peewee import fn, prefetch -from sublime.adapters import api_objects as API +from sublime_music.adapters import api_objects as API from . import models from .. import ( diff --git a/sublime_music/adapters/filesystem/sqlite_extensions.py b/sublime_music/adapters/filesystem/sqlite_extensions.py index 23954c6..efaa1f8 100644 --- a/sublime_music/adapters/filesystem/sqlite_extensions.py +++ b/sublime_music/adapters/filesystem/sqlite_extensions.py @@ -14,7 +14,7 @@ from peewee import ( TextField, ) -from sublime.adapters.adapter_base import CachingAdapter +from sublime_music.adapters.adapter_base import CachingAdapter # Custom Fields diff --git a/sublime_music/adapters/manager.py b/sublime_music/adapters/manager.py index 5ec6969..0b4d0e9 100644 --- a/sublime_music/adapters/manager.py +++ b/sublime_music/adapters/manager.py @@ -30,7 +30,7 @@ from typing import ( import requests -from sublime.config import ProviderConfiguration +from sublime_music.config import ProviderConfiguration from .adapter_base import ( Adapter, @@ -273,7 +273,7 @@ class AdapterManager: config: Any, on_song_download_progress: Callable[[Any, str, DownloadProgress], None], ): - from sublime.config import AppConfiguration + from sublime_music.config import AppConfiguration assert isinstance(config, AppConfiguration) diff --git a/sublime_music/adapters/subsonic/adapter.py b/sublime_music/adapters/subsonic/adapter.py index 714f323..bc5cbd4 100644 --- a/sublime_music/adapters/subsonic/adapter.py +++ b/sublime_music/adapters/subsonic/adapter.py @@ -27,7 +27,7 @@ import requests import semver from gi.repository import Gtk -from sublime.util import resolve_path +from sublime_music.util import resolve_path from .api_objects import Directory, Response from .. import ( diff --git a/sublime_music/config.py b/sublime_music/config.py index 8755a09..4365894 100644 --- a/sublime_music/config.py +++ b/sublime_music/config.py @@ -8,8 +8,8 @@ from typing import Any, cast, Dict, Optional, Tuple, Type, Union import dataclasses_json from dataclasses_json import config, DataClassJsonMixin -from sublime.adapters import ConfigurationStore -from sublime.ui.state import UIState +from .adapters import ConfigurationStore +from .ui.state import UIState # JSON decoder and encoder translations @@ -85,7 +85,7 @@ def encode_providers( def decode_providers( providers_dict: Dict[str, Dict[str, Any]] ) -> Dict[str, ProviderConfiguration]: - from sublime.adapters import AdapterManager + from sublime_music.adapters import AdapterManager def find_adapter_type(type_name: str) -> Type: for available_adapter in AdapterManager.available_adapters: diff --git a/sublime_music/players/base.py b/sublime_music/players/base.py index 3cba0ee..96b4179 100644 --- a/sublime_music/players/base.py +++ b/sublime_music/players/base.py @@ -4,7 +4,7 @@ from datetime import timedelta from enum import Enum from typing import Callable, Dict, Optional, Set, Tuple, Type, Union -from sublime.adapters.api_objects import Song +from ..adapters.api_objects import Song @dataclass diff --git a/sublime_music/players/chromecast.py b/sublime_music/players/chromecast.py index c89bbd0..cda63e0 100644 --- a/sublime_music/players/chromecast.py +++ b/sublime_music/players/chromecast.py @@ -12,8 +12,8 @@ from uuid import UUID from gi.repository import GLib -from sublime.adapters import AdapterManager -from sublime.adapters.api_objects import Song +from ..adapters import AdapterManager +from ..adapters.api_objects import Song from .base import Player, PlayerDeviceEvent, PlayerEvent diff --git a/sublime_music/players/manager.py b/sublime_music/players/manager.py index 517b4cd..d5b9404 100644 --- a/sublime_music/players/manager.py +++ b/sublime_music/players/manager.py @@ -2,7 +2,7 @@ import logging from datetime import timedelta from typing import Any, Callable, Dict, List, Optional, Set, Tuple, Type, Union -from sublime.adapters.api_objects import Song +from ..adapters.api_objects import Song from .base import PlayerDeviceEvent, PlayerEvent from .chromecast import ChromecastPlayer # noqa: F401 @@ -19,7 +19,8 @@ class PlayerManager: ]: """ :returns: Dictionary of the name of the player -> option configs (see - :class:`sublime.players.base.Player.get_configuration_options` for details). + :class:`sublime_music.players.base.Player.get_configuration_options` for + details). """ return { p.name: p.get_configuration_options() diff --git a/sublime_music/players/mpv.py b/sublime_music/players/mpv.py index d5d1db3..430697c 100644 --- a/sublime_music/players/mpv.py +++ b/sublime_music/players/mpv.py @@ -4,7 +4,7 @@ from typing import Callable, cast, Dict, Optional, Tuple, Type, Union import mpv -from sublime.adapters.api_objects import Song +from ..adapters.api_objects import Song from .base import Player, PlayerDeviceEvent, PlayerEvent diff --git a/sublime_music/ui/albums.py b/sublime_music/ui/albums.py index 8a23fdc..d35edaa 100644 --- a/sublime_music/ui/albums.py +++ b/sublime_music/ui/albums.py @@ -6,16 +6,16 @@ from typing import Any, Callable, cast, Iterable, List, Optional, Tuple from gi.repository import Gdk, Gio, GLib, GObject, Gtk, Pango -from sublime.adapters import ( +from ..adapters import ( AdapterManager, AlbumSearchQuery, api_objects as API, CacheMissError, Result, ) -from sublime.config import AppConfiguration -from sublime.ui import util -from sublime.ui.common import AlbumWithSongs, IconButton, LoadError, SpinnerImage +from ..config import AppConfiguration +from ..ui import util +from ..ui.common import AlbumWithSongs, IconButton, LoadError, SpinnerImage def _to_type(query_type: AlbumSearchQuery.Type) -> str: diff --git a/sublime_music/ui/artists.py b/sublime_music/ui/artists.py index 0ba7587..cfec212 100644 --- a/sublime_music/ui/artists.py +++ b/sublime_music/ui/artists.py @@ -5,15 +5,15 @@ from typing import cast, List, Sequence from gi.repository import Gio, GLib, GObject, Gtk, Pango -from sublime.adapters import ( +from ..adapters import ( AdapterManager, api_objects as API, CacheMissError, SongCacheStatus, ) -from sublime.config import AppConfiguration -from sublime.ui import util -from sublime.ui.common import AlbumWithSongs, IconButton, LoadError, SpinnerImage +from ..config import AppConfiguration +from ..ui import util +from ..ui.common import AlbumWithSongs, IconButton, LoadError, SpinnerImage class ArtistsPanel(Gtk.Paned): diff --git a/sublime_music/ui/browse.py b/sublime_music/ui/browse.py index 098b4d6..f95f8ae 100644 --- a/sublime_music/ui/browse.py +++ b/sublime_music/ui/browse.py @@ -3,10 +3,10 @@ from typing import Any, cast, List, Optional, Tuple from gi.repository import Gdk, Gio, GLib, GObject, Gtk, Pango -from sublime.adapters import AdapterManager, api_objects as API, CacheMissError, Result -from sublime.config import AppConfiguration -from sublime.ui import util -from sublime.ui.common import IconButton, LoadError, SongListColumn +from ..adapters import AdapterManager, api_objects as API, CacheMissError, Result +from ..config import AppConfiguration +from ..ui import util +from ..ui.common import IconButton, LoadError, SongListColumn class BrowsePanel(Gtk.Overlay): diff --git a/sublime_music/ui/common/album_with_songs.py b/sublime_music/ui/common/album_with_songs.py index b8a566e..97dd320 100644 --- a/sublime_music/ui/common/album_with_songs.py +++ b/sublime_music/ui/common/album_with_songs.py @@ -3,9 +3,9 @@ from typing import Any, cast, List from gi.repository import Gdk, GLib, GObject, Gtk, Pango -from sublime.adapters import AdapterManager, api_objects as API, Result -from sublime.config import AppConfiguration -from sublime.ui import util +from sublime_music.adapters import AdapterManager, api_objects as API, Result +from sublime_music.config import AppConfiguration +from sublime_music.ui import util from .icon_button import IconButton from .load_error import LoadError diff --git a/sublime_music/ui/configure_provider.py b/sublime_music/ui/configure_provider.py index 7d1a1ce..cf28be8 100644 --- a/sublime_music/ui/configure_provider.py +++ b/sublime_music/ui/configure_provider.py @@ -4,9 +4,9 @@ from typing import Any, Optional, Type from gi.repository import Gio, GObject, Gtk, Pango -from sublime.adapters import AdapterManager, UIInfo -from sublime.adapters.filesystem import FilesystemAdapter -from sublime.config import ConfigurationStore, ProviderConfiguration +from ..adapters import AdapterManager, UIInfo +from ..adapters.filesystem import FilesystemAdapter +from ..config import ConfigurationStore, ProviderConfiguration class AdapterTypeModel(GObject.GObject): diff --git a/sublime_music/ui/main.py b/sublime_music/ui/main.py index bb2b469..f7b1e51 100644 --- a/sublime_music/ui/main.py +++ b/sublime_music/ui/main.py @@ -3,16 +3,16 @@ from typing import Any, Callable, Dict, Optional, Set, Tuple from gi.repository import Gdk, GLib, GObject, Gtk, Pango -from sublime.adapters import ( +from ..adapters import ( AdapterManager, api_objects as API, DownloadProgress, Result, ) -from sublime.config import AppConfiguration, ProviderConfiguration -from sublime.players import PlayerManager -from sublime.ui import albums, artists, browse, player_controls, playlists, util -from sublime.ui.common import IconButton, IconMenuButton, SpinnerImage +from ..config import AppConfiguration, ProviderConfiguration +from ..players import PlayerManager +from ..ui import albums, artists, browse, player_controls, playlists, util +from ..ui.common import IconButton, IconMenuButton, SpinnerImage class MainWindow(Gtk.ApplicationWindow): diff --git a/sublime_music/ui/playlists.py b/sublime_music/ui/playlists.py index a7dfc8e..d1dfe55 100644 --- a/sublime_music/ui/playlists.py +++ b/sublime_music/ui/playlists.py @@ -6,10 +6,10 @@ from typing import Any, cast, Dict, List, Tuple from fuzzywuzzy import fuzz from gi.repository import Gdk, Gio, GLib, GObject, Gtk, Pango -from sublime.adapters import AdapterManager, api_objects as API -from sublime.config import AppConfiguration -from sublime.ui import util -from sublime.ui.common import ( +from ..adapters import AdapterManager, api_objects as API +from ..config import AppConfiguration +from ..ui import util +from ..ui.common import ( IconButton, LoadError, SongListColumn, diff --git a/sublime_music/ui/state.py b/sublime_music/ui/state.py index 98a8511..ad94292 100644 --- a/sublime_music/ui/state.py +++ b/sublime_music/ui/state.py @@ -3,8 +3,8 @@ from datetime import timedelta from enum import Enum from typing import Any, Callable, Dict, Optional, Set, Tuple, Type -from sublime.adapters import AlbumSearchQuery -from sublime.adapters.api_objects import Genre, Song +from ..adapters import AlbumSearchQuery +from ..adapters.api_objects import Genre, Song class RepeatType(Enum): @@ -109,7 +109,7 @@ class UIState: self.playing = False def __init_available_players__(self): - from sublime.players import PlayerManager + from sublime_music.players import PlayerManager self.available_players = { pt: set() for pt in PlayerManager.available_player_types @@ -125,7 +125,7 @@ class UIState: if not self.play_queue or self.current_song_index < 0: return None - from sublime.adapters import AdapterManager + from sublime_music.adapters import AdapterManager current_song_id = self.play_queue[self.current_song_index] diff --git a/sublime_music/ui/util.py b/sublime_music/ui/util.py index 6dae4af..c49cd6b 100644 --- a/sublime_music/ui/util.py +++ b/sublime_music/ui/util.py @@ -16,9 +16,9 @@ from typing import ( from deepdiff import DeepDiff from gi.repository import Gdk, GLib, Gtk -from sublime.adapters import AdapterManager, CacheMissError, Result, SongCacheStatus -from sublime.adapters.api_objects import Playlist, Song -from sublime.config import AppConfiguration +from ..adapters import AdapterManager, CacheMissError, Result, SongCacheStatus +from ..adapters.api_objects import Playlist, Song +from ..config import AppConfiguration def format_song_duration(duration_secs: Union[int, timedelta, None]) -> str: diff --git a/tests/adapter_tests/adapter_manager_tests.py b/tests/adapter_tests/adapter_manager_tests.py index 93e8b8c..1988cbc 100644 --- a/tests/adapter_tests/adapter_manager_tests.py +++ b/tests/adapter_tests/adapter_manager_tests.py @@ -3,10 +3,15 @@ from time import sleep import pytest -from sublime.adapters import AdapterManager, ConfigurationStore, Result, SearchResult -from sublime.adapters.filesystem import FilesystemAdapter -from sublime.adapters.subsonic import api_objects as SubsonicAPI, SubsonicAdapter -from sublime.config import AppConfiguration, ProviderConfiguration +from sublime_music.adapters import ( + AdapterManager, + ConfigurationStore, + Result, + SearchResult, +) +from sublime_music.adapters.filesystem import FilesystemAdapter +from sublime_music.adapters.subsonic import api_objects as SubsonicAPI, SubsonicAdapter +from sublime_music.config import AppConfiguration, ProviderConfiguration @pytest.fixture diff --git a/tests/adapter_tests/filesystem_adapter_tests.py b/tests/adapter_tests/filesystem_adapter_tests.py index 5761986..3e43762 100644 --- a/tests/adapter_tests/filesystem_adapter_tests.py +++ b/tests/adapter_tests/filesystem_adapter_tests.py @@ -9,14 +9,14 @@ import pytest from peewee import SelectQuery -from sublime.adapters import ( +from sublime_music.adapters import ( AlbumSearchQuery, api_objects as SublimeAPI, CacheMissError, SongCacheStatus, ) -from sublime.adapters.filesystem import FilesystemAdapter -from sublime.adapters.subsonic import api_objects as SubsonicAPI +from sublime_music.adapters.filesystem import FilesystemAdapter +from sublime_music.adapters.subsonic import api_objects as SubsonicAPI MOCK_DATA_FILES = Path(__file__).parent.joinpath("mock_data") MOCK_ALBUM_ART = MOCK_DATA_FILES.joinpath("album-art.png") diff --git a/tests/adapter_tests/subsonic_adapter_tests.py b/tests/adapter_tests/subsonic_adapter_tests.py index 8e6327d..377e8b5 100644 --- a/tests/adapter_tests/subsonic_adapter_tests.py +++ b/tests/adapter_tests/subsonic_adapter_tests.py @@ -8,11 +8,8 @@ from typing import Any, Generator, List, Tuple import pytest from dateutil.tz import tzutc -from sublime.adapters import ConfigurationStore -from sublime.adapters.subsonic import ( - api_objects as SubsonicAPI, - SubsonicAdapter, -) +from sublime_music.adapters import ConfigurationStore +from sublime_music.adapters.subsonic import api_objects as SubsonicAPI, SubsonicAdapter MOCK_DATA_FILES = Path(__file__).parent.joinpath("mock_data") diff --git a/tests/common_ui_tests.py b/tests/common_ui_tests.py index 732592e..c7abd6f 100755 --- a/tests/common_ui_tests.py +++ b/tests/common_ui_tests.py @@ -5,7 +5,7 @@ import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk # noqa: F401 -from sublime.ui import common +from sublime_music.ui import common def test_icon_buttons(): diff --git a/tests/config_test.py b/tests/config_test.py index a70d11c..d508637 100644 --- a/tests/config_test.py +++ b/tests/config_test.py @@ -3,10 +3,10 @@ from pathlib import Path import pytest -from sublime.adapters import ConfigurationStore -from sublime.adapters.filesystem import FilesystemAdapter -from sublime.adapters.subsonic import SubsonicAdapter -from sublime.config import AppConfiguration, ProviderConfiguration +from sublime_music.adapters import ConfigurationStore +from sublime_music.adapters.filesystem import FilesystemAdapter +from sublime_music.adapters.subsonic import SubsonicAdapter +from sublime_music.config import AppConfiguration, ProviderConfiguration @pytest.fixture diff --git a/tests/player_tests/chromecast_tests.py b/tests/player_tests/chromecast_tests.py index fbd3e96..769cfcf 100644 --- a/tests/player_tests/chromecast_tests.py +++ b/tests/player_tests/chromecast_tests.py @@ -1,4 +1,4 @@ -from sublime.players.chromecast import ChromecastPlayer +from sublime_music.players.chromecast import ChromecastPlayer def test_init(): diff --git a/tests/player_tests/mpv_tests.py b/tests/player_tests/mpv_tests.py index 19e8746..4e27f53 100644 --- a/tests/player_tests/mpv_tests.py +++ b/tests/player_tests/mpv_tests.py @@ -3,7 +3,7 @@ from pathlib import Path # from time import sleep -from sublime.players.mpv import MPVPlayer +from sublime_music.players.mpv import MPVPlayer MPVPlayer._is_mock = True