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 import logging
      6 import posixpath
      7 import traceback
      8 
      9 from data_source import DataSource
     10 from docs_server_utils import FormatKey
     11 from extensions_paths import (
     12     ARTICLES_TEMPLATES, INTROS_TEMPLATES, PRIVATE_TEMPLATES)
     13 from file_system import FileNotFoundError
     14 from future import Collect
     15 from path_util import AssertIsDirectory
     16 
     17 
     18 class TemplateDataSource(DataSource):
     19   '''Provides a DataSource interface for compiled templates.
     20   '''
     21   def __init__(self, server_instance, request=None):
     22     self._dir = type(self)._BASE
     23     AssertIsDirectory(self._dir)
     24     self._request = request
     25     self._template_cache = server_instance.compiled_fs_factory.ForTemplates(
     26         server_instance.host_file_system_provider.GetTrunk())
     27     self._file_system = server_instance.host_file_system_provider.GetTrunk()
     28 
     29   def get(self, path):
     30     try:
     31       return self._template_cache.GetFromFile('%s%s' %
     32           (self._dir, FormatKey(path))).Get()
     33     except FileNotFoundError:
     34       logging.warning(traceback.format_exc())
     35       return None
     36 
     37   def Cron(self):
     38     futures = []
     39     for root, _, files in self._file_system.Walk(self._dir):
     40       futures += [self._template_cache.GetFromFile(
     41                       posixpath.join(self._dir, root, FormatKey(f)))
     42                   for f in files
     43                   if posixpath.splitext(f)[1] == '.html']
     44     return Collect(futures)
     45 
     46 
     47 class ArticleDataSource(TemplateDataSource):
     48   '''Serves templates for Articles.
     49   '''
     50   _BASE = ARTICLES_TEMPLATES
     51 
     52 
     53 class IntroDataSource(TemplateDataSource):
     54   '''Serves templates for Intros.
     55   '''
     56   _BASE = INTROS_TEMPLATES
     57 
     58 
     59 class PartialDataSource(TemplateDataSource):
     60   '''Serves templates for private templates.
     61   '''
     62   _BASE = PRIVATE_TEMPLATES
     63