OLD | NEW |
| (Empty) |
1 #!/usr/bin/env python | |
2 # Copyright (c) 2012 The Chromium Authors. All rights reserved. | |
3 # Use of this source code is governed by a BSD-style license that can be | |
4 # found in the LICENSE file. | |
5 | |
6 import json | |
7 | |
8 from textwrap import TextWrapper | |
9 from grit.format.policy_templates.writers import template_writer | |
10 | |
11 | |
12 TEMPLATE_HEADER="""\ | |
13 // Policy template for Linux. | |
14 // Uncomment the policies you wish to activate and change their values to | |
15 // something useful for your case. The provided values are for reference only | |
16 // and do not provide meaningful defaults! | |
17 {""" | |
18 | |
19 | |
20 HEADER_DELIMETER="""\ | |
21 //-------------------------------------------------------------------------""" | |
22 | |
23 | |
24 def GetWriter(config): | |
25 '''Factory method for creating JsonWriter objects. | |
26 See the constructor of TemplateWriter for description of | |
27 arguments. | |
28 ''' | |
29 return JsonWriter(['linux'], config) | |
30 | |
31 | |
32 class JsonWriter(template_writer.TemplateWriter): | |
33 '''Class for generating policy files in JSON format (for Linux). The | |
34 generated files will define all the supported policies with example values | |
35 set for them. This class is used by PolicyTemplateGenerator to write .json | |
36 files. | |
37 ''' | |
38 | |
39 def PreprocessPolicies(self, policy_list): | |
40 return self.FlattenGroupsAndSortPolicies(policy_list) | |
41 | |
42 def WriteComment(self, comment): | |
43 self._out.append('// ' + comment) | |
44 | |
45 def WritePolicy(self, policy): | |
46 if policy['type'] == 'external': | |
47 # This type can only be set through cloud policy. | |
48 return | |
49 example_value_str = json.dumps(policy['example_value'], sort_keys=True) | |
50 | |
51 # Add comma to the end of the previous line. | |
52 if not self._first_written: | |
53 self._out[-2] += ',' | |
54 | |
55 if not self.CanBeMandatory(policy) and self.CanBeRecommended(policy): | |
56 line = ' // Note: this policy is supported only in recommended mode.' | |
57 self._out.append(line) | |
58 line = ' // The JSON file should be placed in %srecommended.' % \ | |
59 self.config['linux_policy_path'] | |
60 self._out.append(line) | |
61 | |
62 line = ' // %s' % policy['caption'] | |
63 self._out.append(line) | |
64 self._out.append(HEADER_DELIMETER) | |
65 description = self._text_wrapper.wrap(policy['desc']) | |
66 self._out += description; | |
67 line = ' //"%s": %s' % (policy['name'], example_value_str) | |
68 self._out.append('') | |
69 self._out.append(line) | |
70 self._out.append('') | |
71 | |
72 self._first_written = False | |
73 | |
74 def BeginTemplate(self): | |
75 if self._GetChromiumVersionString() is not None: | |
76 self.WriteComment(self.config['build'] + ''' version: ''' + \ | |
77 self._GetChromiumVersionString()) | |
78 self._out.append(TEMPLATE_HEADER) | |
79 | |
80 def EndTemplate(self): | |
81 self._out.append('}') | |
82 | |
83 def Init(self): | |
84 self._out = [] | |
85 # The following boolean member is true until the first policy is written. | |
86 self._first_written = True | |
87 # Create the TextWrapper object once. | |
88 self._text_wrapper = TextWrapper( | |
89 initial_indent = ' // ', | |
90 subsequent_indent = ' // ', | |
91 break_long_words = False, | |
92 width = 80) | |
93 | |
94 def GetTemplateText(self): | |
95 return '\n'.join(self._out) | |
OLD | NEW |