diff --git a/adapters/adapter.py b/adapters/adapter.py index fdb7a1d..aa01c08 100644 --- a/adapters/adapter.py +++ b/adapters/adapter.py @@ -1,5 +1,5 @@ -from asset_library.common.functions import (norm_asset_datas,) +#from asset_library.common.functions import (norm_asset_datas,) from asset_library.common.bl_utils import get_addon_prefs, load_datablocks from asset_library.common.file_utils import read_file, write_file from asset_library.common.template import Template @@ -57,7 +57,7 @@ class AssetLibraryAdapter(PropertyGroup): if self.is_conform: return self.library.conform.directory - return self.library.bundle_dir + return self.library.bundle_directory @property def blend_depth(self): @@ -359,16 +359,10 @@ class AssetLibraryAdapter(PropertyGroup): print(f'Read cache from {self.cache_file}') return self.read_file(self.cache_file) - def norm_asset_datas(self, asset_file_datas): - ''' Return a new flat list of asset data - the filepath keys are merge with the assets keys - ''' - return norm_asset_datas(asset_file_datas) - - def write_cache(self, asset_datas): - path = self.cache_file - print(f'cache file writen to {path}') - return write_file(path, list(asset_datas)) + def write_cache(self, asset_descriptions): + cache_path = self.cache_file + print(f'cache file writen to {cache_path}') + return write_file(cache_path, list(asset_descriptions)) def prop_rel_path(self, path, prop): '''Get a filepath relative to a property of the adapter''' @@ -686,13 +680,14 @@ class AssetLibraryAdapter(PropertyGroup): self.generate_previews(asset_descriptions) + #print() + #print(cache) + #raise Exception() + elif isinstance(cache_diff, (Path, str)): cache_diff = json.loads(Path(cache_diff).read_text(encoding='utf-8')) - - - if self.blend_depth == 0: raise Exception('Blender depth must be 1 at min') #groups = [(cache_diff)] @@ -777,7 +772,7 @@ class AssetLibraryAdapter(PropertyGroup): bpy.ops.wm.save_as_mainfile(filepath=str(blend_path), compress=True) if write_cache: - self.write_cache(cache) + self.write_cache(asset_descriptions) self.write_catalog(catalog_data) @@ -851,10 +846,11 @@ class AssetLibraryAdapter(PropertyGroup): def format_path(self, template, **kargs): - params = dict(self.to_dict(), + params = dict( bundle_dir=Path(self.library.bundle_directory), conform_dir=Path(self.library.conform.directory), - **kargs + **kargs, + **self.to_dict(), ) return Template(template).format(params).resolve() \ No newline at end of file diff --git a/adapters/copy_folder.py b/adapters/copy_folder.py index 03a425e..9871a39 100644 --- a/adapters/copy_folder.py +++ b/adapters/copy_folder.py @@ -19,9 +19,9 @@ class CopyFolderLibrary(AssetLibraryAdapter): includes : StringProperty() excludes : StringProperty() - def bundle(self): + def bundle(self, cache_diff=None): src = expandvars(self.source_directory) - dst = expandvars(self.library_path) + dst = expandvars(self.target_directory) includes = [inc.strip() for inc in self.includes.split(',')] excludes = [ex.strip() for ex in self.excludes.split(',')] diff --git a/adapters/kitsu.py b/adapters/kitsu.py index 4b06f3b..346af08 100644 --- a/adapters/kitsu.py +++ b/adapters/kitsu.py @@ -27,6 +27,7 @@ class KitsuLibrary(AssetLibraryAdapter): name = "Kitsu" template_name : StringProperty() template_file : StringProperty() + source_directory : StringProperty(subtype='DIR_PATH') url: StringProperty() login: StringProperty() @@ -65,15 +66,15 @@ class KitsuLibrary(AssetLibraryAdapter): directory = directory or self.source_directory return Path(directory, self.get_asset_relative_path(name, catalog)) - def get_asset_description(self, data, path): + def get_asset_description(self, data, asset_path): modified = time.time_ns() catalog = data['entity_type_name'] - asset_path = Path(path) - asset_name = self.norm_file_name(data['name']) + asset_path = self.prop_rel_path(asset_path, 'source_directory') + #asset_name = self.norm_file_name(data['name']) asset_description = dict( - filepath=asset_path.as_posix(), + filepath=asset_path, modified=modified, library_id=self.library.id, assets=[dict( @@ -82,8 +83,8 @@ class KitsuLibrary(AssetLibraryAdapter): description=data['description'], tags=[], type=self.data_type, - image=str(self.template_image.format(name=asset_name)), - video=str(self.template_video.format(name=asset_name)), + image=self.template_image.raw, + video=self.template_video.raw, name=data['name']) ] ) @@ -125,7 +126,7 @@ class KitsuLibrary(AssetLibraryAdapter): asset_data['entity_type_name'] = entity_types_ids[asset_data.pop('entity_type_id')] asset_name = asset_data['name'] - asset_field_data = dict(name=asset_name, type=asset_data['entity_type_name']) + asset_field_data = dict(name=asset_name, type=asset_data['entity_type_name'], source_directory=self.source_directory) try: asset_field_data.update(template_name.parse(asset_name)) diff --git a/collection/operators.py b/collection/operators.py index 2244b4b..20a33a7 100644 --- a/collection/operators.py +++ b/collection/operators.py @@ -63,7 +63,8 @@ class ASSETLIB_OT_load_asset(Operator): self.report({"ERROR"}, 'No asset selected') return {'CANCELLED'} - fp = expandvars(asset.asset_data['filepath']) + asset_path = asset.asset_data['filepath'] + fp = lib.adapter.format_path(asset_path) name = asset.name ## set mode to object diff --git a/common/functions.py b/common/functions.py index 2163b41..7012edf 100644 --- a/common/functions.py +++ b/common/functions.py @@ -85,7 +85,7 @@ def get_active_catalog(): return '' - +""" def norm_asset_datas(asset_file_datas): ''' Return a new flat list of asset data the filepath keys are merge with the assets keys''' @@ -180,7 +180,7 @@ def get_asset_source(replace_local=False): source_path = re.sub(actionlib_dir_local, actionlib_dir, source_path) return source_path - +"""" ''' def get_catalog_path(filepath=None): filepath = filepath or bpy.data.filepath diff --git a/common/template.py b/common/template.py index f57065f..91e1421 100644 --- a/common/template.py +++ b/common/template.py @@ -12,17 +12,17 @@ class Template: def __init__(self, template): #asset_data_path = Path(lib_path) / ASSETLIB_FILENAME - self.template = template + self.raw = template @property def glob_pattern(self): - pattern = self.field_pattern_recursive.sub('**', self.template) + pattern = self.field_pattern_recursive.sub('**', self.raw) pattern = self.field_pattern.sub('*', pattern) return pattern @property def re_pattern(self): - pattern = self.field_pattern_recursive.sub('([\\\w -_.\/]+)', self.template) + pattern = self.field_pattern_recursive.sub('([\\\w -_.\/]+)', self.raw) pattern = self.field_pattern.sub('([\\\w -_.]+)', pattern) pattern = pattern.replace('?', '.') pattern = pattern.replace('*', '.*') @@ -31,7 +31,7 @@ class Template: @property def fields(self): - return self.field_pattern.findall(self.template) + return self.field_pattern.findall(self.raw) #return [f or '0' for f in fields] def parse(self, path): @@ -57,9 +57,9 @@ class Template: data = {**(data or {}), **kargs} try: - path = self.template.format(**data) + path = self.raw.format(**data) except KeyError as e: - print(f'Cannot format {self.template} with {data}, field {e} is missing') + print(f'Cannot format {self.raw} with {data}, field {e} is missing') return path = os.path.expandvars(path) @@ -84,4 +84,4 @@ class Template: return Path(paths[0]) def __repr__(self): - return f'Template({self.template})' \ No newline at end of file + return f'Template({self.raw})' \ No newline at end of file