Concurrency refactor 999 (#1029)
* Working on making export threadsafe, #999 * Working on making export threadsafe, #999 * refactor for concurrent export, #999 * Fixed race condition in ExportRecord context manager
This commit is contained in:
@@ -25,7 +25,7 @@ from rich.console import Console
|
||||
from rich.markdown import Markdown
|
||||
from strpdatetime import strpdatetime
|
||||
|
||||
from osxphotos._constants import _OSXPHOTOS_NONE_SENTINEL
|
||||
from osxphotos._constants import _OSXPHOTOS_NONE_SENTINEL, SQLITE_CHECK_SAME_THREAD
|
||||
from osxphotos._version import __version__
|
||||
from osxphotos.cli.cli_params import TIMESTAMP_OPTION, VERBOSE_OPTION
|
||||
from osxphotos.cli.common import get_data_dir
|
||||
@@ -77,7 +77,8 @@ def echo(message, emoji=True, **kwargs):
|
||||
class PhotoInfoFromFile:
|
||||
"""Mock PhotoInfo class for a file to be imported
|
||||
|
||||
Returns None for most attributes but allows some templates like exiftool and created to work correctly"""
|
||||
Returns None for most attributes but allows some templates like exiftool and created to work correctly
|
||||
"""
|
||||
|
||||
def __init__(self, filepath: Union[str, Path], exiftool: Optional[str] = None):
|
||||
self._path = str(filepath)
|
||||
@@ -745,7 +746,7 @@ def write_sqlite_report(
|
||||
|
||||
file_exists = os.path.isfile(report_file)
|
||||
|
||||
conn = sqlite3.connect(report_file)
|
||||
conn = sqlite3.connect(report_file, check_same_thread=SQLITE_CHECK_SAME_THREAD)
|
||||
c = conn.cursor()
|
||||
|
||||
if not append or not file_exists:
|
||||
|
||||
@@ -12,6 +12,7 @@ from abc import ABC, abstractmethod
|
||||
from contextlib import suppress
|
||||
from typing import Dict, Union
|
||||
|
||||
from osxphotos._constants import SQLITE_CHECK_SAME_THREAD
|
||||
from osxphotos.export_db import OSXPHOTOS_ABOUT_STRING
|
||||
from osxphotos.photoexporter import ExportResults
|
||||
from osxphotos.sqlite_utils import sqlite_columns
|
||||
@@ -181,7 +182,7 @@ class ExportReportWriterSQLite(ReportWriterABC):
|
||||
with suppress(FileNotFoundError):
|
||||
os.unlink(self.output_file)
|
||||
|
||||
self._conn = sqlite3.connect(self.output_file)
|
||||
self._conn = sqlite3.connect(self.output_file, check_same_thread=SQLITE_CHECK_SAME_THREAD)
|
||||
self._create_tables()
|
||||
self.report_id = self._generate_report_id()
|
||||
|
||||
@@ -533,7 +534,7 @@ class SyncReportWriterSQLite(ReportWriterABC):
|
||||
with suppress(FileNotFoundError):
|
||||
os.unlink(self.output_file)
|
||||
|
||||
self._conn = sqlite3.connect(self.output_file)
|
||||
self._conn = sqlite3.connect(self.output_file, check_same_thread=SQLITE_CHECK_SAME_THREAD)
|
||||
self._create_tables()
|
||||
self.report_id = self._generate_report_id()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user