Fix [H302] errors in heat/engine

Change-Id: Ib3e1a6f9d5e82e9fb29b000157b57dbc3883b42e
This commit is contained in:
Peter Razumovsky 2014-11-13 15:52:08 +03:00
parent 5596e63263
commit 03b3cf777e
19 changed files with 89 additions and 85 deletions

View File

@ -13,8 +13,8 @@
import collections
import email
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime import multipart
from email.mime import text
import json
import logging
import os
@ -201,7 +201,7 @@ class NovaClientPlugin(client_plugin.ClientPlugin):
def make_subpart(content, filename, subtype=None):
if subtype is None:
subtype = os.path.splitext(filename)[0]
msg = MIMEText(content, _subtype=subtype)
msg = text.MIMEText(content, _subtype=subtype)
msg.add_header('Content-Disposition', 'attachment',
filename=filename)
return msg
@ -288,7 +288,7 @@ echo -e '%s\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers
'cfn-boto-cfg', 'x-cfninitdata'))
subparts = [make_subpart(*args) for args in attachments]
mime_blob = MIMEMultipart(_subparts=subparts)
mime_blob = multipart.MIMEMultipart(_subparts=subparts)
return mime_blob.as_string()

View File

@ -16,7 +16,6 @@ import itertools
from oslo.utils import encodeutils
import six
from six.moves import xrange
from heat.common import exception
from heat.common.i18n import _
@ -161,7 +160,7 @@ class Graph(collections.defaultdict):
This is a destructive operation for the graph.
'''
for iteration in xrange(len(graph)):
for iteration in six.moves.xrange(len(graph)):
for key, node in six.iteritems(graph):
if not node:
yield key

View File

@ -11,7 +11,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from heat.common.exception import StackValidationFailed
from heat.common import exception
from heat.common.i18n import _
from heat.openstack.common import log as logging
@ -49,14 +49,14 @@ class ParameterGroups(object):
parameters = group.get(PARAMETERS)
if parameters is None:
raise StackValidationFailed(message=_(
raise exception.StackValidationFailed(message=_(
'Parameters must be provided for '
'each Parameter Group.'))
for param in parameters:
#Check if param has been added to a previous group
if param in grouped_parameters:
raise StackValidationFailed(message=_(
raise exception.StackValidationFailed(message=_(
'The %s parameter must be assigned to one '
'Parameter Group only.') % param)
else:
@ -64,6 +64,6 @@ class ParameterGroups(object):
#Check that grouped parameter references a valid Parameter
if param not in self.parameter_names:
raise StackValidationFailed(message=_(
raise exception.StackValidationFailed(message=_(
'The Parameter name (%s) does not reference '
'an existing parameter.') % param)

View File

@ -13,7 +13,7 @@
import base64
import contextlib
from datetime import datetime
import datetime as dt
from oslo.config import cfg
from oslo.utils import encodeutils
from oslo.utils import excutils
@ -45,6 +45,8 @@ cfg.CONF.import_opt('action_retry_limit', 'heat.common.config')
LOG = logging.getLogger(__name__)
datetime = dt.datetime
def _register_class(resource_type, resource_class):
resources.global_env().register_class(resource_type, resource_class)

View File

@ -22,7 +22,7 @@ from heat.engine import attributes
from heat.engine import constraints
from heat.engine import properties
from heat.engine import resource
from heat.engine.resources.vpc import VPC
from heat.engine.resources import vpc
from heat.openstack.common import log as logging
LOG = logging.getLogger(__name__)
@ -91,9 +91,10 @@ class ElasticIp(resource.Resource):
"""Allocate a floating IP for the current tenant."""
ips = None
if self.properties[self.DOMAIN]:
from heat.engine.resources.internet_gateway import InternetGateway
from heat.engine.resources import internet_gateway
ext_net = InternetGateway.get_external_network_id(self.neutron())
ext_net = internet_gateway.InternetGateway.get_external_network_id(
self.neutron())
props = {'floating_network_id': ext_net}
ips = self.neutron().create_floatingip({
'floatingip': props})['floatingip']
@ -249,7 +250,7 @@ class ElasticIpAssociation(resource.Resource):
return port_id, port_rsrc
def _neutron_add_gateway_router(self, float_id, network_id):
router = VPC.router_for_vpc(self.neutron(), network_id)
router = vpc.VPC.router_for_vpc(self.neutron(), network_id)
if router is not None:
floatingip = self.neutron().show_floatingip(float_id)
floating_net_id = \

View File

@ -13,8 +13,8 @@
"""Utilities for Resources that use the OpenStack Nova API."""
import email
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime import multipart
from email.mime import text
import json
from novaclient import exceptions as nova_exceptions
import os
@ -155,7 +155,7 @@ def build_userdata(resource, userdata=None, instance_user=None,
def make_subpart(content, filename, subtype=None):
if subtype is None:
subtype = os.path.splitext(filename)[0]
msg = MIMEText(content, _subtype=subtype)
msg = text.MIMEText(content, _subtype=subtype)
msg.add_header('Content-Disposition', 'attachment',
filename=filename)
return msg
@ -243,7 +243,7 @@ echo -e '%s\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers
'cfn-boto-cfg', 'x-cfninitdata'))
subparts = [make_subpart(*args) for args in attachments]
mime_blob = MIMEMultipart(_subparts=subparts)
mime_blob = multipart.MIMEMultipart(_subparts=subparts)
return mime_blob.as_string()

View File

@ -14,7 +14,7 @@
import random
import string
from six.moves import xrange
import six
from heat.common import exception
from heat.common.i18n import _
@ -170,7 +170,7 @@ class RandomString(resource.Resource):
@staticmethod
def _deprecated_random_string(sequence, length):
rand = random.SystemRandom()
return ''.join(rand.choice(sequence) for x in xrange(length))
return ''.join(rand.choice(sequence) for x in six.moves.xrange(length))
def _generate_random_string(self, char_sequences, char_classes, length):
random_string = ""

View File

@ -15,7 +15,7 @@ from heat.common.i18n import _
from heat.engine import properties
from heat.engine import resource
from heat.engine.resources.neutron import neutron
from heat.engine.resources.vpc import VPC
from heat.engine.resources import vpc
from heat.engine import support
@ -77,7 +77,7 @@ class RouteTable(resource.Resource):
return False
network_id = self.properties.get(self.VPC_ID)
default_router = VPC.router_for_vpc(client, network_id)
default_router = vpc.VPC.router_for_vpc(client, network_id)
if default_router and default_router.get('external_gateway_info'):
# the default router for the VPC is connected
# to the external router, so do it for this too.
@ -150,7 +150,7 @@ class SubnetRouteTableAssociation(resource.Resource):
subnet = client.show_subnet(
subnet_id)['subnet']
network_id = subnet['network_id']
return VPC.router_for_vpc(client, network_id)
return vpc.VPC.router_for_vpc(client, network_id)
def handle_delete(self):
client = self.client()

View File

@ -12,8 +12,7 @@
# under the License.
from heat.common.i18n import _
from heat.common.template_format import yaml
from heat.common.template_format import yaml_dumper
from heat.common import template_format
from heat.engine import properties
from heat.engine.resources.software_config import software_config
from heat.engine import support
@ -51,8 +50,8 @@ class CloudConfig(software_config.SoftwareConfig):
}
def handle_create(self):
cloud_config = yaml.dump(self.properties.get(
self.CLOUD_CONFIG), Dumper=yaml_dumper)
cloud_config = template_format.yaml.dump(self.properties.get(
self.CLOUD_CONFIG), Dumper=template_format.yaml_dumper)
props = {
self.NAME: self.physical_resource_name(),
self.CONFIG: '#cloud-config\n%s' % cloud_config,

View File

@ -12,8 +12,8 @@
# under the License.
import email
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime import multipart
from email.mime import text
import os
from heat.common.i18n import _
@ -127,7 +127,7 @@ class MultipartMime(software_config.SoftwareConfig):
subtype = item.get(self.SUBTYPE, '')
self._append_part(subparts, part, subtype, filename)
mime_blob = MIMEMultipart(_subparts=subparts)
mime_blob = multipart.MIMEMultipart(_subparts=subparts)
self.message = mime_blob.as_string()
return self.message
@ -154,7 +154,8 @@ class MultipartMime(software_config.SoftwareConfig):
@staticmethod
def _create_message(part, subtype, filename):
msg = MIMEText(part, _subtype=subtype) if subtype else MIMEText(part)
msg = (text.MIMEText(part, _subtype=subtype)
if subtype else text.MIMEText(part))
if filename:
msg.add_header('Content-Disposition', 'attachment',
filename=filename)

View File

@ -15,7 +15,7 @@ from heat.common.i18n import _
from heat.engine import attributes
from heat.engine import properties
from heat.engine import resource
from heat.engine.resources.vpc import VPC
from heat.engine.resources import vpc
class Subnet(resource.Resource):
@ -94,7 +94,7 @@ class Subnet(resource.Resource):
subnet = client.create_subnet({'subnet': props})['subnet']
self.resource_id_set(subnet['id'])
router = VPC.router_for_vpc(self.neutron(), network_id)
router = vpc.VPC.router_for_vpc(self.neutron(), network_id)
if router:
client.add_interface_router(
router['id'],
@ -109,7 +109,7 @@ class Subnet(resource.Resource):
subnet_id = self.resource_id
try:
router = VPC.router_for_vpc(self.neutron(), network_id)
router = vpc.VPC.router_for_vpc(self.neutron(), network_id)
if router:
client.remove_interface_router(
router['id'],

View File

@ -14,7 +14,7 @@
import functools
import itertools
import sys
from time import time as wallclock
import time
import types
import eventlet
@ -31,6 +31,7 @@ LOG = logging.getLogger(__name__)
# Whether TaskRunner._sleep actually does an eventlet sleep when called.
ENABLE_SLEEP = True
wallclock = time.time
def task_description(task):

View File

@ -40,7 +40,7 @@ from heat.engine import api
from heat.engine import attributes
from heat.engine import clients
from heat.engine import environment
from heat.engine.event import Event
from heat.engine import event as evt
from heat.engine import parameter_groups
from heat.engine import properties
from heat.engine import resources
@ -1048,9 +1048,9 @@ class EngineService(service.Service):
stacks[stack_id] = parser.Stack.load(cnxt, stack_id)
return stacks[stack_id]
return [api.format_event(Event.load(cnxt,
e.id, e,
get_stack(e.stack_id)))
return [api.format_event(evt.Event.load(cnxt,
e.id, e,
get_stack(e.stack_id)))
for e in events]
def _authorize_stack_user(self, cnxt, stack, resource_name):

View File

@ -13,7 +13,7 @@
import collections
import copy
from datetime import datetime
import datetime
import re
import warnings
@ -24,7 +24,6 @@ import six
from heat.common import context as common_context
from heat.common import exception
from heat.common.exception import StackValidationFailed
from heat.common.i18n import _
from heat.common.i18n import _LE
from heat.common.i18n import _LI
@ -36,11 +35,11 @@ from heat.engine import dependencies
from heat.engine import environment
from heat.engine import function
from heat.engine.notification import stack as notification
from heat.engine.parameter_groups import ParameterGroups
from heat.engine import parameter_groups as param_groups
from heat.engine import resource
from heat.engine import resources
from heat.engine import scheduler
from heat.engine.template import Template
from heat.engine import template as tmpl
from heat.engine import update
from heat.openstack.common import log as logging
from heat.rpc import api as rpc_api
@ -277,7 +276,7 @@ class Stack(collections.Mapping):
@classmethod
def _from_db(cls, context, stack, parent_resource=None, resolve_data=True,
use_stored_context=False):
template = Template.load(
template = tmpl.Template.load(
context, stack.raw_template_id, stack.raw_template)
env = environment.Environment(stack.parameters)
return cls(context, stack.name, template, env,
@ -457,7 +456,7 @@ class Stack(collections.Mapping):
self.parameters.validate(context=self.context)
# Validate Parameter Groups
parameter_groups = ParameterGroups(self.t)
parameter_groups = param_groups.ParameterGroups(self.t)
parameter_groups.validate()
# Check duplicate names between parameters and resources
@ -465,8 +464,8 @@ class Stack(collections.Mapping):
if dup_names:
LOG.debug("Duplicate names %s" % dup_names)
raise StackValidationFailed(message=_("Duplicate names %s") %
dup_names)
raise exception.StackValidationFailed(
message=_("Duplicate names %s") % dup_names)
for res in self.dependencies:
try:
@ -476,27 +475,27 @@ class Stack(collections.Mapping):
raise ex
except Exception as ex:
LOG.exception(ex)
raise StackValidationFailed(message=encodeutils.safe_decode(
six.text_type(ex)))
raise exception.StackValidationFailed(
message=encodeutils.safe_decode(six.text_type(ex)))
if result:
raise StackValidationFailed(message=result)
raise exception.StackValidationFailed(message=result)
for val in self.outputs.values():
try:
if not val or not val.get('Value'):
message = _('Each Output must contain '
'a Value key.')
raise StackValidationFailed(message=message)
raise exception.StackValidationFailed(message=message)
function.validate(val.get('Value'))
except AttributeError:
message = _('Output validation error: '
'Outputs must contain Output. '
'Found a [%s] instead') % type(val)
raise StackValidationFailed(message=message)
raise exception.StackValidationFailed(message=message)
except Exception as ex:
reason = _('Output validation error: '
'%s') % six.text_type(ex)
raise StackValidationFailed(message=reason)
raise exception.StackValidationFailed(message=reason)
def requires_deferred_auth(self):
'''
@ -638,7 +637,7 @@ class Stack(collections.Mapping):
@profiler.trace('Stack.check', hide_args=False)
def check(self):
self.updated_time = datetime.utcnow()
self.updated_time = datetime.datetime.utcnow()
checker = scheduler.TaskRunner(self.stack_task, self.CHECK,
post_func=self.supports_check_action,
aggregate_exceptions=True)
@ -713,7 +712,7 @@ class Stack(collections.Mapping):
Update will fail if it exceeds the specified timeout. The default is
60 minutes, set in the constructor
'''
self.updated_time = datetime.utcnow()
self.updated_time = datetime.datetime.utcnow()
updater = scheduler.TaskRunner(self.update_task, newstack,
event=event)
updater()
@ -1066,19 +1065,19 @@ class Stack(collections.Mapping):
self.state_set(self.RESTORE, self.FAILED,
"Can't restore snapshot from other stack")
return
self.updated_time = datetime.utcnow()
self.updated_time = datetime.datetime.utcnow()
tmpl = Template(snapshot.data['template'])
template = tmpl.Template(snapshot.data['template'])
for name, defn in tmpl.resource_definitions(self).iteritems():
for name, defn in template.resource_definitions(self).iteritems():
rsrc = resource.Resource(name, defn, self)
data = snapshot.data['resources'].get(name)
handle_restore = getattr(rsrc, 'handle_restore', None)
if callable(handle_restore):
defn = handle_restore(defn, data)
tmpl.add_resource(defn, name)
template.add_resource(defn, name)
newstack = self.__class__(self.context, self.name, tmpl, self.env,
newstack = self.__class__(self.context, self.name, template, self.env,
timeout_mins=self.timeout_mins,
disable_rollback=self.disable_rollback)
newstack.parameters.set_stack_id(self.identifier())

View File

@ -125,7 +125,8 @@ class StackResource(resource.Resource):
parsed_child_template = child_template
if isinstance(parsed_child_template, template.Template):
parsed_child_template = parsed_child_template.t
return parser.Template(parsed_child_template, files=self.stack.t.files)
return parser.tmpl.Template(parsed_child_template,
files=self.stack.t.files)
def _parse_nested_stack(self, stack_name, child_template, child_params,
timeout_mins=None, adopt_data=None):

View File

@ -38,7 +38,7 @@ from heat.engine.clients.os import keystone
from heat.engine.clients.os import nova
from heat.engine import dependencies
from heat.engine import environment
from heat.engine.properties import Properties
from heat.engine import properties
from heat.engine import resource as res
from heat.engine.resources import instance as instances
from heat.engine import service
@ -211,7 +211,7 @@ def get_wordpress_stack(stack_name, ctx):
def get_wordpress_stack_no_params(stack_name, ctx):
t = template_format.parse(wp_template)
template = parser.Template(t)
template = parser.tmpl.Template(t)
stack = parser.Stack(ctx, stack_name, template,
environment.Environment({}))
return stack
@ -723,7 +723,7 @@ class StackServiceCreateUpdateDeleteTest(common.HeatTestCase):
setup_mock_for_image_constraint(self.m, 'CentOS 5.2')
self.m.ReplayAll()
resource.properties = Properties(
resource.properties = properties.Properties(
resource.properties_schema,
{
'ImageId': 'CentOS 5.2',
@ -733,7 +733,7 @@ class StackServiceCreateUpdateDeleteTest(common.HeatTestCase):
context=self.ctx)
stack.validate()
resource.properties = Properties(
resource.properties = properties.Properties(
resource.properties_schema,
{
'KeyName': 'test',
@ -989,7 +989,7 @@ class StackServiceCreateUpdateDeleteTest(common.HeatTestCase):
s = db_api.stack_get(self.ctx, sid)
t = template_format.parse(wp_template_no_default)
template = parser.Template(t)
template = parser.tmpl.Template(t)
env = environment.Environment({'parameters': with_params,
'resource_registry': {'rsc': 'test'}})
stack = parser.Stack(self.ctx, stack_name, template, env)

View File

@ -11,26 +11,25 @@
# License for the specific language governing permissions and limitations
# under the License.
from sqlalchemy.dialects.mysql.base import MySQLDialect
from sqlalchemy.dialects.sqlite.base import SQLiteDialect
from sqlalchemy.dialects.mysql import base as mysql_base
from sqlalchemy.dialects.sqlite import base as sqlite_base
from sqlalchemy import types
import testtools
from heat.db.sqlalchemy.types import Json
from heat.db.sqlalchemy.types import LongText
from heat.db.sqlalchemy import types as db_types
class LongTextTest(testtools.TestCase):
def setUp(self):
super(LongTextTest, self).setUp()
self.sqltype = LongText()
self.sqltype = db_types.LongText()
def test_load_dialect_impl(self):
dialect = MySQLDialect()
dialect = mysql_base.MySQLDialect()
impl = self.sqltype.load_dialect_impl(dialect)
self.assertNotEqual(types.Text, type(impl))
dialect = SQLiteDialect()
dialect = sqlite_base.SQLiteDialect()
impl = self.sqltype.load_dialect_impl(dialect)
self.assertEqual(types.Text, type(impl))
@ -39,7 +38,7 @@ class JsonTest(testtools.TestCase):
def setUp(self):
super(JsonTest, self).setUp()
self.sqltype = Json()
self.sqltype = db_types.Json()
def test_process_bind_param(self):
dialect = None

View File

@ -11,7 +11,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from datetime import datetime
import datetime
import six
import uuid
@ -109,9 +109,9 @@ class StackResourceTest(common.HeatTestCase):
resource._register_class('GenericResource',
generic_rsrc.GenericResource)
self.ws_resname = "provider_resource"
t = parser.Template({'HeatTemplateFormatVersion': '2012-12-12',
'Resources':
{self.ws_resname: ws_res_snippet}})
t = parser.tmpl.Template(
{'HeatTemplateFormatVersion': '2012-12-12',
'Resources': {self.ws_resname: ws_res_snippet}})
self.parent_stack = parser.Stack(utils.dummy_context(), 'test_stack',
t, stack_id=str(uuid.uuid4()),
user_creds_id='uc123',
@ -407,7 +407,8 @@ class StackResourceTest(common.HeatTestCase):
new_templ = self.simple_template.copy()
inst_snippet = new_templ["Resources"]["WebServer"].copy()
new_templ["Resources"]["WebServer2"] = inst_snippet
self.parent_resource.updated_time = datetime(2014, 10, 24, 15, 40)
self.parent_resource.updated_time = \
datetime.datetime(2014, 10, 24, 15, 40)
updater = self.parent_resource.update_with_template(
new_templ, {})

View File

@ -20,7 +20,7 @@ import mock
import six
from swiftclient import client as swiftclient_client
from swiftclient import exceptions as swiftclient_exceptions
from testtools.matchers import MatchesRegex
from testtools import matchers
from heat.common import exception
from heat.common import template_format
@ -83,7 +83,7 @@ obj_header = {
def create_stack(template, stack_id=None):
tmpl = template_format.parse(template)
template = stack.Template(tmpl)
template = stack.tmpl.Template(tmpl)
ctx = utils.dummy_context(tenant_id='test_tenant')
st = stack.Stack(ctx, 'test_st', template,
environment.Environment(),
@ -143,7 +143,7 @@ class SwiftSignalHandleTest(common.HeatTestCase):
"\?temp_url_sig=[0-9a-f]{40}&temp_url_expires=[0-9]{10}"
% st.id)
res_id = st.resources['test_wait_condition_handle'].resource_id
self.assertThat(res_id, MatchesRegex(regexp))
self.assertThat(res_id, matchers.MatchesRegex(regexp))
# Since the account key is mocked out above
self.assertFalse(mock_swift_object.post_account.called)
@ -707,7 +707,7 @@ class SwiftSignalTest(common.HeatTestCase):
'test_st-test_wait_condition_handle-abcdefghijkl\?temp_'
'url_sig=[0-9a-f]{40}&temp_url_expires=[0-9]{10}') % st.id
self.assertThat(handle.FnGetAtt('endpoint'),
MatchesRegex(expected))
matchers.MatchesRegex(expected))
@mock.patch.object(swift.SwiftClientPlugin, '_create')
@mock.patch.object(resource.Resource, 'physical_resource_name')
@ -737,7 +737,8 @@ class SwiftSignalTest(common.HeatTestCase):
'AUTH_test_tenant/%s/test_st-test_wait_condition_'
'handle-abcdefghijkl\?temp_url_sig=[0-9a-f]{40}&'
'temp_url_expires=[0-9]{10}\'') % st.id
self.assertThat(handle.FnGetAtt('curl_cli'), MatchesRegex(expected))
self.assertThat(handle.FnGetAtt('curl_cli'),
matchers.MatchesRegex(expected))
@mock.patch.object(swift.SwiftClientPlugin, '_create')
@mock.patch.object(resource.Resource, 'physical_resource_name')