Compare commits

...

9 Commits

9 changed files with 22 additions and 15 deletions

View File

@@ -0,0 +1 @@
3.12.7

View File

@@ -196,17 +196,17 @@ matchPhaseDistanceText = "Exact Match"
logTraceForAdvanceMenuOpt = False logTraceForAdvanceMenuOpt = False
if (stash.PLUGIN_TASK_NAME == "tag_duplicates_task" or stash.PLUGIN_TASK_NAME == "create_duplicate_report_task") and 'Target' in stash.JSON_INPUT['args']: if (stash.PLUGIN_TASK_NAME == "tag_duplicates_task" or stash.PLUGIN_TASK_NAME == "create_duplicate_report_task") and 'Target' in stash.JSON_INPUT['args']:
stash.enableProgressBar(False) stash.enableProgressBar(False)
if stash.JSON_INPUT['args']['Target'].startswith("0"): if str(stash.JSON_INPUT['args']['Target']).startswith("0"):
matchDupDistance = 0 matchDupDistance = 0
elif stash.JSON_INPUT['args']['Target'].startswith("1"): elif str(stash.JSON_INPUT['args']['Target']).startswith("1"):
matchDupDistance = 1 matchDupDistance = 1
elif stash.JSON_INPUT['args']['Target'].startswith("2"): elif str(stash.JSON_INPUT['args']['Target']).startswith("2"):
matchDupDistance = 2 matchDupDistance = 2
elif stash.JSON_INPUT['args']['Target'].startswith("3"): elif str(stash.JSON_INPUT['args']['Target']).startswith("3"):
matchDupDistance = 3 matchDupDistance = 3
stash.Trace(f"Target = {stash.JSON_INPUT['args']['Target']}") stash.Trace(f"Target = {stash.JSON_INPUT['args']['Target']}")
targets = stash.JSON_INPUT['args']['Target'].split(":") targets = str(stash.JSON_INPUT['args']['Target']).split(":")
if len(targets) > 1: if len(targets) > 1:
significantTimeDiff = float(targets[1]) significantTimeDiff = float(targets[1])
excludeFromReportIfSignificantTimeDiff = True excludeFromReportIfSignificantTimeDiff = True
@@ -973,7 +973,7 @@ def writeRowToHtmlReport(fileHtmlReport, DupFile, DupFileToKeep, itemIndex, tagD
fileHtmlReport.write(f"</tr>{ToDeleteSceneIDSrchStr}{DupFile['id']}{ToKeepSceneIDSrchStr}{DupFileToKeep['id']}{itemIndexSrchStr}{itemIndex}:: -->\n") fileHtmlReport.write(f"</tr>{ToDeleteSceneIDSrchStr}{DupFile['id']}{ToKeepSceneIDSrchStr}{DupFileToKeep['id']}{itemIndexSrchStr}{itemIndex}:: -->\n")
fragmentForSceneDetails = 'id tags {id name ignore_auto_tag} groups {group {name} } performers {name} galleries {id} files {path width height duration size video_codec bit_rate frame_rate} details ' fragmentForSceneDetails = 'id tags {id name ignore_auto_tag} groups {group {name} } performers {id name} galleries {id} files {path width height duration size video_codec bit_rate frame_rate} details '
htmlFileData = " paths {screenshot sprite webp " + htmlPreviewOrStream + "} " htmlFileData = " paths {screenshot sprite webp " + htmlPreviewOrStream + "} "
mergeFieldData = " code director title rating100 date studio {id name} urls " mergeFieldData = " code director title rating100 date studio {id name} urls "
fragmentForSceneDetails += mergeFieldData + htmlFileData fragmentForSceneDetails += mergeFieldData + htmlFileData

View File

@@ -50,7 +50,7 @@ report_config = {
# If enabled, create an HTML report when tagging duplicate files # If enabled, create an HTML report when tagging duplicate files
"createHtmlReport" : True, "createHtmlReport" : True,
# To use a private or an alternate site to access report and advance menu # To use a private or an alternate site to access report and advance menu
"remoteReportDirURL" : "https://stash.axter.com/1.1/", "remoteReportDirURL" : "https://stash.tremendousturtle.tools/custom/",
# To use a private or an alternate site to access jquery, easyui, and jquery.prompt # To use a private or an alternate site to access jquery, easyui, and jquery.prompt
"js_DirURL" : "https://www.axter.com/js/", "js_DirURL" : "https://www.axter.com/js/",
} }

View File

@@ -23,7 +23,7 @@ def modulesInstalled(moduleNames, install=True, silent=False):
else: else:
if install and (results:=installModule(moduleName)) > 0: if install and (results:=installModule(moduleName)) > 0:
if results == 1: if results == 1:
print(f"Module {moduleName!r} has been installed") if not silent: print(f"Module {moduleName!r} has been installed")
else: else:
if not silent: print(f"Module {moduleName!r} is already installed") if not silent: print(f"Module {moduleName!r} is already installed")
continue continue
@@ -37,7 +37,7 @@ def modulesInstalled(moduleNames, install=True, silent=False):
except ImportError as e: except ImportError as e:
if install and (results:=installModule(moduleName)) > 0: if install and (results:=installModule(moduleName)) > 0:
if results == 1: if results == 1:
print(f"Module {moduleName!r} has been installed") if not silent: print(f"Module {moduleName!r} has been installed")
else: else:
if not silent: print(f"Module {moduleName!r} is already installed") if not silent: print(f"Module {moduleName!r} is already installed")
continue continue
@@ -73,6 +73,7 @@ def installModule(moduleName):
pipArg = " --disable-pip-version-check" pipArg = " --disable-pip-version-check"
if isDocker(): if isDocker():
pipArg += " --break-system-packages" pipArg += " --break-system-packages"
pipArg += " --root-user-action ignore"
results = os.popen(f"{sys.executable} -m pip install {moduleName}{pipArg}").read() # May need to be f"{sys.executable} -m pip install {moduleName}" results = os.popen(f"{sys.executable} -m pip install {moduleName}{pipArg}").read() # May need to be f"{sys.executable} -m pip install {moduleName}"
results = results.strip("\n") results = results.strip("\n")
if results.find("Requirement already satisfied:") > -1: if results.find("Requirement already satisfied:") > -1:

View File

@@ -511,20 +511,25 @@ class StashPluginHelper(StashInterface):
if self._mergeMetadata == None: if self._mergeMetadata == None:
self.initMergeMetadata(excludeMergeTags) self.initMergeMetadata(excludeMergeTags)
errMsg = None errMsg = None
stopRetry = False
for i in range(0, retryCount): for i in range(0, retryCount):
try: try:
if errMsg != None:
self.Warn(errMsg)
if type(SrcData) is int: if type(SrcData) is int:
SrcData = self.find_scene(SrcData) SrcData = self.find_scene(SrcData)
DestData = self.find_scene(DestData) DestData = self.find_scene(DestData)
return self._mergeMetadata.merge(SrcData, DestData) return self._mergeMetadata.merge(SrcData, DestData)
except (requests.exceptions.ConnectionError, ConnectionResetError): except (requests.exceptions.ConnectionError, ConnectionResetError) as e:
tb = traceback.format_exc() tb = traceback.format_exc()
errMsg = f"Exception calling [mergeMetadata]. Will retry; count({i}); Error: {e}\nTraceBack={tb}" errMsg = f"Exception calling [mergeMetadata]. Will retry; count({i}); Error: {e}\nTraceBack={tb}"
except Exception as e: except Exception as e:
tb = traceback.format_exc() tb = traceback.format_exc()
errMsg = f"Exception calling [mergeMetadata]. Will retry; count({i}); Error: {e}\nTraceBack={tb}" errMsg = f"Data Exception calling [mergeMetadata]. Will not retry; count({i}); Error: {e}\nTraceBack={tb}"
stopRetry = True
if errMsg != None:
self.Warn(errMsg)
if stopRetry:
break
time.sleep(sleepSecondsBetweenRetry) time.sleep(sleepSecondsBetweenRetry)
def getUpdateProgressBarIter(self, qtyResults): def getUpdateProgressBarIter(self, qtyResults):
@@ -962,9 +967,9 @@ class StashPluginHelper(StashInterface):
} }
""" """
if fragment: if fragment:
query = re.sub(r'\.\.\.SceneSlim', fragment, query) query = re.sub(r'\.\.\.SceneSlim', fragment, query)
else: else:
query += "fragment SceneSlim on Scene { id }" query += "fragment SceneSlim on Scene { id }"
variables = { "distance": distance, "duration_diff": duration_diff } variables = { "distance": distance, "duration_diff": duration_diff }
result = self.call_GQL(query, variables) result = self.call_GQL(query, variables)