103 lines
3.1 KiB
Python
103 lines
3.1 KiB
Python
|
# abx_context.py
|
||
|
"""
|
||
|
Simplified file-context information, used to determine the correct source
|
||
|
of ABX settings from 'abx.yaml' files in the project folders.
|
||
|
|
||
|
This is reduced from the earlier attempt to use the file_context system
|
||
|
which I've moved into KitCAT.
|
||
|
"""
|
||
|
import os, re, copy, string, collections
|
||
|
import yaml
|
||
|
|
||
|
DEFAULT_YAML = {}
|
||
|
with open(os.path.join(os.path.dirname(__file__), 'abx.yaml')) as def_yaml_file:
|
||
|
DEFAULT_YAML.update(yaml.safe_load(def_yaml_file))
|
||
|
|
||
|
|
||
|
from . import accumulate
|
||
|
|
||
|
from .accumulate import RecursiveDict
|
||
|
|
||
|
|
||
|
class ABX_Context(object):
|
||
|
"""
|
||
|
BlendFile context information.
|
||
|
"""
|
||
|
filepath = None
|
||
|
root = None
|
||
|
folders = ()
|
||
|
filename = None
|
||
|
|
||
|
def __init__(self, path=None):
|
||
|
self.clear()
|
||
|
if path:
|
||
|
self.update(path)
|
||
|
|
||
|
def clear(self):
|
||
|
"""
|
||
|
Clear contents of ABX_Context object.
|
||
|
|
||
|
Nearly the same as reinitializing, but the notes
|
||
|
attribute is left alone, to preserve the log history.
|
||
|
"""
|
||
|
# Identity
|
||
|
self.root = os.path.abspath(os.environ['HOME'])
|
||
|
self.render_root = os.path.join(self.root, 'Renders')
|
||
|
self.role = ''
|
||
|
|
||
|
# Status / Settings
|
||
|
self.filepath = None
|
||
|
self.filename = None
|
||
|
self.filetype = 'blend'
|
||
|
self.file_exists = False
|
||
|
self.folder_exists = False
|
||
|
|
||
|
# Defaults
|
||
|
self.provided_data = RecursiveDict(DEFAULT_YAML, source='default')
|
||
|
self.abx_fields = DEFAULT_YAML['abx']
|
||
|
self.render_profiles = {} #RenderProfileMap()
|
||
|
|
||
|
def update(self, path):
|
||
|
"""
|
||
|
Update the FileContext based on a new file path.
|
||
|
"""
|
||
|
# Basic File Path Info
|
||
|
self.filepath = os.path.abspath(path)
|
||
|
self.filename = os.path.basename(path)
|
||
|
|
||
|
# Does the file path exist?
|
||
|
if os.path.exists(path):
|
||
|
self.file_exists = True
|
||
|
self.folder_exists = True
|
||
|
else:
|
||
|
self.file_exists = False
|
||
|
if os.path.exists(os.path.dirname(path)):
|
||
|
self.folder_exists = True
|
||
|
else:
|
||
|
self.folder_exists = False
|
||
|
|
||
|
# Data from YAML Files
|
||
|
#self._collect_yaml_data()
|
||
|
self.provided_data = RecursiveDict(DEFAULT_YAML, source='default')
|
||
|
|
||
|
kitcat_root, kitcat_data, abx_data = accumulate.get_project_data(self.filepath)
|
||
|
self.root = kitcat_root
|
||
|
self.provided_data.update(kitcat_data)
|
||
|
path = os.path.abspath(os.path.normpath(self.filepath))
|
||
|
root = os.path.abspath(self.root)
|
||
|
self.folders = [os.path.basename(self.root)]
|
||
|
self.folders.extend(os.path.normpath(os.path.relpath(path, root)).split(os.sep)[:-1])
|
||
|
|
||
|
self.abx_fields = abx_data
|
||
|
|
||
|
self.render_profiles = self.abx_fields['render_profiles']
|
||
|
|
||
|
try:
|
||
|
self.render_root = os.path.join(self.root,
|
||
|
self.provided_data['definitions']['render_root'])
|
||
|
except KeyError:
|
||
|
self.render_root = os.path.join(self.root, 'Renders')
|
||
|
|
||
|
|
||
|
|
||
|
|