fix (own bug) [#26628] "FCurve/Driver Version Fix" Incorrectly Clobbers Array Indexing
authorCampbell Barton <ideasman42@gmail.com>
Sun, 27 Mar 2011 03:14:14 +0000 (03:14 +0000)
committerCampbell Barton <ideasman42@gmail.com>
Sun, 27 Mar 2011 03:14:14 +0000 (03:14 +0000)
also escape strings properly now.

release/scripts/modules/animsys_refactor.py

index 7a83a1434c5c045f0d10bc40a04c3e33fb935683..9f2acc5e26814974a66f1f7e097f116cf06dc7e8 100644 (file)
@@ -27,6 +27,10 @@ The main function to use is: update_data_paths(...)
 
 IS_TESTING = False
 
+def drepr(string):
+    # is there a less crappy way to do this in python?, re.escape also escapes
+    # single quotes strings so cant use it.
+    return '"%s"' % repr(string)[1:-1].replace("\"", "\\\"").replace("\\'","'")
 
 class DataPathBuilder(object):
     __slots__ = ("data_path", )
@@ -40,7 +44,12 @@ class DataPathBuilder(object):
         return DataPathBuilder(self.data_path + (str_value, ))
 
     def __getitem__(self, key):
-        str_value = '["%s"]' % key
+        if type(key) is int:
+            str_value = '[%d]' % key
+        elif type(key) is str:
+            str_value = '[%s]' % drepr(key)
+        else:
+            raise Exception("unsupported accessor %r of type %r (internal error)" % (key, type(key)))
         return DataPathBuilder(self.data_path + (str_value, ))
 
     def resolve(self, real_base, rna_update_from_map=None):