draft: rewriting soure
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
All checks were successful
ci/woodpecker/push/woodpecker Pipeline was successful
This commit is contained in:
@@ -3,7 +3,7 @@ from .option import Options
|
||||
|
||||
from .metadata import Metadata, Mapping as ID3Mapping, ID3Timestamp
|
||||
|
||||
from .source import Source, SourcePages, SourceTypes
|
||||
from .source import Source, SourceType
|
||||
|
||||
from .song import (
|
||||
Song,
|
||||
|
||||
@@ -8,7 +8,7 @@ from dataclasses import dataclass, field
|
||||
from functools import cached_property
|
||||
|
||||
from ..utils import generate_id
|
||||
from ..utils.enums.source import SourcePages, SourceTypes
|
||||
from ..utils.enums import SourceType
|
||||
from ..utils.config import youtube_settings
|
||||
from ..utils.string_processing import hash_url, shorten_display_url
|
||||
|
||||
@@ -20,22 +20,22 @@ from .collection import Collection
|
||||
|
||||
@dataclass
|
||||
class Source:
|
||||
page_enum: SourcePages
|
||||
source_type: SourceType
|
||||
url: str
|
||||
referrer_page: SourcePages = None
|
||||
referrer_page: SourceType = None
|
||||
audio_url: Optional[str] = None
|
||||
|
||||
additional_data: dict = field(default_factory=dict)
|
||||
|
||||
def __post_init__(self):
|
||||
self.referrer_page = self.referrer_page or self.page_enum
|
||||
self.referrer_page = self.referrer_page or self.source_type
|
||||
|
||||
@property
|
||||
def parsed_url(self) -> ParseResult:
|
||||
return urlparse(self.url)
|
||||
|
||||
@classmethod
|
||||
def match_url(cls, url: str, referrer_page: SourcePages) -> Optional[Source]:
|
||||
def match_url(cls, url: str, referrer_page: SourceType) -> Optional[Source]:
|
||||
"""
|
||||
this shouldn't be used, unless you are not certain what the source is for
|
||||
the reason is that it is more inefficient
|
||||
@@ -44,38 +44,38 @@ class Source:
|
||||
url = parsed_url.geturl()
|
||||
|
||||
if "musify" in parsed_url.netloc:
|
||||
return cls(SourcePages.MUSIFY, url, referrer_page=referrer_page)
|
||||
return cls(SourceType.MUSIFY, url, referrer_page=referrer_page)
|
||||
|
||||
if parsed_url.netloc in [_url.netloc for _url in youtube_settings['youtube_url']]:
|
||||
return cls(SourcePages.YOUTUBE, url, referrer_page=referrer_page)
|
||||
return cls(SourceType.YOUTUBE, url, referrer_page=referrer_page)
|
||||
|
||||
if url.startswith("https://www.deezer"):
|
||||
return cls(SourcePages.DEEZER, url, referrer_page=referrer_page)
|
||||
return cls(SourceType.DEEZER, url, referrer_page=referrer_page)
|
||||
|
||||
if url.startswith("https://open.spotify.com"):
|
||||
return cls(SourcePages.SPOTIFY, url, referrer_page=referrer_page)
|
||||
return cls(SourceType.SPOTIFY, url, referrer_page=referrer_page)
|
||||
|
||||
if "bandcamp" in url:
|
||||
return cls(SourcePages.BANDCAMP, url, referrer_page=referrer_page)
|
||||
return cls(SourceType.BANDCAMP, url, referrer_page=referrer_page)
|
||||
|
||||
if "wikipedia" in parsed_url.netloc:
|
||||
return cls(SourcePages.WIKIPEDIA, url, referrer_page=referrer_page)
|
||||
return cls(SourceType.WIKIPEDIA, url, referrer_page=referrer_page)
|
||||
|
||||
if url.startswith("https://www.metal-archives.com/"):
|
||||
return cls(SourcePages.ENCYCLOPAEDIA_METALLUM, url, referrer_page=referrer_page)
|
||||
return cls(SourceType.ENCYCLOPAEDIA_METALLUM, url, referrer_page=referrer_page)
|
||||
|
||||
# the less important once
|
||||
if url.startswith("https://www.facebook"):
|
||||
return cls(SourcePages.FACEBOOK, url, referrer_page=referrer_page)
|
||||
return cls(SourceType.FACEBOOK, url, referrer_page=referrer_page)
|
||||
|
||||
if url.startswith("https://www.instagram"):
|
||||
return cls(SourcePages.INSTAGRAM, url, referrer_page=referrer_page)
|
||||
return cls(SourceType.INSTAGRAM, url, referrer_page=referrer_page)
|
||||
|
||||
if url.startswith("https://twitter"):
|
||||
return cls(SourcePages.TWITTER, url, referrer_page=referrer_page)
|
||||
return cls(SourceType.TWITTER, url, referrer_page=referrer_page)
|
||||
|
||||
if url.startswith("https://myspace.com"):
|
||||
return cls(SourcePages.MYSPACE, url, referrer_page=referrer_page)
|
||||
return cls(SourceType.MYSPACE, url, referrer_page=referrer_page)
|
||||
|
||||
@property
|
||||
def hash_url(self) -> str:
|
||||
@@ -89,21 +89,21 @@ class Source:
|
||||
return r
|
||||
|
||||
def __repr__(self) -> str:
|
||||
return f"Src({self.page_enum.value}: {shorten_display_url(self.url)})"
|
||||
return f"Src({self.source_type.value}: {shorten_display_url(self.url)})"
|
||||
|
||||
def __merge__(self, other: Source, **kwargs):
|
||||
if self.audio_url is None:
|
||||
self.audio_url = other.audio_url
|
||||
self.additional_data.update(other.additional_data)
|
||||
|
||||
page_str = property(fget=lambda self: self.page_enum.value)
|
||||
page_str = property(fget=lambda self: self.source_type.value)
|
||||
|
||||
|
||||
class SourceCollection:
|
||||
__change_version__ = generate_id()
|
||||
|
||||
_indexed_sources: Dict[str, Source]
|
||||
_page_to_source_list: Dict[SourcePages, List[Source]]
|
||||
_page_to_source_list: Dict[SourceType, List[Source]]
|
||||
|
||||
def __init__(self, data: Optional[Iterable[Source]] = None, **kwargs):
|
||||
self._page_to_source_list = defaultdict(list)
|
||||
@@ -111,7 +111,7 @@ class SourceCollection:
|
||||
|
||||
self.extend(data or [])
|
||||
|
||||
def has_source_page(self, *source_pages: SourcePages) -> bool:
|
||||
def has_source_page(self, *source_pages: SourceType) -> bool:
|
||||
return any(source_page in self._page_to_source_list for source_page in source_pages)
|
||||
|
||||
def get_sources(self, *source_pages: List[Source]) -> Generator[Source]:
|
||||
@@ -135,7 +135,7 @@ class SourceCollection:
|
||||
existing_source.__merge__(source)
|
||||
source = existing_source
|
||||
else:
|
||||
self._page_to_source_list[source.page_enum].append(source)
|
||||
self._page_to_source_list[source.source_type].append(source)
|
||||
|
||||
changed = False
|
||||
for key in source.indexing_values:
|
||||
@@ -157,7 +157,7 @@ class SourceCollection:
|
||||
self.extend(other)
|
||||
|
||||
@property
|
||||
def source_pages(self) -> Iterable[SourcePages]:
|
||||
def source_pages(self) -> Iterable[SourceType]:
|
||||
return sorted(self._page_to_source_list.keys(), key=lambda page: page.value)
|
||||
|
||||
@property
|
||||
|
||||
Reference in New Issue
Block a user