Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(519)

Side by Side Diff: grit/format/policy_templates/writers/android_policy_writer.py

Issue 865563002: Add a Policy template writer that generates Android resources which can be exposed through Android'… (Closed) Base URL: https://chromium.googlesource.com/external/grit-i18n.git@master
Patch Set: Rebased + Changes to Docwriter + Unittests Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 #!/usr/bin/env python
2 # Copyright (c) 2015 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
7 from grit.format.policy_templates.writers import xml_formatted_writer
8 from xml.dom import minidom
9 from xml.sax import saxutils as xml_escape
10
11
12 def GetWriter(config):
13 '''Factory method for creating AndroidPolicyWriter objects.
Nico 2015/03/02 19:02:06 Style guide says use """ for doc strings (but ' fo
knn 2015/03/02 19:54:35 Acknowledged. Will have to update other files in t
14 See the constructor of TemplateWriter for description of
15 arguments.
16 '''
17 return AndroidPolicyWriter(['android'], config)
18
Nico 2015/03/02 19:02:06 nit: python style guide says two newlines between
knn 2015/03/02 19:54:35 Done.
19 def _EscapeResource(resource):
20 '''Escape the resource for usage in an Android resource XML file.
21 This includes standard XML escaping as well as those specific to Android.
22 '''
23 if type(resource) == int:
24 return str(resource)
25 return xml_escape.escape(resource, {"'": "\\'", '"': '\\"', '\\': '\\\\'})
26
27 class AndroidPolicyWriter(xml_formatted_writer.XMLFormattedWriter):
28 '''Outputs localized Android Resource XML files.
29 The policy strings are localized and exposed as string resources for
30 consumption through Android's App restriction Schema.
31 '''
32
33 # DOM root node of the generated ADML document.
34 _doc = None
Nico 2015/03/02 19:02:06 Instance variables are usually set in __init__ in
knn 2015/03/02 19:54:35 Other files in this directory are using this conve
35 # The resources node contains all resource 'string' and 'string-array'
36 # elements.
37 _resources = None
38
39 def AddStringResource(self, name, string):
40 '''Add a string resource of the given name.
41 '''
42 string_node = self._doc.createElement('string')
43 string_node.setAttribute('name', name)
44 string_node.appendChild(self._doc.createTextNode(_EscapeResource(string)))
45 self._resources.appendChild(string_node)
46
47 def AddStringArrayResource(self, name, string_items):
48 '''Add a string-array resource of the given name and
49 elements from string_items.
50 '''
51 string_array_node = self._doc.createElement('string-array')
52 string_array_node.setAttribute('name', name)
53 self._resources.appendChild(string_array_node)
54 for item in string_items:
55 string_node = self._doc.createElement('item')
56 string_node.appendChild(self._doc.createTextNode(_EscapeResource(item)))
57 string_array_node.appendChild(string_node)
58
59 def PreprocessPolicies(self, policy_list):
60 return self.FlattenGroupsAndSortPolicies(policy_list)
61
62 def CanBeRecommended(self, policy):
63 return False
64
65 def IsDeprecatedPolicySupported(self, policy):
66 return True
67
68 def IsFuturePolicySupported(self, policy):
69 return True
70
71 def WritePolicy(self, policy):
72 name = policy['name']
73 self.AddStringResource(name + 'Title', policy['caption'])
74
75 # Get the first line of the policy description.
76 description = policy['desc'].split('\n', 1)[0]
77 self.AddStringResource(name + 'Desc', description)
78
79 items = policy.get('items')
80 if items is not None:
81 entries = [ item['caption'] for item in items ]
82 values = [ item['value'] for item in items ]
83 self.AddStringArrayResource(name + 'Entries', entries)
84 self.AddStringArrayResource(name + 'Values', values)
85
86 def BeginTemplate(self):
87 comment_text = 'DO NOT MODIFY THIS FILE DIRECTLY!\n' \
88 'IT IS GENERATED FROM policy_templates.json.'
89 comment_node = self._doc.createComment(comment_text)
90 self._doc.insertBefore(comment_node, self._resources)
91
92 def Init(self):
Nico 2015/03/02 19:02:06 What's wrong with doing this in __init__? (Looks
knn 2015/03/02 19:54:35 Acknowledged. Will update other files as well.
93 impl = minidom.getDOMImplementation()
94 self._doc = impl.createDocument(None, 'resources', None)
95 self._resources = self._doc.documentElement
96
97 def GetTemplateText(self):
98 return self.ToPrettyXml(self._doc)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698