deleted pointless files
This commit is contained in:
parent
e146aec261
commit
7e274bfbbe
@ -1,61 +0,0 @@
|
|||||||
class SuperFoo:
|
|
||||||
ATTRIBUTES: tuple = tuple()
|
|
||||||
|
|
||||||
class Foo(SuperFoo):
|
|
||||||
def __init__(self, bar1, bar2, bar3) -> None:
|
|
||||||
self.bar1 = bar1
|
|
||||||
self.bar2 = bar2
|
|
||||||
self.bar3 = bar3
|
|
||||||
|
|
||||||
ATTRIBUTES: tuple = ("bar1", "bar2", "bar3")
|
|
||||||
|
|
||||||
|
|
||||||
def process(child_instance: SuperFoo):
|
|
||||||
for attribute in child_instance.ATTRIBUTES:
|
|
||||||
print(getattr(child_instance, attribute))
|
|
||||||
|
|
||||||
process(Foo(123, 456, 789))
|
|
||||||
|
|
||||||
"""
|
|
||||||
Hi!
|
|
||||||
|
|
||||||
I got following code *(It is a very simplified and broken down example)*:
|
|
||||||
|
|
||||||
```python
|
|
||||||
class SuperFoo:
|
|
||||||
ATTRIBUTES: tuple = tuple()
|
|
||||||
|
|
||||||
class Foo(SuperFoo):
|
|
||||||
def __init__(self, bar1, bar2, bar3) -> None:
|
|
||||||
self.bar1 = bar1
|
|
||||||
self.bar2 = bar2
|
|
||||||
self.bar3 = bar3
|
|
||||||
|
|
||||||
ATTRIBUTES: tuple = (Foo.bar1, Foo.bar2, Foo.bar3)
|
|
||||||
|
|
||||||
|
|
||||||
def process(child_instance: SuperFoo):
|
|
||||||
for attribute in child_instance.ATTRIBUTES:
|
|
||||||
print(getattr(child_instance, attribute))
|
|
||||||
|
|
||||||
process(Foo(123, 456, 789))
|
|
||||||
```
|
|
||||||
|
|
||||||
the output I expect would be:
|
|
||||||
|
|
||||||
```
|
|
||||||
> 123
|
|
||||||
> 456
|
|
||||||
> 789
|
|
||||||
```
|
|
||||||
|
|
||||||
Obviously this doesn't work, instead the IDE warns me that `Foo` is not defined, and the error which is raised says so as well.
|
|
||||||
|
|
||||||
```
|
|
||||||
ATTRIBUTES: tuple = (Foo.bar1, Foo.bar2, Foo.bar3)
|
|
||||||
NameError: name 'Foo' is not defined
|
|
||||||
```
|
|
||||||
|
|
||||||
While I completely get why this happens, I have no clue how to solve it.
|
|
||||||
Any help would be appreciated.
|
|
||||||
"""
|
|
BIN
src/test.db
BIN
src/test.db
Binary file not shown.
@ -1 +0,0 @@
|
|||||||
from music_kraken import objects
|
|
@ -1,133 +0,0 @@
|
|||||||
import music_kraken as mk
|
|
||||||
print(mk.__path__)
|
|
||||||
|
|
||||||
# if you simply wan't to run the buildin minimal cli just do this:
|
|
||||||
# mk.cli()
|
|
||||||
|
|
||||||
# SEARCH
|
|
||||||
|
|
||||||
"""
|
|
||||||
The whole programm takes the data it processes further from the cache, a sqlite database.
|
|
||||||
So bevore you can do anything, you will need to fill it with the songs you
|
|
||||||
wan't to download.
|
|
||||||
For now the base of everything is musicbrainz, so you need to get the
|
|
||||||
musicbrainz id and the type the id corresponds to (artist/release group/release/track).
|
|
||||||
To get this you first have to initialize a search object (music_kraken.metadata.metadata_search.Search).
|
|
||||||
"""
|
|
||||||
|
|
||||||
search_object = src.music_kraken.audio_source_not_used_anymore.metadata.metadata_search.Search()
|
|
||||||
|
|
||||||
"""
|
|
||||||
Then you need an initial "text search" to get some options you can choose from. For
|
|
||||||
this you can either specify artists releases and whatever directly with:
|
|
||||||
- Search.search_from_text(self, artist: str = None, release_group: str = None, recording: str = None)
|
|
||||||
Or you can search with a text Querry like in the default cli:
|
|
||||||
- Search.search_from_query(self, query: str)
|
|
||||||
"""
|
|
||||||
|
|
||||||
multiple_options = search_object.search_from_text(artist=input("input the name of the artist: "))
|
|
||||||
|
|
||||||
"""
|
|
||||||
both possible methods return an instance of MultipleOptions. It can just be
|
|
||||||
printed or converted to a string.
|
|
||||||
"""
|
|
||||||
|
|
||||||
print(multiple_options)
|
|
||||||
|
|
||||||
"""
|
|
||||||
After the first "text search" you can either again search again with the same function,
|
|
||||||
or you can further explore one of the options from the previous search.
|
|
||||||
For this simply call Search.choose(self, index: int).
|
|
||||||
The index represents the number in the previously returned instance of MultipleOptions.
|
|
||||||
The element which has been chosen with `choose(i)` will be selectend,
|
|
||||||
and can be downloaded with following steps
|
|
||||||
|
|
||||||
Thus this has to be done **after either search_from_text or search_from_query**
|
|
||||||
"""
|
|
||||||
|
|
||||||
# choosing the best matching band
|
|
||||||
multiple_options = search_object.choose(0)
|
|
||||||
# choosing the first ever release group of this band
|
|
||||||
multiple_options = search_object.choose(1)
|
|
||||||
# printing out the current options
|
|
||||||
print(multiple_options)
|
|
||||||
|
|
||||||
"""
|
|
||||||
This process can be repeated indefenetly (until you run out of memory).
|
|
||||||
A search history is kept in the Search instance. You could go back to
|
|
||||||
the previous search like this:
|
|
||||||
|
|
||||||
multiple_options = search.get_previous_options()
|
|
||||||
"""
|
|
||||||
|
|
||||||
# DOWNLOADING METADATA / FILLING UP THE CACHE DB
|
|
||||||
|
|
||||||
"""
|
|
||||||
If you selected the Option you want with `Search.choose(i)`, you can
|
|
||||||
finally download the metadata of either:
|
|
||||||
- an artist (the whole discography)
|
|
||||||
- a release group
|
|
||||||
- a release
|
|
||||||
- a track/recording
|
|
||||||
To download you need the selected Option Object (`music_kraken.metadata.metadata_search.Option`)
|
|
||||||
it is simply stored in Search.current_option.
|
|
||||||
|
|
||||||
If you already know what you wan't to download you can skip all the steps above and just create
|
|
||||||
a dictionary like this and use it later (*might change and break after I add multiple metadata sources which I will*):
|
|
||||||
```python
|
|
||||||
{
|
|
||||||
'type': option_type,
|
|
||||||
'id': musicbrainz_id
|
|
||||||
}
|
|
||||||
```
|
|
||||||
The option type is a string (I'm sorry for not making it an enum I know its a bad pratice), which can
|
|
||||||
have following values:
|
|
||||||
- 'artist'
|
|
||||||
- 'release_group'
|
|
||||||
- 'release'
|
|
||||||
- 'recording'
|
|
||||||
**PAY ATTENTION TO TYPOS, ITS CASE SENSITIVE**
|
|
||||||
|
|
||||||
The musicbrainz id is just the id of the object from musicbrainz.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# in this example I will choose the previous selected option.
|
|
||||||
option_to_download = search_object.current_option
|
|
||||||
print(option_to_download)
|
|
||||||
|
|
||||||
"""
|
|
||||||
If you got the Option instance you want to download, then downloading the metadata is really straight
|
|
||||||
forward so I just show the code.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# I am aware of abstrackt classes
|
|
||||||
metadata_downloader = src.music_kraken.audio_source_not_used_anymore.metadata.metadata_fetch.MetadataDownloader()
|
|
||||||
metadata_downloader.download({'type': option_to_download.type, 'id': option_to_download.id})
|
|
||||||
|
|
||||||
"""
|
|
||||||
This will add the requested songs to the cache database.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
# CACHE / TEMPORARY DATABASE
|
|
||||||
"""
|
|
||||||
All the data can be gotten from the temporary database / cache.
|
|
||||||
You can get the database object like this:
|
|
||||||
"""
|
|
||||||
|
|
||||||
cache = mk.database.temp_database.temp_database
|
|
||||||
print(cache)
|
|
||||||
|
|
||||||
"""
|
|
||||||
When fetching any song data from the cache, you will get it as Song
|
|
||||||
object (music_kraken.database.song.Song). There are multiple methods
|
|
||||||
to get different sets of Songs. The names explain the methods pretty
|
|
||||||
well:
|
|
||||||
- get_track_metadata(id: str)
|
|
||||||
- get_tracks_to_download()
|
|
||||||
- get_tracks_without_src()
|
|
||||||
- get_tracks_without_isrc()
|
|
||||||
- get_tracks_without_filepath()
|
|
||||||
|
|
||||||
the id always is a musicbrainz id and distinct for every track
|
|
||||||
"""
|
|
@ -1,3 +0,0 @@
|
|||||||
from tests import test_objects
|
|
||||||
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
from typing import Optional
|
|
||||||
|
|
||||||
|
|
||||||
class TreeNode:
|
|
||||||
"""A class representing a binary tree node."""
|
|
||||||
|
|
||||||
def __init__(self, val: int = 0, left: Optional['TreeNode'] = None, right: Optional['TreeNode'] = None):
|
|
||||||
"""
|
|
||||||
Initializes a new instance of the TreeNode class.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
val: The value of the node.
|
|
||||||
left: The left child of the node.
|
|
||||||
right: The right child of the node.
|
|
||||||
"""
|
|
||||||
self.val = val
|
|
||||||
self.left = left
|
|
||||||
self.right = right
|
|
||||||
|
|
||||||
|
|
||||||
def invert_tree(root: Optional[TreeNode]) -> Optional[TreeNode]:
|
|
||||||
"""
|
|
||||||
Inverts a binary tree.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
root: The root node of the binary tree.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
The root node of the inverted binary tree.
|
|
||||||
"""
|
|
||||||
if root is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
# Swap left and right children of the root node
|
|
||||||
root.left, root.right = root.right, root.left
|
|
||||||
|
|
||||||
# Recursively invert the left and right subtrees
|
|
||||||
invert_tree(root.left)
|
|
||||||
invert_tree(root.right)
|
|
||||||
|
|
||||||
return root
|
|
Loading…
Reference in New Issue
Block a user