Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / common / extensions / docs / server2 / api_categorizer.py
1 # Copyright 2013 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 import os
6 import posixpath
7
8 from compiled_file_system import SingleFile
9 from extensions_paths import PUBLIC_TEMPLATES
10
11
12 class APICategorizer(object):
13   ''' This class gets api category from documented apis.
14   '''
15
16   def __init__(self, file_system, compiled_fs_factory, platform):
17     self._file_system = file_system
18     self._cache = compiled_fs_factory.Create(file_system,
19                                              self._CollectDocumentedAPIs,
20                                              APICategorizer)
21     self._platform = platform
22
23   def _GenerateAPICategories(self):
24     return self._cache.GetFromFileListing(
25         posixpath.join(PUBLIC_TEMPLATES, self._platform) + '/').Get()
26
27   @SingleFile
28   def _CollectDocumentedAPIs(self, base_dir, files):
29     public_templates = []
30     for root, _, files in self._file_system.Walk(base_dir):
31       public_templates.extend(posixpath.join(root, name) for name in files)
32     template_names = set(os.path.splitext(name)[0].replace('_', '.')
33                          for name in public_templates)
34     return template_names
35
36   def GetCategory(self, api_name):
37     '''Return the type of api.'Chrome' means the public apis,
38     private means the api only used by chrome, and experimental means
39     the apis with "experimental" prefix.
40     '''
41     documented_apis = self._GenerateAPICategories()
42     if (api_name.endswith('Private') or
43         api_name not in documented_apis):
44       return 'private'
45     if api_name.startswith('experimental.'):
46       return 'experimental'
47     return 'chrome'
48
49   def IsDocumented(self, api_name):
50     return (api_name in self._GenerateAPICategories())