-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Database parental directories creation if not exist #4327
Changes from 7 commits
9917f2a
b07b0e2
c67245e
d3d9318
879ed7f
c0d05f8
9029a8a
a0b0028
67e778f
2886296
b609cae
fa5862d
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -1398,6 +1398,15 @@ def show_version(lib, opts, args): | |
version_cmd.func = show_version | ||
default_commands.append(version_cmd) | ||
|
||
# database_location: return true if user | ||
# wants to create the parent directories. | ||
|
||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This comment looks like it's out of date (it can just be deleted). |
||
|
||
def database_dir_creation(path): | ||
# Ask the user for a choice. | ||
return ui.input_yn("{} does not exist, create it (Y/n)?" | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It might be helpful to more explicity describe the issue here; the path alone might not be enough to understand the problem: |
||
.format(displayable_path(path))) | ||
|
||
|
||
# modify: Declaratively change metadata. | ||
|
||
|
Original file line number | Diff line number | Diff line change | ||||||
---|---|---|---|---|---|---|---|---|
|
@@ -7,6 +7,7 @@ Changelog | |||||||
Changelog goes here! | ||||||||
|
||||||||
New features: | ||||||||
* Create the parental directories for database if they do not exist. | ||||||||
|
||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
Including references to where this was discussed. |
||||||||
* :ref:`musicbrainz-config`: a new :ref:`musicbrainz.enabled` option allows disabling | ||||||||
the MusicBrainz metadata source during the autotagging process | ||||||||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -142,7 +142,8 @@ place to start:: | |
|
||
Change that first path to a directory where you'd like to keep your music. Then, | ||
for ``library``, choose a good place to keep a database file that keeps an index | ||
of your music. (The config's format is `YAML`_. You'll want to configure your | ||
of your music. Beets will prompt you if the parental directories for database do | ||
not exist. (The config's format is `YAML`_. You'll want to configure your | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. TBH I think it's probably OK to leave this sentence off? This is an edge case, and the prompt clearly explains to users what's going on, so I don't think we need to warn people that this might happen. |
||
text editor to use spaces, not real tabs, for indentation. Also, ``~`` means | ||
your home directory in these paths, even on Windows.) | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -19,6 +19,8 @@ | |
import shutil | ||
import sqlite3 | ||
import unittest | ||
from random import random | ||
from unittest import mock | ||
|
||
from test import _common | ||
from beets import dbcore | ||
|
@@ -760,8 +762,31 @@ def test_no_results(self): | |
ModelFixture1, dbcore.query.FalseQuery()).get()) | ||
|
||
|
||
class ParentalDirCreation(unittest.TestCase): | ||
@mock.patch('builtins.input', side_effect=['y', ]) | ||
def test_create_yes(self, _): | ||
non_exist_path = "ParentalDirCreationTest/nonexist/" + str(random()) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I think this should be using a path within a temporary directory, to be certain that we don't pollute the environment where the test is run. |
||
try: | ||
dbcore.Database(non_exist_path) | ||
except OSError as e: | ||
raise e | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. That would behave identically with the |
||
shutil.rmtree("ParentalDirCreationTest") | ||
|
||
@mock.patch('builtins.input', side_effect=['n', ]) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. It might be easier to use the |
||
def test_create_no(self, _): | ||
non_exist_path = "ParentalDirCreationTest/nonexist/" + str(random()) | ||
try: | ||
dbcore.Database(non_exist_path) | ||
except OSError as e: | ||
raise e | ||
if os.path.exists("ParentalDirCreationTest/nonexist/"): | ||
shutil.rmtree("ParentalDirCreationTest") | ||
raise OSError("Should not create dir") | ||
|
||
|
||
def suite(): | ||
return unittest.TestLoader().loadTestsFromName(__name__) | ||
|
||
|
||
if __name__ == '__main__': | ||
unittest.main(defaultTest='suite') |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It is somewhat unfortunate that this couples the
beets.dbcore
andbeets.ui
modules, whereas the former used to be standalone (except for importingbeets.util
). Would it be possible instead to catch the exception on missing directory inbeets/ui/__init__.py:_open_library()
, ask for creating the directory, and trying to open the database again afterwards?Apart from that, a more descriptive name instead
_path_checker
what be nice, maybe along the lines ofcheck_db_directory_exists
?