Add-on: use bat.bpathlib.make_absolute() for making paths absolute

This should resolve the issue where on Windows file paths to a network
share would be converted to UNC notation (and thus loose their drive
letter).
This commit is contained in:
Sybren A. Stüvel 2022-07-28 17:49:01 +02:00
parent d4dfa2d071
commit fb5501028d
2 changed files with 12 additions and 1 deletions

View File

@ -2,10 +2,12 @@
from pathlib import Path, PurePosixPath from pathlib import Path, PurePosixPath
from typing import TYPE_CHECKING, Optional, Union from typing import TYPE_CHECKING, Optional, Union
import platform import platform
import logging
import bpy import bpy
from .job_types_propgroup import JobTypePropertyGroup from .job_types_propgroup import JobTypePropertyGroup
from .bat.submodules import bpathlib
from . import preferences from . import preferences
if TYPE_CHECKING: if TYPE_CHECKING:
@ -26,6 +28,7 @@ else:
# it'll be set to the path of the BAT-packed blend file. # it'll be set to the path of the BAT-packed blend file.
BLENDFILE_SETTING_KEY = "blendfile" BLENDFILE_SETTING_KEY = "blendfile"
log = logging.getLogger(__name__)
def job_for_scene(scene: bpy.types.Scene) -> Optional[_SubmittedJob]: def job_for_scene(scene: bpy.types.Scene) -> Optional[_SubmittedJob]:
from flamenco.manager.models import SubmittedJob, JobMetadata from flamenco.manager.models import SubmittedJob, JobMetadata
@ -101,6 +104,11 @@ def is_file_inside_job_storage(context: bpy.types.Context, blendfile: Path) -> b
prefs = preferences.get(context) prefs = preferences.get(context)
job_storage = Path(prefs.job_storage).absolute().resolve() job_storage = Path(prefs.job_storage).absolute().resolve()
log.info("Checking whether the file is already inside the job storage")
log.info(" file : %s", blendfile)
log.info(" storage: %s", job_storage)
try: try:
blendfile.relative_to(job_storage) blendfile.relative_to(job_storage)
except ValueError: except ValueError:

View File

@ -11,6 +11,7 @@ import bpy
from . import job_types, job_submission, preferences from . import job_types, job_submission, preferences
from .job_types_propgroup import JobTypePropertyGroup from .job_types_propgroup import JobTypePropertyGroup
from .bat.submodules import bpathlib
if TYPE_CHECKING: if TYPE_CHECKING:
from .bat.interface import ( from .bat.interface import (
@ -242,8 +243,10 @@ class FLAMENCO_OT_submit_job(FlamencoOpMixin, bpy.types.Operator):
self.blendfile_on_farm = None self.blendfile_on_farm = None
self._bat_pack_shaman(context, blendfile) self._bat_pack_shaman(context, blendfile)
elif job_submission.is_file_inside_job_storage(context, blendfile): elif job_submission.is_file_inside_job_storage(context, blendfile):
self.log.info("File is already in job storage location, submitting it as-is")
self._use_blendfile_directly(context, blendfile) self._use_blendfile_directly(context, blendfile)
else: else:
self.log.info("File is not already in job storage location, copying it there")
self.blendfile_on_farm = self._bat_pack_filesystem(context, blendfile) self.blendfile_on_farm = self._bat_pack_filesystem(context, blendfile)
context.window_manager.modal_handler_add(self) context.window_manager.modal_handler_add(self)
@ -363,7 +366,7 @@ class FLAMENCO_OT_submit_job(FlamencoOpMixin, bpy.types.Operator):
# The blend file is contained in the job storage path, no need to # The blend file is contained in the job storage path, no need to
# copy anything. # copy anything.
self.blendfile_on_farm = PurePosixPath(blendfile.absolute().resolve().as_posix()) self.blendfile_on_farm = bpathlib.make_absolute(blendfile)
self._submit_job(context) self._submit_job(context)
def _submit_job(self, context: bpy.types.Context) -> None: def _submit_job(self, context: bpy.types.Context) -> None: