'Generates the policy document based on the internal lists of allowed and denied
conditions. This will generate a policy with two main statements for the effect:
one statement for Allow and one statement for Deny.
Methods that includes conditions will have their own statement in the policy.'

def build(self):

    if (((self.allowMethods is None) or (len(self.allowMethods) == 0)) and ((self.denyMethods is None) or (len(self.denyMethods) == 0))):
        raise NameError('No    statements    defined    for    the    policy')
    policy = {'principalId': self.principalId, 'policyDocument': {'Version': self.version, 'Statement': []}}
    policy['policyDocument']['Statement'].extend(self._getStatementForEffect('Allow', self.allowMethods))
    policy['policyDocument']['Statement'].extend(self._getStatementForEffect('Deny', self.denyMethods))
    return policy
