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.
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 All
15 from path_util
import AssertIsDirectory
18 class TemplateDataSource(DataSource
):
19 '''Provides a DataSource interface for compiled templates.
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
.GetMaster())
27 self
._file
_system
= server_instance
.host_file_system_provider
.GetMaster()
31 return self
._template
_cache
.GetFromFile('%s%s' %
32 (self
._dir
, FormatKey(path
))).Get()
33 except FileNotFoundError
:
34 logging
.warning(traceback
.format_exc())
37 def Refresh(self
, path
):
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
)))
43 if posixpath
.splitext(f
)[1] == '.html']
47 class ArticleDataSource(TemplateDataSource
):
48 '''Serves templates for Articles.
50 _BASE
= ARTICLES_TEMPLATES
53 class IntroDataSource(TemplateDataSource
):
54 '''Serves templates for Intros.
56 _BASE
= INTROS_TEMPLATES
59 class PartialDataSource(TemplateDataSource
):
60 '''Serves templates for private templates.
62 _BASE
= PRIVATE_TEMPLATES