Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(179)

Unified Diff: tools/telemetry/telemetry/core/camel_case.py

Issue 22889009: [telemetry] Move camel_case_converter out of chrome/ and use it for discover, as well. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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()

Powered by Google App Engine
This is Rietveld 408576698