mirror of
https://github.com/cooperhammond/irs.git
synced 2024-12-22 17:35:28 +00:00
Added in config and --setup flag
This commit is contained in:
parent
422fdd232c
commit
1b044b615a
0
irs/cli/__init__.py
Normal file
0
irs/cli/__init__.py
Normal file
|
@ -1,17 +1,20 @@
|
|||
import sys
|
||||
import os
|
||||
|
||||
import argparse
|
||||
|
||||
from .song import Song
|
||||
from .album import Album
|
||||
from .playlist import Playlist
|
||||
from ..glue.song import Song
|
||||
from ..glue.album import Album
|
||||
from ..glue.playlist import Playlist
|
||||
from ..install.setup import set_it_up
|
||||
from .config_parser import parse_config
|
||||
|
||||
def main():
|
||||
"""
|
||||
"""
|
||||
"""The main cli method. Parses arguments from the command line."""
|
||||
|
||||
parser = argparse.ArgumentParser()
|
||||
|
||||
parser.add_argument("-S", "--setup", dest="setup", action='store_true',
|
||||
help="Run this by itself to setup config files "
|
||||
"and folder for irs and download the ffmpeg binaries")
|
||||
|
||||
parser.add_argument("-a", "--artist", dest="artist",
|
||||
help="Specify artist name. Must be used with -s/--song or -A/--album")
|
||||
|
||||
|
@ -29,11 +32,14 @@ def main():
|
|||
|
||||
parser.add_argument("-o", "--organization", dest="organization",
|
||||
default="single-folder", help="Specify type of organization for list."
|
||||
"Used when downloading spotify playlist/album")
|
||||
" Used when downloading spotify playlist/album")
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
set_local_env()
|
||||
if args.setup:
|
||||
set_it_up()
|
||||
|
||||
parse_config()
|
||||
|
||||
if args.song and args.artist: # single song
|
||||
Song(args.song, args.artist).grab_it()
|
||||
|
@ -43,9 +49,3 @@ def main():
|
|||
Album(args.album).grab_it()
|
||||
elif args.playlist and args.username: # playlist
|
||||
Playlist(args.playlist, args.username, args.organization).grab_it()
|
||||
|
||||
|
||||
def set_local_env():
|
||||
os.environ["irs_music_dir"] = os.path.join(
|
||||
os.environ["HOME"], "Audio"
|
||||
)
|
51
irs/cli/config_parser.py
Normal file
51
irs/cli/config_parser.py
Normal file
|
@ -0,0 +1,51 @@
|
|||
import os
|
||||
import sys
|
||||
|
||||
import yaml
|
||||
|
||||
|
||||
def parse_config():
|
||||
"""Parses config using environment variables."""
|
||||
|
||||
check_for_and_set("irs_config_dir", os.environ["HOME"] + "/.irs", None)
|
||||
|
||||
home = os.environ["HOME"]
|
||||
check_for = [home + "/.irs/config.yml", home + "/.irs/bin/ffmpeg",
|
||||
home + "/.irs/bin/ffprobe"]
|
||||
|
||||
for path in check_for:
|
||||
if not os.path.exists(path):
|
||||
print("There's no config set up. Set up a configuration folder by "
|
||||
"running `irs --setup`")
|
||||
sys.exit(1)
|
||||
|
||||
config = {}
|
||||
|
||||
with open(os.environ["irs_config_dir"] + "/config.yml", "r") as stream:
|
||||
try:
|
||||
config = yaml.safe_load(stream)
|
||||
except yaml.YAMLError as exc:
|
||||
print(exc)
|
||||
|
||||
check_for_and_set("SPOTIFY_CLIENT_ID", config.get(
|
||||
"SPOTIFY_KEYS").get("CLIENT_ID"), None)
|
||||
check_for_and_set("SPOTIFY_CLIENT_SECRET", config.get(
|
||||
"SPOTIFY_KEYS").get("CLIENT_SECRET"), None)
|
||||
|
||||
check_for_and_set("irs_music_dir", os.path.expanduser(config.get("music_directory")),
|
||||
os.environ["HOME"] + "/Music")
|
||||
check_for_and_set("irs_ffmpeg_dir", os.environ["irs_config_dir"] + "/bin", None)
|
||||
|
||||
|
||||
def check_for_and_set(key, val, else_):
|
||||
"""Checks for an environment variable and if it doesn't exist, then set it
|
||||
equal to the val given.
|
||||
:param key: string, key to check for existence
|
||||
:param val: value to replace key value with if it doesn't exists
|
||||
:param else_: if val doesn't exist, use else_ instead
|
||||
"""
|
||||
if not os.environ.get(key):
|
||||
if key:
|
||||
os.environ[key] = val
|
||||
else:
|
||||
os.environ[key] = else_
|
|
@ -185,7 +185,6 @@ class Song(object):
|
|||
|
||||
"""If metadata has not been provided, search for it."""
|
||||
if not self.metadata:
|
||||
print("Searching for metadata ...")
|
||||
self.metadata = self.spotify_searcher.find_song(
|
||||
self.song_title, self.artist_name
|
||||
)
|
||||
|
|
1
irs/install
Submodule
1
irs/install
Submodule
|
@ -0,0 +1 @@
|
|||
Subproject commit 3a8323f39eda597ac5c4b4e2559577ca757aedc0
|
|
@ -1,3 +1,4 @@
|
|||
import os
|
||||
import sys
|
||||
import glob
|
||||
import shutil
|
||||
|
@ -22,7 +23,7 @@ def rip_from_url(video_url, output_name):
|
|||
'progress_hooks': [_download_hook],
|
||||
'output': "tmp_file",
|
||||
'prefer-ffmpeg': True,
|
||||
#'ffmpeg_location': os.path.expanduser("~/.irs/bin/"),
|
||||
'ffmpeg_location': os.environ["irs_ffmpeg_dir"],
|
||||
}
|
||||
|
||||
with youtube_dl.YoutubeDL(ydl_opts) as ydl:
|
||||
|
@ -43,6 +44,7 @@ class _DownloadLogger(object):
|
|||
print(msg)
|
||||
|
||||
|
||||
# TODO: update the download log
|
||||
def _download_hook(d):
|
||||
if d['status'] == 'finished':
|
||||
print("Done!")
|
|
@ -1,13 +1,10 @@
|
|||
import os
|
||||
import re
|
||||
|
||||
import spotipy
|
||||
from spotipy.oauth2 import SpotifyClientCredentials
|
||||
|
||||
|
||||
CLIENT_ID = 'e4198f6a3f7b48029366f22528b5dc66'
|
||||
CLIENT_SECRET = 'ba057d0621a5496bbb64edccf758bde5'
|
||||
|
||||
|
||||
class SpotifySearcher(object):
|
||||
"""Searches spotify for song, album, and playlist metadata."""
|
||||
|
||||
|
@ -18,9 +15,9 @@ class SpotifySearcher(object):
|
|||
|
||||
# TODO: remove these when you finish config files
|
||||
if not client_id:
|
||||
client_id = 'e4198f6a3f7b48029366f22528b5dc66'
|
||||
client_id = os.environ["SPOTIFY_CLIENT_ID"]
|
||||
if not client_secret:
|
||||
client_secret = 'ba057d0621a5496bbb64edccf758bde5'
|
||||
client_secret = os.environ["SPOTIFY_CLIENT_SECRET"]
|
||||
|
||||
try:
|
||||
creds = SpotifyClientCredentials(client_id, client_secret)
|
||||
|
|
16
setup.py
16
setup.py
|
@ -8,15 +8,17 @@ setup(
|
|||
author = 'Kepoor Hampond',
|
||||
author_email = 'kepoorh@gmail.com',
|
||||
license = 'GPL',
|
||||
packages = ['irs', 'irs.search', 'irs.interact', 'irs.glue'],
|
||||
packages = ['irs', 'irs.search', 'irs.interact', 'irs.glue',
|
||||
'irs.install', 'irs.cli'],
|
||||
install_requires = [
|
||||
'bs4',
|
||||
'mutagen',
|
||||
'argparse'
|
||||
'spotipy',
|
||||
'ydl-binaries',
|
||||
'bs4', # HTML parsing
|
||||
'mutagen', # MP3 tags
|
||||
'argparse', # CLI arg parsing
|
||||
'spotipy', # Interfacing w/ Spotify API
|
||||
'ydl-binaries', # Downloading ffmpeg/ffprobe binaries
|
||||
'pyyaml' # Config files done simply
|
||||
],
|
||||
entry_points = {
|
||||
'console_scripts': ['irs = irs.glue.cli:main'],
|
||||
'console_scripts': ['irs = irs.cli.cli:main'],
|
||||
},
|
||||
)
|
||||
|
|
Loading…
Reference in a new issue