| Index: grit/format/policy_templates/writers/template_writer.py
|
| diff --git a/grit/format/policy_templates/writers/template_writer.py b/grit/format/policy_templates/writers/template_writer.py
|
| deleted file mode 100644
|
| index d489d648c3767e9a1d94e57e851745abf52b4d76..0000000000000000000000000000000000000000
|
| --- a/grit/format/policy_templates/writers/template_writer.py
|
| +++ /dev/null
|
| @@ -1,318 +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.
|
| -
|
| -
|
| -class TemplateWriter(object):
|
| - '''Abstract base class for writing policy templates in various formats.
|
| - The methods of this class will be called by PolicyTemplateGenerator.
|
| - '''
|
| -
|
| - def __init__(self, platforms, config):
|
| - '''Initializes a TemplateWriter object.
|
| -
|
| - Args:
|
| - platforms: List of platforms for which this writer can write policies.
|
| - config: A dictionary of information required to generate the template.
|
| - It contains some key-value pairs, including the following examples:
|
| - 'build': 'chrome' or 'chromium'
|
| - 'branding': 'Google Chrome' or 'Chromium'
|
| - 'mac_bundle_id': The Mac bundle id of Chrome. (Only set when building
|
| - for Mac.)
|
| - messages: List of all the message strings from the grd file. Most of them
|
| - are also present in the policy data structures that are passed to
|
| - methods. That is the preferred way of accessing them, this should only
|
| - be used in exceptional cases. An example for its use is the
|
| - IDS_POLICY_WIN_SUPPORTED_WINXPSP2 message in ADM files, because that
|
| - cannot be associated with any policy or group.
|
| - '''
|
| - self.platforms = platforms
|
| - self.config = config
|
| -
|
| - def IsDeprecatedPolicySupported(self, policy):
|
| - '''Checks if the given deprecated policy is supported by the writer.
|
| -
|
| - Args:
|
| - policy: The dictionary of the policy.
|
| -
|
| - Returns:
|
| - True if the writer chooses to include the deprecated 'policy' in its
|
| - output.
|
| - '''
|
| - return False
|
| -
|
| - def IsFuturePolicySupported(self, policy):
|
| - '''Checks if the given future policy is supported by the writer.
|
| -
|
| - Args:
|
| - policy: The dictionary of the policy.
|
| -
|
| - Returns:
|
| - True if the writer chooses to include the deprecated 'policy' in its
|
| - output.
|
| - '''
|
| - return False
|
| -
|
| - def IsPolicySupported(self, policy):
|
| - '''Checks if the given policy is supported by the writer.
|
| - In other words, the set of platforms supported by the writer
|
| - has a common subset with the set of platforms that support
|
| - the policy.
|
| -
|
| - Args:
|
| - policy: The dictionary of the policy.
|
| -
|
| - Returns:
|
| - True if the writer chooses to include 'policy' in its output.
|
| - '''
|
| - if ('deprecated' in policy and policy['deprecated'] is True and
|
| - not self.IsDeprecatedPolicySupported(policy)):
|
| - return False
|
| -
|
| - if ('future' in policy and policy['future'] is True and
|
| - not self.IsFuturePolicySupported(policy)):
|
| - return False
|
| -
|
| - if '*' in self.platforms:
|
| - # Currently chrome_os is only catched here.
|
| - return True
|
| - for supported_on in policy['supported_on']:
|
| - for supported_on_platform in supported_on['platforms']:
|
| - if supported_on_platform in self.platforms:
|
| - return True
|
| - return False
|
| -
|
| - def CanBeRecommended(self, policy):
|
| - '''Checks if the given policy can be recommended.'''
|
| - return policy.get('features', {}).get('can_be_recommended', False)
|
| -
|
| - def CanBeMandatory(self, policy):
|
| - '''Checks if the given policy can be mandatory.'''
|
| - return policy.get('features', {}).get('can_be_mandatory', True)
|
| -
|
| - def IsPolicySupportedOnPlatform(self, policy, platform):
|
| - '''Checks if |policy| is supported on |platform|.
|
| -
|
| - Args:
|
| - policy: The dictionary of the policy.
|
| - platform: The platform to check; one of 'win', 'mac', 'linux' or
|
| - 'chrome_os'.
|
| - '''
|
| - is_supported = lambda x: platform in x['platforms']
|
| - return any(filter(is_supported, policy['supported_on']))
|
| -
|
| - def _GetChromiumVersionString(self):
|
| - '''Returns the Chromium version string stored in the environment variable
|
| - version (if it is set).
|
| -
|
| - Returns: The Chromium version string or None if it has not been set.'''
|
| -
|
| - if 'version' in self.config:
|
| - return self.config['version']
|
| -
|
| - def _GetPoliciesForWriter(self, group):
|
| - '''Filters the list of policies in the passed group that are supported by
|
| - the writer.
|
| -
|
| - Args:
|
| - group: The dictionary of the policy group.
|
| -
|
| - Returns: The list of policies of the policy group that are compatible
|
| - with the writer.
|
| - '''
|
| - if not 'policies' in group:
|
| - return []
|
| - result = []
|
| - for policy in group['policies']:
|
| - if self.IsPolicySupported(policy):
|
| - result.append(policy)
|
| - return result
|
| -
|
| - def Init(self):
|
| - '''Initializes the writer. If the WriteTemplate method is overridden, then
|
| - this method must be called as first step of each template generation
|
| - process.
|
| - '''
|
| - pass
|
| -
|
| - def WriteTemplate(self, template):
|
| - '''Writes the given template definition.
|
| -
|
| - Args:
|
| - template: Template definition to write.
|
| -
|
| - Returns:
|
| - Generated output for the passed template definition.
|
| - '''
|
| - self.messages = template['messages']
|
| - self.Init()
|
| - template['policy_definitions'] = \
|
| - self.PreprocessPolicies(template['policy_definitions'])
|
| - self.BeginTemplate()
|
| - for policy in template['policy_definitions']:
|
| - if policy['type'] == 'group':
|
| - child_policies = self._GetPoliciesForWriter(policy)
|
| - child_recommended_policies = filter(self.CanBeRecommended,
|
| - child_policies)
|
| - if child_policies:
|
| - # Only write nonempty groups.
|
| - self.BeginPolicyGroup(policy)
|
| - for child_policy in child_policies:
|
| - # Nesting of groups is currently not supported.
|
| - self.WritePolicy(child_policy)
|
| - self.EndPolicyGroup()
|
| - if child_recommended_policies:
|
| - self.BeginRecommendedPolicyGroup(policy)
|
| - for child_policy in child_recommended_policies:
|
| - self.WriteRecommendedPolicy(child_policy)
|
| - self.EndRecommendedPolicyGroup()
|
| - elif self.IsPolicySupported(policy):
|
| - self.WritePolicy(policy)
|
| - if self.CanBeRecommended(policy):
|
| - self.WriteRecommendedPolicy(policy)
|
| - self.EndTemplate()
|
| -
|
| - return self.GetTemplateText()
|
| -
|
| - def PreprocessPolicies(self, policy_list):
|
| - '''Preprocesses a list of policies according to a given writer's needs.
|
| - Preprocessing steps include sorting policies and stripping unneeded
|
| - information such as groups (for writers that ignore them).
|
| - Subclasses are encouraged to override this method, overriding
|
| - implementations may call one of the provided specialized implementations.
|
| - The default behaviour is to use SortPoliciesGroupsFirst().
|
| -
|
| - Args:
|
| - policy_list: A list containing the policies to sort.
|
| -
|
| - Returns:
|
| - The sorted policy list.
|
| - '''
|
| - return self.SortPoliciesGroupsFirst(policy_list)
|
| -
|
| - def WritePolicy(self, policy):
|
| - '''Appends the template text corresponding to a policy into the
|
| - internal buffer.
|
| -
|
| - Args:
|
| - policy: The policy as it is found in the JSON file.
|
| - '''
|
| - raise NotImplementedError()
|
| -
|
| - def WriteComment(self, comment):
|
| - '''Appends the comment to the internal buffer.
|
| -
|
| - comment: The comment to be added.
|
| - '''
|
| - raise NotImplementedError()
|
| -
|
| - def WriteRecommendedPolicy(self, policy):
|
| - '''Appends the template text corresponding to a recommended policy into the
|
| - internal buffer.
|
| -
|
| - Args:
|
| - policy: The recommended policy as it is found in the JSON file.
|
| - '''
|
| - # TODO
|
| - #raise NotImplementedError()
|
| - pass
|
| -
|
| - def BeginPolicyGroup(self, group):
|
| - '''Appends the template text corresponding to the beginning of a
|
| - policy group into the internal buffer.
|
| -
|
| - Args:
|
| - group: The policy group as it is found in the JSON file.
|
| - '''
|
| - pass
|
| -
|
| - def EndPolicyGroup(self):
|
| - '''Appends the template text corresponding to the end of a
|
| - policy group into the internal buffer.
|
| - '''
|
| - pass
|
| -
|
| - def BeginRecommendedPolicyGroup(self, group):
|
| - '''Appends the template text corresponding to the beginning of a recommended
|
| - policy group into the internal buffer.
|
| -
|
| - Args:
|
| - group: The recommended policy group as it is found in the JSON file.
|
| - '''
|
| - pass
|
| -
|
| - def EndRecommendedPolicyGroup(self):
|
| - '''Appends the template text corresponding to the end of a recommended
|
| - policy group into the internal buffer.
|
| - '''
|
| - pass
|
| -
|
| - def BeginTemplate(self):
|
| - '''Appends the text corresponding to the beginning of the whole
|
| - template into the internal buffer.
|
| - '''
|
| - raise NotImplementedError()
|
| -
|
| - def EndTemplate(self):
|
| - '''Appends the text corresponding to the end of the whole
|
| - template into the internal buffer.
|
| - '''
|
| - pass
|
| -
|
| - def GetTemplateText(self):
|
| - '''Gets the content of the internal template buffer.
|
| -
|
| - Returns:
|
| - The generated template from the the internal buffer as a string.
|
| - '''
|
| - raise NotImplementedError()
|
| -
|
| - def SortPoliciesGroupsFirst(self, policy_list):
|
| - '''Sorts a list of policies alphabetically. The order is the
|
| - following: first groups alphabetically by caption, then other policies
|
| - alphabetically by name. The order of policies inside groups is unchanged.
|
| -
|
| - Args:
|
| - policy_list: The list of policies to sort. Sub-lists in groups will not
|
| - be sorted.
|
| - '''
|
| - policy_list.sort(key=self.GetPolicySortingKeyGroupsFirst)
|
| - return policy_list
|
| -
|
| - def FlattenGroupsAndSortPolicies(self, policy_list, sorting_key=None):
|
| - '''Sorts a list of policies according to |sorting_key|, defaulting
|
| - to alphabetical sorting if no key is given. If |policy_list| contains
|
| - policies with type="group", it is flattened first, i.e. any groups' contents
|
| - are inserted into the list as first-class elements and the groups are then
|
| - removed.
|
| - '''
|
| - new_list = []
|
| - for policy in policy_list:
|
| - if policy['type'] == 'group':
|
| - for grouped_policy in policy['policies']:
|
| - new_list.append(grouped_policy)
|
| - else:
|
| - new_list.append(policy)
|
| - if sorting_key == None:
|
| - sorting_key = self.GetPolicySortingKeyName
|
| - new_list.sort(key=sorting_key)
|
| - return new_list
|
| -
|
| - def GetPolicySortingKeyName(self, policy):
|
| - return policy['name']
|
| -
|
| - def GetPolicySortingKeyGroupsFirst(self, policy):
|
| - '''Extracts a sorting key from a policy. These keys can be used for
|
| - list.sort() methods to sort policies.
|
| - See TemplateWriter.SortPolicies for usage.
|
| - '''
|
| - is_group = policy['type'] == 'group'
|
| - if is_group:
|
| - # Groups are sorted by caption.
|
| - str_key = policy['caption']
|
| - else:
|
| - # Regular policies are sorted by name.
|
| - str_key = policy['name']
|
| - # Groups come before regular policies.
|
| - return (not is_group, str_key)
|
|
|