Page MenuHome

metadata.patch

Authored By
Bart Crouch (crouch)
Nov 13 2013, 4:27 PM
Size
4 KB
Subscribers
None

metadata.patch

Index: blender/release/scripts/modules/rna_xml.py
===================================================================
--- blender/release/scripts/modules/rna_xml.py (revision 43103)
+++ blender/release/scripts/modules/rna_xml.py (working copy)
@@ -54,7 +54,8 @@
bpy.types.Header,
),
pretty_format=True,
- method='DATA'):
+ method='DATA',
+ meta_data=None):
from xml.sax.saxutils import quoteattr
property_typemap = build_property_typemap(skip_classes)
@@ -87,17 +88,28 @@
return
value_type_name = value_type.__name__
- for prop in property_typemap[value_type_name]:
-
- subvalue = getattr(value, prop)
+ prop_dict = property_typemap[value_type_name]
+ if meta_data and not parent:
+ prop_dict.append(meta_data)
+ for prop in prop_dict:
+ if type(prop) is str:
+ subvalue = getattr(value, prop)
+ else:
+ subvalue = prop
subvalue_type = type(subvalue)
if subvalue_type in (int, bool, float):
node_attrs.append("%s=\"%s\"" % (prop, number_to_str(subvalue, subvalue_type)))
elif subvalue_type is str:
+ if meta_data and not parent:
+ continue
node_attrs.append("%s=%s" % (prop, quoteattr(subvalue)))
elif subvalue_type == set:
node_attrs.append("%s=%s" % (prop, quoteattr("{" + ",".join(list(subvalue)) + "}")))
+ elif subvalue_type is dict:
+ # meta-data
+ for key, val in subvalue.items():
+ node_attrs.append("%s=%s" % (key, quoteattr(val)))
elif subvalue is None:
node_attrs.append("%s=\"NONE\"" % prop)
elif issubclass(subvalue_type, bpy.types.ID):
@@ -206,14 +218,33 @@
def xml2rna(root_xml,
root_rna=None, # must be set
- ):
+ report=False):
- def rna2xml_node(xml_node, value):
+ def rna2xml_node(xml_node, value, report=False):
# print("evaluating:", xml_node.nodeName)
# ---------------------------------------------------------------------
# Simple attributes
+ if xml_node.nodeName == 'Theme':
+ # filter theme specific metadata
+ try:
+ name = xml_node.attributes['name'].value
+ if not name:
+ name = "a theme"
+ version = xml_node.attributes['version'].value
+ author = xml_node.attributes['author'].value
+ if not author:
+ author = "an anonymous author"
+ del xml_node.attributes['name']
+ del xml_node.attributes['version']
+ del xml_node.attributes['author']
+ msg = "Applied %s %s by %s" % (name, version, author)
+ except:
+ msg = None
+ if report and msg:
+ report({'INFO'}, msg)
+
for attr in xml_node.attributes.keys():
# print(" ", attr)
subvalue = getattr(value, attr, Ellipsis)
@@ -297,4 +328,4 @@
# empty is valid too
pass
- rna2xml_node(root_xml, root_rna)
+ rna2xml_node(root_xml, root_rna, report)
Index: blender/release/scripts/startup/bl_operators/wm.py
===================================================================
--- blender/release/scripts/startup/bl_operators/wm.py (revision 43103)
+++ blender/release/scripts/startup/bl_operators/wm.py (working copy)
@@ -1799,7 +1799,7 @@
rna_xml.xml2rna(theme_xml,
root_rna=theme,
- )
+ report=self.report)
return {'FINISHED'}
@@ -1810,6 +1810,16 @@
filename_ext = ".xml"
filter_glob = StringProperty(default="*.xml", options={'HIDDEN'})
+ author = StringProperty(name="Author",
+ default=bpy.context.user_preferences.system.author,
+ description="Name of the person who created the theme")
+ name = StringProperty(name="Name",
+ default="",
+ description="Name of the theme")
+ version = StringProperty(name="Version",
+ default="",
+ description="Version number of the theme, eg: 1.0",
+ maxlen=8)
def execute(self, context):
import rna_xml
@@ -1819,10 +1829,14 @@
# XXX, why always 0?, allow many?
theme = context.user_preferences.themes[0]
+ meta = {'author':self.author, 'name':self.name, 'version':self.version}
rna_xml.rna2xml(file.write,
root_rna=theme,
method='ATTR',
+ meta_data=meta
)
+ file.close()
return {'FINISHED'}

File Metadata

Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
81/47/790e519d98470f1a3e7cb1a5dea0

Event Timeline