Home | History | Annotate | Download | only in server2
      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')
     62