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

Unified Diff: grit/format/policy_templates/writers/adm_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/adm_writer.py
===================================================================
--- grit/format/policy_templates/writers/adm_writer.py (revision 202)
+++ grit/format/policy_templates/writers/adm_writer.py (working copy)
@@ -1,274 +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 grit.format.policy_templates.writers import template_writer
-
-
-NEWLINE = '\r\n'
-
-
-def GetWriter(config):
- '''Factory method for creating AdmWriter objects.
- See the constructor of TemplateWriter for description of
- arguments.
- '''
- return AdmWriter(['win'], config)
-
-
-class IndentedStringBuilder:
- '''Utility class for building text with indented lines.'''
-
- def __init__(self):
- self.lines = []
- self.indent = ''
-
- def AddLine(self, string='', indent_diff=0):
- '''Appends a string with indentation and a linebreak to |self.lines|.
-
- Args:
- string: The string to print.
- indent_diff: the difference of indentation of the printed line,
- compared to the next/previous printed line. Increment occurs
- after printing the line, while decrement occurs before that.
- '''
- indent_diff *= 2
- if indent_diff < 0:
- self.indent = self.indent[(-indent_diff):]
- if string != '':
- self.lines.append(self.indent + string)
- else:
- self.lines.append('')
- if indent_diff > 0:
- self.indent += ''.ljust(indent_diff)
-
- def AddLines(self, other):
- '''Appends the content of another |IndentedStringBuilder| to |self.lines|.
- Indentation of the added lines will be the sum of |self.indent| and
- their original indentation.
-
- Args:
- other: The buffer from which lines are copied.
- '''
- for line in other.lines:
- self.AddLine(line)
-
- def ToString(self):
- '''Returns |self.lines| as text string.'''
- return NEWLINE.join(self.lines)
-
-
-class AdmWriter(template_writer.TemplateWriter):
- '''Class for generating policy templates in Windows ADM format.
- It is used by PolicyTemplateGenerator to write ADM files.
- '''
-
- TYPE_TO_INPUT = {
- 'string': 'EDITTEXT',
- 'int': 'NUMERIC',
- 'string-enum': 'DROPDOWNLIST',
- 'int-enum': 'DROPDOWNLIST',
- 'list': 'LISTBOX',
- 'string-enum-list': 'LISTBOX',
- 'dict': 'EDITTEXT'
- }
-
- def _Escape(self, string):
- return string.replace('.', '_')
-
- def _AddGuiString(self, name, value):
- # The |name| must be escaped.
- assert name == self._Escape(name)
- # Escape newlines in the value.
- value = value.replace('\n', '\\n')
- if name in self.strings_seen:
- err = ('%s was added as "%s" and now added again as "%s"' %
- (name, self.strings_seen[name], value))
- assert value == self.strings_seen[name], err
- else:
- self.strings_seen[name] = value
- line = '%s="%s"' % (name, value)
- self.strings.AddLine(line)
-
- def _WriteSupported(self, builder):
- builder.AddLine('#if version >= 4', 1)
- builder.AddLine('SUPPORTED !!SUPPORTED_WINXPSP2')
- builder.AddLine('#endif', -1)
-
- def _WritePart(self, policy, key_name, builder):
- '''Writes the PART ... END PART section of a policy.
-
- Args:
- policy: The policy to write to the output.
- key_name: The registry key backing the policy.
- builder: Builder to append lines to.
- '''
- policy_part_name = self._Escape(policy['name'] + '_Part')
- self._AddGuiString(policy_part_name, policy['label'])
-
- # Print the PART ... END PART section:
- builder.AddLine()
- adm_type = self.TYPE_TO_INPUT[policy['type']]
- builder.AddLine('PART !!%s %s' % (policy_part_name, adm_type), 1)
- if policy['type'] in ('list', 'string-enum-list'):
- # Note that the following line causes FullArmor ADMX Migrator to create
- # corrupt ADMX files. Please use admx_writer to get ADMX files.
- builder.AddLine('KEYNAME "%s\\%s"' % (key_name, policy['name']))
- builder.AddLine('VALUEPREFIX ""')
- else:
- builder.AddLine('VALUENAME "%s"' % policy['name'])
- if policy['type'] == 'int':
- # The default max for NUMERIC values is 9999 which is too small for us.
- builder.AddLine('MIN 0 MAX 2000000000')
- if policy['type'] in ('string', 'dict'):
- # The default max for EDITTEXT values is 1023, which is too small for
- # big JSON blobs and other string policies.
- builder.AddLine('MAXLEN 1000000')
- if policy['type'] in ('int-enum', 'string-enum'):
- builder.AddLine('ITEMLIST', 1)
- for item in policy['items']:
- if policy['type'] == 'int-enum':
- value_text = 'NUMERIC ' + str(item['value'])
- else:
- value_text = '"' + item['value'] + '"'
- string_id = self._Escape(item['name'] + '_DropDown')
- builder.AddLine('NAME !!%s VALUE %s' % (string_id, value_text))
- self._AddGuiString(string_id, item['caption'])
- builder.AddLine('END ITEMLIST', -1)
- builder.AddLine('END PART', -1)
-
- def _WritePolicy(self, policy, key_name, builder):
- if policy['type'] == 'external':
- # This type can only be set through cloud policy.
- return
-
- policy_name = self._Escape(policy['name'] + '_Policy')
- self._AddGuiString(policy_name, policy['caption'])
- builder.AddLine('POLICY !!%s' % policy_name, 1)
- self._WriteSupported(builder)
- policy_explain_name = self._Escape(policy['name'] + '_Explain')
- self._AddGuiString(policy_explain_name, policy['desc'])
- builder.AddLine('EXPLAIN !!' + policy_explain_name)
-
- if policy['type'] == 'main':
- builder.AddLine('VALUENAME "%s"' % policy['name'])
- builder.AddLine('VALUEON NUMERIC 1')
- builder.AddLine('VALUEOFF NUMERIC 0')
- else:
- self._WritePart(policy, key_name, builder)
-
- builder.AddLine('END POLICY', -1)
- builder.AddLine()
-
- def WriteComment(self, comment):
- self.lines.AddLine('; ' + comment)
-
- def WritePolicy(self, policy):
- if self.CanBeMandatory(policy):
- self._WritePolicy(policy,
- self.config['win_reg_mandatory_key_name'],
- self.policies)
-
- def WriteRecommendedPolicy(self, policy):
- self._WritePolicy(policy,
- self.config['win_reg_recommended_key_name'],
- self.recommended_policies)
-
- def BeginPolicyGroup(self, group):
- category_name = self._Escape(group['name'] + '_Category')
- self._AddGuiString(category_name, group['caption'])
- self.policies.AddLine('CATEGORY !!' + category_name, 1)
-
- def EndPolicyGroup(self):
- self.policies.AddLine('END CATEGORY', -1)
- self.policies.AddLine('')
-
- def BeginRecommendedPolicyGroup(self, group):
- category_name = self._Escape(group['name'] + '_Category')
- self._AddGuiString(category_name, group['caption'])
- self.recommended_policies.AddLine('CATEGORY !!' + category_name, 1)
-
- def EndRecommendedPolicyGroup(self):
- self.recommended_policies.AddLine('END CATEGORY', -1)
- self.recommended_policies.AddLine('')
-
- def _CreateTemplate(self, category_path, key_name, policies):
- '''Creates the whole ADM template except for the [Strings] section, and
- returns it as an |IndentedStringBuilder|.
-
- Args:
- category_path: List of strings representing the category path.
- key_name: Main registry key backing the policies.
- policies: ADM code for all the policies in an |IndentedStringBuilder|.
- '''
- lines = IndentedStringBuilder()
- for part in category_path:
- lines.AddLine('CATEGORY !!' + part, 1)
- lines.AddLine('KEYNAME "%s"' % key_name)
- lines.AddLine()
-
- lines.AddLines(policies)
-
- for part in category_path:
- lines.AddLine('END CATEGORY', -1)
- lines.AddLine()
-
- return lines
-
- def BeginTemplate(self):
- if self._GetChromiumVersionString() is not None:
- self.WriteComment(self.config['build'] + ' version: ' + \
- self._GetChromiumVersionString())
- self._AddGuiString(self.config['win_supported_os'],
- self.messages['win_supported_winxpsp2']['text'])
- category_path = self.config['win_mandatory_category_path']
- recommended_category_path = self.config['win_recommended_category_path']
- recommended_name = '%s - %s' % \
- (self.config['app_name'], self.messages['doc_recommended']['text'])
- if self.config['build'] == 'chrome':
- self._AddGuiString(category_path[0], 'Google')
- self._AddGuiString(category_path[1], self.config['app_name'])
- self._AddGuiString(recommended_category_path[1], recommended_name)
- elif self.config['build'] == 'chromium':
- self._AddGuiString(category_path[0], self.config['app_name'])
- self._AddGuiString(recommended_category_path[0], recommended_name)
- # All the policies will be written into self.policies.
- # The final template text will be assembled into self.lines by
- # self.EndTemplate().
-
- def EndTemplate(self):
- # Copy policies into self.lines.
- policy_class = self.config['win_group_policy_class'].upper()
- for class_name in ['MACHINE', 'USER']:
- if policy_class != 'BOTH' and policy_class != class_name:
- continue
- self.lines.AddLine('CLASS ' + class_name, 1)
- self.lines.AddLines(self._CreateTemplate(
- self.config['win_mandatory_category_path'],
- self.config['win_reg_mandatory_key_name'],
- self.policies))
- self.lines.AddLines(self._CreateTemplate(
- self.config['win_recommended_category_path'],
- self.config['win_reg_recommended_key_name'],
- self.recommended_policies))
- self.lines.AddLine('', -1)
- # Copy user strings into self.lines.
- self.lines.AddLine('[Strings]')
- self.lines.AddLines(self.strings)
-
- def Init(self):
- # String buffer for building the whole ADM file.
- self.lines = IndentedStringBuilder()
- # String buffer for building the strings section of the ADM file.
- self.strings = IndentedStringBuilder()
- # Map of strings seen, to avoid duplicates.
- self.strings_seen = {}
- # String buffer for building the policies of the ADM file.
- self.policies = IndentedStringBuilder()
- # String buffer for building the recommended policies of the ADM file.
- self.recommended_policies = IndentedStringBuilder()
-
- def GetTemplateText(self):
- return self.lines.ToString()
« no previous file with comments | « grit/format/policy_templates/writers/__init__.py ('k') | grit/format/policy_templates/writers/adm_writer_unittest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698