Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / docs_server_utils.py
1 # Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 from base64 import b64encode
6 from hashlib import sha1
7 import os
8
9 def FormatKey(key):
10   '''Normalize a key by making sure it has a .html extension, and convert any
11   '.'s to '_'s.
12   '''
13   if key.endswith('.html'):
14     key = key[:-len('.html')]
15   safe_key = key.replace('.', '_')
16   return '%s.html' % safe_key
17
18 def SanitizeAPIName(name):
19   '''Sanitizes API filenames that are in subdirectories.
20   '''
21   filename = os.path.splitext(name)[0].replace(os.sep, '_')
22   if 'experimental' in filename:
23     filename = 'experimental_' + filename.replace('experimental_', '')
24   return filename
25
26 def StringIdentity(first, *more):
27   '''Creates a small hash of a string.
28   '''
29   def encode(string):
30     return b64encode(sha1(string).digest())
31   identity = encode(first)
32   for m in more:
33     identity = encode(identity + m)
34   return identity[:8]
35
36 def MarkFirst(dicts):
37   '''Adds a property 'first' == True to the first element in a list of dicts.
38   '''
39   if len(dicts) > 0:
40     dicts[0]['first'] = True
41
42 def MarkLast(dicts):
43   '''Adds a property 'last' == True to the last element in a list of dicts.
44   '''
45   if len(dicts) > 0:
46     dicts[-1]['last'] = True
47
48 def MarkFirstAndLast(dicts):
49   '''Marks the first and last element in a list of dicts.
50   '''
51   MarkFirst(dicts)
52   MarkLast(dicts)
53
54 def ToUnicode(data):
55   '''Returns the str |data| as a unicode object. It's expected to be utf8, but
56   there are also latin-1 encodings in there for some reason. Fall back to that.
57   '''
58   try:
59     return unicode(data, 'utf-8')
60   except:
61     return unicode(data, 'latin-1')