Split PhotoDB's large init into some smaller portions.
This commit is contained in:
parent
f9ee56187c
commit
f266e1c79c
1 changed files with 49 additions and 35 deletions
|
@ -996,6 +996,7 @@ class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUs
|
||||||
|
|
||||||
self.ephemeral = ephemeral
|
self.ephemeral = ephemeral
|
||||||
|
|
||||||
|
# DATA DIR PREP
|
||||||
if data_directory is None:
|
if data_directory is None:
|
||||||
if self.ephemeral:
|
if self.ephemeral:
|
||||||
# In addition to the data_dir as a pathclass object, keep the
|
# In addition to the data_dir as a pathclass object, keep the
|
||||||
|
@ -1007,11 +1008,13 @@ class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUs
|
||||||
elif self.ephemeral:
|
elif self.ephemeral:
|
||||||
raise exceptions.NotExclusive(['data_directory', 'ephemeral'])
|
raise exceptions.NotExclusive(['data_directory', 'ephemeral'])
|
||||||
|
|
||||||
# DATA DIR PREP
|
|
||||||
data_directory = helpers.remove_path_badchars(data_directory, allowed=':/\\')
|
data_directory = helpers.remove_path_badchars(data_directory, allowed=':/\\')
|
||||||
self.data_directory = pathclass.Path(data_directory)
|
self.data_directory = pathclass.Path(data_directory)
|
||||||
os.makedirs(self.data_directory.absolute_path, exist_ok=True)
|
os.makedirs(self.data_directory.absolute_path, exist_ok=True)
|
||||||
|
|
||||||
|
self.log = logging.getLogger('etiquette:%s' % self.data_directory.absolute_path)
|
||||||
|
self.log.setLevel(logging.DEBUG)
|
||||||
|
|
||||||
# DATABASE
|
# DATABASE
|
||||||
if self.ephemeral:
|
if self.ephemeral:
|
||||||
self.sql = sqlite3.connect(':memory:')
|
self.sql = sqlite3.connect(':memory:')
|
||||||
|
@ -1021,49 +1024,22 @@ class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUs
|
||||||
existing_database = self.database_filepath.exists
|
existing_database = self.database_filepath.exists
|
||||||
self.sql = sqlite3.connect(self.database_filepath.absolute_path)
|
self.sql = sqlite3.connect(self.database_filepath.absolute_path)
|
||||||
|
|
||||||
cur = self.sql.cursor()
|
|
||||||
|
|
||||||
if existing_database:
|
if existing_database:
|
||||||
cur.execute('PRAGMA user_version')
|
self._check_version()
|
||||||
existing_version = cur.fetchone()[0]
|
|
||||||
if existing_version != constants.DATABASE_VERSION:
|
|
||||||
exc = exceptions.DatabaseOutOfDate(
|
|
||||||
current=existing_version,
|
|
||||||
new=constants.DATABASE_VERSION,
|
|
||||||
)
|
|
||||||
raise exc
|
|
||||||
|
|
||||||
statements = constants.DB_INIT.split(';')
|
|
||||||
for statement in statements:
|
|
||||||
cur.execute(statement)
|
|
||||||
self.sql.commit()
|
|
||||||
|
|
||||||
# CONFIG
|
|
||||||
self.config = copy.deepcopy(constants.DEFAULT_CONFIGURATION)
|
|
||||||
self.config_filepath = self.data_directory.with_child(constants.DEFAULT_CONFIGNAME)
|
|
||||||
user_config_exists = self.config_filepath.is_file
|
|
||||||
if user_config_exists:
|
|
||||||
with open(self.config_filepath.absolute_path, 'r') as handle:
|
|
||||||
user_config = json.load(handle)
|
|
||||||
my_keys = helpers.recursive_dict_keys(self.config)
|
|
||||||
stored_keys = helpers.recursive_dict_keys(user_config)
|
|
||||||
needs_dump = not my_keys.issubset(stored_keys)
|
|
||||||
helpers.recursive_dict_update(self.config, user_config)
|
|
||||||
else:
|
else:
|
||||||
needs_dump = True
|
self._first_time_setup()
|
||||||
|
|
||||||
if (not user_config_exists) or needs_dump:
|
|
||||||
with open(self.config_filepath.absolute_path, 'w') as handle:
|
|
||||||
handle.write(json.dumps(self.config, indent=4, sort_keys=True))
|
|
||||||
|
|
||||||
# THUMBNAIL DIRECTORY
|
# THUMBNAIL DIRECTORY
|
||||||
self.thumbnail_directory = self.data_directory.with_child(constants.DEFAULT_THUMBDIR)
|
self.thumbnail_directory = self.data_directory.with_child(constants.DEFAULT_THUMBDIR)
|
||||||
os.makedirs(self.thumbnail_directory.absolute_path, exist_ok=True)
|
os.makedirs(self.thumbnail_directory.absolute_path, exist_ok=True)
|
||||||
|
|
||||||
# OTHER
|
# CONFIG
|
||||||
self.log = logging.getLogger('etiquette:%s' % self.data_directory.absolute_path)
|
self.config_filepath = self.data_directory.with_child(constants.DEFAULT_CONFIGNAME)
|
||||||
|
self.config = self._load_config()
|
||||||
self.log.setLevel(self.config['log_level'])
|
self.log.setLevel(self.config['log_level'])
|
||||||
|
|
||||||
|
# OTHER
|
||||||
|
|
||||||
self.on_commit_queue = []
|
self.on_commit_queue = []
|
||||||
self._cached_frozen_children = None
|
self._cached_frozen_children = None
|
||||||
|
|
||||||
|
@ -1080,6 +1056,44 @@ class PhotoDB(PDBAlbumMixin, PDBBookmarkMixin, PDBPhotoMixin, PDBTagMixin, PDBUs
|
||||||
'user': self._user_cache,
|
'user': self._user_cache,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def _check_version(self):
|
||||||
|
cur = self.sql.cursor()
|
||||||
|
|
||||||
|
cur.execute('PRAGMA user_version')
|
||||||
|
existing_version = cur.fetchone()[0]
|
||||||
|
if existing_version != constants.DATABASE_VERSION:
|
||||||
|
exc = exceptions.DatabaseOutOfDate(
|
||||||
|
current=existing_version,
|
||||||
|
new=constants.DATABASE_VERSION,
|
||||||
|
)
|
||||||
|
raise exc
|
||||||
|
|
||||||
|
def _first_time_setup(self):
|
||||||
|
self.log.debug('Running first-time setup.')
|
||||||
|
cur = self.sql.cursor()
|
||||||
|
|
||||||
|
statements = constants.DB_INIT.split(';')
|
||||||
|
for statement in statements:
|
||||||
|
cur.execute(statement)
|
||||||
|
self.sql.commit()
|
||||||
|
|
||||||
|
def _load_config(self):
|
||||||
|
config = copy.deepcopy(constants.DEFAULT_CONFIGURATION)
|
||||||
|
user_config_exists = self.config_filepath.is_file
|
||||||
|
needs_dump = False
|
||||||
|
if user_config_exists:
|
||||||
|
with open(self.config_filepath.absolute_path, 'r') as handle:
|
||||||
|
user_config = json.load(handle)
|
||||||
|
my_keys = helpers.recursive_dict_keys(config)
|
||||||
|
stored_keys = helpers.recursive_dict_keys(user_config)
|
||||||
|
needs_dump = not my_keys.issubset(stored_keys)
|
||||||
|
helpers.recursive_dict_update(config, user_config)
|
||||||
|
|
||||||
|
if (not user_config_exists) or needs_dump:
|
||||||
|
with open(self.config_filepath.absolute_path, 'w') as handle:
|
||||||
|
handle.write(json.dumps(config, indent=4, sort_keys=True))
|
||||||
|
return config
|
||||||
|
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
self.close()
|
self.close()
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue