Index: tools/telemetry/telemetry/core/camel_case.py |
diff --git a/tools/telemetry/telemetry/core/camel_case.py b/tools/telemetry/telemetry/core/camel_case.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..4c2939be10fabc6371ba178efd1d1973ddb968e2 |
--- /dev/null |
+++ b/tools/telemetry/telemetry/core/camel_case.py |
@@ -0,0 +1,30 @@ |
+# Copyright 2013 The Chromium Authors. All rights reserved. |
+# Use of this source code is governed by a BSD-style license that can be |
+# found in the LICENSE file. |
+ |
+import re |
+ |
+ |
+def ToUnderscore(obj): |
tonyg
2013/08/16 23:46:30
Really clean implementation, I like it
dtu
2013/08/17 00:19:34
Thanks!
|
+ """Converts a string, list, or dict from camelCase to lower_with_underscores. |
+ |
+ Descends recursively into lists and dicts, converting all dict keys. |
+ Returns a newly allocated object of the same structure as the input. |
+ """ |
+ if isinstance(obj, basestring): |
+ return re.sub('(?!^)([A-Z]+)', r'_\1', obj).lower() |
+ |
+ elif isinstance(obj, list): |
+ return [ToUnderscore(item) for item in obj] |
+ |
+ elif isinstance(obj, dict): |
+ output = {} |
+ for k, v in obj.iteritems(): |
+ if isinstance(v, list) or isinstance(v, dict): |
+ output[ToUnderscore(k)] = ToUnderscore(v) |
+ else: |
+ output[ToUnderscore(k)] = v |
+ return output |
+ |
+ else: |
+ raise NotImplementedError() |