From cb5a116dff5d7227dd76a1e2af3d7965389ba23c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Fri, 28 Dec 2018 12:31:33 +0100 Subject: [PATCH] Compatibility fix for Blender 2.8 bpy.context.user_preferences was renamed to bpy.context.preferences. --- blender_cloud/blender.py | 10 +++++++++- blender_cloud/settings_sync.py | 8 ++++---- blender_cloud/texture_browser.py | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/blender_cloud/blender.py b/blender_cloud/blender.py index 2002376..494152e 100644 --- a/blender_cloud/blender.py +++ b/blender_cloud/blender.py @@ -662,8 +662,16 @@ class PILLAR_PT_image_custom_properties(rna_prop_ui.PropertyPanel, bpy.types.Pan _property_type = bpy.types.Image +def ctx_preferences(): + """Returns bpy.context.preferences in a 2.79-compatible way.""" + try: + return bpy.context.preferences + except AttributeError: + return bpy.context.user_preferences + + def preferences() -> BlenderCloudPreferences: - return bpy.context.user_preferences.addons[ADDON_NAME].preferences + return ctx_preferences().addons[ADDON_NAME].preferences def load_custom_icons(): diff --git a/blender_cloud/settings_sync.py b/blender_cloud/settings_sync.py index 0db959d..f0ef0bb 100644 --- a/blender_cloud/settings_sync.py +++ b/blender_cloud/settings_sync.py @@ -34,7 +34,7 @@ import asyncio import pillarsdk from pillarsdk import exceptions as sdk_exceptions from .pillar import pillar_call -from . import async_loop, pillar, cache, blendfile, home_project +from . import async_loop, blender, pillar, cache, blendfile, home_project SETTINGS_FILES_TO_UPLOAD = ['userpref.blend', 'startup.blend'] @@ -476,13 +476,13 @@ class PILLAR_OT_sync(pillar.PillarOperatorMixin, self.log.info('Overriding machine-local settings in %s', file_path) # Remember some settings that should not be overwritten from the Cloud. - up = bpy.context.user_preferences + prefs = blender.ctx_preferences() remembered = {} for rna_key, python_key in LOCAL_SETTINGS_RNA: assert '.' in python_key, 'Sorry, this code assumes there is a dot in the Python key' try: - value = up.path_resolve(python_key) + value = prefs.path_resolve(python_key) except ValueError: # Setting doesn't exist. This can happen, for example Cycles # settings on a build that doesn't have Cycles enabled. @@ -491,7 +491,7 @@ class PILLAR_OT_sync(pillar.PillarOperatorMixin, # Map enums from strings (in Python) to ints (in DNA). dot_index = python_key.rindex('.') parent_key, prop_key = python_key[:dot_index], python_key[dot_index + 1:] - parent = up.path_resolve(parent_key) + parent = prefs.path_resolve(parent_key) prop = parent.bl_rna.properties[prop_key] if prop.type == 'ENUM': log.debug('Rewriting %s from %r to %r', diff --git a/blender_cloud/texture_browser.py b/blender_cloud/texture_browser.py index 9ee8dca..9bd74ef 100644 --- a/blender_cloud/texture_browser.py +++ b/blender_cloud/texture_browser.py @@ -244,7 +244,7 @@ class MenuItem: # draw some text font_id = 0 - text_dpi = bpy.context.user_preferences.system.dpi + text_dpi = blender.ctx_preferences().system.dpi text_x = self.x + self.icon_margin_x + ICON_WIDTH + self.text_margin_x text_y = self.y + ICON_HEIGHT * 0.5 - 0.25 * self.text_size blf.position(font_id, text_x, text_y, 0)