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

Unified Diff: grit/format/policy_templates/writers/admx_writer.py

Issue 1442863002: Remove contents of grit's SVN repository. (Closed) Base URL: http://grit-i18n.googlecode.com/svn/trunk/
Patch Set: Created 5 years, 1 month 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 side-by-side diff with in-line comments
Download patch
Index: grit/format/policy_templates/writers/admx_writer.py
===================================================================
--- grit/format/policy_templates/writers/admx_writer.py (revision 202)
+++ grit/format/policy_templates/writers/admx_writer.py (working copy)
@@ -1,382 +0,0 @@
-#!/usr/bin/env python
-# Copyright (c) 2012 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-from xml.dom import minidom
-from grit.format.policy_templates.writers import xml_formatted_writer
-
-
-def GetWriter(config):
- '''Factory method for instanciating the ADMXWriter. Every Writer needs a
- GetWriter method because the TemplateFormatter uses this method to
- instantiate a Writer.
- '''
- return ADMXWriter(['win'], config)
-
-
-class ADMXWriter(xml_formatted_writer.XMLFormattedWriter):
- '''Class for generating an ADMX policy template. It is used by the
- PolicyTemplateGenerator to write the admx file.
- '''
-
- # DOM root node of the generated ADMX document.
- _doc = None
-
- # The ADMX "policies" element that contains the ADMX "policy" elements that
- # are generated.
- _active_policies_elem = None
-
- def _AdmlString(self, name):
- '''Creates a reference to the named string in an ADML file.
- Args:
- name: Name of the referenced ADML string.
- '''
- name = name.replace('.', '_')
- return '$(string.' + name + ')'
-
- def _AdmlStringExplain(self, name):
- '''Creates a reference to the named explanation string in an ADML file.
- Args:
- name: Name of the referenced ADML explanation.
- '''
- name = name.replace('.', '_')
- return '$(string.' + name + '_Explain)'
-
- def _AdmlPresentation(self, name):
- '''Creates a reference to the named presentation element in an ADML file.
- Args:
- name: Name of the referenced ADML presentation element.
- '''
- return '$(presentation.' + name + ')'
-
- def _AddPolicyNamespaces(self, parent, prefix, namespace):
- '''Generates the ADMX "policyNamespace" element and adds the elements to the
- passed parent element. The namespace of the generated ADMX document is
- define via the ADMX "target" element. Used namespaces are declared with an
- ADMX "using" element. ADMX "target" and "using" elements are children of the
- ADMX "policyNamespace" element.
-
- Args:
- parent: The parent node to which all generated elements are added.
- prefix: A logical name that can be used in the generated ADMX document to
- refere to this namespace.
- namespace: Namespace of the generated ADMX document.
- '''
- policy_namespaces_elem = self.AddElement(parent, 'policyNamespaces')
- attributes = {
- 'prefix': prefix,
- 'namespace': namespace,
- }
- self.AddElement(policy_namespaces_elem, 'target', attributes)
- attributes = {
- 'prefix': 'windows',
- 'namespace': 'Microsoft.Policies.Windows',
- }
- self.AddElement(policy_namespaces_elem, 'using', attributes)
-
- def _AddCategory(self, parent, name, display_name,
- parent_category_name=None):
- '''Adds an ADMX category element to the passed parent node. The following
- snippet shows an example of a category element where "chromium" is the value
- of the parameter name:
-
- <category displayName="$(string.chromium)" name="chromium"/>
-
- Each parent node can have only one category with a given name. Adding the
- same category again with the same attributes is ignored, but adding it
- again with different attributes is an error.
-
- Args:
- parent: The parent node to which all generated elements are added.
- name: Name of the category.
- display_name: Display name of the category.
- parent_category_name: Name of the parent category. Defaults to None.
- '''
- existing = filter(lambda e: e.getAttribute('name') == name,
- parent.getElementsByTagName('category'))
- if existing:
- assert len(existing) == 1
- assert existing[0].getAttribute('name') == name
- assert existing[0].getAttribute('displayName') == display_name
- return
- attributes = {
- 'name': name,
- 'displayName': display_name,
- }
- category_elem = self.AddElement(parent, 'category', attributes)
- if parent_category_name:
- attributes = {'ref': parent_category_name}
- self.AddElement(category_elem, 'parentCategory', attributes)
-
- def _AddCategories(self, categories):
- '''Generates the ADMX "categories" element and adds it to the categories
- main node. The "categories" element defines the category for the policies
- defined in this ADMX document. Here is an example of an ADMX "categories"
- element:
-
- <categories>
- <category displayName="$(string.google)" name="google"/>
- <category displayName="$(string.googlechrome)" name="googlechrome">
- <parentCategory ref="google"/>
- </category>
- </categories>
-
- Args:
- categories_path: The categories path e.g. ['google', 'googlechrome']. For
- each level in the path a "category" element will be generated. Except
- for the root level, each level refers to its parent. Since the root
- level category has no parent it does not require a parent reference.
- '''
- category_name = None
- for category in categories:
- parent_category_name = category_name
- category_name = category
- self._AddCategory(self._categories_elem, category_name,
- self._AdmlString(category_name), parent_category_name)
-
- def _AddSupportedOn(self, parent, supported_os):
- '''Generates the "supportedOn" ADMX element and adds it to the passed
- parent node. The "supportedOn" element contains information about supported
- Windows OS versions. The following code snippet contains an example of a
- "supportedOn" element:
-
- <supportedOn>
- <definitions>
- <definition name="SUPPORTED_WINXPSP2"
- displayName="$(string.SUPPORTED_WINXPSP2)"/>
- </definitions>
- ...
- </supportedOn>
-
- Args:
- parent: The parent element to which all generated elements are added.
- supported_os: List with all supported Win OSes.
- '''
- supported_on_elem = self.AddElement(parent, 'supportedOn')
- definitions_elem = self.AddElement(supported_on_elem, 'definitions')
- attributes = {
- 'name': supported_os,
- 'displayName': self._AdmlString(supported_os)
- }
- self.AddElement(definitions_elem, 'definition', attributes)
-
- def _AddStringPolicy(self, parent, name):
- '''Generates ADMX elements for a String-Policy and adds them to the
- passed parent node.
- '''
- attributes = {
- 'id': name,
- 'valueName': name,
- 'maxLength': '1000000',
- }
- self.AddElement(parent, 'text', attributes)
-
- def _AddIntPolicy(self, parent, name):
- '''Generates ADMX elements for an Int-Policy and adds them to the passed
- parent node.
- '''
- attributes = {
- 'id': name,
- 'valueName': name,
- 'maxValue': '2000000000',
- }
- self.AddElement(parent, 'decimal', attributes)
-
- def _AddEnumPolicy(self, parent, policy):
- '''Generates ADMX elements for an Enum-Policy and adds them to the
- passed parent element.
- '''
- name = policy['name']
- items = policy['items']
- attributes = {
- 'id': name,
- 'valueName': name,
- }
- enum_elem = self.AddElement(parent, 'enum', attributes)
- for item in items:
- attributes = {'displayName': self._AdmlString(item['name'])}
- item_elem = self.AddElement(enum_elem, 'item', attributes)
- value_elem = self.AddElement(item_elem, 'value')
- value_string = str(item['value'])
- if policy['type'] == 'int-enum':
- self.AddElement(value_elem, 'decimal', {'value': value_string})
- else:
- self.AddElement(value_elem, 'string', {}, value_string)
-
- def _AddListPolicy(self, parent, key, name):
- '''Generates ADMX XML elements for a List-Policy and adds them to the
- passed parent element.
- '''
- attributes = {
- # The ID must be in sync with ID of the corresponding element in the ADML
- # file.
- 'id': name + 'Desc',
- 'valuePrefix': '',
- 'key': key + '\\' + name,
- }
- self.AddElement(parent, 'list', attributes)
-
- def _AddMainPolicy(self, parent):
- '''Generates ADMX elements for a Main-Policy amd adds them to the
- passed parent element.
- '''
- enabled_value_elem = self.AddElement(parent, 'enabledValue');
- self.AddElement(enabled_value_elem, 'decimal', {'value': '1'})
- disabled_value_elem = self.AddElement(parent, 'disabledValue');
- self.AddElement(disabled_value_elem, 'decimal', {'value': '0'})
-
- def _GetElements(self, policy_group_elem):
- '''Returns the ADMX "elements" child from an ADMX "policy" element. If the
- "policy" element has no "elements" child yet, a new child is created.
-
- Args:
- policy_group_elem: The ADMX "policy" element from which the child element
- "elements" is returned.
-
- Raises:
- Exception: The policy_group_elem does not contain a ADMX "policy" element.
- '''
- if policy_group_elem.tagName != 'policy':
- raise Exception('Expected a "policy" element but got a "%s" element'
- % policy_group_elem.tagName)
- elements_list = policy_group_elem.getElementsByTagName('elements');
- if len(elements_list) == 0:
- return self.AddElement(policy_group_elem, 'elements')
- elif len(elements_list) == 1:
- return elements_list[0]
- else:
- raise Exception('There is supposed to be only one "elements" node but'
- ' there are %s.' % str(len(elements_list)))
-
- def _WritePolicy(self, policy, name, key, parent):
- '''Generates AMDX elements for a Policy. There are four different policy
- types: Main-Policy, String-Policy, Enum-Policy and List-Policy.
- '''
- policies_elem = self._active_policies_elem
- policy_type = policy['type']
- policy_name = policy['name']
- if policy_type == 'external':
- # This type can only be set through cloud policy.
- return
-
- attributes = {
- 'name': name,
- 'class': self.config['win_group_policy_class'],
- 'displayName': self._AdmlString(policy_name),
- 'explainText': self._AdmlStringExplain(policy_name),
- 'presentation': self._AdmlPresentation(policy_name),
- 'key': key,
- }
- # Store the current "policy" AMDX element in self for later use by the
- # WritePolicy method.
- policy_elem = self.AddElement(policies_elem, 'policy',
- attributes)
- self.AddElement(policy_elem, 'parentCategory',
- {'ref': parent})
- self.AddElement(policy_elem, 'supportedOn',
- {'ref': self.config['win_supported_os']})
- if policy_type == 'main':
- self.AddAttribute(policy_elem, 'valueName', policy_name)
- self._AddMainPolicy(policy_elem)
- elif policy_type in ('string', 'dict'):
- # 'dict' policies are configured as JSON-encoded strings on Windows.
- parent = self._GetElements(policy_elem)
- self._AddStringPolicy(parent, policy_name)
- elif policy_type == 'int':
- parent = self._GetElements(policy_elem)
- self._AddIntPolicy(parent, policy_name)
- elif policy_type in ('int-enum', 'string-enum'):
- parent = self._GetElements(policy_elem)
- self._AddEnumPolicy(parent, policy)
- elif policy_type in ('list', 'string-enum-list'):
- parent = self._GetElements(policy_elem)
- self._AddListPolicy(parent, key, policy_name)
- elif policy_type == 'group':
- pass
- else:
- raise Exception('Unknown policy type %s.' % policy_type)
-
- def WritePolicy(self, policy):
- if self.CanBeMandatory(policy):
- self._WritePolicy(policy,
- policy['name'],
- self.config['win_reg_mandatory_key_name'],
- self._active_mandatory_policy_group_name)
-
- def WriteRecommendedPolicy(self, policy):
- self._WritePolicy(policy,
- policy['name'] + '_recommended',
- self.config['win_reg_recommended_key_name'],
- self._active_recommended_policy_group_name)
-
- def _BeginPolicyGroup(self, group, name, parent):
- '''Generates ADMX elements for a Policy-Group.
- '''
- attributes = {
- 'name': name,
- 'displayName': self._AdmlString(group['name'] + '_group'),
- }
- category_elem = self.AddElement(self._categories_elem,
- 'category',
- attributes)
- attributes = {
- 'ref': parent
- }
- self.AddElement(category_elem, 'parentCategory', attributes)
-
- def BeginPolicyGroup(self, group):
- self._BeginPolicyGroup(group,
- group['name'],
- self.config['win_mandatory_category_path'][-1])
- self._active_mandatory_policy_group_name = group['name']
-
- def EndPolicyGroup(self):
- self._active_mandatory_policy_group_name = \
- self.config['win_mandatory_category_path'][-1]
-
- def BeginRecommendedPolicyGroup(self, group):
- self._BeginPolicyGroup(group,
- group['name'] + '_recommended',
- self.config['win_recommended_category_path'][-1])
- self._active_recommended_policy_group_name = group['name'] + '_recommended'
-
- def EndRecommendedPolicyGroup(self):
- self._active_recommended_policy_group_name = \
- self.config['win_recommended_category_path'][-1]
-
- def BeginTemplate(self):
- '''Generates the skeleton of the ADMX template. An ADMX template contains
- an ADMX "PolicyDefinitions" element with four child nodes: "policies"
- "policyNamspaces", "resources", "supportedOn" and "categories"
- '''
- dom_impl = minidom.getDOMImplementation('')
- self._doc = dom_impl.createDocument(None, 'policyDefinitions', None)
- if self._GetChromiumVersionString() is not None:
- self.AddComment(self._doc.documentElement, self.config['build'] + \
- ' version: ' + self._GetChromiumVersionString())
- policy_definitions_elem = self._doc.documentElement
-
- policy_definitions_elem.attributes['revision'] = '1.0'
- policy_definitions_elem.attributes['schemaVersion'] = '1.0'
-
- self._AddPolicyNamespaces(policy_definitions_elem,
- self.config['admx_prefix'],
- self.config['admx_namespace'])
- self.AddElement(policy_definitions_elem, 'resources',
- {'minRequiredRevision' : '1.0'})
- self._AddSupportedOn(policy_definitions_elem,
- self.config['win_supported_os'])
- self._categories_elem = self.AddElement(policy_definitions_elem,
- 'categories')
- self._AddCategories(self.config['win_mandatory_category_path'])
- self._AddCategories(self.config['win_recommended_category_path'])
- self._active_policies_elem = self.AddElement(policy_definitions_elem,
- 'policies')
- self._active_mandatory_policy_group_name = \
- self.config['win_mandatory_category_path'][-1]
- self._active_recommended_policy_group_name = \
- self.config['win_recommended_category_path'][-1]
-
- def GetTemplateText(self):
- return self.ToPrettyXml(self._doc)

Powered by Google App Engine
This is Rietveld 408576698